یه نویسنده

مقاله، کتاب، برنامه و ...

مقاله، کتاب، برنامه و ...

یه نویسنده

وبلاگی برای فعالیتهای پژوهشی و برنامه نویسی کامپیوتر، که شاید دفتر یادداشتی از دانسته‌های روزانه‌ی من باشد(شاید به‌کار شما هم بیاید). مطالبی که از دنیای کدباز جمع‌آوری میکنم و برای علاقه‌مندان این شاخه از فناوری انتشار میدهم. بیشتر نوشته‌های وبلاگ را برنامه‌نویسی‌php و سیستم‌عامل لینوکس تشکیل می‌دهند.

طبقه بندی موضوعی

دسترسی apache به پوشه اشتراکی vagrant

vagrant یه ابزار کمکی برای راه اندازی vm هست. معمولا از virtualbox به عنوان container پیش‌فرض استفاده میشه. در مورد این که vagrant چی هست و container چه کاری رو انجام میده، میتونید سری به ویکی vagrant بزنید.

بعد از راه اندازی vm یکی از امکانات خیلی خوبش sync folder هست. بین Host و Guest یه فولدر مشترک اسجاد میکنه و شما براحتی بر روی یه فولدر توی سیستم خودتون فایل میرید و بدون هیچ دستوری همون فایل رو بر روی vm خواهید داشت. مثلا فولدر بر روی سیستم Host در مسیر

/home/mehrdad/vm/server/www

مثلا در این فولدر کدهای برنامه نویسی وب هست و قراره بر روی vm توسط apache و php اجرا بشه. درون vm فولدر زیر جهت sync

/vagrant/www

قبل از این کار باید vboxsf رو بر روی Guest نصب کنید. همراه container ها یه فایل addition هست جهت نصب ابزارهای کمکی. همراه Virtualbox هم یه iso به اسم VBoxGuestAdditions برای دانلود هست. البته کاربران ایرانی تحریم هست و باید از راه های دیگه دانلود و نصب کنید. توجه کنید مناسب با ورژن virtualbox باید نسخه iso رو دانلود کنید. مثلا virtualbox من در منوی about  نسخه 4.3.36 رو نشون میده. برای دانلود iso لز لینک زیر استفاده کنید

http://download.virtualbox.org/virtualbox/

البته همین iso رو از طریق منوهای virtualbox میتونید دانلود کنید که به علت تحریم‌ها و سرعت پایین نت شاید نتونید موفق به این کار بشید و دانلود مستقیم iso بهتر هست.

بعد از دانلود باید اون رو به عنوان یه cd به vm خودتون mount کنید

mkdir /mnt/cd

mount /dev/cdrom /media/cd

اگر هم مثل من از mount کردم مستقیم iso دانلود شده رو بیشتر میپسندید میتونید iso دانلود شده رو به vm منتقل کنید و با دستور 

mount /home/VBoxGuestAdditions_4.3.36.iso /mnt/cd

این کار رو انجام بدید. برای نصب guest addition نیاز به gcc make و  kernel headers هست. دلیلش هم کامپایل ماژول vboxsf برای کرنل لینوکس هست. یعنی یه سورس ماژول که باید روی vm شما بر اساس نسخه kernel کامپایل و در زمان اجرا insmod بشه. برای نصب نیازمندیها دستور زیر رو اجرا کنید

sudo apt-get install make gcc linux-headers-$(uname -r)

برید به پوشه /mnt/cd و دستور زیر رو اجرا کنید

./VBoxLinuxAdditions.run

با این کار شروع به کامپایل و نصب میکنه


root@S:/mnt/cd# ./VBoxLinuxAdditions.run 

Verifying archive integrity... All good.

Uncompressing VirtualBox 4.3.36 Guest Additions for Linux............

VirtualBox Guest Additions installer

Copying additional installer modules ...

Installing additional modules ...

Removing existing VirtualBox non-DKMS kernel modules ...done.

Building the VirtualBox Guest Additions kernel modules

The headers for the current running kernel were not found. If the following

module compilation fails then this could be the reason.


Building the main Guest Additions module

 ...done.

Building the shared folder support module ...done.

Building the OpenGL support module ...done.

Doing non-kernel setup of the Guest Additions ...done.

Starting the VirtualBox Guest Additions ...done.

Installing the Window System drivers

Could not find the X.Org or XFree86 Window System, skipping.


بعد از این کار سمت client همه چیز آماده هست و باید باید فایل Vagrant رو طوری کانفیگ کنیم تا این دو تا فولدر رو sync کنه

config.vm.synced_folder "./", "/vagrant" ,id: "vagrant-root",owner: "vagrant", group: "www-data",mount_options: ["dmode=775,fmode=664"]

درون پوشه اصلی یه پوشه به اسم www بسازید. در vm قرار هست apache رو بر روی این فولدر تنظیم کنیم.
با دستور vagrant up ماشین رو اجرا کنید
برای تست این که آیا sync به درستی انجام شده دستور زیر رو بزنید و در سیستم خودتون پوشه www رو ببینید که فایل ساخته شده یا نه
touch /vagrant/www/test.txt

بعد از نصب apache وphp حالا نوبت به کانفیگ apache هست تا از پوشه پیش فرض خودش که /var/www هست تغییر کنه به پوشه /vagrant/www برای این کار فایل زیر رو باز و ویرایش کنید
sudo nano /etc/apache2/sites-enabled/000-default.conf

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /vagrant/www

        ErrorLog /vagrant/log/error.log
        CustomLog /vagrant/log/access.log combined

        <Directory /vagrant/www>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order deny,allow
                Allow from all
                Require all granted
        </Directory>

</VirtualHost>

فایل رو ذخیره و با دستور service apache2 restart سرویس apache رو رستارت کنید.
برای گرفتن info از php دستور زیر رو اجرا کنید
echo '<?php phpinfo(); ?>'  > /vagrant/www/index.php
حالا به مرورگر برید و آدرس ip ماشین رو بزنید
به احتمال زیاد خطای دسترسی رو خواهید داشت

برای حل این مشکل باید کاربر vagrant و www-data رو عضو گروه vboxsf کنید با دستور زیر
adduser vagrant vboxsf
adduser www-data vboxsf

دوباره با دستور service apache2 restart سرویس apache رو رستارت کنید. اگر بازم درست نشد نیاز به راه اندازی مجدد vm هست.

لزوم یادگیری فناوری‌های جدید و روشهای بهتر در پروژه‌ها

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


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

  1. روشهای قبلی رو، قبلا یاد گرفتیم، الانم دست به کد و فوری اون بخش رو درست میکنیم. پس اصلا وقتی برای روشهای جدید نمیزاریم
  2. نیاز به وقت داره. بیشتر پروژه‌ها بصورت انفرادی نوشته میشه، و مشکل زمان تحویل+باگ‌گیری+تحویل و راه‌اندازی، اجازه وقت گذاشتن برای تست روشهای دیگه رو نمیده. حتی تست روشها میتونه خودش ۱/۳ زمان رو در بر بگیره، که به‌صرفه نیست
  3. قبلا روشهای یاد گرفته شده تست شده و داره کار میکنه، پس لزومی نداره وقت بزاریم و روشهای جدید رو یاد بگیریم
  4. بعضی روشهای جدید نیاز به سطح بالایی از دانش هست. مثلا curl صرفا باید موارد پایه رو یاد بگیرید و با گرفتن نمونه کد از اینترنت راه میفته، ولی api نیاز به خوندن document، و تست ماژولهای نوشته در زبان مورد نظر هست. چون در نگاه اول curl‌مسیر ساده‌ای هست از اون استفاده میکنیم

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

  1. sql یا NoSQL
    معمولا برنامه‌نویسان php با mysql‌ خوی گرفتن و بصورت پیش‌فرض دیتابیس این زبان هست. ولی آیا همه جا باید از این دیتابیس استفاده بشه؟ مثلا پروژه‌ای رو در نظر بگیرید که ۵۰ دسته بندی داره، بعضی از این دسته‌ها به فیلدهای زیادی نیاز داره مثلا نام، نام‌خانوادگی، موبایل و آدرس و ... ولی بعضی دسته‌ها فیلد کمی نیاز داره و صرفا باید کد‌ملی یا شماره تلفن برای اون دسته وارد بشه. با این اوصاف آیا mysql برای این پروژه به صرفه هست؟ توجه کنید که join‌ در mysql‌چقدر روی performance تاثیر داره. جواب خیر. و این موردی که در یک پروژه بهش برخورد کردم و بعد از تحقیقات و تست به این نتیجه رسیدم که پروژه باید دیتابیس mongodb کار کنه. تنهای معایب این روش نصب نبودن بر روی هاست اشتراکی و مشتری باید سرور تهیه کنه. که البته بسته به بزرگ بودن کار این مورد قابل چشم پوشی بود.
  2. ajax یا websocket
    مورد websocket با html5 معرفی شد. بعد از مدتی NodeJS مکمل اون شد و خیلی از سایتها چت ‌هایی بسیار قوی با اون درست کردن. نمونه تلگرام. ولی این مورد نیاز به یادگیری و مطالعه داره و گذشته از اون node بصورت پیش‌فرض بر روی هاست‌ها نصب نیست و برنامه‌نویس تصمیم میگیره از روش قدیمی خودش که فرستادن ajax در نیم ثانیه و یا در نهایت از کامیت استفاده کنه. معایب این روش میتونه مرورگرهای قدیمی باشه که websocket رو ساپورت نمیکنن.
  3. curl یا api
    بیشتر سایتهای بزرگ برای تنوع خدمات خودشون وو این که ثابت کنن یه سرویس بسیار قوی دارن، api رو راه اندازی کردن. معمولا این api تکمیل هستن. یعنی هر کاری که توی gui سایت قابل انجام هست، توسط api هم قابل انجام هست. اکثرا از سه فناوری WSDL,SOAP,RestFul استفاده میشه. ولی باز هم برنامه‌نویسان چون از قدیم از curl بهره بردن و جواب هم داده همچنان به اون وفادار هست. api معمولا پایدار هست، یا تغییرات رو طوری اعمال میکنن که استفاده کنندگان سیستم‌هاشون قطع نشه ولی از بزرگترین معایب curl تغییر gui‌یا مسیرهای submit هست.

