مدیریت زمان رو با این تجربه های ساده شروع کن

مدیریت زمان از اون مهارت هایی هستش که تو حوزه کاری ما زیاد در موردش صحبت میشه. مطمئن باشید بدون بکار گیری تکنیک هایی برای مدیریت زمان تون به هدف هایی که دارید نخواهید رسید. مدیریت زمان بهتون کمک میکنه در کنار کار مورد علاقه تون (حدس میزنم مخاطب های وبلاگ من کاملا جزو کسایی باشن که عاشق کارشون هستن) از زندگی لذت ببرید و در عین حال در کمترین زمان ممکن (زود منظورم نیست 🙂 ) و با کمترین اتلاف وقت به هدف های کوتاه مدت و بلند مدت تون برسید.

پیشنهاد میدم نوشته 3 نکته مهم برای اینکه فریلنسری برای شما لذت بخش باشه رو هم بخونید.

این نوشته ترجمه مطلب Todd Brison در مورد تکنیک های مدیریت زمان هستش که چند وقت پیش خوندم. اصل مطلب رو می تونید از وبلاگ Todd Brison تو مدیوم بخونید.

یک حقیقت سخت وجود داره:

شما تنها ۲۴ ساعت در هر شبانه روز زمان دارید.

مهم نیست تا حالا چند تا کتاب نوشتید (یا هم ننوشتید) ، مهم نیست چقدر ارزوهای بزرگی دارید (و یا ندارید) و مهم نیست چقدر «انگیزه» دارید (یا ندارید)_ شما فقط 24 ساعت زمان دارید.

۲۴ ساعت امروز خیلی سریعتر از ۲۴ ساعت دیروز میگذره و باز 24 ساعت فردا حتی از امروز هم سریعتر میگذره.

روزی که از کالج فارغ التحصیل شدم رفتم خونه خوابیدم . روز بعد که بیدار شدم سومین سالگرد عقد قراردادم با شرکتی بود که تنها میخواستم چند هفته اونجا کار کنم. انگار همه این سال ها به اندازه یک خوابیدن و بیدار شدن گذشته بود.

من که میترسم چشمامو روی هم بذارم.

و در همون لحظه که چشمامو می بندم دنیا تغییر کنه. کی حاضره این اتفاق رقم بخوره؟

شما خیلی مشغله دارید و من بخوبی شما رو درک می کنم چون در زمان سریعترین نسلی از بشر که تا کنون روی این کره خاکی زندگی کرده اند زندگی می کنید. اما شما باید هنوز بالای منحنی سرعت  باشید، باید بیاموزید و رشد کنید و باید در این حین مراقب سلامتی خودتون هم باشید.

اما چه جوری ؟

در اینجا میخوام استراتژی خودم رو بیان کنم:

خوشگذرونی و وقت تلف کردن با پادکست های تصویری رو کنار بگذارید

آدمای زیادی میشناسم که اهل پادکست های یهویی هستند. پادکست گوش دادن به ادم یه احساس باکلاس بودن و باهوش بودن میده. این فرهنگ به خورد ما داده شده که هرکس بیشتر اهل پادکست باشه باکلاس تر و باهوش تره.

یادمه یه روز یکی بهم گفت: «من با سرعت دو برابر بیشتر پادکست گوش میکنم پس با سرعت دو برابر میتونم دانش و اطلاعاتم رو ارتقاء بدم»

اما سوالی که برای همیشه توی دلم موند و از اون ادم نپرسیدم این بود:

«بسیار خوب ، حالا بگو از پادکست هایی که از همین امروز صبح تا الان گوش دادی چقدر توی یادت مونده»

من بعد از اون حرف سعی کردم مثل همون ادم بشم یعنی بشم Todd پادکستی نابغه. به مرور دیدم که هیچ چیز از چیزایی که گوش دادم به خورد مغزم نرفته و ذهنم عمیقا نپذیرفته. موقع رانندگی از خودم میپرسیدم از پادکستی که امروز صبح گوش دادی چی یاد گرفتی؟ بعد مدت زیادی پاسخم این بود «اوممممممممم» و اخرش به این نتیجه رسیدم که پادکست رو کنار بگذارم.

سعی کنید از این کلمات جادویی استفاده کنید:

«من به تو علاقه دارم اما نمیتونم همین حالا واست وقت بگذارم»

من فکر میکنم توی کار کردن آدم تک بعدی ای هستم یعنی یه کار که شروع میکنم همونو باید تا تهش انجام بدم و اگه کار توی کار پیش بیاد باز اون کار جدیده رو تمومش میکنم بعد برمیگردم ادامه کار اصلی رو انجام میدم. برای مثال یه روز صبح رفتم که 200 کلمه ای برای بلاگ مطلب بگذارم در حین کار مجبور شدم برای اینکه مطلبمو کامل کنم یه سر به اکانت توئیترم بزنم و بعد وقتی افتادم توی توئیتر رفتم سراغ ایمیل چک کردن و یه تعداد ایمیل چک کردم بعد آخر سر برگشتم سراغ پست بلاگی که داشتم مینوشتم. این چرخه خیلی زمان برد.

