پیکربندی آپاچی تامکت برای SSL offloading

SSL offloading در واقع به معنای محول کردن وظیفه رمزنگاری/رمزگشایی به یک لایه خاص می‌باشد تا Application Server ما وارد این حیطه نشود. پیکربندی مناسب تامکت برای استفاده از این موضوع به شرح زیر است: SSL offloader باید به تمام request های ارسالی هدر X-FORWARDED-PROTO : https بیفزاید. همچنین باید در تنظیمات server.xml  تامکت در داخل تگ Host، تنظیم زیر اضافه گردد (port مورد نظر را با توجه به محیط خود تغییر دهید) :

<Valve

className=“org.apache.catalina.valves.RemoteIpValve”

internalProxies=“.*”

protocolHeader=“X-Forwarded-Proto”

httpsServerPort=“443” />

نحوه کارکرد try-catch-finally در جاوا

در این پست به بررسی نحوه کارکرد try-catch-finally در جاوا می‌پردازیم.

زمانی یک قطعه کد را داخل بلوک try قرار می‌دهیم که امکان دهیم آن قطعه کد ممکن است Exception به بیرون پرتاب کند.

اگر خطا رخ دهد اجرای برنامه‌ از خطی که در آن خطا رخ داده به اولین خط درون catch منتقل می‌شود.

مثال برای زمانی که خطا رخ می‌دهد.

همان طور که از خروجی بر می‌آید هنگامی که تقسیم بر صفر رخ می‌دهد اجرا کد داخل try متوقف می‌شود و به اولین خط داخل catch منتقل می‌شود.

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

اگر Exception رخ دهد بعد از اجرای catch اگر return کنیم فقط کد داخل finally اجرا می‌شود و بعد از آن هیچ کد دیگری اجرا نمی‌شود . با ذکر مثالی این مفهوم را توضیح می‌دهیم.

 

 

 

Angularjs: درس‌هایی که آموخته شد – بخش دوم

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

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

برای پیکربندی مسیر باید در تابع config از routeProvider$ استفاده کرد که نمونه آن در زیر آورده شده است.

 که when دو آرگومان دریافت می‌کند که اولی مسیر است و دومی یک شی است که خود دو پارامتر دارد که اولی کنترلر است و دومی نام فایل html ای است که به فایل index.html تزریق می‌شود. در انتها می‌توانیم از otherwise استفاده کنیم که در صورتی که مسیر با هیچ یک از مسیرهای نوشته‌شده تطابق پیدا نکرد فراخوانی می‌شود. برای اینکه مشخص کنیم عمل تزریق در کجای فایل اصلی انجام شود باید از ng-view استفاده کنیم.

 

تبدیل متن فارسی به تصویر در php

برای تبدیل متن به عکس در php از تابع imagettftext استفاده می‌شود. این تابع با متون فارسی مشکل دارد و اگر یک متن فارسی به آن بدهید عکسی مانند عکس زیر را مشاهده خواهید کرد:

 

 

text2image

 

برای تصحیح این مشکل می‌توان از راه‌های زیر اقدام نمود:

1- نصب افزونه fribidi که از افزونه‌های PECL است در آدرس http://pecl.php.net/package/fribidi.

2- استفاده از پروژه‌ای که به این منظور نوشته شده است در آدرس https://github.com/omid/Persian-Log2Vis.

نتیجه تبدیل بعد از استفاده از راه‌حل دوم

text2image (1)

 

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

که پارامترهای زیر را به عنوان ورودی دریافت می کند

رنگ (color)

متن (text)

سایز فونت (font_size)

خانواده فونت (font_family)

زاویه متن (text_angle)

پروژه به صورت کامل ضمیمه شده است.

مقدار دهنده‌های اولیه استاتیک و غیر استاتیک در جاوا

در این پست به بررسی چگونگی مقداردهی متغیرهای استاتیک و غیر استاتیک در جاوا می‌پردازیم. در جاوا برای مقداردهی متغیرهای استاتیک از مقداردهنده‌های استاتیک و برای مقداردهی متغیرهای نمونه از مقداردهنده‌های غیر استاتیک استفاده می‌شود.  نحوه فراخوانی این متغیرها در مثال زیر توضیح داده شده است. مقداردهنده‌های اولیه داخل بلوک {} قرار می‌گیرند که در مورد مقداردهنده‌های استاتیک کلمه static قبل از بلوک قرار می‌گیرد. اگر چندین مقداردهنده استاتیک داشته باشیم ترتیب فراخوانی آن‌ها از بالا به پایین است.

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

 