من چند مورد که خیلی نسبت به قدیم به چشم میخوره لیست کردم و قطعا دوستان دیگری میتونن تجارب بیشتری بهش اضافه کنن.

اما راه حل رو بازم لیست میکنم:

  1. شما راضی و مشتری هم راضی. اگر پروژه با هر فناوری نوشته شده الان داره کار میکنه و تست‌ها هم موفق آمیز بوده. پس استفاده از فناوری قدیمی تا وقتی مشکلی در سایت پیش نیومده میتونه بکار گرفته بشه و زیادی هم حساس نشید. ولی بهتره روشهای جدیدتر رو هم تستی بگیرید شاید روزی اون قسمت از پروژه بدلیل فناوری قدیمی از کار بیفته و شما در شرایط بدی برای بروز رسانی قرار بگیرید
  2. مشتری راضی ولی شما وجدانتون نارحته. بله این مورد برای خیلی ها پیش میاد. اگر روشهای جدید بکار گرفته میشد، سرعت و دقت بیشتری داشت و مشتری هم خوشحال‌تر میشد. ولی این عذاب وجدان در شما هست که بدلیل وقت یا هر مشکل دیگری نتونستید روشهای جدید رو استفاده کنید. در اولین فرصت راهی برای رفع عذاب وجدانتون پیدا کنید، مثلا مشتری رو متقاعد کنید برای بروز رسانی اون قسمت یه مبلغی در نظر بگیره. البته باید بیشتر از قبل بر سر قیمت باهاش راه بیاید.
  3. مشتری ناراضی و شما هم قبول دارید کار بد انجام شده. این شرایط خیلی بده باید زودتر برطرف بشه. مشتری برای پروژه هزینه کرده و شما در زمان مورد نظر نتونستید، بهترین روش رو پیاده سازی کنید. مشتری حقش ضایع شده. این جا فقط گرفتن زمان بیشتر میتونه مشکل رو حل و اگر هم رفع اون مشکل داره با مشتری حرف بزنید و متقاعدش کنید اون موقع بسته به زمان و شرایط، روشهای قبلی استفاده شد، و برای رفع باگ و استفاده از روش جدید باید مبلغی رو بده. شاید مشتری از اختصاص مبلغی بیشتر به پروژه سر باز بزنه و شمار رو مجبور کنه که باید بدون دریافت هزینه برطرفش کنید، خب این‌جا دیگه باید از خودتون بگذرید و این ضرر رو بپذیرید و تجربه‌ای باشه برای پروژه‌های بعدی که مطالعه و پیدا کردن روش مناسب رو انجام بدید


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