مشکل من این بود، هر چیزی که توی مسیر کارم بهش برمیخورم و فکر میکردم که «جالب و به دردبخور» هست اون رو ذیل کار اصلی قرار میدادم. مثلا تغییرات وب سایت، تحقیق، نوشتن و ساخت گرافیک برای پست های بلاگ و … همه اینها از جنبه منطقی تحت الشعاع کار و هدف بزرگ اولیه قرار میگرفتند. اما به لحاظ زیستی،  مغزم برای مبارزه با این پرش های ذهنی از موضوعی به موضوع دیگه انرژی زیادی مصرف میکرد.

اما حالا من هر وقت کار جدیدی رو برعهده می گیرم به همه اون موضوعات، توئیتر و تماس تلفنی و پیامک و غیره و غیره میگم «من به تو علاقه دارم اما نمیتونم همین حالا واست وقت بگذارم»

یادگیری مساوی است با پیشرفت. حتی اگر اون رو یه اولویت حسابش نکنیم. من به شخصه زمانی که مطالعه میکنم یا تحقیقی انجام میدم سعی میکنم همه کاری که انجام میدم همون باشه و خودمو درگیر کار دیگه ای نمیکنم.

هر روز از یک نفر در مورد شغلش سوال بپرسید.

بهتره که توی اتاق ساکت و خاموش بنشینید. وقتی شما ساکت و بی صدا هستید ادم ها هرچی میدونن به شما میگن. از اونها بخواین تا یکبار گفته هاشون رو تکرار کنن یا روی برگه ای بنویسند . بعد در مسیر رسیدن به خونه روی حرفای اونها فکر کنید.

ما آدم ها اغلب منابع باارزش اطلاعاتی رو که در اطرافمون هستند از جمله همکارانمون رو نادیده می گیریم. من اغلب ترجیح میدم یک مکالمه طولانی با یک استاد دانشگاه داشته باشم تا برم آخرین کتاب پرفروش رو بخونم چون:

  1. اساتید دانشگاه اطلاعات تخصصی تری دارند
  2. اطلاعات اساتید دانشگاه مستقیما به کارم مرتبط میشه
  3. اونها سعی ندارن در ازای در اختیار گذاشتن اطلاعاتشون پولی کسب کنند
  4. اونها همیشه در دسترس هستند تا بتونم سوالاتم رو دنبال کنم
  5. اونها از بهترین فرصت های به اشتراک گذاری اطلاعات محسوب میشن

به «هدر دادن» زمان دل بدید

مدت 6 ماه آزگار مثل یه برده روی اولین پروژه ام در زمینه ساخت انیمیشن کار کردم. صدها بار سایت youtube رو در جستجوی آموزش های مناسب بالا پائین کردم. خیلی سختی کشیدم.

پایان 6 ماه ، عرق پیشونیم رو خشک کردم و دکمه رندر انیمیشنم رو کلیک کردم. یه انیمیشن کوتاه مربوط به یه همایش ساخته بودم.

فکر میکنید بعدش چی شد؟

من اون پروژه رو مستقیم درون سطل زباله انداختم. حتی هیچ کس چشمش هم به اون پروژه نیفتاد.

همیشه آموختن هزینه داره، حالا این هزینه میتونه پول باشه یا زمان. اون پروژه برای من هزینه مالی نداشت اما زمان زیادی رو از من گرفت، سرمایه ای که هرگز قابل برگشت نبود.

لطفا این مطلب رو خوب درک کنید:

«اگر آرزو دارید در جهـان بیشتـر دیـده شوید پس بایـد کارهای به چشـم نیامدندی زیـادی انجـام دهید»

نتیجه ای که از اون 6 ماه گرفتم این بود که فهمیدم من این توانایی رو دارم که در یک سطح قابل قبولی انیمیشن بسازم. در حدی که کار خودم رو راه بندازم و نیاز به برون سپاری نداشته باشم.

سعی کنید یاد بگیرید رس وجودتون کشیده بشه، سختی بکشید و خسته بشید اما هر طور شده ادامه بدید. این حرفم به این دلیل هست:

تکنولوژی تغییر میکنه چه با شما چه بدون شما، کسب و کار تغییر میکنه چه با شما چه بدون شما، جهان حرکت میکنه چه با شما و چه بدون شما.

و من فکر میکنم شما دو راه بیشتر ندارید:

  1. بر موج برانید
  2. با موج برخورد کنید

چرا از ادیتور sublime text استفاده می کنم؟

اگر هنوز ابزار باب میل خود رو برای ویرایش کدهای HTML , CSS , JQuery تون پیدا نکردید به احتمال زیاد مشتری Sublime text 3 بشید.

Sublime text 3 یک ادیتور فوق العاده جذاب و سریع است که به زبان Python نوشته شده و روی پلتفرم های ویندوز ، لینوکس و مک نصب می شود.

حدوداً ۷ سال گذشته رو بصورت مداوم از sublime text  برای کدنویسی استفاده کردم و واقعاً به نسبت ادیتورهای دیگر رضایت خیلی بیشتری نسبت به آن دارم.

