افکار متلاطم یک برنامه نویس

آخرالزمان موبایلی

بازمانده آخرالزمان موبایلی !

Responsive


mobilegeddon و تغییری در الگوریتم جستجوی گوگل که لرزه بر اندام اینترنت انداخته

۰۵ ارديبهشت ۹۴ ، ۱۱:۱۸ ۰ نظر موافقین ۰ مخالفین ۰
سعید صالحی

۱۴ سال همزیستی با ویروس NSA در خانه

این مطلب رو بخونید


بعد به این سوال جواب بدین:

اگه قرار بود ما این ویروس رو بنویسیم چه اتفاقی می افتاد؟!

۱۴ اسفند ۹۳ ، ۱۰:۵۹ ۳ نظر موافقین ۰ مخالفین ۰
سعید صالحی

دو کلام حرف حساب به بهانه 25 ساله شدن فتوشاپ

چند روز پیش نرم افزار فتوشاپ 25 ساله شد ، نرم افزاری که اسم اون الان یه فعله و هم سن منه!

همه ما تقریبا داستان درست شدنشو نمی دونیم

اکه نمیدونید چند دقیقه وقت بذارین و این مطلب رو بخونید ، 

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

هدفم از گفتن این حرفا یه نکته خیلی ظریفه که واقعا ذهنمو درگیر کرده

اون طرف دنیا توی کشور خبیث! آمریکا دو نفر تو وقت خالیشون ، برای دل خودشون و برای سرگرمی کدی می نویسن که می شه فتوشاپ و ما با این همه تکنولوژی که در دسترس داریم کدی رو می نویسیم به سفارش مشتری !  که وقتی 6 ماه بعد به اون کد نگاه می کنیم میگیم افتضاحه!

واقعا نمی فهم مشکل از کجاست؟ 

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

چرا ما حتی برای خودمون حاضر نیستیم مثل اونا کار کنیم؟

چرا باید ما تو شرکت های بزرگ نرم افزاری ، کدی بنویسیم که به جز نویسنده اش هیچ کس نفهمه ، و هیچ اصولی توش استفاده نشه...

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

نمی خوام بگم همه همین جوری هستن ، ولی می خوام بگم تو همین ایران خودمون مگه چند تا نمونه خوب داریم؟ 

چرا ما صرفا مصرف کننده هستیم؟

چرا ما یه Library خوب تولید نکردیم تا حالا؟

چی میشه که یه نفر می شینه دو تا فریمورک خوب برای برنامه های تک صفحه ای طراحی می کنه! (Single Page Applicatios)

اونوقت یه تیم نمی تونن حتی یه پروژه رو روی زمانبندی تحویل بدن !

چرا تا صحبت از برنامه نویسی و اصول می شه می تونیم 500 تا اسم پشت سر هم ردیف کنیم و می تونیم ساعت ها درباره Design Pattern ها در فلان زبان یا فلان فریمورک حرف بزنیم اما در عمل موقع پیاده سازی بگیم: "فعلا یه جوری سر همش کن! بعد درستش می کنیم!"

و هیچ وفت بعد نرسه!

اصلا تا حالا به کد هایی که هم زبان هامون توی گیت هاب یا CodePlex یا BitBucket گذاشتن نگاهی کردین؟ به جرات می تونم بگم تعداد کارهایی که قابل قبوله انگشت شماره  ، اصلا کدوم کدی رو نوشتین تاحالا که مثل یه پروژه خارجیا داکیومنت داشته باشه!

اصلا تا حالا شده کاربر برنامه خودتون باشین؟!

درسته که اسکرام و انواع متد های چابک هستن ، هزاران فریمورک خوب هست ، تکنولوژی خوب هست ، اما ما کجای این اقیانوسیم؟!

و هزاران سوال دیگه!


شاید هم شما دیدین ، به هر حال اگه نظری دارین خوشحال میشم توی کامنت ها ببینم ، دوست دارم بدونم چند نفر مثل من فکر می کنن؟

اگه هم واقعا کسایی رو می شناسید که واقعا تیمی کار می کنن یا فریلنسری که مثل اون آدمایی که تو بلاد کفر کد می نویسن ، کد بنویسه!حداقل به من معرفی کنید. نه برای کار! فقط می خوام ببینم چه شکلیه اصلا؟!

ممکنه زمان ببره ، اما حداقل به من خیلی کمک می کنه ،


ویرایش: بد نیست یه نگاهی هم به اینجا داشته باشین: Top C# GitHub developers in Iran

۰۷ اسفند ۹۳ ، ۰۱:۳۴ ۴ نظر موافقین ۰ مخالفین ۰
سعید صالحی

سانسور!

این شعر از هادی جمالی است در اعتراض به سانسور شدید واژگان در شعر و داستان:


    ای دلبر من، ای قد و بالات سه نقطه!

    ای چهره ی تو در همه حالات سه نقطه…


    لب( بووووق) دهن (بووووق) تمام سر و تن (بووووق)!

    اصلا چه بگویم که سراپات سه نقطه…


    برخیز و میان همگان جلوه گری کن!

    حال همه در حال تماشات سه نقطه…


    با دشمن خود یاری و با یار چو دشمن!

    ای آنکه تولا و تبرات سه نقطه…


    آخر به زری یا ضرری یا که به زوری؟!

    میگیرم از آن گوشه ی لبهات سه نقطه…


    چشم من و گیسوی تو (نه) چادر تو (خوب)!

    دست من و بازوی تو (نه) پات سه نقطه…


    “تا باد صبا پرده ز رخسار وی انداخت”

    این بخش خطرناک شده کات سه نقطه…


    آخر چه بگویم که توان چاپ نمودن!

    ای بر پدر کل ادارات سه نقطه… 

۰۶ اسفند ۹۳ ، ۱۲:۱۹ ۱ نظر موافقین ۰ مخالفین ۰
سعید صالحی

Extension Method Library

اگه برنامه نویس دات نت باشید ، حتما اسم Extension Method  به گوشتون خورده
اگه هم نمیدونین چیه پیشنهاد می کنم حتما به + یا + سر بزنید
یه برنامه نویس با حوصله نشسته صد ها اکستنشن متد کاربردی رو نوشته که استفاده از اونا می تونه سرعت بیشتری به کد نویسیتون بده
سورس کد اون از CodePlex قابل دریافته
همچنین می تونید از طریق  Nuget به پروژه تون اضافه کنید

۰۶ اسفند ۹۳ ، ۱۱:۲۰ ۰ نظر موافقین ۰ مخالفین ۰
سعید صالحی

بهونه های برنامه نویسی

excuse

امروز یه وب سیات خیلی باحال دیدم

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


من دیروز بهت گفتم که تا آخر وقت امروز تموم میشه


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


این اتفاق حتما به خاطر این افتاد که توی یه لحظه انجام دادی


این ممکن نیست خطا بده ، همه تست های واحد رو پاس کرده


این چطور ممکنه؟


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


من به این کد نگاه نکردم ، اما خیلی دستور شرطی توش وجود داره


من تعجب می کنم ، این داشت درست کار می کرد


این مشکل مرورگر شماست!


این مشکل رو قبلا بهم گفتین ، اما هنوز برطرفش نکردم


خیلی زمان بره که بخوایم کد رو از اول بازنویسی کنیم


نمی تونم اینو باز نویسی کنم


یه بار سیستمت رو با آننتی ویروس اسکن کن!


من فراموش کردم اصلاحات مربوط به این تغییرات رو Check-in ، Commit کنم!


این مورد رو اصلاح کردیم ، اما هنوز اعمال نشده


این دو برابر زمانی که طول کشید بنویسم زمان می بره که بخوام اصلاحش کنم!


خیلی هم عالی، شما تونستی تخم مرغ شانسی نرم افزار منو پیدا کنی!


سه ماه طول کشید تا اینو دیباگ کنم! چون فقط یه ماه وقت داشتم که بنویسم!


هیچکس تا حالا درباره این مشکل فکری نکرده!


این قبلا کار می کرد! اما تستش نکرده بودم


شما چیکار کردی که این خطا داد؟


شما چرا می خوای اینکارو از این روش انجام بدی؟


من این مورد رو هیچوقت توی عمرم ندیده بودم!


ما با شرکتی که هاست میده فعلا مشکل داریم!



منبع

۲۸ بهمن ۹۳ ، ۱۰:۳۶ ۰ نظر موافقین ۰ مخالفین ۰
سعید صالحی

مدیریت وظایف

یه وبسایت خیلی خوب در زمینه مدیریت وظایف امروز دیدم که به عنوان یه کار وطنی خیلی خوب و تمیز پیاده سازی شده 

taskulu.com

۱۳ آذر ۹۳ ، ۰۹:۲۲ ۱ نظر موافقین ۰ مخالفین ۰
سعید صالحی

ورژن!

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

روش ها و متدهای مختلفی برای نسخه  گذاری نرم افزارها ارائه شده است. در این بین روش Semantic Versioning که با نام اختصاری SemVer شناخته می شود در اکثر پروژه ها استفاده می شود (بطور مثال بیش از 90 درصد پروژه های موجود در گیت هاب از این روش برای نسخه بندی استفاده می کنند).

ساختار SemVer به چه شکل است؟

SemVer شامل سه عدد به شکل x.y.z می باشد:

  • عدد x به معنای تغییرات گسترده در نرم افزار
  • عدد y به معنای تغییرات کوچک در نرم افزار
  • عدد z به معنای رفع اشکالات نرم افزار

در حقیقت نسخه نرم افزار به شکل Major.Minor.Patch می باشد.

نحوه کار SemVer به چه شکل است؟

بسیار ساده! بالا بردن عدد در بخش و زمان صحیح.

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

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

و در آخر اگر پروژه شما دارای تغییراتی گسترده است که ممکن است برخی API های موجود را پشتیبانی نکند و نیاز به صرف زمان و دقت بیشتری برای ارتقا هست، باید مقدار x را افزایش دهید.

چرا باید از این شیوه عدد گذاری استفاده کنیم؟

بدین دلیل که ساده و مشخص است و می توان به آن استناد کرد. بطور مثال بعد از تغییرات نسخه باید 4.2 باشد؟ یا 5؟ یا 4.1.1 ؟ و…

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

