تبلیغات در اینترنت

تبلیغات در اینترنتگیفت کارت گوگل پلی
نمایش نتایج: از 1 به 1 از 1

موضوع: در خواشت آموزش کدنویسی (هرکی سرش درد میکنه بیاد)

  1. Top | #1
    کاربر سایت

    تاریخ عضویت
    Feb 2011
    ورژن ویبولتین
    4.2.0
    سن
    32
    نوشته ها
    179
    مورد پسند
    82 بار
    نوشته های وبلاگ
    2
    اطلاعات
    Windows 7/Server 2008 R2 Firefox 18.0
    میزان امتیاز
    24

    پیش فرض Regex، ابزاری کاربردی در ویرایشگر‌های متنی

    سلام
    من میخوام آموزش کد نویسیGreasemonkey 1.7 Release میخواستم

    البته انگلیسی شو یافتم ولی سر در نیاوردم . میشه یکه از دوستای باحال وی بی ایران یه حالی به ما بده >؟؟؟

    آدرس آموزش اینه Metadata Block - GreaseSpot Wiki

    این متن برای کسانی نوشته شده که با برنامه‌نویسی آشنا هستند و دوست دارن وب را آن‌طور که می‌خواهند ببینند.
    شاید برای شما هم پیش اومده باشه که همیشه از یک سایت سرویس بگیرین یا خیلی بهش سر می‌زنین و دوست دارین امکانی که شما می‌خواین رو داشته باشه.
    با یه مثال جلو برم: من از سایت mediafiredowns.com همیشه فیلم‌های خوبی دانلود می‌کنم. ولی یه چیز توی این سایت من رو آزار می‌ده و اون اینه که وقتی روی لینک دانلود کلیک می‌کنم، من رو می‌فرسته به یه قسمت که راهنمایی می‌کنه که چطور دانلود کنم و بعد من رو می‌فرسته به قسمت تبلیغات و بعد تازه می‌رسم به Media Fire و باید از اونجا دانلود کنم.
    خیلی خوب می‌شد اگر این مراحل تکراری و خسته کننده کمتر بودن. از اونجا که به قول جادی من اولین نفری نیستم که به این مشکل بر خوردم، یه سرچ کوچیک من رو به یه اسکریپت خوب برای Grease Monkey رسوند که صفحه‌ی تبلیغات رو بایپس می‌کرد. ولی خب من هنوز با اون صفحه راهنمای دانلود مشکل داشتم و توی یوزر اسکریپت‌های Grease Monkey هم چیزی پیدا نکردم. این شد که خودم یکی نوشتم تا نفر بعدی که دنبال یه روش برای اصلاح این وضع می‌ره، اولین نفر نباشه.
    خب بد نیست روش کار رو توضیح بدم، شاید شما هم اسکریپت‌هایی نوشتین و در اختیار دیگران گذاشتین.

    با این صفحه شروع می‌کنیم.
    فیلم ۴ قسمت شده و بدیهیه که هر لینک باید آدرس مرحله‌ی بعد رو داشته باشه. آدرس قسمت ۱ اینطوره:
    کد PHP:
    http://5ed2208c.linkbucks.com/url/http://mediafiredowns.info/download.php?link=aHR0cDovL3EuZ3Mvc1Ntag== 
    می‌بینیم که توی آدرس یه آدرس دیگه هست:
    کد PHP:
    http://mediafiredowns.info/download.php?link=aHR0cDovL3EuZ3Mvc1Ntag== 
    ولی باز این همون آدرسی نیست که ما دنبالش هستیم و دقیقن آدرس همون صفحه‌ی راهنمای دانلوده، ولی باید این آدرس یه طوری لینک نهایی یا یه روش برای رسیدن به اون رو توی خودش داشته باشه که به نظر میاد اون پارامتریه که ارسال می‌کنه:

    کد PHP:
    aHR0cDovL3EuZ3Mvc1Ntag== 
    خب تجربه بهم می‌گه این روش کد گذاری رو می‌شناسم و اون دوتا مساوی انتها، نظر من رو که این یه کد Base64 هست رو پر رنگ‌تر می‌کنه. پس یک بار امتحان می‌کنم. ترمینال لینوکس رو باز می‌کنم و می‌نویسم:
    کد PHP:
    $ echo "aHR0cDovL3EuZ3Mvc1Ntag==" base64 -d  http://q.gs/sSmj 
    پس به نظر میاد حدس من درسته و این لینک صفحه‌ی تبلیغاته که اون اسکریپت برای من بای‌پس می‌کرد.
    پس روش کار معلوم شد. من باید برنامه‌ای بنویسم که لینک‌های صفحه رو بگرده و هرکدوم از این لینک‌ها به این شکل بودن رو دی‌کد کنه و جایگزین لینک اصلی کنه. ولی خب من که صاحب Mediafiredowns نیستم! اینجاست که به سراغ Grease Monkey می‌رم و یه اسکریپت برای اون می‌نویسم.
    گریس‌مانکی برای من اون اسکریپت رو روی آدرس‌هایی که من بهش می‌دم، اجرا می‌کنه پس چی از این بهتر.
    تو Firefox از منوی Tools قسمت Greasemonkey گزینه New User Script رو انتخاب می‌کنم و نام و توضیح و چیزای دیگه رو هم پر می‌کنم.
    تو قسمت include می‌نویسم:
    کد PHP:
    http://*mediafiredowns.com/* 
    ویرایشگر متن باز می‌شه. اولین کار اینه که توضیحاتی رو بالای اون اضافه کنم.

    کد PHP:
    // ==UserScript== // @name           Mediafiredowns Links Changer // @namespace      http://saarblog.wordpress.com //  [MENTION=18514]des[/MENTION]cription    Change base64ed links in mediafiredowns.com to simple link. I recommend you to use iHatePaidLinks (greasemonkey user script #105301) beside this script. // @author         Saar <saarblog [at] gmail [dot] com , identi.ca: @saar> // @version        0.1 //  [MENTION=10520]LIC[/MENTION]ense        Gnu General Public License Version 3 // @run-at         document-end // @include        [url]http://*mediafiredowns.com/*[/url] // ==/UserScript==  /*     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by     the Free Software Foundation, either version 3 of the License, or     (at your option) any later version.      This program is distributed in the hope that it will be useful,     but WITHOUT ANY WARRANTY; without even the implied warranty of     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the     GNU General Public License for more details.      You should have received a copy of the GNU General Public License     along with this program.  If not, see . */ 
    فک می‌کنم معلومه که این توضیحال چی هستن. این رو هم اضافه کنم که می‌شه چندین قسمت include داشت. و اون run-at مشخص می‌کنه که بعد از کامل شدن document (و نه load شدن!) این اسکریپت اجرا بشه.
    قدم بعدی اینه که تمام لینک‌ها رو پیدا کنیم:
    کد PHP:
    var allLinksthisLinkallLinks document.getElementsByTagName('a'); 


    و این که چک کنیم که آیا به همون سبکی که ما فکر می‌کردیم هست یا نه. چه چیز بهتر از عبارات با قاعده؟
    کد PHP:
    var findLinkRegexp = /.*http://mediafiredowns.[^/]*/download.php?link=(.*)/g; for (var 0allLinks.lengthi++) {     if (allLinks[i].href && allLinks[i].href.match(findLinkRegexp))         thisLink allLinks[i];     else         continue; } 



    در نهایت باید قسمت کد شده رو پیدا کنیم و اون رو دی‌کد کنیم. خب از اونجا که من اولین نفری نیستم که به دی‌کد کردن base64 تو زبون جاوا اسکریپت نیاز دارم، پس گوگل می‌کنم و به این می‌رسم: http://ntt.cc/2008/01/19/base64-enco...avascript.html
    از همین تابع استفاده می‌کنم:
    کد PHP:
    var match findLinkRegexp.exec(thisLink.href); if (match != null) {     thisLink.href decode64(match[1]);     thisLink.style.color "red"; } 



    برای این که متوجه بشم لینک اصلاح شده، رنگ اون رو هم قرمز کردم. کار تمومه و کد رو برای استفاده‌ی دیگران منتشر می‌کنم. نسخه‌ی نهایی هم به این شکله:
    کد PHP:
    // ==UserScript== // @name           Mediafiredowns Links Changer // @namespace      http://saarblog.wordpress.com //  [MENTION=18514]des[/MENTION]cription    Change base64ed links in mediafiredowns.com to simple link.  I recommend you to use iHatePaidLinks (greasemonkey user script #105301) beside this script. // @author         Saar  // @version        0.1 //  [MENTION=10520]LIC[/MENTION]ense        Gnu General Public License Version 3 // @run-at         document-end // @include        [url]http://*mediafiredowns.com/*[/url] // ==/UserScript==  /*  This program is free software: you can redistribute it and/or modify  it under the terms of the GNU General Public License as published by  the Free Software Foundation, either version 3 of the License, or  (at your option) any later version.   This program is distributed in the hope that it will be useful,  but WITHOUT ANY WARRANTY; without even the implied warranty of  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  GNU General Public License for more details.   You should have received a copy of the GNU General Public License  along with this program.  If not, see .  */    //decode64 function from [url]http://ntt.cc/2008/01/19/base64-encoder-decoder-with-javascript.html[/url] var keyStr = "ABCDEFGHIJKLMNOP" +     "QRSTUVWXYZabcdef" +     "ghijklmnopqrstuv" +     "wxyz0123456789+/" +     "=";  function decode64(input) {     var output = "";     var chr1, chr2, chr3 = "";     var enc1, enc2, enc3, enc4 = "";     var i = 0;      // remove all characters that are not A-Z, a-z, 0-9, +, /, or =     var base64test = /[^A-Za-z0-9\+\/\=]/g;     if (base64test.exec(input)) {         alert("There were invalid base64 characters in the input text.\n" +             "Valid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\n" +             "Expect errors in decoding.");     }     input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");      do {         enc1 = keyStr.indexOf(input.charAt(i++));         enc2 = keyStr.indexOf(input.charAt(i++));         enc3 = keyStr.indexOf(input.charAt(i++));         enc4 = keyStr.indexOf(input.charAt(i++));          chr1 = (enc1 <> 4);         chr2 = ((enc2 & 15) <> 2);         chr3 = ((enc3 & 3) << 6) | enc4;          output = output + String.fromCharCode(chr1);          if (enc3 != 64) {             output = output + String.fromCharCode(chr2);         }         if (enc4 != 64) {             output = output + String.fromCharCode(chr3);         }          chr1 = chr2 = chr3 = "";         enc1 = enc2 = enc3 = enc4 = "";      } while (i < input.length);      return unescape(output); }  var allLinks, thisLink; allLinks = document.getElementsByTagName('a'); var findLinkRegexp = /.*http:\/\/mediafiredowns\.[^\/]*\/download\.php\?link=(.*)/g; for (var i = 0; i < allLinks.length; i++) {     if (allLinks[i].href && allLinks[i].href.match(findLinkRegexp))         thisLink = allLinks[i];     else         continue;     var match = findLinkRegexp.exec(thisLink.href);     if (match != null) {         thisLink.href = decode64(match[1]);         thisLink.style.color = "red";     } } 
    در انتها هم بگم که اگر متوجه نشدید که چطور قسمت کد شده از لینک رو بدست آوردم، این مطلب می‌تونه بهتون کمک کنه: Regex، ابزاری کاربردی در ویرایشگر‌های متنی

    منبع

    سلام
    من میخوام آموزش کد نویسیGreasemonkey 1.7 Release میخواستم

    البته انگلیسی شو یافتم ولی سر در نیاوردم . میشه یکه از دوستای باحال وی بی ایران یه حالی به ما بده >؟؟؟

    آدرس آموزش اینه Metadata Block - GreaseSpot Wiki

    این متن برای کسانی نوشته شده که با برنامه‌نویسی آشنا هستند و دوست دارن وب را آن‌طور که می‌خواهند ببینند.
    شاید برای شما هم پیش اومده باشه که همیشه از یک سایت سرویس بگیرین یا خیلی بهش سر می‌زنین و دوست دارین امکانی که شما می‌خواین رو داشته باشه.
    با یه مثال جلو برم: من از سایت mediafiredowns.com همیشه فیلم‌های خوبی دانلود می‌کنم. ولی یه چیز توی این سایت من رو آزار می‌ده و اون اینه که وقتی روی لینک دانلود کلیک می‌کنم، من رو می‌فرسته به یه قسمت که راهنمایی می‌کنه که چطور دانلود کنم و بعد من رو می‌فرسته به قسمت تبلیغات و بعد تازه می‌رسم به Media Fire و باید از اونجا دانلود کنم.
    خیلی خوب می‌شد اگر این مراحل تکراری و خسته کننده کمتر بودن. از اونجا که به قول جادی من اولین نفری نیستم که به این مشکل بر خوردم، یه سرچ کوچیک من رو به یه اسکریپت خوب برای Grease Monkey رسوند که صفحه‌ی تبلیغات رو بایپس می‌کرد. ولی خب من هنوز با اون صفحه راهنمای دانلود مشکل داشتم و توی یوزر اسکریپت‌های Grease Monkey هم چیزی پیدا نکردم. این شد که خودم یکی نوشتم تا نفر بعدی که دنبال یه روش برای اصلاح این وضع می‌ره، اولین نفر نباشه.
    خب بد نیست روش کار رو توضیح بدم، شاید شما هم اسکریپت‌هایی نوشتین و در اختیار دیگران گذاشتین.

    با این صفحه شروع می‌کنیم.
    فیلم ۴ قسمت شده و بدیهیه که هر لینک باید آدرس مرحله‌ی بعد رو داشته باشه. آدرس قسمت ۱ اینطوره:
    کد PHP:
    http://5ed2208c.linkbucks.com/url/http://mediafiredowns.info/download.php?link=aHR0cDovL3EuZ3Mvc1Ntag== 
    می‌بینیم که توی آدرس یه آدرس دیگه هست:
    کد PHP:
    http://mediafiredowns.info/download.php?link=aHR0cDovL3EuZ3Mvc1Ntag== 
    ولی باز این همون آدرسی نیست که ما دنبالش هستیم و دقیقن آدرس همون صفحه‌ی راهنمای دانلوده، ولی باید این آدرس یه طوری لینک نهایی یا یه روش برای رسیدن به اون رو توی خودش داشته باشه که به نظر میاد اون پارامتریه که ارسال می‌کنه:

    کد PHP:
    aHR0cDovL3EuZ3Mvc1Ntag== 
    خب تجربه بهم می‌گه این روش کد گذاری رو می‌شناسم و اون دوتا مساوی انتها، نظر من رو که این یه کد Base64 هست رو پر رنگ‌تر می‌کنه. پس یک بار امتحان می‌کنم. ترمینال لینوکس رو باز می‌کنم و می‌نویسم:
    کد PHP:
    $ echo "aHR0cDovL3EuZ3Mvc1Ntag==" base64 -d  http://q.gs/sSmj 
    پس به نظر میاد حدس من درسته و این لینک صفحه‌ی تبلیغاته که اون اسکریپت برای من بای‌پس می‌کرد.
    پس روش کار معلوم شد. من باید برنامه‌ای بنویسم که لینک‌های صفحه رو بگرده و هرکدوم از این لینک‌ها به این شکل بودن رو دی‌کد کنه و جایگزین لینک اصلی کنه. ولی خب من که صاحب Mediafiredowns نیستم! اینجاست که به سراغ Grease Monkey می‌رم و یه اسکریپت برای اون می‌نویسم.
    گریس‌مانکی برای من اون اسکریپت رو روی آدرس‌هایی که من بهش می‌دم، اجرا می‌کنه پس چی از این بهتر.
    تو Firefox از منوی Tools قسمت Greasemonkey گزینه New User Script رو انتخاب می‌کنم و نام و توضیح و چیزای دیگه رو هم پر می‌کنم.
    تو قسمت include می‌نویسم:
    کد PHP:
    http://*mediafiredowns.com/* 
    ویرایشگر متن باز می‌شه. اولین کار اینه که توضیحاتی رو بالای اون اضافه کنم.

    کد PHP:
    // ==UserScript== // @name           Mediafiredowns Links Changer // @namespace      http://saarblog.wordpress.com //  [MENTION=18514]des[/MENTION]cription    Change base64ed links in mediafiredowns.com to simple link. I recommend you to use iHatePaidLinks (greasemonkey user script #105301) beside this script. // @author         Saar <saarblog [at] gmail [dot] com , identi.ca: @saar> // @version        0.1 //  [MENTION=10520]LIC[/MENTION]ense        Gnu General Public License Version 3 // @run-at         document-end // @include        [url]http://*mediafiredowns.com/*[/url] // ==/UserScript==  /*     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by     the Free Software Foundation, either version 3 of the License, or     (at your option) any later version.      This program is distributed in the hope that it will be useful,     but WITHOUT ANY WARRANTY; without even the implied warranty of     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the     GNU General Public License for more details.      You should have received a copy of the GNU General Public License     along with this program.  If not, see . */ 
    فک می‌کنم معلومه که این توضیحال چی هستن. این رو هم اضافه کنم که می‌شه چندین قسمت include داشت. و اون run-at مشخص می‌کنه که بعد از کامل شدن document (و نه load شدن!) این اسکریپت اجرا بشه.
    قدم بعدی اینه که تمام لینک‌ها رو پیدا کنیم:
    کد PHP:
    var allLinksthisLinkallLinks document.getElementsByTagName('a'); 


    و این که چک کنیم که آیا به همون سبکی که ما فکر می‌کردیم هست یا نه. چه چیز بهتر از عبارات با قاعده؟
    کد PHP:
    var findLinkRegexp = /.*http://mediafiredowns.[^/]*/download.php?link=(.*)/g; for (var 0allLinks.lengthi++) {     if (allLinks[i].href && allLinks[i].href.match(findLinkRegexp))         thisLink allLinks[i];     else         continue; } 



    در نهایت باید قسمت کد شده رو پیدا کنیم و اون رو دی‌کد کنیم. خب از اونجا که من اولین نفری نیستم که به دی‌کد کردن base64 تو زبون جاوا اسکریپت نیاز دارم، پس گوگل می‌کنم و به این می‌رسم: http://ntt.cc/2008/01/19/base64-enco...avascript.html
    از همین تابع استفاده می‌کنم:
    کد PHP:
    var match findLinkRegexp.exec(thisLink.href); if (match != null) {     thisLink.href decode64(match[1]);     thisLink.style.color "red"; } 



    برای این که متوجه بشم لینک اصلاح شده، رنگ اون رو هم قرمز کردم. کار تمومه و کد رو برای استفاده‌ی دیگران منتشر می‌کنم. نسخه‌ی نهایی هم به این شکله:
    کد PHP:
    // ==UserScript== // @name           Mediafiredowns Links Changer // @namespace      http://saarblog.wordpress.com //  [MENTION=18514]des[/MENTION]cription    Change base64ed links in mediafiredowns.com to simple link.  I recommend you to use iHatePaidLinks (greasemonkey user script #105301) beside this script. // @author         Saar  // @version        0.1 //  [MENTION=10520]LIC[/MENTION]ense        Gnu General Public License Version 3 // @run-at         document-end // @include        [url]http://*mediafiredowns.com/*[/url] // ==/UserScript==  /*  This program is free software: you can redistribute it and/or modify  it under the terms of the GNU General Public License as published by  the Free Software Foundation, either version 3 of the License, or  (at your option) any later version.   This program is distributed in the hope that it will be useful,  but WITHOUT ANY WARRANTY; without even the implied warranty of  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  GNU General Public License for more details.   You should have received a copy of the GNU General Public License  along with this program.  If not, see .  */    //decode64 function from [url]http://ntt.cc/2008/01/19/base64-encoder-decoder-with-javascript.html[/url] var keyStr = "ABCDEFGHIJKLMNOP" +     "QRSTUVWXYZabcdef" +     "ghijklmnopqrstuv" +     "wxyz0123456789+/" +     "=";  function decode64(input) {     var output = "";     var chr1, chr2, chr3 = "";     var enc1, enc2, enc3, enc4 = "";     var i = 0;      // remove all characters that are not A-Z, a-z, 0-9, +, /, or =     var base64test = /[^A-Za-z0-9\+\/\=]/g;     if (base64test.exec(input)) {         alert("There were invalid base64 characters in the input text.\n" +             "Valid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\n" +             "Expect errors in decoding.");     }     input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");      do {         enc1 = keyStr.indexOf(input.charAt(i++));         enc2 = keyStr.indexOf(input.charAt(i++));         enc3 = keyStr.indexOf(input.charAt(i++));         enc4 = keyStr.indexOf(input.charAt(i++));          chr1 = (enc1 <> 4);         chr2 = ((enc2 & 15) <> 2);         chr3 = ((enc3 & 3) << 6) | enc4;          output = output + String.fromCharCode(chr1);          if (enc3 != 64) {             output = output + String.fromCharCode(chr2);         }         if (enc4 != 64) {             output = output + String.fromCharCode(chr3);         }          chr1 = chr2 = chr3 = "";         enc1 = enc2 = enc3 = enc4 = "";      } while (i < input.length);      return unescape(output); }  var allLinks, thisLink; allLinks = document.getElementsByTagName('a'); var findLinkRegexp = /.*http:\/\/mediafiredowns\.[^\/]*\/download\.php\?link=(.*)/g; for (var i = 0; i < allLinks.length; i++) {     if (allLinks[i].href && allLinks[i].href.match(findLinkRegexp))         thisLink = allLinks[i];     else         continue;     var match = findLinkRegexp.exec(thisLink.href);     if (match != null) {         thisLink.href = decode64(match[1]);         thisLink.style.color = "red";     } } 
    در انتها هم بگم که اگر متوجه نشدید که چطور قسمت کد شده از لینک رو بدست آوردم، این مطلب می‌تونه بهتون کمک کنه: Regex، ابزاری کاربردی در ویرایشگر‌های متنی

    منبع

    یکی از امکانات جالبی که ویرایشگر‌های متن پیشرفته دارن، جستجو برای «عبارات منظم» که خیلی به درد برنامه نویسی و کلن ویرایش متن می‌خوره. با این امکان می‌شه به جای جست و جو برای یک متن، یک الگو رو جست و جو کرد. بذارین با یک مثال نشون بدم بهتون. کد زیر رو (کد جاوا) ببینید (این کد فقط برای مثاله، از نظر منطقی ممکنه به درد نخوره):
    کد PHP:
    public class StatePropertiesPanel extends JPanel implements StateProperties {
      
            private 
    JComboBox statesComboBox;
            private 
    JComboBox zeroStateComboBox;
            private 
    JButton zeroStateColorButton;
            private 
    JComboBox oneStateComboBox;
            private 
    JButton oneStateColorButton;
            private 
    JTextField nameTextField;
            private 
    JCheckBox isFinalStateCheckBox;
            private 
    JButton addButton;
            private 
    JButton removeButton;
            private 
    JButton applyButton;
            private 
    Graph graph;
            private 
    JButton openButton;
            private 
    JButton saveButton;
            private 
    Action openAction;
            private 
    Action saveAction;
      

    خب می‌خوایم برای این class یک سازنده بسازیم که توی اون، این مقادیر رو هم مقدار دهی کنیم با پارامترهای متد سازنده، یعنی نتیجه‌ی خروجی باید این شکلی بشه:



    کد PHP:
    public class StatePropertiesPanel extends JPanel implements StateProperties {
      
            private 
    JComboBox statesComboBox;
            private 
    JComboBox zeroStateComboBox;
            private 
    JButton zeroStateColorButton;
            private 
    JComboBox oneStateComboBox;
            private 
    JButton oneStateColorButton;
            private 
    JTextField nameTextField;
            private 
    JCheckBox isFinalStateCheckBox;
            private 
    JButton addButton;
            private 
    JButton removeButton;
            private 
    JButton applyButton;
            private 
    Graph graph;
            private 
    JButton openButton;
            private 
    JButton saveButton;
            private 
    Action openAction;
            private 
    Action saveAction;
      
            public 
    StatePropertiesPanel(JComboBox statesComboBox,
                                    
    JComboBox zeroStateComboBox,
                                    
    JButton zeroStateColorButton,
                                    
    JComboBox oneStateComboBox
                                    
    JButton oneStateColorButton
                                    
    JTextField nameTextField
                                    
    JCheckBox isFinalStateCheckBox
                                    
    JButton addButton
                                    
    JButton removeButton
                                    
    JButton applyButton
                                    
    Graph graph
                                    
    JButton openButton
                                    
    JButton saveButton
                                    
    Action openAction
                                    
    Action saveAction) {
                    
    this.statesComboBox statesComboBox;
                    
    this.zeroStateComboBox zeroStateComboBox;
                    
    this.zeroStateColorButton zeroStateColorButton;
                    
    this.oneStateComboBox oneStateComboBox;
                    
    this.oneStateColorButton oneStateColorButton;
                    
    this.nameTextField nameTextField;
                    
    this.isFinalStateCheckBox isFinalStateCheckBox;
                    
    this.addButton addButton;
                    
    this.removeButton removeButton;
                    
    this.applyButton applyButton;
                    
    this.graph graph;
                    
    this.openButton openButton;
                    
    this.saveButton saveButton;
                    
    this.openAction openAction;
                    
    this.saveAction saveAction;
            }

    خب اگر بخوایم دستی این تغییرات رو اعمال کنیم، هم وقت گیر می‌شه و هم احتمال خطا بالا می‌ره. اما استفاده از «عبارت منظم» کار رو برای ما خیلی راحت می‌کنه. بذارین قبل از این، چند‌تا نرم افزار که این قابلیت رو پشتیبانی می‌کنن، معرفی کنم.
    برای ویندوز اول:

    • Notepad++ برنامه‌ی خیلی قوی و متن باز و البته رایگان.
    • Geany که یک برنامه‌ی در ابتدا گنو/لینوکسی بوده ولی به لطف متن‌باز بودن، نسخه‌ی ویندوزی اون هم وجود داره.
    • MEdit که برنامه‌ی بدی به نظر نمیاد. گنو/لینوکسیه ولی برای ویندوز کامپایل شده.
    • Netbeans هم که یک محیط مجتمع قوی به حساب میاد.
    • Vim که هرچی در موردش بگم کم گفتم. البته خودم خیلی خوب بلد نسیتم باهاش کار کنم، ولی میلاد توی وبلاگش متن‌های خوبی در این مورد نوشته
    • و خیلی برنامه‌های دیگه و تقریبن تمام برنامه‌هایی که این پایین برای لینوکس معرفی می‌کنم که نسخه‌ی ویندوزی هم دارن. فعلن همینا کافیه.

    و برای لینوکس:

    • Geany
    • MEdit
    • Kate
    • KWrite
    • Netbeans
    • Vim
    • Bluefish
    • و خیلی‌های دیگه.

    خب اول یه فایل جدید باز می‌کنم و این مقادیر رو توی اون کپی می‌کنم:

    کد PHP:
    private JComboBox statesComboBox;
    private 
    JComboBox zeroStateComboBox;
    private 
    JButton zeroStateColorButton;
    private 
    JComboBox oneStateComboBox;
    private 
    JButton oneStateColorButton;
    private 
    JTextField nameTextField;
    private 
    JCheckBox isFinalStateCheckBox;
    private 
    JButton addButton;
    private 
    JButton removeButton;
    private 
    JButton applyButton;
    private 
    Graph graph;
    private 
    JButton openButton;
    private 
    JButton saveButton;
    private 
    Action openAction;
    private 
    Action saveAction
    از منوی Edit ویرایشگر متنم که الان Kate است، Replace رو انتخاب می‌کنم. برای نرم‌افزار‌هایی که معرفی کردم، ممکنه این گزینه توی منو‌هایی مثل Search یا Find هم باشه. من باید این کار رو کنم، اول private‌ها حذف بشه، بعد «;» رو باید با «,» تعویض کنم، در آخر هم public StatePropertiesPanel( رو به ابتدا و ({} رو به انتها اضافه کنم. این کار آخر که آسونه و می‌شه با دست انجام داد، اما برای بقیه‌ی کار، Replace رو باز می‌کنم، گزینه‌ی Regular expression رو فعال می‌کنم و توی کادر Find عبارت زیر رو می‌نویسم (بعد از این توضیح می‌دم که معانی این عبارات چی هستن):



    کد PHP:
    private (.*); 

    و توی کادر Replace مقدار زیر رو می‌نویسم:

    کد PHP:
    t1
    و در انتها دکمه‌ی Replace All رو می‌زنم. نتیجه به شکل زیر می‌شه:


    کد PHP:
            JComboBox statesComboBox,
            
    JComboBox zeroStateComboBox,
            
    JButton zeroStateColorButton,
            
    JComboBox oneStateComboBox,
            
    JButton oneStateColorButton,
            
    JTextField nameTextField,
            
    JCheckBox isFinalStateCheckBox,
            
    JButton addButton,
            
    JButton removeButton,
            
    JButton applyButton,
            
    Graph graph,
            
    JButton openButton,
            
    JButton saveButton,
            
    Action openAction,
            
    Action saveAction
    خب، کامای خط آخر رو پاک می‌کنم و به جای اون می‌نویسم ({} و ابتدای خط اول public StatePropertiesPanel( رو اضافه می‌کنم. تا اینجا که متد سازنده‌ی من شکل کلی رو به خودش گرفت. پس متن رو کپی می‌کنم به سورس فایلم. اما حالا محتوایت این متد سازنده. دوباره مقایر رو مثل چند مرحله قبل به یک فایل جدید (و موقت، راه‌های دیگه هم هست، ولی این از همه دم دست تره!) انتقال می‌دم و مراحل رو اینبار به این شکل تکرار می‌کنم. استراتژی کار این بار به این شکله. private ها و اسم کلاس‌هایی که شیء از اون ساخته می‌شه باید حذف بشه، اسم شیء باید با اسم فیلد تغییر کنه (یعنی یه this. بیاد قبلش) و بعد مساوی و باز اسم شیء به عنوان پارامتر متد. پس توی کادر Find این رو می‌نویسم:

    کد PHP:
    private .* (.*); 
    و بعد توی کادر Replace می‌نویسم:

    کد PHP:
    ttthis.1
    و Raplace all رو می‌زنم. نتیجه می‌شه:
    کد PHP:
                    this.statesComboBox statesComboBox;
                    
    this.zeroStateComboBox zeroStateComboBox;
                    
    this.zeroStateColorButton zeroStateColorButton;
                    
    this.oneStateComboBox oneStateComboBox;
                    
    this.oneStateColorButton oneStateColorButton;
                    
    this.nameTextField nameTextField;
                    
    this.isFinalStateCheckBox isFinalStateCheckBox;
                    
    this.addButton addButton;
                    
    this.removeButton removeButton;
                    
    this.applyButton applyButton;
                    
    this.graph graph;
                    
    this.openButton openButton;
                    
    this.saveButton saveButton;
                    
    this.openAction openAction;
                    
    this.saveAction saveAction

    خب، به همین راحتی این‌ها هم تولید شد.
    با یک مثال شروع کردم که حرف‌هام ملموس باشه. این الگو، قواعد خودش رو داره و قواعد متفاوتی داره. من POSIX Basic Regular Expressions همراه با POSIX Extended Regular Expressions رو توضیح می‌دم. یک عبارت منظم یک مجموعه از رشته‌ها رو مطابق می‌شه که می‌تونیم از این مجموعه برای پیدا کردن متن مورد نظر استفاده کنیم. ما یک سری Metacharacter (که حالا فارسی بگیم ابرحرف) داریم که معنی خاصی دارن. اولی این‌ها رو یاد بگیریم:

    • «.» مطابق می‌شه با یک حرف. البته در اکثر بنامه‌ها این حرف شامل خط جدید نمی‌شه
    • «[ ]» مطابق یکی از حروف مشخص‌شده یا شامل شده می‌شه. مثلن [abc] مطابق می‌شه با حرف a یا b یا c و [a-z] مطابق هر حرف از حروف کوچیک الفبای انگلیسی می‌شه. [abx-z] مطابق a یا b یا x یا y یا z می‌شه. [a\-b] هم مطابق a یا – یا b می‌شه. \ اینجا برای تغییر معنی به کار می‌ره. [a-dx-z] هم مطابق می‌شه با a یا b یا c یا d یا x یا y یا z می‌شه. یعنی می‌شه بازه‌ها رو ترکیب کرد.
    • «[^ ]» مطابق هر حرفی به‌جز حرف‌های درون براکت می‌شه. به عنوان مثال [^abc] تمام حروف به‌جز a و b و c خواهد بود. قواعد براکت معمولی رو هم می‌شه به کار برد
    • «^» معنی موقعیت یک رشته درون رشته‌ی دیگه رو می‌ده که این معنی برای ابزار‌هایی که خط در اونها معنی داره (مثل ویرایشگر‌های متنی) به معنی شروع خط خواهد بود.
    • «$» معنی موقعیت پایان رشته و در ابزار‌های خطی، به معنی پایان خط هست. مثال‌های انتها معنی رو بهتر روشن می‌کنه.
    • «()» یک عبارت علامتگذاری شده رو مشخص می‌کنه. شما می‌تونید توی پرانتز یک عبارت منظم رو که براتون مهمه، مثل نام شیء تو مثال اول مطلب، علامت بزنید تا از اون استفاده کنید. قسمت زیر هم مرتبط با این قستمه.
    • «\n» که n یک عدد بین ۱ تا ۹ هست که مطابق می‌شه با nامین رشته‌ی علامت گذاری شده با پرانتز. بعضی ابزار ها اجازه‌ی گستش این دستور رو بیشتر از ۹ فراهم می‌کنن.
    • «*» مطابق می‌شه با رخداد ۰ یا بیشتر از حرف ماقبل این علامت. به این معنی که ab*c رو اگر برای عبارت منظم داشته باشیم، مطابق می‌شه با ac و abc و abbc و abbbc و….
    • «+» مطابق می‌شه با رخداد ۱ یا بیشتر از حرف ماقبل این علامت. به این معنی که ab+c رو اگر برای عبارت منظم داشته باشیم، مطابق می‌شه با abc و abbc و abbbc و….
    • «?» مطابق می‌شه با رخداد ۰ یا یک باز از حرف ماقبل این علامت. به این معنی که ab? مطابق a و ab خواهد بود.
    • «|» برای اجتماع کردن دو عبارت منظم می‌شه. یا به عبارتی برای انتخاب بین دو عبارت منظم به کار می‌ره. مثلن abc|def مطابق abc و def می‌شه.
    • «{n,m}» هم مطابق با n تا m تکرار از حرف ما قبل خودش می‌شه. این عبارت ممکنه توسط ابزار‌های قدیمی تر پشتیبانی نشه. مثال هم: ab{1,3} مطابق می‌شه با ab و abb و abbb.

    و البته اگر برنامه‌نویسی هم کرده باشین، مژده اینه که می‌تونید از حروف خاص مثل \t یا \n هم استفاده کنید.
    اما با چند مثال بیشتر مفهوم رو گسترش می‌دم.

    کد PHP:
    .at 
    مطابق تمام رشته‌های ۳ حرفی شامل at می‌شه. مثل cat و bat و hat و حتی 2at

    [PHP]
    [hc]at
    مطابق تمام cat و hat ها در اول خط می‌شه.
    کد PHP:
    [LEFT][hc]at
    [/
    LEFT
    مطابق تمام cat و hat های انهای خط می‌شه.
    کد PHP:
    [LEFT][hc]?at 
    [/LEFT
    مطابق hat و cat و at می‌شه.

    کد PHP:
    [LEFT].*= 
    [/
    LEFT
    مطابق تمام رشته‌هایی که به = ختم می‌شن، می‌شه.


    و برای پراتز‌. کاربرد عبارت علامت گذاری شده برای جایگزین کردن یک رشته است. بذارین با یه مثال بیشتر شرح بدم. من عبارت منظمی می‌خوام بنویسم که کلمات قبل از یک «=» رو با کلمات بعد از اون عوض کنم و بلعکس. پس عبارت منظم زیر رو باید برای پیدا کردن کلمات به کار ببرم (فعلن فرض کنیم که تمام متن قبل از مساوی یک کلمه و بعد از اون هم یک کلمه است):
    کد PHP:
    [LEFT](.*)=(.*) 
    [/
    LEFT
    طبق فرض، پرانتز اول برابر کلمه‌ی اول و پرانتز دوم برابر کلمه‌ی دومه. حالا برای جایگزینی، کادر Replace رو با عبارت زیر پر می‌کنم:
    \2=\1
    به همین راحتی. بذارین یه مثال خیلی کاربردی برای وبلاگ نویسا بگم. می‌خوایم قبل تمام لینک‌های موجود توی یک متن، favicon اون رو (همون آیکون کوچیکه که کنار نوار آدرس توی مرورگر دیده می‌شه) رو با استفاده از «سرویس گوگل برای بدست آوردن favicon ها و اعمال آن بر لینک های خارجی» قرار بدیم. تقریبن تمام ابزار‌هایی که برای نوشتن وبلاگ استفاده می‌شه (مثل ویرایشگر خود وبلاگ(ها) و Bilbo Blogger) این امکان رو به شما می‌دن که بعد از نوشتن متن، کد HTML اون رو ببینید. پس شما اول متن رو بنویسید و کد HTML اون رو به یک ویرایشگر متن انتقال بدین تغییرات رو اعمال کنید و باز کد رو از ویرایشگر متن به وبلاگ منتقل کنید. خب اول در مورد لینک برای کسانی که آشنایی ندارن، این رو بگم.
    وقتی شما یک لینک می‌سازین، برچسبی قبل و بعد اون قسمت لینک اضافه می‌شه. به عنوان مثال لینک «سار» رو شرح می‌دم:
    کد PHP:
    [LEFT]<a href="http://saarblog.wordpress.com">سار</a
    [/
    LEFT
    خب، برچسب <a> معرفی کننده‌ی شروع یک لینکه. خصوصیت href از اون مشخص کننده‌ی آدرس لینکه. و برچسب با </a> تموم می‌شه. ما باید domain مربوط رو پیدا کنیم. این domain قسمت ابتدای URL آدرس ماست و یا تا اولین / و در صورت نبودن اولین /، تا آخر URL ادامه داره. از اونجا که حروف بزرگ و کوچیک تفاوتی ایجاد نمی‌کنه، پس می‌تونیم برچسب <A> رو هم داشته باشیم. اول عبارت منظم:
    کد PHP:
    [LEFT]<[aA] ([^>]*[hH][rR][eE][fF]="?[hH][tT][tT][pP][sS]?)://([^/" ]+)("?[^>]*)>
    [/LEFT] 
    خب برای این که یک لینک شروع بشه، باید <a یا <A رو داشته باشیم که من از <[aA] استفاده کردم. بعد از اون می‌تونه هر عبارتی بیاد به‌جز «>» و عبارت هم برای ما اهمیت داره (برای این که ساختار لینک از بین نره) ولی حتمن باید یک فاصله بعد از a یا A باشه (وگرنه ممکنه یه برچسب دیگه باشه!). عبارت href= شروع آدرس URL رو نشون می‌ده که ممکنه (و در اکثر موارد) این URL بین دو «»» قرار داره. برای همین بعد از «»» یک علامت سوال قرار دادم. پروتکل می‌تونه http یا https باشه، و از اونجا که می‌شه اینطور هم نوشت: HtTpS، من کاراکتر به کاراکتر اون‌ها رو توی براکت قرار دادم. بعد از اون حتمن باید :// وجود داشته باشه، بعد Domain از اینجا تا اولین «/» یا «»» یا فاصله ادامه خواد داشت. و بعد ادامه تا علامت «>». خب، حالا عبارت Replace باید به این شکل ساخته بشه:
    کد PHP:
    [LEFT]<a 1://\2\3><img src="http://www.google.com/s2/favicons?domain=\2" /> 
    [/LEFT
    پرانز دوم Domain بود، برای همین جاهایی که نیاز بود، \2 رو استفاده کردم. جالب بود، نه؟
    فکر می‌کنم الآن می‌تونید مثال‌های برنامه نویسی رو متوجه بشین.
    پ‌ن: این ترفند favicon رو برای این پست اعمال کردم.
    ویرایش توسط SpyMan : 2013/02/08 در ساعت 01:18 AM دلیل: ادغام دو پست

    2 تشکر توسط:

    مات به حركتی میگن كه شاه بااون عظمتش نمیتونه كاری كنه مات مرام همه بچه های وی بی ایرانم.
    اولین آموزش من در وی بی ایران ( لطفا نظر بدید )
    آموزش Combine کردن تصاویر با CSS Sprites (کد نویسی) و BB کدهای





  2. گیفت کارت آیتونز

اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

موضوعات مشابه

  1. آموزش کامل برنامه نویسی حرفه ای به اینجانب
    توسط king-alireza در انجمن بحث آزاد
    پاسخ: 1
    آخرين نوشته: 2013/01/27, 01:04 PM
  2. مرجع تخصصی آموزش برنامه نویسی
    توسط 8224171 در انجمن معرفی انجمن شما
    پاسخ: 1
    آخرين نوشته: 2012/10/01, 11:23 AM
  3. پاسخ: 1
    آخرين نوشته: 2011/09/30, 12:21 PM
  4. پاسخ: 0
    آخرين نوشته: 2011/01/19, 12:08 AM
  5. آموزش زبان برنامه نویسی D
    توسط VBIran در انجمن دانلود نرم افزار
    پاسخ: 0
    آخرين نوشته: 2010/12/26, 10:50 PM

کلمات کلیدی این موضوع

علاقه مندی ها (Bookmarks)

علاقه مندی ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •