لذت برنامه نویسی: بازکردن کتابخانه‌ها بصورت پویا با dlopen

اینم یه تجربه پراکنده دیگه!

اول از همه بگم که این پست ۱۰۰ امین پست وبلاگ من هست که در نزدیک به سه سال منتشر شده! اولایی که تصیمم به نوشتن گرفتم فکر نمی‌کردم اینقدر بتونم دوام بیارم که ۱۰۰ تا پست بنویسم اما به نظر میرسه نوشتم! پس خوشحالم!

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

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

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

 

		
 

همین!

برای مطالعهی بیشتر

معرفی یک کتاب خوب: شالوده‌های علوم کامپیوتر

اینم یه تجربه پراکنده دیگه!

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

بخشهای کتاب

این کتاب کلا ۷۸۰ صفحه است که خب یک کتاب عریض و طویل به حساب می‌یاد. فصلهای اون و موضوعاتش از این قرار هستن

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

همین!

QR Code

لذت برنامه نویسی: تولید QR Code در زبان C

اینم یه تجربه پراکنده دیگه!

همه ما با مفهوم QR Code کم و بیش آشنا هستیم. یک نوع بارکد دو بعدی هست که درون خودش اطلاعاتی رو مخفی می‌کنه. استانداردهای متفاوتی هم داره. نسخه‌های متفاوتی هم داره. همچنین افزونگی اطلاعات هم توش در نظر گرفته شده که میشه در صورت خراب شدن QR Code اون رو تا حدی پوشش داد.

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

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

راه اندازی QR Code در فدورا و یک نمونه کد ساده

تنهای کاری که توی فدورا باید بکنید اینه که

 

		
 

رو نصب کنید.
نمونه کد استفاده از این کتابخانه هم ساده است:

 

		
 

همین!
پ.ن: نتیجه کار هم در عکس این پست قابل مشاهده است.

Gogs Logo

چرا لینوکس را دوست دارم: داشتن github در خانه با Gogs

اینم یه تجربه پراکنده دیگه!

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

یکی از بامزه ترین اونها نرم‌افزاری به نام Gogs هست که سعی کرده با استفاده از ویژگی‌های golang یک راه‌حل برای میزبانی git شبیه به github ایجاد کنه. نصب کردن این راه‌حل به شدت ساده است چون کلا نصب پکیج‌های golang ساده است. اما بزرگترین مشکلی که برای ما وجود داره تحریم از سمت گوگل هست که شما باید به نحوی اون رو برطرف کنید. این سرویس اونقدر قابل اطمینان بوده که آدم‌هایی پیدا شدن و با تغییر اندکی از اون به عنوان یک کپی github استفاده می‌کنند. اسم اون سایت notabug هست و پیشنهاد می‌کنم ببینیدش.

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

همین!

بروزرسانی: با توجه به اینکه فرود عزیر تجربه contribute کردن به این پروژه رو داشتن، گفتن که نحوه اداره این پروژه خیلی بده و به همین خاطر یک fork از این برنامه به اسم gitea بوجود اومده که انگار بهتر مدیریت میشه. و اینکه کلا توجه داشته باشید که تخم مرغ‌هاتون رو توی یک سبد نگذارید!