دلیل مهم دیگر مدیریت وابستگی است. فرض کنید پروژه ای دارید با نام felan که برای اجرا نیازمند پروژه ای دیگر به نام bahman است. پروژه bahman در حال حاضر نسخه 2.3.7 را دارد. حالا شما می توانید با خیال راحت در صورت ارتقا bahman آن را تا قبل از نسخه 3.0.0 ارتقا دهید و از امکانات و رفع اشکالات آینده آن استفاده نمائید.

نکاتی که باید توجه داشته باشید

در زیر نکاتی را مشاهده می کنید که باید در هنگام نسخه بندی پروژه در نظر داشته باشید:

شروع از نسخه 0.1.0

شروع پروژه از نسخه 0.1.0 است نه 0.0.1

قبل از ارائه نسخه 1.0.0 تنها برای زمان توسعه

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

نسخه های پیش از انتشار

در فرآیند توسعه زمان هایی هست که می خواهید قبل از ارائه آن به کاربر و مشتری توسط عده ای تست و ایرادیابی شود. برای این کار می توانید از نسخه های پیش از انتشار استفاده کنید.

خود مراحل پیش از انتشار شامل سه نوع هستند که به ترتیب از پایین به بالا عبارتند از alpha ( آلفا )، beta ( بتا ) و rc ( کاندیدای انتشار ). این سه عبارت بعد از نسخه مورد نظر اضافه می شوند. بطور مثال اولین نسخه آلفای 1.0.0 یک پروژه می شود 1.0.0-alpha.1 و نسخه بعدی 1.0.0-alpha.2 نام می گیرد.

همانطور که در بالا عنوان شد ترتیب آن ها مهم است یعنی بتا بعد از آلفا و کاندیدای انتشار بعد از آن دو قرار می گیرد و این یعنی نسخه 1.0.0-beta.1 بالاتر و جدید از نسخه 1.0.0-alpha.8 است.

سوالات متداول

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

آیا باید برای هر رفع اشکال ویا افزودن قابلیت جدید باید نسخه ای جدید ارائه کرد؟

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

آیا باید بعد از رسیدن به عدد 9 یک نسخه به عدد بالاتر اضافه کرد؟

خیر. نسخه برنامه شما می توانید چیزی شبیه به 1.3.17 و یا 2.14.1 باشد.

آیا حتما برای جدا کردن اعداد از نقطه و پیش از شروع عبارت نسخه های پیش از انتشار از - استفاده کرد؟

بله. این روش استاندارد است و نحوه شماری گذاری نیز باید دقیقا به همین شکل باشد. این موضوع در برنامه های مدیریت وابستگی نظیر npm و bower بسیار اهمیت پیدا می کند و پیروی نکردن از آن باعث بروز مشکلات زیادی خواهد شد.

آیا نسخه برنامه باید حتما شامل 3 عدد باشد؟ بطور مثال برنامه من که در نسخه 1.1.0 است می تواند مختصرا با عبارت 1.1 شناخته شود؟

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

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

نسخه بعدی شما می شود 1.3.0

سخن آخر

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

۱۳ آذر ۹۳ ، ۰۹:۱۴ ۰ نظر موافقین ۰ مخالفین ۰
سعید صالحی

ارتفاع ثابت در صفحات

امروز خیلی اتفاقی با یه قابلیتی توی CSS آشنا شدم که خیلی به درد می خوره

شاید برای شما هم پیش اومده که تو طراحی یه صفحه وب نیاز داشتین که ارتفاع یک المان را به صورت ثابت بدین ، البته ثابت نه به این معنی که یک عدد مثلا 300px وارد کنید

اولین راه حلی که به ذهن من میرسه اینه که بیام با استفاده از jquery و یا ابزار های مشابه رویداد تغییر سایز صفحه رو بگیرم و به نسبت همون بیام  درصد ارتفاع مورد نیازم رو حساب کنم و به المانم اعمال کنم

که البته با این که این راه درسته و به خوبی هم جواب میده اما به هزار و یک دلیل ممکنه شمارو تو دردسر بندازه مخصوصا وقتی که دارین واکنش گرا کار می کنین

راه حلی که برای این مساله هست استفاده از یک دستور پیش پردازنده در CSS هست! به اسم ()Calc

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

    height: calc(100% - 50px);

خوب یه مساله وجود داره!

آیا همه مرورگرا این دستور رو پشتیبانی می کنن؟  

برا اساس آماری که سایت Caniuse.com قابل اعتماد داده تقریبا مرورگر های مدرن همشون این رو پیشتیبانی می کنن

این هم یک نمونه پیاده شده با این دستور.




۰۴ آذر ۹۳ ، ۱۲:۲۱ ۳ نظر موافقین ۰ مخالفین ۰
سعید صالحی

مسیر آینده من

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

این سخنرانی گرانبها را در ادامه مطلب دنبال کنید

ادامه مطلب...
۱۳ مهر ۹۳ ، ۱۴:۲۷ ۳ نظر موافقین ۰ مخالفین ۰
سعید صالحی