‏نمایش پست‌ها با برچسب برنامه‌نویسی. نمایش همه پست‌ها
‏نمایش پست‌ها با برچسب برنامه‌نویسی. نمایش همه پست‌ها

۱۳۹۵ آذر ۱۰, چهارشنبه

زبان‌های برنامه‌نویسی...

دنیای زبان‌های برنامه‌نویسی هم دنیای جالبیه برا خودش! ظاهرا هیچ‌وقت ایده‌های افراد برای زبان‌های جدید تموم نمیشه :) و البته بعد از اومدن زبون‌هایی که ماشین مجازی دارند یا مفسری هستند مثل دات‌نت و ruby و این‌ها باز زبون‌هایی اومدن که به صورت بومی! (native) کامپایل میشند. زبون‌هایی مثل Vala و Go که خیلی طرفدار پیدا کرده و بعدش هم Rust که توی فدورا ۲۵ کامپایلرش اضافه شده.

ولی خب! اصلا قصدم از این پست صحبت در مورد این‌ها نبود. فقط خواستم اینو بگم: فکر می‌کنید این کد به چه زبونیه؟
void f(string_view id, unique_ptr foo) {
   if (auto [pos, inserted] = items.try_emplace(id, move(foo)); inserted){
      pos->second->launch();
   } else {
      standby.emplace_back(move(foo))->wait_for_notification();
   }
}

اگه می‌دونید که هیچ! ولی اگه نمیدونید حتما حدس زدید که شبیه سی++ هست ولی به نظر دقیقا سی++ هم نمیاد. خب حق دارید! چون سی++ هست، ولی سی++۱۷ (C++17). این کد یه نمونه کد هست از اینجا.

کلا روال جدید به روز رسانی استاندارد سی++ خیلی بهتر از قبل شده. بعد از استاندارد سی++۱۱ که در واقع قرار بود قبل از سال ۲۰۱۰ بیاد و خیلی طولانی شد (در واقع، تغییر توی سی++ بعد از ۱۳ سال بود نسبت به استاندارد ۹۸ (استاندارد ۲۰۰۳ هم بود ولی اون تغییر اساسی‌ای نسبت به ۹۸ نداشت))، تصمیم گرفتند روال استاندارد هم، مثل روالی که خیلی نرم‌افزارها برای انتشارشون در نظر گرفتند، براساس زمان و فعلا ۳ سال یک‌بار باشه. برای همین هم استاندارد سی++۱۴ و الان هم سی++۱۷ تو راهه. و بعدی هم میشه سی++۲۰.

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

هر چند این زبون‌های جدید جای سی++ رو تنگ کردند :(
؛)


۱۳۹۲ فروردین ۱۳, سه‌شنبه

پست شروع ۹۲!

سلام!
این یه پست الکیه P: سال نو مبارک اول.
دوم که دارم میرم برای مسابقات تهران برای یک هفته‌ای.
سوم هم اوایل عید دومین برنامم رو برای N9 آماده کردم که البته یه برنامه‌ی کوچیکه و عمدتا با QML و جاوااسکریپت نوشته شده. تجربه‌ی خوبی بود.
البته خیلی اوضاع امیدوار کننده نیست. نوکیا که خب هیچ! یولا (Jolla) هم که تاریخ انتشار گوشیش رو انداخته برای آخر ۲۰۱۳ و در نتیجه این هم خیلی بهش امیدی نیست. اگه واقعا بهار امسال میدادن خیلی خوب بود. BlackBerry هم که به نظر میاد خیلی اوضاع مناسبی نداره. اوبونتو فون هم که نمیدونم مگه این که اون یه گوشی منتشر کنه. نکته‌ی مثبت همه‌ی این‌ها هم اینه که پلتفرمشون خیلی به N9 نزدیکه (البته به جز BlackBerry که شباهتش توی Qt/QMLه و سیستم‌عامل متفاوتی داره).
چهارم هم که به نظر می‌رسه دارم وقتم رو از دست میدم. باید هر چه سریعتر به آینده فکر کرد. باید کمتر وقتم رو صرف کارهای متفرقه کنم و تمرکزم رو روی آینده و راه اون بگذارم.
پنجم هم که این پارسیدورا ۱۸ ماست که مدتیه تو خم یه کوچه مونده اون هم به خاطر یه مشکل توی مخازن به‌روز رسانی فدورا ۱۸ که هنوز پیداش نکردم.
ششم هم فعلا بسه! به امید این که همچنان زنده و سالم باشیم تا پست بعدی. P:
خدانگهدار
شاید امسال بیشتر به‌روز بشه اینجا.

۱۳۸۹ شهریور ۱, دوشنبه

فراخوان همکاری!

به تعداد ۵-۶ نفر لینوکس کار در تهران و به همین تعداد هم در اصفهان مورد نیاز یه سری جاهاست. علاقمندان میتونن با من تماس بگیرن تا معرفیشون کنم. احتمالا برنامه‌نویسی سی یا سی++  و یا خیلی لینوکس کار بودن (و البته احتمالا هر دو) مورد نیاز است!

ویرایش: طبیعتا افراد مورد نیاز باید «لینوکس کار» باشند یعنی تجربه‌ی کارهای سیستمی با لینوکس را داشته باشند. فکر نمی‌کنم جاهایی که من منظورم هست کارشون با «علاقمند به کار در لینوکس» راه بیفته. در هر صورت تجربه‌ی برنامه‌نویسی تحت لینوکس و تجربه‌ی نسبتا خوب کار در لینوکس لازمه. 

۱۳۸۹ فروردین ۷, شنبه

اندازه‌ی int در سی/سی++!

شما میدونین اندازه‌ی int، short و long توی سی/سی++ چقدره؟!! من تا همین چند روز پیش فکر می‌کردم میدونم ولی فهمیدم که نمیدونم!

خیلی از کسایی که توی کامپایلرهای تحت داس سی یاد میگیرن و به حرف استاداشون زیادی اعتماد میکنن فکر میکنن int  دو بایتیه! اون‌هایی هم که شانس دارن و استادشون یکمی به‌روز تره و تحت ویندوز برنامه‌نویسی یاد میگیرن فکر میکنن اندازش ۴ بایتیه...

من براساس چیزایی که قدیما خونده بودم این توی ذهنم بود که اندازه‌ی short و long تقریبا همه‌جا ثابته و ۱۶ و ۳۲ بیته، اما int کاملا وابسته به سیستمه (در واقع وابسته به کامپایلر) و اندازش با اندازه‌ی واحد محاسباتی cpu (معمولا رجیسترهای عدد صحیح cpu) یکیه. در نتیجه انتظاری که داشتم این بود که توی سیستم ۶۴ بیتی و با یه کامپایلر ۶۴بیتی، اندازه‌ی int هشت بایت باشه (و به طرز مسخره‌ای از long بزرگ‌تر باشه!). همون چند روز پیش داشتم روی یه کد کارمی‌کردم که خلاصه یهو متوجه شدم که intم ۴ بایتیه (با این که توی یه لینوکس ۶۴ بیتی بودم). این شد که فهمیدم ای دل غافل! ظاهرا بحث اندازه‌ی این متغیرها به این سادگی‌ها هم نیست. خلاصه بعد از یه چرخی توی اینترنت و به کمک ویکی‌پدیا و این صفحه (که مزایای سیستم LP64 رو توضیح میده) اطلاعات کامل‌تری به‌دستم رسید به این شرح:

۱. تنها چیزی که استاندارد سی مشخص کرده اینه (این ابهام با توجه به ملاحظاتی صورت گرفته!): اندازه‌ی short حداقل ۲ بایته و از int بزرگ تر نیست، اندازه‌ی int هم از long بزرگ‌تر نیست. اندازه‌ی long حداقل ۳۲بیت و اندازه‌ی long long هم حداقل ۶۴ بیته. همین! مثلا ممکنه توی یه سیستم هر ۴ تای اینا ۶۴ بیتی باشن یا حتی بیشتر.

۲. توی سیستم‌های ۶۴ بیتی مدل‌های مختلفی استفاده شده. توی ویژوال سی ویندوز اندازه‌ی اون سه نوع اصلی با سیستم‌های ۳۲ بیتی یکیه، یعنی short دو بایت و اون ۲تای دیگه ۴ بایتند. برای ۶۴ بیت باید از long long استفاده کرد. البته اشاره‌گر ها ۸بایتی هستند توی ۶۴بیتی‌ها کلا. این میشه مدل LLP64

توی لینوکس و خیلی از یونیکس‌ها (کامپایلرهاشون) از مدل LP64 استفاده میکنند: short دو بایت، int چهار بایت و long هشت بایت.

یه مدل ILP64 هست که توی اون int و داده‌های بزرگ‌تر همه ۸ بایتی هستند. و یه مدل SILP64 که توش حتی short هم ۶۴ بیتیه.

خلاصه توی هیچ کدوم از سیستم‌های ۶۴ بیتی که من فعلا ممکنه باهاشون سروکار داشته باشم int هشت بایتی نیست! با توجه به این که زمان زیادی در اشتباه به سر می‌بردم گفتم بزنم شاید برای بقیه هم خوب باشه!!

البته کلا اگه اندازه مهمه، بهترین راه استفاده از انواع تعریف‌شده توی stdint.hه مثل int32_t که داده با اندازه‌ی دقیق میده، یا int_least32_t که کوچک‌ترین داده که حداقل ظرفیت ذکر شده رو داره میده و یا int_fast32_t که سریع‌ترین نوعی که به عقلش میرسه با حداقل اندازه ی گفته شده رو میده. برای ذخیره‌ی اشاره گر ها هم توی یه متغیر عددی باید از intptr_t استفاده کرد.

۱۳۸۸ مهر ۲۳, پنجشنبه

GreaseMonkey

می‌دونین GreaseMonkey چیه؟ من می‌دونستم ولی تا امروز (در واقع دیروز، چهارشنبه!) ازش استفاده نکرده بودم. اما امروز ازش استفاده کردم و کلی بهم مزه داد!

جریان از این‌جا شروع شد که یکی از مهم‌ترین مواردی که من از ویندوز استفاده می‌کردم، خرید بلیط رفت یا برگشت بود، اون‌هم به دلیل این که سایت مربوطه برای این کار از خدمات بانک اقتصاد نوین استفاده می‌کنه که متاسفانه سایتش فقط توی IE کار می‌کنه (مثل خیلی دیگه از سایت‌های غیراستاندارد ایرانی!). (یه زمانی خیلی عجیب نبود که یه سایت فقط توی IE کار کنه و نمیشد خیلی هم غر زد، هر چند همون موقع هم لای هر کتاب آموزش برنامه‌نویسی وب رو باز می کردی نوشته بود که اصولا یه وب‌سایت باید حداقل روی ۲ مرورگر پراستفاده آزمایش بشه و کار کنه. اما الان دیگه این‌طور نیست. اولا استانداردها خیلی قوی‌تر و مهم تر شدن و ثانیا فایرفاکس خیلی فراگیر شده و دیگه نمیشه به راحتی ندیدش گرفت. در ضمن مرورگرهای دیگه مثل اپرا و Chrome هم هستند. الان دیگه واقعا میشه گفت که اگه یه سایت فقط توی IE کار کنه، میشه یه سایت داغون(از نظر کیفیت برنامه‌نویسی و طراحی) غیراستاندارد! مثل سایت کتابخونه‌ی امیرکبیر! سال پیش یه نامه الکترونیکی فرستادم بهشون که این سایتو درستش کنید، کلی بهش برخورد که سایت خوبیه! بعدم گفت داریم درستش میکنیم! الان ۱سال از اون قضیه میگذره، به جای درست کردنش لطف می‌کنن اگه توی فایرفاکس باشی میگن بیا IETab رو نصب کن!! مسخرست!)

