برچسب: سیستمی

چیدمان خودکار کدها در Notepad++

تصور میکنم بتوان ادعا کرد که غیر ممکن است یک برنامه نویس نسبتا با تجربه، با برنامه Npp یا Notepad++ آشنا نباشد. این برنامه که تقریبا از سال 2010 به عنوان یک پروژه منبع باز ارائه شده، در واقع یک text editor و syntax highlighter سریع و ساده است.

npp

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

  • فرمت و رنگ آمیزی زیبا و مناسب کدها برای خوانش بهتر و همینطور امکانات مناسب جهت چاپ آنها.
  • محیط multitab و امکان کار همزمان با فایلهای مختلف.
  • پشتیبانی عالی از عبارات باقاعده (RegEx) در Search and Replace.
  • امکان توسعه برنامه با استفاده از plugin های کاربردی.

یکی از قابلیتهایی که تا مدتها فقدان آن در این ادیتور محبوب احساس میشد، این بود که علاوه بر رنگ آمیزی و syntax highlight امکان format و کردن auto indentation هم موجود باشد.

در حال حاضر این فابلیت با استفاده از پلاگین NppAstyle برای زبانهای خانواده Java فراهم شده است. جهت استفاده از این پلاگین به آدرس پروژه آن https://code.google.com/p/nppastyle مراجعه نمایید.


چگونه از توابع مخرب یا destructor در Java استفاده کنیم

توابع مخرب یا destructor کاربرد زیادی در مدیریت حافظه برنامه های نوشته شده در C++ دارند. عموما در مورد کلاسهای طراحی شده، با استفاده از این متد به آزاد سازی حافظه پرداخته میشود.

javalogo

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

برای انجام این کار در کلاس مربوطه یک تابع به نام finalize پیاده سازی گشته و سیستم Garbage Collector در زمان اتمام استفاده از کلاس و آزاد سازی تمام ارجاعات آن، تابه finalize را فراخوانی مینماید.

از آنجا که زمان عملکرد Grabage Collector نا مشخص است، با استفاده از دستورات gc و runFinalization میتوان ماشین مجازی را ملزم به آزاد سازی حافظه (جمع آوری زباله ها از حافظه) نمود.

مثال زیر نحوه انجام این کار را نشان میدهد:

import java.util.ArrayList;

public class Samples  {
    public static void main(String[] args){
        long mem = Runtime.getRuntime().freeMemory();

        SampleClass c1 = new SampleClass();
        SampleClass c2 = new SampleClass();
        SampleClass c3 = new SampleClass();

        System.out.println(String.format("Used memory: %d KB", (mem - Runtime.getRuntime().freeMemory())/1024));
        mem = Runtime.getRuntime().freeMemory();

        c1 = c2 = c3 = null;

        System.gc();
        System.runFinalization();

        System.out.println(String.format("Released memory: %d KB", (Runtime.getRuntime().freeMemory() - mem)/1024));
    }
}

class SampleClass {
    private ArrayList<Double> _obj;

    public SampleClass() {
        _obj = new ArrayList<Double>();
        for (int i=0; i<1000000; i++)
            _obj.add(Math.random());

        System.out.println("Created");
    }

    public void finalize() {
        _obj.clear();
        _obj = null;
        System.out.println("Finalized");
    }

}

خروجی احتمالی برنامه به این صورت است. بدیهیست که سیستم Garbage Collector هیچ تضمینی جهت مصرف یا آزاد سازی دقیق میزان حافظه ندارد.

Created
Created
Created
Used memory: 62354 KB
Finalized
Finalized
Finalized
Released memory: 11123 KB

چگونه از انبوه ایمیل‌های Gmail لیست مخاطبین ایجاد کنیم

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

gmail-account

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

به عنوان مثال یکی از امکاناتی که سرویس Gmail باید داشته باشد، پردازش گروهی ایمیلهای دریافت شده برای اعمالی مانند Forward یا ذخیره سازی است.

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

در حال حاضر امکانات بخش Contacts گوگل به صورت موردی و یکی یکی قابل انجام است. یعنی تنها امکان اضافه کردن یک پست الکترونیک به صورت منفرد به عنوان مخاطب یا به یک گروه مخاطبین (Contact Groups) وجود دارد.
(ادامه مطلب…)