نمایشگاه تلکام-غرفه صنایع ارتباطی آوا

تلکام


من و همکار خوبم مهندس کریم خلیفه در غرفه صنایع ارتباطی آوا

مجموعه آموزشی yii2 از پایه تا پیشرفته همراه با کارگاه عملی ساخت cms

سلام به تمام برنامه نویسان علاقه مند به یادگیری فریم‌ورک yii2
حدود یک‌سال پیش در بخش codeigniter مجموعه آموزشی خدمت علاقه‌مندان تقدیم کردم. در همان پستها دوستان از بنده خواستند تا اگر امکان دارد فریم‌ورک‌های دیگر را هم آموزش دهم.
بصورت حرفه‌ای بر روی دو فریم‌ورک کار کرده بودم یکی ci‌و دیگری yii. البته باز هم با yii بیشتر و شاید از ۹۰درصد ویژگی‌های yii در کارهای خود استفاده کرده بودم. با این اوصافت در تهیه مجموعه آموزشی مشکلی نداشتم چون صرفا تجربیات باید تبدیل به فیلم میشد. ولی مساله وجود متقاضی بعد از تهیه مجموعه آموزشی بود. هر چند از همان ابتدا هدفم پخش رایگان بود ولی باز هم باید طرفدارانی باشند تا کار خدای نکرده روی زمین نماند. بعد از گذشت حدود ۵ ماه از انتشار ci، هر روز دوستانی زیادی تماس میگرفتند برای رفع مشکل، عده‌ای از کاربران در فروم پست میگذاشتند، عده در وبلاگم ،بعضی از دوستان تماس تلفنی و حتی تعداد چند نفر از عزیزان حضوری با بنده دیدار داشتند. این خود نشانه قوتی بود چون متد آموزشی بنده باب طبع دوستان بود. پس با این حساب مشکل وجود متقاضی هم حل شد.

راهنمای انتخاب رشته-رشته‌های مرتبط با کامپیوتر

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

در ابتدا لازم میدونم سابقه تحصیلی خودم رو از ابتدا تا این‌جا رو توضیح بدم:

۱- دیپلم کامپیوتر - فنی و حرفه‌ای در سال ۸۴

۲- کاردانی فناوری اطلاعات و ارتباطات(ICT) - در سال ۹۰

۳- کارشناسی مهندسی نرم افزار - در سال ۹۲

پس همونطور که میبینید از هموم ابتدا علاقه شدید به این رشته داشتم، و خوب به اون موفقیتهایی که دوست داشتم رسیدم، و الان هم هنوز مثل روزهایی اولی که با کامپیوتر روزی ۱۸ تا ۲۰ ساعت کار میکردم، کار میکنم.

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

با تمام حاشیه‌هایی که این رشته داره و تمام ایرادهایی که دیگران بهش میگیرن ولی اگر کمی علاقه داشته باشین و تلاش کنید، چنان غرق این رشته میشین که رهایی از اون غیر ممکن هست. مثلا یه روز با یکی از همکاران که ۱۵ سال از من بیشتر تجربه داشت، در مورد این که اگر روزی دکتر بگه شما دیگه نباید با کامپیوتر کار کنید چه حالی دارید؟ اولین جوابی که گفتن: میمیرم.

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


۱. این رشته خیلی زود و به سرعت نور بروز رسانی میشه

هنوزم خوب یادمه. وقتی بچه بودیم میرفتیم دکتر یه آمپی سیلین، شربت اکسپکتورانت کدئین، قرص استامینوفن و اگر هم خیلی شدید بود آمپول آمپی‌سیلین. خوب من تقریبا ۶ ماه پیش یه سرماخردگی شدید گرفتم رفتم دکتر دقیقا همون داروهای ۲۰ سال پیش رو داد. پس تو علم پزشکی عمومی چه تغییر کرده؟ و اون آقای دکتر با ۵۰ سال سن و تجربیات ۲۰ سال پیش هنوزم میتونه تو این جامعه کار کنه و تازه بهش میگن دکتر حرفه‌ای و با تجربه. ولی نه عزیزان رشته کامپیوتر و تمام شاخه‌هاش این طور نیست. بلکه به سرعت نور تغییر میکنه. امروز چیزی رو یادگرفتی قطعا تا ۱ یا دوسال آینده تغییراتی درش حاصل شده و شما برای یادگیری موارد جدید باید مطالعه داشته باشین.