در این نوشتار تعدادی از ویژگی های جذاب و برجسته sublime text 3 را معرفی و به شما کمک میکنم یک شروع سریع و خوب با این ادیتور داشته باشید.

نصب Sublime text3

خب در حال حاضر آخرین نسخه موجود sublime ورژن 3 می باشد که هنوز در حالت بتا می باشد ولی من تا کنون مشکلی با این نسخه نداشته ام و کلیه ویژگی ها و پلاگین های نسخه پایدار 2 روی 3(بتا) هم پاسخگو است.

Sublime text 3 را میتوانید از وب سایت رسمی این ویرایشگر دانلود کنید.

دانلود Sublime text 3

نصب پکیج کنترل Package Control

اگر بار اولتان هست که با این ویرایشگر آشنا می شوید احتمالاً یک علامت سوال با شنیدن عنوان Package Control در ذهنتان بوجود آمده است. از دست من عصبانی نشوید لطفاً و ادامه رو بخوانید:

درباره Package Control Sublime text

جالب است بدانید ویرایشگر Sublime text به تنهایی ابزار قدرتمندی نیست و چیزی که این ویرایشگر را بسیار مطرح و جذاب کرده است متن باز بودن و امکان توسعه آن است. برنامه نویسان زیادی در سرتاسر دنیا پکیج های توسعه و افزونه هایی برای Sublime text نوشته اند که براحتی می توان آنها را به Sublime text اضافه کرد.

ابزاری که امکان جستجو در همه بسته ها ، دانلود و نصب آنها روی Sublime text را برای ما فراهم می کند همین Package Control می باشد که در حالت پیش فرض روی Sublime text شما فعال نیست و برای بهره برداری از پلاگینها لازم است ابتدا آن را فعال کنیم.

دو روش برای فعال سازی Package Control وجود دارد:

روش اول (آسان)

  • کنسول ویرایشگر Sublime را از مسیر View > Show Console باز کنید و یا از کلیدهای ترکیبی Ctrl + ` برای این کار استفاده کنید.
  • کد های زیر را در این قسمت کپی کنید و اینتر بزنید.

روش دوم (دستی)

  • منوی Preferences > Browse Packages… را کلیک کنید.
  • یک up بزنید تا به فولدر Installed Packages وارد شوید.
  • فایل Package Control.sublime-package را دانلود و در این قسمت قرار دهید.
  • نرم افزار Sublime text خود را ریستارت کنید.

کلیدهای ترکیبی CTRL + SHIFT + P را بزنید. یک باکس در محیط Sublime text برای شمات باز خواهد شد که به آن Command pallete میگویند. Command pallete امکان دسترسی به کلیه تنظیمات ، تکه کدها (snippets) ، فایل های پروژه و مشاهده لیست پکیج های موجود را فراهم میکند.

برای انجام اولین کار عملی در این باکس عبارت Install package را تایپ کنید و بعد پیدا شدن عنوان آن اینتر بزنید. چند لحظه صبر کنید تا لیست کلیه بسته های موجود برای Sublime text بارگذاری شوند.

حال با تایپ عنوان یک بسته می توانید براحتی آن را پیدا و نصب کنید.

با دستور list packages می توانید لیست بسته های نصب شده را ببینید.

بسته های کاربردی Sublime text

پیش تر یک لیست کامل از پلاگین های کاربردی sublime text منتشر کرده ایم که می توانید با مراجعه به آن sublime text خود را مجهز کنید.

  • Alignment
  • BracketHighlighter
  • ColorPicker
  • Emmet
  • Docblocker
  • Git
  • Gitgutter
  • Gist
  • Sidebar Enhancement

پشتیبانی از زبان فارسی

احتمالاً تا کنون متوجه شده اید که sublime text3 زبان فارسی را به درستی پشتیبانی نمیکند و حروف را جدا از هم و برعکس نمایش می دهد.فعلاً که sublime text3 در حالت بتا قرار دارد، امیدواریم در نسخه نهایی این مساله رفع شود. البته من طی 4 سالی که با این نرم افزار مداوم کار می کنم تا کنون این مورد برایم مساله قابل توجه ایی نبوده است، چون واقعاً کم پیش می آید که در روند طراحی نیاز به تایپ یک عبارت فارسی باشد و در صورتی که نیاز بود می توان عبارت را در notepad تایپ و در Sublime text کپی کرد.

برای sublime text 2 یک پلاگین وجود دارد که با نصب آن می توانید عبارات فارسی یا عربی را (bidi language ) را به درستی مشاهده کنید.

https://github.com/praveenvijayan/Sublime-Text-2-BIDI

کلیدهای میانبر در Sublime text

General

F11Full Screen
shift + F11Distraction Free Mode
ctrl + shift + pCommand Palette
ctrl + `Show Console
ctrl + k + bShow/Hide Sidebar
ctrl + /Comment
ctrl + shift + /Block Comment
ctrl + k + uUppercase
ctrl + k + lLowercase