Angularjs: درس‌هایی که آموخته شد – بخش اول

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

Angularjs یک فریمورک جاوااسکریپتی مبتنی بر الگوی Model-View-Controller هست که توسعه اون از سال 2009 آغاز شده و هم‌اکنون آخرین نسخه پایدار اون 1.2.16 هست که از طریق وب‌گاه اون و یا Github پروژه قابل دسترسی هست.

یکی از ویژگی‌هایی خوبی که در این فریم‌ورک وجود Data-Binding هست که قصدم در این بخش پیاده‌سازی یه پروژه ساده است که این قابلیت مفید رو نشون بده.

بعد از دانلود نمودن فریم‌ورک و قرار دادن اون در پوشه پروژه باید یک Module تعریف کنیم.

عمل تعریف کردن ماژول توسط تابع فراخوانی‌شده صورت می‌گیرد که سه پارامتر به عنوان ورودی دریافت می‌کند:

  1. نام ماژول
  2. لیستی که از ماژول‌هایی که این ماژول به آن‌ها نیاز دارد.
  3. configFn برای پیکربندی ماژول که عملکرد آن مانند فراخوانی متد config است.

بعد از تعریف ماژول برای استفاده از آن در فایل html از ng-app استفاده می‌کنیم.

برای ارتباط بین View و مدل از scope$ استفاده می‌کنیم که برای استفاده از آن باید آن را به کنترل‌گر خود تزریق کنیم

 برای نمایش متغیرهای مربوط به scope$ در واسط می‌توانیم از ng-bind استفاده کنیم و به عنوان جایگزین آن میتوانیم {{varibale_name}} را به کار گیریم.

در انتها به تفاوت بین ng-model و ng-bind می‎پردازیم.

ng-bind: یک طرفه (از scope$ به view )

ng-bind: دو طرفه (از scope$ به view و از view به scope$) – تغییرات هر طرف به طور دینامیک در سمت دیگر قابل مشاهده هستند.

بیشتر بخوانید

Angularjs: درس‌هایی که آموخته شد – بخش دوم

بررسی virtual & non-virtual method در جاوا

در مباحث مربوط به برنامه‌نویسی شی‌گرا توابع virtual به توابعی  اطلاق می‌شود که رفتار آن‌ها‌ می‌تواند در طی عمل ارث‌بری توسط فرزندان تغییر کند. بنابراین توابع non-virtual توابعی هستند که قابل override کردن نیستند.

در جاوا توابع غیر استاتیک به طور پیش‌فرض virtual هستند و برای non-virtual نمودن آن تابع باید از عبارت final به همراه نام تابع استفاده نمود. برای روشن موضوع مثالی می‌زنیم(نویسنده از این موضوع که فراخوانی متدهای استاتیک به این شکل مناسب نمی‌‌باشد مطلع است و تنها برای روشن‌تر شدن موضوع این مثال آورده شده‌است):

از آن جا که متدهای استاتیک متعلق به کلاس‌ها هستند و نه اشیا، نمی‌توان آن‌ها را override نمود. متدهای با سطح دسترسی private در جاوا به طور ضمنی final هستند بنابراین نمی‌توان آن‌ها را override نمود. (این متدها توسط فرزندان قابل مشاهده نیستند )

نکته بعدی که در مورد override کردن متدها باید به آن اشاره نمود تغییر سطح دسترسی متدها است.  به طور کلی کاهش سطح دسترسی متدها در هنگام override کردن با اصول شی‌گرایی در تناقض است . برای مشخص‌شدن موضوع مثال زیر را در نظر بگیرید:

 هر شی B در واقع یک شی A است . بنابراین باید تمامی قابلیت‌های A را فراهم کند ولی در مثال بالا تابع print به دلیل سطح دسترسی protected قابل دسترسی نیست که خلاف اصول شی‌گرایی به شمار می‌رود. قطعه کد بالا خطای زیر را به دنبال خواهد داشت:

اما می‌توان سطح دسترسی را افزایش داد:

در پست‌های بعدی به بررسی همین موارد در زبان‌های سی‌شارپ و c++ خواهیم پرداخت

دنیس ریچی، پیشگامی در عصر دیجیتال

با خودم فکر کردم که هیچ نوشته‌ای بهتر از این برای شروع وبلاگ‌ام وجود نداره!(مختصر و مفید در توصیف شخصی که با نبوغش زندگی ما رو بهبود داد)