13 نکته در رابطه با افزایش امنیت وردپرس

سیستم مدیریت محتوای وردپرس توسط دو برنامه نویس به نام‌های Matt Mullenweg و Mike Little در سال 2003 و بر اساس پروژه open source دیگری به نام b2 طراحی شده است.
هر چند که از b2 پروژه موفق دیگری به نام b2evolution هم طراحی شده که اتفاقا CMS قدرتمندی هم محسوب می‌شود، اما موفقیتی که وردپرس بدست آورده است، اگر تکرار شدنی باشد، رسیدن به آن تا حد زیادی دشوار خواهد بود.

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

wordpress

به دلیل افزایش محبوبیت و متعاقبا استفاده بیشتر از این CMS، روند کشف مشکلات و نقاط ضعف امنیتی آن هم خیلی بیشتر از گذشته شده است، به طوری که تعداد نقاط ضعف امنیتی کشف شده آن در دو سال 2013 و 2014 بیش از 130 مورد بوده است. به همین دلیل رعایت نکات امنیتی در نصب و راه‌اندازی این سیستم مدیریت محتوا از اهمیت بسزایی برخوردار است.

در ادامه به ذکر 13 نکته امنیتی در وردپرس، که به دو گروه ساده و پیشرفته تقسیم شده‌اند می‌پردازیم. مطمئنا با رعایت و اعمال نکات ذکر شده، امنیت وبسایت یا وبلاگ خود را بیش از 2 برابر افزایش خواهید داد.

(ادامه مطلب…)


بهینه‌سازی در AS3: پاسخدهی به رویدادها

اصولاً، AS3.0 یکی از زبان‌هایی است که تفاوت زیادی میان برنامه‌نویسان عادی و با تجربه، قائل می‌شود. چگونه؟ با کاهش کارایی!… چرا؟ از پدرش java به ارث برده است!

به دلیل شباهت زیادی که در ساختار این زبان با java وجود دارد، برنامه‌نویسان AS3.0 به مرور زمان، تمایل زیادی به برنامه‌نویسی ساخت یافته و لایه‌بندی شده پیدا می‌کنند. شئ‌گرایی بی حد و مرز باعث می‌شود که مفاهیم مخفی‌سازی (بخوانید Encapsulation) در تمام اجزای برنامه به وضوح دیده شود. تعریف انواع و اقسام Interface ها، کلاس‌های ایستا و پویا، ارث‌بری و اشیاء متنوع، به خودی خود، سبک برنامه‌نویسیان AS3.0 را به طراحی لایه‌های مستقل نزدیک می‌کند.

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

استفاده زیاد از الگوهای طراحی مانند Singleton برای بهینه‌سازی مصرف حافظه (هرچند که هدف اصلی آن نبوده است) و Proxy یا Facade جهت ساده‌سازی روابط بین کلاس‌ها و اشیاء در محیط‌های ManagedCode مانند Flash، گویای این مسئله است که گاهی، پس از طراحی منطقی کلاس‌ها و سازماندهی لایه‌ها، به میزان کمی از بی‌نظمی با هدف افزایش کارایی نیازمندیم.

از این پس، سعی می‌کنم در سلسله پست‌های بهینه‌سازی در کارایی، به طرح مواردی مانند نکات برنامه‌نویسی بهینه و حتی الگوهای طراحی سودمند در این رابطه بپردازم.

flash_logo

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

در زبان AS3.0، قدرت شئ‌گرایی java به همراه قدرت پردازش بصری محصولات شرکت Adobe در یک جا جمع می‌شوند.
نتیجه این می‌شود که کلیه ترسیمات و اشکال گرافیکی را به سادگی، در قالب اشیاء تعاملی (Interactive Objects) تعریف نموده و بارها از آنها استفاده می‌کنیم. تعریف ساده انواع کامپاننت‌های گرافیکی داده‌ای مانند List، Grid و Combo همگی از این دست هستند.

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

(ادامه مطلب…)



  • آرشیو:

  • .
    Copyright (c) 2010 www.mshams.ir