Selections

ctrl + dSelect Word
ctrl + dUse multiple times to select next instance of the selected word
ctrl + clickCreate multiple cursors for multi-editing
ctrl + shift + spaceExpand selection to scope. Repeating keeps expanding.
ctrl + shift + mExpand to brackets
ctrl + shift + jExpand to indentation

Go To

ctrl + pOpen file based on name
ctrl + gGo to line number
ctrl + rGo to symbol
ctrl + p THEN @Open file based on name and search for symbol
ctrl + mGo to matching bracket

Lines

ctrl + lSelect line
ctrl + shift + kDelete line
ctrl + ]Indent
ctrl + [Unindent
ctrl + enterInsert line after
ctrl + shift + enterInsert line before
ctrl + shift + ↑Swap line up
ctrl + shift + ↓Swap line down
ctrl + shift + dDuplicate line
ctrl + jJoin Line

Code Folding

ctrl + shift + [Fold
ctrl + shift + ]Unfold
ctrl + k + jUnfold All

Search / Find / Replace

ctrl + fFind
F3Find next
shift + F3Find previous
ctrl + shift + fSearch all files in a folder
ctrl + hReplace
ctrl + f THEN alt + enterFind a certain term then select them all for multi-editing

Tabs and Window Panes

ctrl + shift + nNew Window
ctrl + nNew Tab
alt + #Select a Tab (ie alt + 3)
ctrl + wClose Tab
ctrl + shift + #Move tab to a Pane (ie ctrl + shift + 2)
ctrl + #Focus on a Pane (ie ctrl + 2)
alt + shift + 1One Column
alt + shift + 2Two Columns
alt + shift + 3Three Columns
alt + shift + 4Four Columns
alt + shift + 8Two Rows
alt + shift + 9Three Rows
alt + shift + 5Two x Two Grid

Bookmarks

ctrl + F2Create Bookmark
F2Next Bookmark
shift + F2Previous Bookmark
ctrl + shift + F2Clear Bookmarks

پلاگین های کاربردی در Sublime text

همانطور که می دانید Sublime text در حال حاضر یکی از محبوب ترین IDE های طراحان وب در دنیا می باشد که از مهمترین ویژگی های آن متن باز بودن است که باعث شده تعداد زیادی پلاگین توسط برنامه نویسان سرتاسر دنیا نوشته شود و Sublime text را به ابزاری بسیار قدرتمند با قابلیت شخصی سازی بالا تبدیل کند.

در این نوشتار تعدادی از پلاگین های کاربردی و ضروری نرم افزار sublime text که بیشتر مورد نیاز طراحان وب هستند را معرفی می کنم و در تلاشم این لیست را مرتباً بروزرسانی کنم.

#Emmet

Emmet ابزاری است که به طراح کمک میکند سرعت بیشتری در کدنویسی داشته باشد. ایده اصلی Emmet این است که با نوشتن قطعه ای از کد و فشردن کلیدی خاص ادامه کد نوشته شود.

این ابزار بصورت پلاگین برای ادیتورهای مختلف توسعه داده شده است که Sublime text نیز از این قاعده مستثنی نیست.

میانبرهای Emmet را خیلی سریع می توانید از این لیست ببینید و فرا بگیرید:

#Alignment

سخت مشغول انجام پروژه هستید، مشکلی ساعتها شما را درگیر می کند و تازه متوجه می شوید که مشکل از جا انداختن یک کاراکتر ساده (معمولاً سِمی کلن 😀 ) بوده است. پلاگین ساده Alignment را بر روی Sublime text خود نصب کنید و براحتی کدهای خود را مرتب کنید:

روش استفاده :

  1. کدهای مورد نظر را انتخاب کنید.
  2. کلیدهای ترکیبی CTRL + ALT + a را بفشارید.

#AutoFileName

در هر پروژه با فایل های زیادی سر و کار داریم و باید آنها را مرتباً به هم الحاق کنیم. به عنوان مثال هر پلاگینی که به پروژه اضافه میکنیم یک یا چند فایل js و css هم باید به پروزه الحاق شوند.

این پلاگین لیستی از فایلهای پروژه در اختیار ما قرار می دهد تا این عمل را با سرعت و دقت بیشتری انجام دهیم.

به عنوان مثال می خواهیم تگ link زیر را کامل کنیم:<link rel="stylesheet" type="text/css" href="|">

با زدن کلیدهای ترکیبی CTRL + Space لیستی از فالیهای پروژه را خواهیم دید و می توانیم فایل css مورد نظر را انتخاب کنیم.

3 نکته مهم برای اینکه فریلنسری برای شما لذت بخش باشه

از اواخر سال 2015 در یک شرکت نرم افزاری مشغول به کار شدم، و این اولین شغل آزادکار (بصورت دورکاری) من تا به امروز بوده. رفتن از یک شغل روزانه با تعاملات رو در رو در دفتر کار به سمت یک شغل کاملا راه دور، چالش برانگیز بود. برای همین میخوام کمی درموردش صحبت کنم. توی این شیوه کاری اگر قصد کاری رو نداشته باشم خیلی راحت روزهای آخر هفته رو میتونم برای تعاملات اجتماعی و بودن در اجتماع صرف کنم. در زیر لیستی از مواردی که احساس کردم تونسته به من کمک کنه تا خودم رو با سبک زندگی جدید آزادکار ی وفق بدم بیان می کنم:

1- از دفتر کارتون بیرون برید

مسئله ای نیست اگه از دفتر کارتون بیرون بیاین تا کمی استراحت کنید و یا حتی در بازه زمانی که خارج از محل کار هستید کار رو از یه مکان دیگه انجام بدید.

من به طور منظم از محل کارم بیرون میام و به دیدن دوستم توی دفتر کارش میرم. وقتی برای صرف نهار به بریزبن (جایی که حدود 1.5 ساعت از محل زندگیم دورهست) می رفتم برنامه ریزی می کردم تا از یک کتابخونه ای که در همون حوالی هست با همکاران راه دورم کار کنم.کم کم فهمیدم که این روش حتی برای داشتن روابط اجتماعی  هم عالی هست.

در سال 2016 شانس به اندازه کافی با من یار بود که تونستم به wordCamp اروپا و امریکا ملحق بشم. در هر دو مورد من با اعضای تیم باهم برای صرف نهار بیرون میرفتیم. ما نه تنها زیر یک سقف می تونستیم با هم کار کنیم بلکه حتی قادر بودیم در ساختمان های دور از هم کار کنیم.

از جمله جاهای دیگه ای که عادت داشتم کارهام رو از اون مکان ها انجام بدم کافی شاپ ها، مکان های دوستانه و همینطور دانشگاه های محل بودند. علاوه بر این من یک اپلیکیشن هم استفاده می کردم که این  لیست مکان هایی داخل شهر محل سکونت رو که برای انجام کارهای راه دور فضای مناسبی دارند ارائه می کنه. و همینطور وضعیت  ارتباطی وای فای اون محل ها رو هم نشون میده و نیز تعداد پورت برقی که توی اون فضا قابل استفاده هست هم نمایش داده میشه.

2- عضو یک باشگاه ورزشی شوید

این موردی که اشاره کردم در واقع یکی از سرگرمی های اصلی من هست اما شما اگر رغبتی به ورزش ندارید به شدت توصیه می کنم یک سرگرمی خارج از خونه برای خودتون داشته باشیدتا ذهنتون از کار فاصله بگیره. رفتن به باشگاه ورزشی نه تنها باعث حفظ سلامت و تناسب اندام شما میشه بلکه همچنین به شما انگیزه برقراری روابط اجتماعی با ادم هایی رو میده که معمولا ربطی به حرفه کاری شما ندارن.

و علاوه بر اینها من برای سال 2017 اهدافم رو طوری تنظیم کردم که پیاده روی های بیرون از خونه ام بیشتر از مقداری که معمولا انجام میدم بشه. تصمیم دارم حدود 10 کیلومتر توی ماه مارس پیاده روی تفریحی داشته باشم بعد نصف دو ماراتون هم برای ماه جوئن برنامه ریزی کردم.

3- یک فضای کاری راحت برای خودتون فراهم کنید

این مورد از مهم ترین مواردی است که من در اولین سال کار در خانه آموختم. فضای کار شما باید طوری باشه که واقعا دلتون بخواد اونجا کار کنید، و نه فقط بر مبنای ساعت کاری روز بلکه برای مدت طولانی باید بتونید توی اون محیط کار کنید.

در اینجا چند ترفند و نکته برای داشتن یک چنین محیط کاری رو بیان می کنم:

یک ) یک صندلی اداری راحت داشته باشید_ صندلی های ارزون معمولا برای کار در مدت طولانی ارزش ندارن. اینجا در استرالیا ما صندلی هایی داریم که گواهینامه AFRDI (موسسه توسعه و پژوهش مبلمان استرالیا) دارند که این صندلی ها با استاندارد AS/NZS4438 طراحی و تولید شده اند و محکم و بادوام و راحت هستند.صندلی ای که من استفاده می کنم حدود 450 دلار هزینه برداشت اما در عوض مطمئنم که هر سنتی که خرجش کردم ارزشش رو داشته.