اگر روحیه یادگیری همیشگی رو دارین و علاقه دارین مدام چیزهای جدید یاد بگیرین این رشته بسیار کاربردی و موفق هست. ولی شاید الان بدنتون داغ باشه و بگین آره دوست دارم یاد بگیرم ولی داریم افرادی با ۳۵ تا ۴۵ سال سن که اصلا حوصله خوندن یک صفحه مطلب انگلیسی رو ندارن و میخوان روی همون تجربیات گذشته پای‌بند باشند. خب این دوستان بخت و اقبال اون‌ها روز به روز کم میشه و چه بسا روزی یک جوان ۲۰ ساله بخاطر تجربیات جدید و بقول ما update ، مسئول بالادست این شخص بشه. در کل هر روز باید بین ۴۰ تا ۹۰ دقیقه برای یادگیری فناوری‌های جدید صرف کنید. مثلا تا همین ۵ سال پیش هر کسی که میخواست طراحی ui سایت انجام بده، براحتی با table ساختار سایت رو میچید و اصلا حرفی از responsive بودن و اجر بر روی تبلت و موبایل نبود. ولی الان باید این فناوری‌ها رو برای طراحی سایت بلد باشید و اصلا اون تجربیات قدیمی دیگه کاربردی نداره. پس اون شخص طراح باید بشینه و با داشتن تمام اون تجربیات، html5و css3 و حتی فریم‌ورک‌های ui مثل bootstrap رو یاد بگیره. الان اون فناوری قبلی که بلد بود شاید در فرم لاگین بتونه از ش استفاده کنه که اونم بازم با فناوری‌های جدید زیباتر در میاد.


۲. درس خوندن در این رشته و بعدش هم کار

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


۳. چیزی به اسم نظام مهندسی و خلاصه مسئول درست‌حسابی نداره 

اگر مورد اول رو خوب مطالعه کرده باشین به این پی بردین که چرا این رشته با رشته‌های دیگه تفاوت داره. حالا با این اوصاف چرا در رشته‌های مثل عمران( که اون هم مثل دکترها علم استاتیک دارن) نظام مهندسی دارن ولی در رشته‌ای مثل نرم‌افزار ما چنین چیزی نداریم. در بازار کار بسیار زیادن شرکتهایی که دارن کارهای در سطح ملی انجام میدن و با کمک بند پ چه پروژه‌هایی رو که نمیگیرن ولی از سطح سوادشون بپرسین از من میگم ۱۰۰- و حتی اوضاع وخیم‌تر از این هم هست. بنده تجربه جلسه با چند تا از این عزیزان رو داشتم. در جلسه‌ای که طرف مسئول شرکت بود و خلاصه خودش رو ۲۰ سال تجربه در این حرفه میدونست، فرق IDE رو با Compiler نمیدونست و توی جلسه برگشت به من گفت: ما توی #C  میریم و روی صفحه دکمه میزاریم، حالا شما توی GCC چطوری دکمه میزارین. برگشتم بهش گفتم توی زبان #C چیزی به ایم گذاشته دکمه تعریف نشد بلکه این امکانات IDE هست که شما امکان دکمه گذاشتن دارید و معمولا زبان #C رو هم با IDE معروف اون یعنی Visual Studio‌میشناسن. خلاصه با وجود نطام صنفی رایانه‌ای چیزی به اسم درو پیکر برای این رشته نیست. هر چقدر شما متخصص و تجربه داشته باشید، معمولا پروژه‌های top به بند پ میرسه(که شامل حال ما نمیشه). هر چند بارها مشاهده شده که همون شرکتهای بی‌تجربه کار رو خراب میکنن  بعدش ناچار مسئولان دست به دامن شرکت‌های و افراد با تجربه میشن برای جمع کردن خرابکاری اون دوستان. پس دارید وارد این رشته میشید از الان مسیر خودتون رو باید خوب بشناسید و بدونید که خودتون هستید و خودتون نه حامی هست و نه مسئولی.


۴. این رشته فقط برنامه‌نویسی نیست

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

  • امنیت. چه در شبکه و چه در امنیت نرم‌افزار
  • شبکه. با توجه بر تمام مشتقات این شاخه، شاخه‌های جدید مثل voip که تلفیقی از شبکه و مخابرات هست
  • سخت‌افزار. باز هم با تمام زیر شاخه‌های جذاب، شاخه‌هایی مثل طراحی embedded
  • مستندات نرم‌افزاری. مثل تهیه مستندات برای ماژول نوشته شده یا نرم‌افزار انجام شده. یا حتی تهیه مستندات تجربیات برای یک پروژه تا در اختیار کارمندان دیگر گذاشته بشه
  • مدیر پروژه. این رشته اصلا مدیر پروژه مختص خودش رو میخواد
  • فناوری‌اطلاعات. کسی که به انواع فناوری‌های روز آشنا هست و میتونه شرکتها رو در تهیه محصول جدید یا انتخاب فناوری کمک کنه.
  • مسئول فنی و نگهداری و پشتیبانی. اگر بخوبی مواردی مثل شبکه و سخت‌افزار و پایگاه داده و خلاصه از هر فناوری یه سر رشته داشته باشید براحتی میتونید در قسمتهای فنی و مهندسی یا پشتیبانی شرکتها مشغول بکار بشید.
و حتی چندین زیر شاخه دیگه که من به ذهنم نرسید. ولی صرفا کدنویسی نیست. هر چن همین برنامه‌نویسی خودش چندین زیر شاخه داره و شما هم تا حدودی با اون‌های آشنا هستید:
  • برنامه‌نویسی دستکتاپ. مثل زبانهای #c و java
  • برنامه‌نویسی سیستمی مثل ++c/c و حتی اسمبلی
  • برنامه‌نویسی سایت  سمت سرور مثل php‌و asp.net
  • طراحی gui برای سایت مثل html,css,js
  • طراحی سه بعدی و گرافیک کامپیوتری
  • طراحی بازی و انیمیشن
پس این رشته شاخه‌های متنوعی داره و شما باید بر حسب علایق و توانایی یک کدوم رو انتخاب کنید.

۵. منابع رایگان و بی‌نهایت فروم و سایت برای حل مشکل
شما چه در مرحله یادگیری و چه در مرحله ورود به بازار کار، از منابع قابل دسترس برای این رشته دوق زده خواهید شد. البته در زبان فارسی بسیار کم و در زبان انگلیسی بسیار فراوان. برای یادگیری هز موضوعی صرفا در سایت لیندا یه جستجو بزنید چندین عنوان فیلم آموزشی تهیه میکنید یا در YouTube  چندین هزار فیلم آموزشی رایگان یپیدا میشود. سایت‌های رفع مشکل هم از stack overflow گرفته تا سایت برنامه‌نویس این خودمون.

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

۷. درسهایی مثل ساختمان داده، الگوریتم ،آمار و احتمالات و شبکه رو خوب بخونید
این دیگه بعد از مرحله انتخاب رشته هست. شما باید برای داشتن ذهن تحلیل‌گر به طراحی الگوریتم مسلط باشید و بتونید هر مسئله‌ای رو با دیدگاه تحلیل‌گر خودتون حل کنید. ساختمان داده فکر کنم توی تمام رشته‌های باشه(قبلا که این طوری بود) چون به شما کمک میکنه ساختار داده‌ها و کار با اون‌ها رو بهتر یاد بگیرید. معمولا این درس خیلی شبیه طراحی الگوریتم هست ولی با دیدگاه کار با داده و باد کدهای بیشتر سرو کار داره. آمار و احتمالات درس بسیار شیرین و کاربردی هست. به نظرم تمام انتگرال و دیفرانسیل رو از رشته نرم‌افزار بزارن کنار عوضش در حل سال تحصیلی چند واحد آمار و احتمالات اضافه کنن. ابن درس هم ذهن تحلیل‌گر شما رو تقویت میکنه و هم در حل بسیاری مشکلات سخت‌افزاری و نرم‌افزاری کاربرد داره. شاخه هوش مصنوعی،  داده‌کاوی و وب معنایی کلا روی آمار و احتمالات میچرخه. من همیشه با این که از ریاضی متنفر بودم(اغلب بین ۱۰ تا ۱۴ نمرم بود) ولی همیشه عاشق آمار و احتمالات بودم(نمرم بین ۱۷ تا ۲۰). پس این درسها رو جدید بگیرید و خوب بخونید. در آخر شبکه رو میشه مادر فناوری روز دونست. چون شما چه توی برنامه‌نویس، سخت‌افزار و فناوری‌اطلاعات مشغول به فعالیت بشید باید یک متخصص شبکه حرفه‌ای بشید. متاسفانه وقتی حرف از شبکه میاد همه فکر میکنم منظور سیم و کابل هست، نخیر دوستان منظورم فناوری‌های شبکه مثل شناخت پروتکل‌ها و نرم‌افزارهای شبکه هست. در شبکه ۱۰ درصد یا کمتر در حوزه passive هست و ۹۰ درصد اون در حوزه active شبکه.  در اولین توصیه کتاب دکتر احسان ملکیان بنام اصول شبکه و همچنین کتاب تازه ترجمه شده ایشون بنام شبکه های کامپیوتری از دیدگاه بالا به پایین(نوشته کرس و راس) رو تهیه و چندین و چندبار بخونید تا خوب یاد بگیرید. 

