برای ساختن کدهای انعطاف پذیر، باید مسیر فایلها رو داینامیک تعیین کنیم که همه جا کار کنه.
چند خط کد زیر اطلاعات خوبی از موقعیت فایل رو میدهند ولی تضمینی بر اینکه همه جا کار کنند نیست! در حالت کلی تقریبا همه جا صحیح کار می کنه.
$baseurl = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['SCRIPT_NAME']).'/';
$basepath = str_replace('\\','/',dirname(__FILE__)).'/';
define('BASE_RELATIVE_URL',dirname($_SERVER['SCRIPT_NAME']).'/');
define('BASE_URL', $baseurl);
define('BASE_PATH', $basepath);
echo 'Base Relative Url: ' . BASE_RELATIVE_URL;
echo 'Base Url: ' . BASE_URL;
echo 'Base Path: ' . BASE_PATH;
برای نمونه، این کد رو در فایلی در Localhost با آدرس زیر قرار میدیم:
F:/Wamp/www/parent/child/test.php
همونجور که واضحه، URL این فایل به این شکل خواهد بود:
http://localhost/parent/child/test.php
در این حالت، خروجی کد بالا به این شکل خواهد بود:
/*
Base Relative Url: /parent/child/
Base Url: http://localhost/parent/child/
Base Path: F:/Wamp/www/parent/child/
*/
!-->
برچسب ها: solution
از اونجایی که برنامه نویسی انتها نداره و هیچکس درش کامل نیست، وقتی برنامه ای میسازیم واسمون سوال پیش میاد که آیا این Application به روش خوبی نوشته شده؟ آیا مشکل ساختاری نداره؟
نکنه روش من با روش استاندارد و معیار کاملا متفاوت باشه یا براحتی هک بشه!
برای اینکه بفهمیم یک Application خوبه یا نه، چند تا شرط رو باید داشته باشه:
اول. خوب و کامل مطابق نظر ما کار کنه.
باید اونجوری که واسش برنامه ریزی کردیم کار کنه نه با تخفیف! یعنی اگر ظاهر جایی خوب نیست یا لینکی غلطه یا بخشی کار نمی کنه، پس سیستم ما هنوز خوب و کامل نیست.
اصولا باگ اجتناب ناپذیره ولی کار نکردن یک بخش اساسی، قابل گذشت نیست. وجود باگها رو باید به بخشهای غیراساسی و کوچک محدود کرد.
دوم. مشکل ساختاری اساسی و معضل امنیتی نداشته باشه.
باید همیشه به روز باشیم یا با شیوه های نوین آشنا باشیم (در حد توان) ولی در حالت کلی باید ساختار رو کامل تحلیل کنیم و اشکالاتش رو کشف کنیم.
مثلا یک سیستم مدیریت کاربر نوشتیم که کاربر میتونه هر کاراکتری رو به عنوان نام کاربری انتخاب کنه. وقتی چنین قابلیتی رو داریم تعریف می کنیم باید فکر این رو هم بکنیم یه نفر چنین Usernameای رو انتخاب کنه: " " یعنی 10 تا Space و این ناجوره! باید چنین مواردی رو کشف کنیم و راه کشفش هم تحلیل سیستمه.
سوم. توسط نویسنده اش قابل فهم و توسعه باشه.
کدی که خود من (نویسنده اش) امروز یا چند وقت دیگه ازش سر در نمیارم، به درد سطل آشغال میخوره! یا اگه ازش سر دربیارم ولی نتونم توسعه اش بدم هم همون وضعیت رو داره.
چهارم. برای برنامه نویسهای دیگه هم قابل فهم و توسعه باشه.
فهم کدها برای خود من کافی نیست کدها باید برای بقیه هم قابل فهم و توسعه باشه. شاید من ذهن مغشوشی داشته باشم و فقط خودم از کار خودم سر دربیارم.
باید امکان این باشه که با یک توضیح و آموزش مختصر، فهم سیستم خودم رو به شخص دیگه ای منتقل کنم. اگر امکان چنین کاری نباشه یا خیلی سخت باشه، سیستم ما زباله است!
باید به یک نکته ظریف در این باره اشاره کرد که وقتی سیستمم رو برای کسی توضیح میدم و متوجه نمیشه، معنیش همیشه خنگی اون شخص نیست معنیش میتونه مبهم بودن موضوع، سخت بودن مبحث، بد توضیح دادن من یا خنگی من هم باشه!
- پنجم. دمده و عهد بوقی نباشه ، بروز باشه.
هر ساختاری یک عمر داره وقتی عمرش بگذره دیگه جوابگو نیست و باعث میشه شرایط بالا نقض بشه.
!-->
برچسب ها: solution
جدیدا یه فکری به سرم زده که به هرکی گفتم یه واکنش داشت. یکی گفت: الو الو صدات نمیاد. یکی سرش رو از ماشین برد بیرون. یکی یکم نگام کرد کرد و گفت: چیزی زدی امیرحسین؟!! یکی خیلی جدی گفت برو علائم اسکیزوفرنی رو تحقیق کن اگر تو خودت دیدی سریع برو دکتر. یه نفر هم سکوت کرد انگار هیچی نشنیده!
داستان از این قراره: همه چیز و همه کس حتی خود من، توهمات و خلاقیت من هستند و چیزی جز من وجود نداره!
همه ما خورشید رو میشناسیم. از خودم شروع می کنم. من خورشید رو میبینیم. احساسش می کنم. آیا ممکنه این دیدن و احساس کاملا زاییده ذهن من باشه؟ براساس مقدمه اول، من می تونم یک احساس مادی رو تصور کنم. پس اگر من به این دانسته خودم شک کنم، چه چیزی میتونه من رو از این شک دربیاره؟
یه راه ساده. میرم توی خیابون، از اولین کسی که میبینیم میپرسم که اون هم خورشید رو میبینه یا نه. اون شخص جواب مثبت میده. آیا ممکنه که اون آدم مثل من خورشید رو تصور کرده باشه یعنی توهم مشترکی داشته باشیم؟ یا آیا ممکنه که خود اون شخص زاییده ذهن من باشه؟ یعنی من توی ذهنم کسی رو خلق کردم و باهاش صحبت کردم؟
از کجا میشه فهمید؟ میشه یک نفر سومی رو پیدا کرد. اون نفر سوم هم میتونه شرایط نفر قبلی رو داشته باشه! نفر چهارم هم همینطور الی آخر.
در نتیجه یا همه انسانهایی که من میشناسم توهم و تصور من هستند یا همه توهم مشترکی به نام خورشید داریم.
حالا خورشید رو فراموش کنیم. خود آدمها رو در نظر بگیریم. چطور به من ثابت بشه که همه آدمهایی که دیدم و میشناسم، زاییده ذهن من نبودند؟ یعنی من تنها انسان روی زمین هستم که تونستم انسانهای دیگه رو تصور کنم. این غیرممکنه؟ حتما میگی آره با این استدلال که مطمئنی خودت واقعی هستی. ولی من این رو از کجا بفهمم. راهی سراغ داری؟ آخرش میخوای بیای بزنی تو گوشم و بگی: من هستم یا نیستم؟ که این پدیده هم از این نظریه مستثنی نیست و میتونه ساخته ذهن من باشه که من یک نفر رو در توهم خودم ایجاد کردم که برای اثبات وجود خودش اومده زده تو گوش من!
یه سوال. من الان دارم وبلاگنویسی می کنم برای تو که داری میخونی. چطور میتونم بگم تو نیستی وقتی دارم واست وقت میذارم؟ اگر تو وجود داری پس واقعا وجود داری. من اینجوری جواب میدم: وقتی حجم تصور میتونه اینقدر بدون مرز باشه پس هر اتفاقی توی زندگی من میتونه غیرواقعی باشه. هر صحبتی. هر حادثه ای. هر پدیده ای. یعنی من الان دارم تصورم می کنم که دارم تایپ می کنم یعنی مثل یک فیلم توی ذهن من داره اتفاق بیافته.
پاراگرافهای بالا، خلاصه و تکه هابی از پست هستند. کاملش رو در ادامه مقاله میتونی بخونی اگر علاقمندی...
برچسب ها: فلسفه
در برنامه نويسي وب، گاهي لازم داريم که يک URL رو پردازش کنيم. مثلا از يه URL طولاني، domainاش رو بگيريم يا فقط آدرس صفحه اش رو بدست بياريم يا کوئريش رو بخونيم.
براي چنين کارايي برنامه نويسهاي ناآگاه سراغ Regular Expression ميرند در حاليکه PHP عزيز براي اين کار تابع داره که با هلويي هرچه تمامتر حتي fragment يا hash آدرس رو هم ميده.
تابع parse_url در حالت استاندارد يک URL ميگيره و آرايه اي حاوي اجزاي آدرس ميده شامل اين قسمتها:
- scheme: همون http يا https يا ftp و غيره
- host: دامنه اصلي مثل Boplo.ir
- port: پورت اگر باشه
- user: همون username اگر باشه
- pass: رمز يا password اگر ست شده باشه
- path: مسير آدرس بعد از دامين
- query: کوئري يعني کاراکترهاي بعد از علامت "?"
- fragment: يا hash يا کاراکترهايي که بعد از علامت "#" ميان
براي نمونه همون مثالي که خود PHP مطرح کرده:
$url = 'http://username:password@hostname/path?arg=value#anchor';
print_r(parse_url($url));
/**
* Output:
* Array
* (
* [scheme] => http
* [host] => hostname
* [user] => username
* [pass] => password
* [path] => /path
* [query] => arg=value
* [fragment] => anchor
* )
*/
نکته مهم اين تابع اينه وقتي بجاي URL چرنديات تحويلش بديم، مقدار FALSE برميگردونه که ما بايد چک کنيم ولي بخاطر اينکه بيخود وقتش رو گرفتيم،
يک خطاي E_WARNING هم صادر ميکنه که اگر نمايش اين دسته خطاها فعال باشه، خطا ميگيرم که مي تونيم اين مشکل رو با @ حل کنيم:
if( $url = @parse_url("chetoty googooli?") ) {
echo "Host: " . $url['host'];
} else {
echo "Invalid URL entered!";
}
از نسخه 5.1.2 به اين تابع يک پارامتر دوم اضافه شده که ميشه باهاش بجاي اينکه آرايه بگيريم، فقط بخش مورد نظر رو بصورت String بگيريم. مثلا اگر ميخوايم فقط کوئري آدرس رو بگيريم پارامتر دوم رو برابر PHP_URL_QUERY قرار ميديم. نمونه:
$url = "http://boplo.ir/?loveBoplo=absolutely&loveAmirHossein=dige_poroo_nasho
echo parse_url($url, PHP_URL_QUERY);
/**
* Output:
* loveBoplo=absolutely&loveAmirHossein=dige_poroo_nasho
*/
واسه اينکه موضوع کامل بشه، وقتي به کوئري يک تابع نياز داريم، معمولا اينکه مقدار هر کليد در اون کوئري چيه به درد ميخوره. پردازش کوئري کار خيلي ساده ايه ولي براي همون کار ساده ي چند خطي هم تابعي وجود داره به نام parse_str. مثلا براي پردازش کوئري مثال قبل، اينجوري لذت ميبريم:
$url = "http://boplo.ir/?loveBoplo=absolutely&loveAmirHossein=dige_poroo_nasho
$query = parse_url($url, PHP_URL_QUERY);
parse_str($query, $array);
print_r($array);
/**
* Output:
* Array
* (
* [loveBoplo] => absolutely
* [loveAmirHossein] => dige_poroo_nasho
* )
*/
از PHP لذت ببريم.
برچسب ها: function
یکی از روشهای ذخیره اطلاعات در MySQL استفاده از لیست از قبل تعیین شده است که کنترل کنیم فقط کلمات خاصی قابل ذخیره و بازیابی باشند. مثلا جدول زیر:
CREATE TABLE boplo_categories (
`id` INT(10) AUTO_INCREMENT PRIMARY_KEY,
`categories` ENUM('PHP', 'Web Design', 'MODx', 'IT', 'Scratch'),
`tags` SET('Solution', 'API', 'AJAX', 'CSS', 'Javascript')
)
در این جدول، ستون categories که از نوع ENUM تعیین شده، حتما با یکی از مقادیر مشخص شده می تونه پر بشه.
و ستون tags که از نوع SET ایجاد شده مانند ENUM عمل می کنه با این تفاوت که در این ستون میشه بیشتر از یکی از موارد لیست رو ثبت کرد مثلا هم CSS و هم Solution ولی ENUM فقط یک مقدار میتونه داشته باشه.
کار با ENUM و SET خیلی لذتبخشه غیر از موقعی که بخوایم لیستی که در ENUM یا SET مشخص شده رو در برنامه امون داشته باشیم. معمولترین کاردبردش ساختن <SELECT> براساس مقادیر مشخص شده است. برای اینکار باید ابتدا لیست مقادیری که بصورت ENUM یا SET مشخص شده رو توسط یک کوئری بدست بیاریم و سپس کلمات لیست رو از این مقدار خارج کنیم. در ادامه پست میخوایم لیست کلمات مشخص شده برای ستون categories که بالا قرار دادم رو بدست بیاریم.
برچسب ها: function,mysql,solution
این آدما
یه کار زشتی می کنند که واقعا به نظر من کثیفترین کار دنیاست!
میخواستم یه پست درباره اش بنویسم ولی دیدم هرچی کمتر ازش حرف بزنم، فضای بلاگ کمتر به نامش آلوده میشه
برچسب ها: آدما,فلسفه
هشت تا شخصیت تاریخی وجود داره که من واقعا بهشون علاقمندم راستش نمیدونم چرا! یعنی یه جورایی ناخودآگاه بهشون علاقمندم (جدی). به ترتیب تاریخ، اینها هستند:
- کوروش کبیر
- حضرت محمد(ص)
- آبراهام لینکلن
- آلبرت آینشتاین
- بیل گیتس
- خودم
- کسی که قراره بعدا بهش علاقمند بشم!
- و یکی هم به عنوان زاپاس که اگر کس دیگه ای پیدا شد، توی این لیست، جا واسش باشه!
درباره هیتلر هیچ اطلاع خاصی ندارم ولی به نظر آدم جالبی بوده. شاید وقتی درباره اش تحقیق کردم از اون هم خوشم اومد!
من آواتار اکانت یاهو پالسم، یه عکس خوشگل از آبراهام لینکن هست. یعنی همین عکسی که اینجا تو این پست میبینی. گفتم برم سرچ کنم ببینم دیگه چه عکسی ازش پیدا میشه، به صفحه ویکیپدیاش برخوردم. توی ترجمه فارسی اش، یه بخشی با عنوان "نامه ابراهام لینكل به آموزگار فرزندش" داره. خوندم دیدم واقعا ارزشمنده و جالب دونستم اینجا بذارم شاید واسه تو هم جالب باشه:
او باید بداند كه همه مردم عادل و صادق نیستند. اما به فرزندم بیاموزید كه به ازای هر شیاد، انسانهای صدیق هم وجود دارند. به او بگویید در ازای هر سیاستمدار خودخواه، رهبر با همتی هم وجود دارد. به او بیاموزید كه در ازای هر دشمن، دوستی هم هست. میدانم كه وقت میگیرد اما بیاموزید اگر با كار و زحمت خویش یك دلار بدست آورد بهتر از آن است كه جایی در زمین پنج دلار پیدا كند. به او بیاموزید كه از باختن پند بگیرد و از پیروز شدن لذت ببرد. او را از غبطه خوردن برحذر دارید. به او نقش و تاثیر مهم خندیدن را یاد آور شوید. اگر میتوانید به او نقش مهم كتاب را در زندگی بیاموزید. به او بگویید تعمق كند، به پرندگان در حال پرواز در دل آسمان، به گلهای درون باغچه، به زنبورهای كه در هوا پرواز میكنند دقیق شود.
به فرزندم بیاموزید كه در مدرسه بهتر این است كه مردود شود اما با تقلب به قبولی نرسد. به او یاد دهید كه با ملایم ها ملایم و با گردن كشها، گردن كش باشد. به عقایدش ایمان داشته باشد حتی اگر همه خلاف او حرف بزنند(و او را مسخره كنند). به او یاد دهید كه همه حرف ها را بشنود و سخنی را كه به نظرش درست میرسد انتخاب كند.
ارزشهای زندگی را به فرزندم آموزش دهید. به او یاد دهید در اوج اندوه تبسم كند. به او بیاموزید كه در اشك ریختن خجالتی وجود ندارد. به او بیاموزید كه میتواند برای فكر و شعورش مبلغی تعیین كند اما قیمت گذاری برای دل بی معنا است.
به او بگویید كه تسلیم هیاهو نشود و اگر خود را برحق میداند پای سخنش بایستد و با تمام قوا بجنگد.
در كار تدریس به فرزندم ملایمت به خرج دهید اما از او یك ناز پرورده نسازید، بگذارید شجاع باشد. به او بیاموزید كه به مردم اعتقاد داشته باشد. توقع زیادی است اما ببینید كه میتوانید چه كار كنید.
شاید واست جالب باشه. من زمان کنکورم، یه ریش فانتزی گذاشته بودم که درست مثل همین عکس آبراهام لینکلن بود. یکی گفت ریشت مثل آبراهام لینکلنه. من رفتم ببینم کیه اینکه ریشش مدل من بوده و اونجا ایشون رو شناختم!
منبع: آبراهام لینکلن. از ویکیپدیا، دانشنامهٔ آزاد
برچسب ها: فلسفه
میخوایم بدون درد و خونریزی، ایمیل فارسی بصورت راست به چپ بفرستیم...
Gmail:
جی-میل امکانی داره تا دکمه های Right to Left و Left to Right رو به Editor اش اضافه کنیم.ابتدا به بخش Setting میریم. در اونجا در بخش General (همون اولی)، به قسمت اول یعنی Language مراجعه می کنیم و روی دکمه Show all language options کلیک می کنیم (مرحله یک در تصویر). همون لحظه عباراتی به این قسمت اضافه میشه. کافیه گزینه Right-to-left editing support on رو انتخاب کنیم(مرحله دو در تصویر) و تغییرات رو ذخیره کنیم. حالا موقع نگارش یک ایمیل، دو دکمه جدید به Toolbar ادیتور اضافه شده(مرحله سه در تصویر).
روش دوم، راست به چپ کردن از طریق کیبورد هست. در کیبورد من این کار با دکمه های Shift+Ctrl سمت راست انجام میشه (و با Shift+Ctrl سمت چپ کیبورد، چپ به راست میشه). یعنی وقتی روی بخش قابل تایپ ایمیل کلیک کنیم و این دکمه ها رو بزنیم، Cursor به سمت راست میاد و میتونیم راست به چپ بنویسیم. جیمیل این حالت رو حفظ می کنه و وقتی ایمیل رو فرستادیم، گیرنده هم همونجور مشاهده خواهد کرد. این اتفاق بخاطر هوشمندی ادیتور جیمیل هست.
Yahoo Mail:
یاهو مثل گوگل فهمیده نیست و چنین قابلیتی رو پیش بینی نکرده ولی با روش دومی که برای جیمیل معرفی کردم، میشه در یاهو هم راست به چپ ایمیل نوشت. یعنی تغییر جهت نگارش با دکمه های Shift+Ctrl سمت راست و سمت چپ کیبورد.
Live Mail:
لایو دیگه ته بی شعوره! هیچ راه درست و درمونی نداره به غیر از اینکه این سرویس امکان نگارش ایمیل بصورت HTML رو فراهم می کنه (که قابلیت منحصر به فرد و جالبیه) که اگر HTML بلد باشیم، می تونیم ایمیل RTL با لایو بنویسیم و ارسال کنیم.
اگر هیچی از HTML نمی دونی و لنگ فرستادن ایمیل راستچین با لایو هستی. تا همین حد میشه کمک کرد:
وقتی ایمیل رو براساس تصویر HTML کردی. ایمیل رو با این کد شروع کن:
<div dir="rtl" style="font-family:Tahoma">
و با این تموم کن:
</div>
و برای ایجاد خط جدید، بجای Enter تگ زیر رو قرار بده:
<br />
نمونه:
<div dir="rtl" style="font-family:Tahoma">
سلام<br />من یک ایمیل راستچین در لایو هستم.
</div>
پی نوشت:
کیبورد مکینتاش، اونجوری که تست کردم با دکمه های Command+Shif+} راستچین میشه.
برچسب ها: rtl,solution
توی انجمن مادایکس نوشتن پستهای فارسی کلی دردسر داره. باید از تگ [right] استفاده کنیم و چون ادیتور RTL نیست باید کلمات غیرفارسی رو خط جدید قرار بدیم و خلاصه یه کثافتکاری ای میشه که نیا و نبین!
دیروز خیلی اتفاقی (در واقع شانسی)، تگ [rtl] رو توی فروم تست کردم و خشوبختانه کار کرد و عبارات داخلش رو بصورت RTL نمایش داد. اینجا بود که با خودم گفتم ای کاش این همه مدت بجای پستهای فضایی، یه سری به سایت
SMF زده بودم این قابلیت رو اونجا دیده بودم!
نکته دوم اینکه برای نوشتن پستهای فارسی قابل خواندن، این تگ کافی نیست و باید جهت کل متن رو توسط تگ [right] به سمت راست ببریم و برای تکمیل کار هم، فونت نوشته ها رو توسط تگ [font] به شکل [font=Tahoma] به Tahoma تغییر بدیم.
در نهایت باید این سه تگ رو با هم استفاده کنیم:
[rtl][right][font=Tahoma]
من یک پست خیلی خوب و گوگولی تشریف دارم که راست چین و باحال هستم
[/font][/right][/rtl]
یک نکته اینکه تگ [code] این تگها رو قطع می کنه یعنی وقتی میخوایم از تگ [code] استفاده کنیم باید تگهای مربوط به راستچین رو قبل از تگ [code] ببندیم و بعد از تگ [code] مجددا باز کنیم. شبیه این:
[rtl][right][font=Tahoma]
من یک پست خیلی خوب و گوگولی تشریف دارم که راست چین و باحال هستم
[/font][/right][/rtl]
[code]It's a code![/code]
[rtl][right][font=Tahoma]
من ادامه همون پست بالایی هستم و از اون کلی باحالترم
[/font][/right][/rtl]
یک نکته ریزه میزه: توی هر فیلدی، اگر در محیط ویندوز و درصورت نصب بودن زبان فارسی، کلیدهای Shift+Ctrl سمت راست کیبورد رو بزنیم، اون فیلد راست چین میشه و بای زدن همین دکمه در سمت چپ کیبورد به چپ به راست تغییر می کنه.
برای ما که فارسی مینویسیم راحتتره که این کار رو بکنیم تا توی نوشته های فارسی-انگلیسی خوانایی بهتری داشته باشیم. این نکته برای ادیتور انجمن مادایکس هم صدق می کنه.
پی نوشت: من این ترفند رو در انجمن مادایکس و تاپیک زیر هم قرار دادم:
روش نگارش پستها در انجمن بصورت راست به چپ
باشد که وب تمیزتری داشته باشیــــــــــــــم!
برچسب ها: rtl,solution
در این مقاله APIهای مهم و نکات به دردبخور کدنویسی در مادایکس Evolution معرفی خواهد شد. این مقاله نه ترجمه است و نه براساس الگوی خاصی نوشته شده. اینها تجربیات من از کدنویسی در مادایکس هستند. اونجوری که فهمیدم توضیح میدم و اونهایی که به نظرم پرکاربردتر هستند رو معرفی می کنم.
مقاله یکم طولانیه ولی به درد میخوره اگر بخوای کدنویسی در مادایکس Evolution رو شروع کنی یا یه اطلاعاتی ازش بدست بیاری. ادامه آموزش...
برچسب ها: evolution,tutorial
< قبلیبعدی >