دو ) میزکاری داشته باشید که براتون کار کنه_ بیشتر مردم میزکارهای ایستاده و میپسندند اما من ترجیح میدم میز کار نشسته استفاده کنم شایدم یه بخشی از دلیلش این باشه که صندلی ای دارم که راحت می تونم ساعت ها روی اون بشینم، البته نه اینکه مدام روی صندلی نشسته باشم من ادم پرتحرکی هستم. به هر حال من توصیه می کنم اگر میخواید میز ایستاده داشته باشید لااقل میز کاری بخرید که هر دوحالت رو پوشش بده. چون آدم میتونه مدت طولانی روی صندلی بشینه اما نمیتونه یک مدت طولانی رو ایستاده کار کنه.

سه ) ابزارهای کار درستی داشته باشید_ این نکته فقط به نرم افزارهایی که استفاده می کنید محدود نمیشه و منظورم اینه که حتی تنظیمات مناسب کیبورد و ماوس هم خیلی مهمه و میتونه به نیروی مچ دست شما حین کار کمک کنه. من همچنین دو تا مانتیور 24 اینچی Dell دارم که باعث میشه کارایی بیشتری توی کارم داشته باشم.

چهار ) اسپیکر و هدفون مناسب داشته باشید_ بریا گوش دادن به موسیقی یا پادکست صوتی روی خرید یک اسپیکر یا هدفون خوب سرمایه گذاری کنید. چون می تونه کمکتون کنه تاثیر سر و صدای دنیای بیرون رو کم کنید. بعضی از هدفون ها برطرف کننده نویز هستند برای مثال هدفون Bose QC-25s برای پروازهای طولانی یا زمان هایی که در کافی شاپ های شلوغ دارید کار می کنید عالی هستند.

پنج ) اتاق کارتون رو مال خوتون کنید_ تعدادی گلدون گل توی اتاقتون بچینید، تعدادی قاب عکس خانوادگی روی میز کار بگذارید  یا روی دیوار نصب کنید و یا پوستر به دیوار بچسبونید و هر کاری که دوست دارید انجام بدید تا اتاقتون رو مطابق میل خودتون تزئین کنید. البته حواستون باشه اتاق رو شلوغ و به هم ریخته نکنید.

شش ) اتاق کاری نورگیر داشته باشید_ اگر اتاق کارتون به اندازه کافی نورگیر باشه تفاوت محشری ایجاد میکنه نه تنها برای تاثیرش توی کیفیت کار بلکه حتی برای داشتن یک خواب راحت در زمان خواب. مایک یک مقاله عالی در این موضوع نوشته که علاوه بر تاثیر نور روز در خواب شب بدر مورد عوامل دیگر موثر بر خواب راحت هم توضیح میده.

هفت ) زندگی کاری رو از زندگی شخصی جدا کنید_ وقتی ساعت کار روزانتون تموم میشه سعی کنید دیگه سراغ کار نرید و مطمئن بشی که دیگه امروز کار کردن تعطیل هست. همینطوری کار کردن توی خونه سخت هست چه برسه به اینکه بخواید مدام در ساعات تعطیلی تون هم کار کنید. در یاجا چند ترفندی که من توی کارم به کار گرفتم توضیح میدم:

  • یک اتاق مجزا برای کار کردن داشته باشید، اتاقی که به اتاق خواب یا اتاق نهارخوری نزدیک نباشه.
  • در انتهای روز که کارتون تموم میشه در اتاق کارتون رو ببندید و سعی کنید که دیگه تا شروع ساعت کاری روز بعد بازش نکنید.
  • سعی کنید در ساعت تعطیلی کار حتی درگیر ایمیل های کاری هم نشید.
  • مطمئن باشید که وقت کافی رو برای بودن در کنار خانواده کنار میگذارید
  • واما بیش از هرچیز یادتون باشه که فردا دوباره توی همون اتاق ، کار منتظرتونه.

جلوگیری از حذف کاربر admin در django

Django در حالت عادی اجزاه همه کاربرها رو میده. خیلی راحت کاربر ادمین از داشبود مدیریت میتونه همه کاربرها رو انتخاب و حذف کنه 🙂

خب خوشبینانه حتما دلیل برای این مورد وجود داره که من نمیدونم. ولی خب این مورد برای ما مساله ساز شده بود.

مشتری ما که اطلاعات فنی زیادی نداره چند بار اشتباها برای حذف یوزرهای تستی که بعد از تحویل پروژه ایجاد کرده بود کل یوزرها رو انتخاب و حذف کرده بود. در این حالت براحتی از طریق ترمینال با دستور زیر میتونید یک یوزر admin ایجاد کنید.

python manage.py createsuperuser

حالا راهکار برای جلوگیری از بروز این مشکل چیه؟

تو django یه ویژگی بسیار کاربردی به نام signal وجود داره و کارش اینه که میتونه هوک بشه به یکسری رویدادهای از پیش تعیین شده یا رویدادهای کاستوم که خودمون تعریف میکنیم.
مثلا میتونیم هوک کنیم به رویداد pre_delete که توسط خود Django ایجاد شده.در این حالت میتونیم قبل از حذف رکورد/رکوردهای یک مدل مشخص یک پردازش انجام بدیم و در یک شرایط خاص (مثلا اینکه رکورد مورد نظر ما یک کاربر ادمین هستش) نذاریم action در حال اجرا به اتمام برسه (یوزر پاک بشه).

طبق مثالی که زدم برای جلوگیری از حذف کاربر admin میتونیم از سیگنال pre_delete استفاده کنیم.

قطعه کد زیر رو توی models.py اپلیکیشن users قرار بدید و در ادامه توضیح کد رو بخونید:

@receiver(pre_delete, sender=User)
def delete_user(sender, instance, **kwargs):
    if instance.is_superuser and instance.username == 'admin':
        raise PermissionDenied

تو خط اول متدمون رو هوک میکنیم به سیگنال pre_delete و مدل User رو به عنوان پارامتر sender معرفی می کنیم. یعنی مدل User رو چک کن و قبل از حذف هر ریکورد متد من رو یکبار اجرا کن.

پارامترهای sender که اینجا همون مدل User هستش و instance که رکورد در حال حذف هستش به متد ما پاس داده میشه.

در خط های بعد نام کاربری رو(به شرط سوپریوزر بودن) چک میکنیم و اگر برابر admin بود PermissionDenied میدیم که در نتیجه صفحه permission denied به کاربر نشون داده میشه.

خوش باشی دولوپر جان 🙂

محافظت از یک دایرکتوری وب با پسورد، به کمک Nginx

این راهکار برای زمانی هستش که بخواید یک دایرکتوری وب رو خیلی سریع و ساده با username / password محافظت کنید.

برای انجام این راهکار موارد زیر رو نیاز دارید:

  • nginx نصب شده روی سرور و آشنایی عمومی با کانفیگ
  • دسترسی روت سرور

مرحله ۱- ایجاد نام کاربری و پسورد

نام کاربری و رمز عبوری که میخواید برای محافظت از دایرکتوری استفاده بشه باید تو فایلی به نام با ۲ روش میتونید این کار رو انجام بدید:

۱- اگر آپاچی دارید روی سرور میتونید از یکی از ابزارهاش به نام htpasswd برای این کار استفاده کنید. دستور زیر رو توی ترمینال بنویسید:

htpasswd -c /path/to/file/.htpasswd username

بعد از اینتر کردن از شما پسورد رو میخواد.

۲- اگر ابزار فوق رو ندارید می تونید دستی این کار رو انجام بدید. یک فایل به نام .htpasswd در مسیر دلخواه (مثلا تو home میتونید بذارید) ایجاد کنید.

محتوای فایل به این صورت باید باشه:

username:encrypted-password
با استفاده از ابرزارهای آنلاین (پیشنهاد : http://aspirine.org/htpasswd_en.html ) می تونید یک پسور encrypt شده ایجاد کنید. در نهایت محتوای فایل شما به این شکل باید بشه:
hamed:$apr1$sOiSeo04$l8WffD3EX7shHf290HHPX/
  مرحله ۲ : کانفیگ nginx

یکی از فایل های کانفیگ nginx رو باز کنید و انتهای بلاک دایرکتوری مورد نظرتون این دو خط رو اضافه کنید:

auth_basic "Limited access!";
auth_basic_user_file /path/to/file/.htpasswd;

اگر دقیقا متوجه نشدید میتونید در انتها فایل مثال رو ببنید. حتما متوجه خواهید شد. چون فایل کانفیگ nginx رو تغییر دادیم لازمه یه بار nginx رو ریستارت کنیم:

service nginx restart

من یه مثال نوشتم که میتونید ازش استفاده کنید برای تست: روی سروری که داشتم یه دایرکتوری تو مسیر /home/admin به نام files ایجاد کردم. محتوای فایل .htpasswd که توی home گذاشتم:

client:$apr1$sOiSeo04$l8WffD3EX7shHf290HHPX/

محتوای فایل کانفیگ nginx:

server{
listen 138.1.1.1:80;
server_name mydomain.ir;

location /files {
autoindex on;
alias /home/admin/files;
auth_basic "Limited access";
auth_basic_user_file /home/.htpasswd;
}
}
با این کانفیگ آدرس mydomain.ir/files محدود به وارد کردن یوزرنیم/پسورد هستش.

موفق باشید.

کانفیگ سرویس گانیکارن برای یک پروژه django روی Centos

ایجاد سرویس در لینوکس با یک فایل کانفیگ با پسوند service امکان پذیره. الان میخوایم یه سرویس برای گانیکارن ایجاد کنیم.

۱- یه فایل به نام gunicorn.service در مسیر system به صورت زیر ایجاد می کنیم.

nano /etc/systemd/system/gunicorn.service

۲- فایل های سرویس شامل یک سری بلوک هستند که هر بلوک تنظیماتی رو برای سرویس ما نگه داری میکنه. اولین بلوک Unit هستش که بصورت زیر نوشته میشه:

[Unit]
Descripttion=gunicorn daemon
After=network.target

۳- بلوک دوم Service هستش که بصورت زیر نوشته میشه

[Service]
User=unixusername
Group=nginx
WorkingDirectory=/home/unixusername/django_application
ExecStart=/home/unixusername/django_application/venv/bin/gunicorn -b 127.0.0.1:9001 --access-logfile '-' -w 1 django_application.wsgi &

تو بلوک سرویس ابتدا کاربر و گروهی که قراره پروسس اپلیکیشن رو برای ما انجام بدن و دسترسی به دایرکتوری پروژه رو داشته باشه معرفی می کنیم.

بعد از اون برای پارامتر WorkingDirectory آدرس دایرکتوری پروژه رو به سرویس میدیم. این آدرس مسیری هستش که فایل mange.py توش قرار گرفته.

و در انتها برای پارامتر ExecStart کامند اجرای Gunicorn با پارامترهای مد نظر خودمون رو قرار میدیم. توضیحات پارامترهای Gunicorn رو می تونید از داکیومنتش بخونید.

۴- بلوک آخر Install هستش که به systemd لینوکس میگه که اگر سرویس enable شد چه زمانی باید اجرا بشه. که ما بهش میگم هر وقت multi-user بوت شد و در حال اجرا بود سرویس ما رو هم ران کن. دقیقا به صورت زیر بنویسید:

[Install]
WantedBy=multi-user.target

در نهایت فایل gunicorn.service بصورت زیر میشه:

[Unit]
Descripttion=gunicorn daemon
After=network.target

[Service]
User=unixusername
Group=nginx
WorkingDirectory=/home/unixusername/django_application
ExecStart=/home/unixusername/django_application/venv/bin/gunicorn -b 127.0.0.1:9001 --access-logfile '-' -w 1 django_application.wsgi &

[Install]
WantedBy=multi-user.target

۵- با دستو زیر می تونید سرویس رو استارت کنید

systemctl start gunicorn

۶- و با دستور زیر سرویس رو فعال کنید که بعد از ریبوت سیستم عامل بتونه مجدد اجرا بشه

systemctl enable gunicorn

۷- با استارت سرویس gunicron باید اپلیکیشن django روی پورت مورد نظر(تو این مثال 9001) در دسترس باشه. یکبار برای اطمینان از عملکرد صحیح سرویسی که ایجاد کردید سیستم عامل رو ریبوت کنید.

آپگرید PostgreSQL 9.2 به 9.6 در CentOS 7

نسخه ۹.۶ دیتابیس postgresql ویژگی های مفیدی داره که احتمالا مورد نیازتون باشه. آپگرید نسخه ۹.۲ به ۹.۶ کار پیچیده ایی نیست به شرطی که به درستی و طبق مراحل زیر پیش برید:

#0 : قبل از نصب

ابتدا چک کنید ورژن postgresql دقیقا چی هستش الان. با دستور زیر

psql --version

با یوزر postgres که به کل دیتابیس ها دسترسی داره لاگین کنید و یه بک آپ کامل از کل دیتای فعلی بگیرید و به یه جای امن منتقل کنید:

su - postgres
pg_dumpall > backup_all_postgresql_data.sql

وقتی که این آموزش رو دارم می نویسم آخرین نسخه ۹.۶ هستش. شما می تونید هر ورژنی بالاتر از ورژن ۹.۶ رو نصب کنید با همین روندی که در ادامه هست. فقط جاهایی که لازمه تو دستورات ورژن رو باید تغییر بدید.

#1 : مرحله اول نصب postgresql 9.6

# download last package from official postgresql website
cd /tmp
wget https://yum.postgresql.org/9.6/redhat/rhel-7.4-x86_64/pgdg-centos96-9.6-3.noarch.rpm

# install postgresql9.6
rpm -ivh pgdg-centos96-9.6-3.noarch.rpm
yum install postgresql96-server postgresql96-contrib

# initial 
/usr/pgsql-9.6/bin/postgresql96-setup initdb

mv /usr/bin/pg_ctl{,-orig}
echo '#!/bin/bash' > /usr/bin/pg_ctl
echo '"$0"-orig "${@/unix_socket_directory/unix_socket_directories}"' >> /usr/bin/pg_ctl
chmod +x /usr/bin/pg_ctl

#2 : آپدیت/ایمپورت دیتای موجود روی ورژن قبل به ورژن جدید

systemctl stop postgresql
# At this point both servers are stoped

# As Postgres user
su postgres
cd ~
/usr/pgsql-9.6/bin/pg_upgrade -v -b /usr/bin/ -B /usr/pgsql-9.6/bin/ -d /var/lib/pgsql/data/ -D /var/lib/pgsql/9.6/data/
exit

# Back to root user
 # Rollback pg_ctl
 mv -f /usr/bin/pg_ctl{-orig,}

#### APPLY OLD postgresql config params to postgresql-9.6 (pg_hba.conf, postgresql.conf) (manually), maybe use pgtune for postgresql.conf...

#3 : استارت سروریس جدید (نسخه ۹.۶) و غیر فعال کردن نسخه قبل

systemctl start postgresql-9.6
 systemctl enable postgresql-9.6
 systemctl disable postgresql

# temporary
 ln -s /usr/pgsql-9.6/bin/psql /usr/bin/psql --force
 ln -s /usr/pgsql-9.6/bin/pg_dump /usr/bin/pg_dump --force

# Postgres user
 su postgres
 cd ~
 ./analyze_new_cluster.sh
 exit

# back as root
 # remove old postgresql
 yum remove postgresql

# Export new path
 echo 'export PATH=$PATH:/usr/pgsql-9.6/bin' >> /etc/bashrc

در نهایت می تونید فولدر دیتای ورژن قبل رو به اختیار حذف کنید یا نگه دارید.