دیگر موردهای بیشتری ندارم  شاید چند روز یگه چیزهای بیشتری به ذهنم برسه که به این متن اضافه کنم. 
موفق باشید و آرزوی سربلندی برای تمام شما دوستان و عزیزان، رو از خداوند منان دارم.

بهترین منابع یادگیری برنامه نویسی تحت وب

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

 طراح یا برنامه نویس سمت سرور؟ در کشور ما طراح وب یک شاخه هست اونم photoshop و css.html,js ولی در کشورهای دیگه photoshop با بقیه جداست.

برای طراحی ui و سمت کاربر شما باید ابتدا ذوق و سلیقه طراحی، روانشناسی رنگها، ux designer و خلاصه فناوری‌هایی که برای طراحی گرافیکی نیاز هست رو بلد باشین. جدیدا responsive هم به این مورد اضافه شده که به کمک bootstrap یا دیگر ابزارها این کار هم راحت شده. ساختارش روی html هست و استایل صفحه با css و نهایتا با javascript کتابخونه دوست داشتنی اون jquery هم باید کار کنید.

و اما سمت سرور که میخواید تحت .net کار کنید یا تحت php؟ این دو هدفشون یکی هست ولی دو دنیای متفاوت هستن. هر کدوم چالشها و جذابیتهای خاص خودشون رو دارن. ابتدا توضیحی کوتاه از کدوم

1- NET.

دات نت یک فریم ورک قدرتمند و از محصولات مایکروسافت هست. کاملا رایگان و مجانی هست(توی ایران) . دات نت برای تحت وب ASP.net رو داره. معمولا asp.net رو با #C مینویسن. شما در دات نت محیط توسعه visual studio رو دارید که روز به روز هم داره پیشرفت میکنه. بعد از توسعه یک سایت برای publish هم سرورهای زیادی در اینترنت هست که میتونید هاست asp.net تهیه کنید ولی اغلب هزینش از لینوکس بالاتر هست. دات نت ساختار MVC منسجمی داره.


2.php

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



با توجه به هدفتون باید برید دنبال منابع درست و شروع یادگیری. در این پست به مبحث سمت سرور و php میپردازم

روشهای یادگیری زیاد هست

  1. کتابهای آموزش برنامه نویسی
  2. جزوه و کتابهای رایگان توی اینترنت
  3. فیلمهای آموزشی
  4. کلاسها و دوره‌های برنامه‌نویسی