خلاصه! تا حالا برای خرید مجبور بودم ریست کنم برم توی ویندوز، که واقعا اذیت میکنه مخصوصا وقتی مشغول کار باشی این‌طرف. سعی کردم راه‌های مختلفی برای حل این مشکل استفاده کنم، مثل نصب IE توی لینوکس (با کمک Wine) یا نصب یه ویندوز مجازی توی لینوکس. روش دوم مناسب نبود چون کلی جای اضافه میگیرفت فقط به خاطر IE! روش اول هم خوب جواب نداد روی این سایت. (اما مثلا تونستم با روش اول از سیستم گلستان دانشگاه صنعتی اصفهان که با ActiveX نوشته شده استفاده کنم! البته برای کسی :) )

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

امروز تصمیم گرفتم یه سری به سایت هر دو بانک بزنم و کد اصلی هر دو صفحه رو ذخیره کنم ببینم چرا مال اقتصاد نوین کار نمیکنه. قبلا در مورد یه افزودنی به اسم GreaseMonkey چیزایی خونده بودم و میدونستم که میشه براش اسکریپت‌هایی نوشت که تغییراتی توی صفحه‌ها بده. گفتم شاید بتونم با استفاده از این افزودنی تغییرات سایت بانک سامان رو توی صفحه‌ی بانک اقتصاد نوین بدم (در این لحظه فکر می‌کردم اسکریپتی که موقع زدن «تایید» اجرا میشه مشکل داره و تصمیم داشتم اسکریپت‌های دو صفحه رو مقایسه کنم). بعد از یکم جستجو دیدم که بله، میشه این کارو کرد!

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

کلی خوشحال شدم! تنها کاری که لازم بود بکنم این بود که موقع بار شدن صفحه‌ی بانک اقتصاد نوین، با استفاده از Grease Monkey اون عنصر input رو به صفحه اضافه کنم. یه اسکریپت کوچولو (جاوا اسکریپت) نوشتم و.... تمام! الان دیگه می‌تونم به‌راحتی با همون فایرفاکس و توی همون لینوکس خرید بلیطمو انجام بدم! نمی‌دونین چقدر ذوق کردم وقتی این اتفاق افتاد!! کلی بهم مزه داد! :)

حالا دارم به کارهای مختلفی که میشه با این افزودنی کرد فکر می‌کنم. با توجه به این که خیلی از سایت ها فقط به‌خاطر یه سری مشکلات جزئی (مثل همین مورد) توی فایرفاکس کار نمی کنن، میشه خیلی از اون‌ها رو با کمک GreaseMonkey و شاید User Agent Switcher (برای این که به سایت الکی بگیم من فایرفاکس نیستم، IE هستم اونم توی ویندوز!) اصلاح کرد. به جز این، یه سری شیرین کاری هم میشه کرد! مثلا این که سایت‌ها بهت سلام کنن یا مثلا عکستو نشون بدن! و البته یه عالمه اسکریپت آماده هم برای GreaseMonkey هست که بعضا کارهای خیلی جالبی میکنن. در واقع با کمک این افزودنی، میشه برنامه نویسی تحت وب سمت کلاینت انجام داد! شخصی کردن سایت‌ها اون طورکه دلت میخواد! جالبه (بعضی از مرورگرهای دیگه هم چیزی مشابه این دارن).

ببینم هنوز داری می‌خونی؟!! واقعا؟!! دستت درد نکنه! :)

۱۳۸۸ مرداد ۶, سه‌شنبه

لینوکس، فدورا، سمینار!

یادش بخیر! اون اوایل که لینوکسی شده بودم، با فرض این که اصولا همه‌ی کارهایی که در آینده وجود خواهد داشت ویندوزیه خیلی دنبال این بودم که چطور می‌تونم توی لینوکس برای ویندوز کار کنم. البته خودش کلی مزه داره! ولی نکته‌ی جالبش اینه که توی این ۳ سالی که نسبتا جدی کار می‌کنم به جز ۱ مورد بقیه‌ی کارهام مختص لینوکس بود و ویندوز اصلا توش مهم نبود! اون ۱ مورد هم یه برنامه‌ی ویندوزی بود که من با دیکتاتوری تمام تو لینوکس نوشتمش! البته برای ویندوزا... ولی بعدا یواش یواش فهمیدن چه کلاهی سرشون رفته (آخه اون‌جا هیچ کس با wxWidgets آشنا نبود و ترجیح میدادن من با MFC برنامه رو می‌نوشتم؛ کاری که البته من نمی‌کردم!). :)
الان هم مرتب آگهی استخدام می‌گردم که دنبال فرد «آشنا به لینوکس» یا «آشنا به برنامه‌نویسی لینوکس» می‌گردن. (البته یه سریشون می‌خوان که به ویندوز و لینوکس آشنا باشی). البته احتمالا کار تحت ویندوز خیلی بیشتر باشه، ولی چیزی که هست اینه که حداقل در این لحظه تعداد لینوکس کار به نسبت کار لینوکسی خیلی کمه. به‌خصوص توی یه زمینه‌ای مثل برنامه‌نویسی (چون نسبتا خیلیا لینوکسو برای شبکه یاد می‌گیرن). خلاصه الان وضع کاری بدک نیست :)

***

فدورا به درد کی می‌خوره؟!! یکی از چیزایی که چند وقت پیش پیدا کردم یه متن پیش‌نویس بود در مورد این که «کاربران هدف» فدورا چه کسایی هستن. نکته‌ی جالبی که بود این بود که هدف اصلی فدورا «کاربران معمولی(رومیزی)» نیستن (یادم نیست دقیقا کیا بودن!) اما در هر صورت، میتونم بگم با توجه به این قضیه فدورا واقعا به اهدافی که داره به مقدار نسبتا خوبی رسیده. البته دسته‌ی دوم کاربران هدف فدورا همین کاربران معمولی هستن، و توی این زمینه هم فدورا داره به جاهای خوبی می‌رسه (اخیرا رتبه‌ی فدورا توی distrowatch دوم شده، در حالی که مدت‌ها نزدیک ۴م بود. هر چند رتبه‌بندی این سایت به نظرم چیز خاصی به آدم نمیده، چون براساس تعداد کلیک‌هاییه که کاربرای این سایت روی اسم یه توزیع می‌کنن!).
بگذریم! چیزی که اصلش می‌خواستم بگم این بود که برای آشنایی با فدورا و خصوصیات اون بد نیست این صفحه رو یه نگاهی بکنید: http://fedoraproject.org/wiki/Overview
بهتون توی تصمیم‌گیری این که آیا فدورا به دردتون می‌خوره یا نه هم کمک می‌کنه.
در ضمن در حال حاضر به نظر میاد فدورا حدود ۱۶ملیون کاربر داره.

***

راستی من قراره به زودی (احتمالا ۲ هفته‌ی دیگه) یه سمینار توی گروه کاربران لینوکس اصفهان با عنوان «فارسی در لینوکس» داشته باشم. البته قرار بود سال پیش بذارم ولی چون رفتن تهران دیگه وقت نشد، به‌جاش با توجه به یه سری تغییرات جدید سمینار امسال کامل‌تره!
و البته احتمالا (فکر کنم عقلم کمه! ولی خب) یه کلاس مقدماتی لینوکس هم توی دانشگاه اصفهان قراره بذارم (نمیدونم کی باز سر یه سری رو شیره مالیده که بیان سر کلاس من!!) ؛)