در مورد یادگیری برنامه نویس شما باید خودآموزشی رو از همین الان شروع کنید. این که کسی راهنمای همشگی شما هست یا فلان استاد برم بهم یاد بده رو از همین الان بزارید کنار و  با کتابها و منابع رایگان توی وب کارتون رو شروع کنید. معمولا برنامه نویسان موفق کسانی بودن که بصورت خودشجوش یاد گرفتن و واقعا هم موفق هستن.
در مورد کتاب به زبان فارسی مورد خوبی ندیدم ولی به زبان انگلیسی کتابهای خوبی هست + + +
در پستهای قبلی معرفی کوتاهی از کتاب رایگان برنامه‌نویسی داشتم
بهترین روش یادگیری رو فیلم آموزشی میدونم. به چند دلیل:
  1. زمان به زمان کمتری نسبت به روشهای دیگه
  2. معمولا کاربردی
  3. چون عینا دارید موارد توسعه و کدنویسی رو میبینید بهتر میتونید جذب برنامه نویسی بشید
 به تریتیب از بهترین فیلمها شروع مکینم.

  1. PHP with MySQL Essential Training with Kevin Skoglund
    این مجموعه ویدویی واقعا فوق العاده هست و اصلا وقتتون رو چیزهای دیگه نزارید و فقط این ویدو رو تهیه و شروع کنید. این ویدوی سطح مقدماتی هست و سطح پیشترفته اون 
    PHP with MySQL Beyond the Basics هست. در این مجموعه حتی به css و html هم پرداخته میشه و کاملا با نحوه طراحی یک سایت با php آشنا میشید. البته شرکت لیندا تمام محصولاتش خوب هست. زیرنویسهای انگلیسی شرکت لیندا رو میتونید از این آدرس دانلود کنید
  2. Learn PHP Fundamentals From Scratch
    فیلمهای udemy کاربردی و پروژه محور هستن. ساختار آموزشی خوبی داره و با کمی صرف وقت میتونید از مبتدی تا پیشرفته با این مجموعه ویدیویی جلو برید.
  3. PHP Object Oriented Programming Fundamentals
    فیلمهای tutsplus اغلب سریع جلو میره و شاید مجبور بشید در جاهایی فیلم رو هی stop کنید تا ببینید داره چیکار میکنه. ولی واقعا حرفته ای هستن و این ویدیو هم به oop یکی از نیازهای اصلی برنامه‌نویسی پرداخته.
به هر کدوم از این سایتها برید فیلمهای بیشتری هم پیدا میکنید و برای دانلود هم کافی هست یه جستجویی توی وب داشته باشید.

همه کارها بصورت همزمان ارزش دنبال کردن ندارند

بعضی وقتها این وسواس بین تمام ما هست. مثلا برنامه‌نویسی php رو دنبال میکینم ولی برای این که از غافله عقب نباشیم و یا مثلا توی آگهی روزنامه‌ها استخدام برنامه نویس #c رو هم دیدم، میایم و در کنار تمام مشغله‌های کاری برنامه‌نویسی php، زبان دیگری رو هم درگیرش میشیم. این یکی از بدترین وسواسها هست که شخص بصورت همزمان از این شاخه به اون شاخه میپره و آخرش هیچ کدام کارها رو بصورت حرفه‌ای یاد نمیگیرن. این نوشته زیر از رولف دوبلی بسیار زیبا هست:

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

ما گرفتار یک اجبار وسواسی برای برداشتن هر تعداد هندوانه ممکن با یک دست هستیم و سوار هیچ کاری نیستیم؛ ولی گزینه‌ها را پیش رویمان باز نگه می داریم. این موضوع به‌راحتی می‌تواند به‌قیمت موفقیت‌مان تمام شود. باید یاد بگیریم که درها را ببندیم.

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

بسیاری از دروازه‌ها ارزش وارد شدن را ندارند حتی وقتی که دستگیره‌های درشان به‌راحتی بچرخد و باز شود. 

مجموعه آموزشی codeigniter

برای کسب اطلاعات بیشتر به لینک زیر مراجعه کنید.

استخدام برنامه نویس

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

برنامه نویس

چگونه از یک هاست اشتراکی به Mysql هاست اشتراکی دیگر وصل شویم؟

به این کار میگن remote mysql و برای این کار فرض بر این هست که سایت siteaa1.com قراره از Mysql سایت sitebb2.com استفاده کنه:

۱- بدست آوردن ip هر دو تا سایت. با دستور ping در cmd یا ترمینال

ping siteaa1.com

ping

2- بدست آوردن شماره پورت mysql که در بعضی از شرایط امکان داره تغییر داده باشه با query زیر بدست میاد

SHOW VARIABLES WHERE Variable_name = 'port'

3- تایید دسترسی اتصال remote در سایت sitebb2.com چون قراره سایت siteaa1.com بهش remote بشه برای این کار در cpanel سایت sitebb2.com در قسمت database گزینه remote mysql رو انتخاب میکنیم

remote mysql

در ادامه باید ip سایت siteaa1.com رو وارد کنید


4-حالا رشته connect در سایت siteaa1.com بصورت زیر هست تا به sitebb1.com بصورت زیر هست

mysql_connect("192.168.33.66:3306", "username", "password") or die(mysql_error());