۱۳۹۰/۰۹/۰۲

انواع داده در MySQL


سلام،
هدف این مقاله بررسی انواع داده ها در پایگاه داده MySQL (مای‌اس‌کیوال) می باشد. MySQL انواع مختلف داده را در دسته بندی های زیر پشتیبانی می کند:
  • اعداد (Numeric)
  • زمان (Date and Time)
  • رشته ها (String)
  • داده های فضایی (Spatial)

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

اعداد (Numeric)

MySQL تمامی انواع داده های عددی استاندارد SQL شامل اعداد صحیح و اعداد تقریبی را پشتبانی می کند. هر یک از نوع داده های عددی حافظه مشخصی برای ذخیره سازی نیاز دارند. همچنین در نظر داشته باشید که هر کدام از آنها محدوده مشخصی را پشتیبانی می کنند. هر نوع از این داده های عددی را می توان به صورت SIGNED یا UNSIGNED تعریف کرد. در حالت SIGNED این ستون ها از مقادیر منفی پشتبیبانی می کنند ولی در حالت UNSIGNED اعداد ذخیره شده باید بزرگتر ویا مساوی صفر باشند. در نظر داشته باشید که نوع داده BOOLEAN برای ذخیره مقادیر TRUE و FALSE همان TINYINT(1) می باشد.
جدول زیر اطلاعات کلی نوع داده های عددی را در حالت SIGNED و UNSIGNED نشان می دهد:

اطلاعات کلی نوع داده های عددی Integer
نوعحافظه (بایت)حداقل مقدارحداکثر مقدار
TINYINT1-128127
0255
SMALLINT2-3276832767
065535
MEDIUMINT3-83886088388607
016777215
INTEGER4-21474836482147483647
04294967295
BIGINT8-92233720368547758089223372036854775807
018446744073709551615


اطلاعات کلی نوع داده های عددی شناور
نوعحافظه (بایت)
مقدار

نحوه تعریف

توضیحات
FLOAT4از ۰ تا ۲۳ رقمFLOAT(M,D)مقدار تقریبی (Approximate Value)
DOUBLE8از ۲۴ تا ۵۳ رقمDOUBLE(M,D)مقدار تقریبی (Approximate Value)
DECIMALهر ۹ رقم ۴ بایت به صورت باینریتا ۶۵ رقمDECIMAL(M,D)مقدار دقیق (Exact Value)

در جدول بالا حرف M نشان‌دهنده تعداد کل رقم‌های داده و حرف D نشان‌دهنده تعداد رقم‌های بعد از ممیز (.) می باشد. به عنوان مثال در ستونی که به صورت FLOAT(7,4) تعریف شده است می توان حداکثر مقدار 999.9999 را ذخیره نمود. در صورتی که شما عدد 999.00009 را به این جدول وارد کنید، عدد واردشده به صورت 999.0001 ذخیره خواهد شد.

سوال: منظور از مقدار تقریبی و دقیق در جدول داده های عددی شناور چیست؟
پاسخ: گاهی اوقات در نوع داده‌های تقریبی اعداد گرد می شوند. در زیر با اجرا کردن چند دستور در خط فرمان MySQL پایگاه داده‌ای با دو ستون Decimal و Float تعریف کردیم. در آخرین دستور نتیجه گردشدن را در ستون Float مشاهده می فرمایید:
mysql> create table numbers (a decimal(10,2), b float);
mysql> insert into numbers values (100, 100);
mysql> select @a := (a/3), @b := (b/3), @a * 3, @b * 3 from numbers \G
*************************** 1. row ***************************
@a := (a/3): 33.333333333
@b := (b/3): 33.3333333333333
@a * 3: 99.999999999
@b * 3: 100
برای اطلاعات بیشتر به صفحه Problems with Floating-Point Values در سایت MySQL مراجعه نمایید.
در نسخه های قبل از 5.0.3 نوع داده DECIMAL به صورت String ذخیره می شود و مقدار رقم‌هایی که پشتیبانی می کرد مانند نوع داده DOUBLE بود.

نوع داده BIT


این نوع داده برای ذخیره بیت‌های ۰ و ۱ استفاده می شود. برای تعریف ستونی از این نوع از عبارت BIT(M) استفاده می کنیم که در اینجا M فضایی به طول تقریبا (M+7)/8 بایت را برای نگهداری داده‌ها ایجاد می کند. M می تواند عددی از ۱ تا ۶۴ باشد. برای نشان‌دادن ۰ و ۱ به صورت بیت از حرف b استفاده می کنیم. به عنوان مثال b'111' و b'10000000' که به ترتیب برابر اعداد ۷ و ۱۲۸ می باشند. برای درک بیشتر این موضوع به دستورات و نتایج زیر در خط فرمان MySQL توجه فرمایید:
mysql> INSERT INTO t SET b = b'11111111';
mysql> INSERT INTO t SET b = b'1010';
mysql> INSERT INTO t SET b = b'0101';
mysql> SELECT b+0, BIN(b+0), OCT(b+0), HEX(b+0) FROM t;
+------+----------+----------+----------+
| b+0  | BIN(b+0) | OCT(b+0) | HEX(b+0) |
+------+----------+----------+----------+
|  255 | 11111111 | 377      | FF       |
|   10 | 1010     | 12       | A        |
|    5 | 101      | 5        | 5        |
+------+----------+----------+----------+
3 rows in set (0.03 sec)
آخرین Query در بالا توابع مختلف برای تبدیل این اعداد را نشان می دهد. عبارت +0 مقدار دودویی ذخیره شده را به عدد ده‌دهی متناظر تبدیل می کند.

زمان (Date and Time)

در کل ۵ نوع داده برای ذخیره زمان (ساعت و تاریخ) داریم. در جدول زیر اطلاعات این نوع داده‌ها را مشاهده می‌فرمایید:

اطلاعات کلی نوع داده های زمانی (Date and Time)
نوعحافظه (بایت)
مقدار صفر (“Zero” Value)
DATE3'0000-00-00'
TIME3'00:00:00'
DATETIME8'0000-00-00 00:00:00'
TIMESTAMP4'0000-00-00 00:00:00'
YEAR10000

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

نوع داده DATE

این نوع داده فقط برای ذخیره سازی تاریخ استفاده می شود. فرمت پیش فرض این نوع داده 'YYYY-MM-DD' است. بازه‌ای که توسط DATE پشتیبانی می شود از '1000-01-01' تا '9999-12-31' می باشد.

نوع داده TIME

این نوع داده برای ذخیره سازی زمان (ساعت، دقیقه، ثانیه) استفاده می شود. فرمت پیش‌فرض این نوع داده 'HH:MM:SS' و یا 'HHH:MM:SS' است. بازه ای که در نوع TIME پشتیبانی می شود از '-838:59:59' تا '838:59:59' می باشد. نوع داده TIME فقط برای نمایش زمان روز استفاده نمی شود. برای نمایش تفاوت زمانی دو بازه و یا زمان باقی‌مانده نیز می تواند از TIME استفاده نمود. به همین دلیل بازه پشتیبانی شده بیشتر از ۲۴ ساعت و یا کمتر از صفر (منفی) می باشد.
برای استفاده از عبارت های مخفف در نوع داده TIME باید دقت نمایید. به عنوان مثال MySQL عبارت '11:12' را به صورت '11:12:00' تفسیر می کند. در صورتی که داده بدون ':' (دو نقطه) بیان شود، MySQL آن را از سمت راست تفسیر می کند. به عنوان مثال عبارت '1112' و یا 1112 به معنی '00:11:12' است.
به صورت پیش فرض MySQL داده‌های خارج از محدوده TIME را در صورتی که با فرمت مناسب وارد شده باشند به نزدیک‌ترین بازه تبدیل می کند. به عنوان مثال عبارت‌های '-850:00:00' و '850:00:00' به '-838:59:59' و '838:59:59' تبدیل خواهند شد. داده‌هایی که فرمت مناسب نداشته و یا قابل تفسیر برای داده TIME نباشند به عبارت '00:00:00' تبدیل خواهند شد.

نوع داده DATETIME

این نوع داده برای ذخیره سازی زمان به صورت کامل شامل تاریخ و ساعت استفاده می شود. فرمت پیش فرض این نوع داده 'YYYY-MM-DD HH:MM:SS' می باشد. بازه‌ی پشتیبانی DATETIME از '1000-01-01 00:00:00' تا '9999-12-31 23:59:59' است.

نوع داده TIMESTAMP

این نوع داده همانند DATETIME می باشد. بازه‌ای که توسط TIMESTAMP پشتیبانی می‌شود از '1970-01-01 00:00:01' UTC تا '2038-01-19 03:14:07' UTC است.
داده‌های TIMESTAMP هنگام ذخیره شدن از زمان منطقه زمانی (Time Zone) کنونی سیستم به UTC تبدیل و ذخیره می شوند. متناظر با همین امر، هنگام نشان دادن داده‌های TIMESTAMP، ابتدا داده‌ها از UTC به منطقه زمانی کنونی سیستم تبدیل شده و بعد نمایش داده می شوند. به همین علت در صورتی که منطقی زمانی سیستم عوض شود، ممکن است داده‌ها به صورت غیرعادی و یا غلط نمایش داده شوند.
نوع داده TIMESTAMP این قابلیت را دارد که مقداردهی اولیه و یا مقداردهی خودکار داشته باشید. برای مقداردهی اولیه کافیست مقدار پیش فرض فیلد مورد نظر را CURRENT_TIMESTAMP قرار دهید. مانند:
mysql> CREATE TABLE t (ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
در حالت مقداردهی خودکار، مقدار ذخیره شده در فیلد TIMESTAMP هنگام بروزرسانی (UPDATE) یک ردیف به زمان بروزرسانی تغییر پیدا می کند. مانند:
mysql> CREATE TABLE t (name VARCHAR(100), ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
mysql> INSERT INTO t(name) VALUES('Saeid');
mysql> SELECT * FROM t;
+-------+---------------------+
| name  | ts                  |
+-------+---------------------+
| Saeid | 2011-12-22 12:00:26 |
+-------+---------------------+
1 row in set (0.00 sec)

mysql> UPDATE t SET name = 'Alireza';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM t;
+---------+---------------------+
| name    | ts                  |
+---------+---------------------+
| Alireza | 2011-12-22 12:01:56 |
+---------+---------------------+
1 row in set (0.00 sec)
برای کسب اطلاعات بیشتر به صفحه TIMESTAMP Properties در سایت MySQL مراجعه نمایید.

نوع داده YEAR

این نوع داده برای ذخیره سازی سال با فرمت YYYY به کار می‌رود. شما می تواند سال مورد نظر خود را به صورت دو رقمی YEAR(2) و یا ۴ رقمی YEAR(4) تعریف کنید. نوع YEAR از سال 1901 تا 2155 و 0000 را پشتیبانی می کند. در صورتی که سال را به صورت ۲ رقمی تعریف کرده باشید، اعداد 00 تا 69 در قرن ۲۱ و اعداد 70 تا 99 در قرن ۲۰ در نظر گرفته می شوند. مثلا 45 به عنوان 2045 و 80 به صورت 1980 در نظر گرفته می شود. تمامی مقادیر غیر منطقی برای YEAR به صورت 0000 ذخیره می شوند.

رشته ها (String)

نوع داده String برای نگه داری رشته‌ها (متون) استفاده می شود. در زیر اطلاعات کلی داده هایی از نوع String را مشاهده می فرمایید. در جدول زیر M نشان‌دهنده طول تعریف شده برای داده و L نشان‌دهنده طول واقعی رشته داده شده می باشد.

اطلاعات کلی نوع داده رشته‌ها (String)
نوع
مقدار
حافظه (بایت)
CHAR(M)0 <= M <= 255
M × w بایت. w تعداد بایت مورد نیاز برای حداکثر طول کاراکترهای تعریف شده در character set جدول می باشد.
BINARY(M)0 <= M <= 255
M بایت
VARCHAR(M)0 <= M <= 65532
L + 1 بایت اگر داده مورد نظر کمتر از ۲۵۵ بایت نیاز داشته باشد.
L + 2 بایت اگر داده مورد نظر بیشتر از ۲۵۵ بایت نیاز داشته باشد.
VARBINARY(M)0 <= M <= 65532
M + 1 بایت اگر داده مورد نظر کمتر از ۲۵۵ بایت نیاز داشته باشد.
M + 2 بایت اگر داده مورد نظر بیشتر از ۲۵۵ بایت نیاز داشته باشد.
TINYBLOBL < 28L + 1 بایت
TINYTEXTL < 28L + 1 بایت
BLOBL < 216L + 2 بایت
TEXTL < 216L + 2 بایت
MEDIUMBLOBL < 224L + 3 بایت
MEDIUMTEXTL < 224L + 3 بایت
LONGBLOBL < 232L + 4 بایت
LONGTEXTL < 232L + 4 بایت
ENUM('v1','v2',...)حداکثر ۶۵,۵۳۵ عضو۱ یا ۲ بایت.
وابسته به مقدار داده.
SET('v1','v2',...)حداکثر ۶۴ عضو۱، ۲، ۳، ۴ یا ۸ بایت
وابسته به مجموعه داده شده.


نوع داده CHAR و VARCHAR

CHAR و VARCHAR بسیار شبیه به هم هستند. مهم‌ترین تفاوتی که بین CHAR و VARCHAR وجود دارد نحوه ذخیره سازی و بازیابی اطلاعات است. هنگام تعریف این نوع داده‌ها شما حداکثر تعداد کاراکتری را که می خواهید ذخیره شود را مشخص می نمایید. به عنوان مثال CHAR(30) برای ذخیره حداکثر ۳۰ کاراکتر تعریف می شود.
طول ستونی که از نوع CHAR باشد ثابت است. در صورتی که طول داده کمتر از طول تعریف شده باشد، فضای باقیمانده با فاصله (space) از راست پر می‌شود. هنگام بازیابی اطلاعات این فضای خالی قبل از نمایش حذف می‌شود مگر اینکه حالت PAD_CHAR_TO_FULL_LENGTH فعال شده باشد.
در نوع داده VARCHAR طول داده ذخیره شده به اندازه مقدار داده وارد شده می باشد. به عنوان مثال اگر ستونی به صورت VARCHAR(100) تعریف شده باشد ولی طول رشته داده شده 50 کاراکتر باشد، فقط به مقدار بایت زیر فضا لازم است.



(50 * فضای لازم برای ذخیره هر کاراکتر) + 2

در صورتی که در تعریف VARCHAR(M) مقدار M بیشتر از ۶۵,۵۳۵ باشد، MySQL به طور خودکار نوع ستون را از VARCHAR به نوع مناسبی مانند MEDIUMTEXT تغییر می دهد.

جدول زیر تفاوت‌های فضای مورد نیاز برای ذخیره اطلاعات را در CHAR و VARCHAR نمایش می دهد. دقت کنید که در جدول زیر Character Set داده مورد نظر تک بایتی مانند latin1 است.

بررسی تفاوت فضای مورد نیاز برای CHAR(4) و VARCHAR(4)
دادهCHAR(4)فضای مورد نیازVARCHAR(4)فضای مورد نیاز
'''    '۴ بایت''۱ بایت
'ab''ab  '۴ بایت'ab'۳ بایت
'abcd''abcd'۴ بایت'abcd'۵ بایت
'abcdefgh''abcd'۴ بایت'abcd'۵ بایت



نوع داده BINARY و VARBINARY

این نوع داده ها مانند CHAR و VARCHAR می باشند فقط با این تفاوت که در این نوع داده‌ها رشته‌های باینری (صفر و یک) ذخیره می شود. در نتیجه Character set برای این نوع داده‌ها معنی ندارد. از طرفی مرتب‌سازی و مقایسه بر اساس مقدار عددی رشته باینری ذخیره شده می باشد.


نوع داده BLOB و TEXT

این نوع داده‌ها مانند BINARY و VARBINARY می باشند. هر کدام از این داده‌ها دارای ۴ نوع می‌باشند که تنها تفاوت آن‌ها در حداکثر طول داده قابل ذخیره شدن است.

نوع داده ENUM

این نوع داده فقط امکان ذخیره سازی رشته ای را می دهد که از مجموعه تعریف شده باشد. این مجموعه هنگام ساخت جدول تعریف می شود. مانند جدول زیر:
CREATE TABLE sizes (
name ENUM('small', 'medium', 'large')
);
در ستون name در جدول بالا فقط می توانید یکی از مقادیر small، medium یا large را ذخیره نمایید. در صورتی که مقداری خارج از مجموعه وارد مجموعه شود، فضای خالی در name ذخیره می شود، نه مقدار وارد شده.


نوع داده SET

این نوع داده مانند ENUM می باشد، با این تفاوت که شما می توانید چند عضو از مجموعه تعریف شده را انتخاب نمایید. توجه نمایید که یا داده‌های تکراری قبل از ذخیره سازی حذف می شوند. به مثال زیر توجه فرمایید:
mysql> CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));
Query OK, 0 rows affected (0.05 sec)

mysql> INSERT INTO myset (col) VALUES  ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');
Query OK, 5 rows affected (0.00 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> SELECT col FROM myset;
+------+
| col  |
+------+
| a,d  |
| a,d  |
| a,d  |
| a,d  |
| a,d  |
+------+
5 rows in set (0.00 sec)
از قراردادن فاصله قبل و یا بعد ',' جدا خوددداری نمایید.

چطور نوع داده مناسب را انتخاب نماییم؟

قبل از هر چیز بازه‌ی مورد نیاز برای داده خود را معین نمایید. سپس مختصرترین نوع داده را برای ستون خود انتخاب نمایید. به عنوان مثال برای بازه اعداد ۰ تا ۹۹۹۹۹ نوع MEDIUMINT UNSIGNED بهترین گزینه است.
مورد دیگر انتخاب نوع ستون مناسب با داده شما است. به عنوان مثال هرگز تاریخ شمسی را در پایگاه داده در ستونی از نوع رشته (مانند CHAR) ذخیره ننمایید. بهترین گزینه تبدیل تاریخ به تاریخ میلای و ذخیره آن در داده‌ای از نوع DATE است.
در هنگام تعریف ستونی برای داده‌های عددی در صورتی که فقط اعداد مثبت را لازم دارید، ستون خود را از نوع UNSIGNED انتخاب نموده و حداقل بازه را انتخاب نمایید. به عنوان مثال اگر ستون عددی شما کلید اصلی و افزایشی خودکار است (PRIMAY KEY and AUTO_INCREMENT) حتما نوع داده خود را UNSIGNED انتخاب نمایید تا حداکثر مقدار کلید اصلی دو برابر شود. نوع INTEGER SIGNED حداکثر عدد 2147483648 (حدود ۲ میلیارد) و INTEGER UNSIGNED حداکثر عدد 4294967295 (حدود ۴ میلیارد) را پشتیبانی می کند.

روش دیگر استفاده از PROCEDURE ANALYSE به منظور دریافت پیشنهاد خود پایگاه داده است. PROCEDURE ANALYSE با توجه به داده‌های فعلی، پیشنهاد خود را برای بهینه کردن نوع داده ارائه می دهد. در نظر داشته باشید که هر چه تعداد داده فعلی شما بیشتر باشد، PROCEDURE ANALYSE پیشنهاد بهتر و دقیق‌تری می دهد. نحوه استفاده از PROCEDURE ANALYSE بسیار ساده است. نحوه نگارش آن به صورت زیر است:
mysql> SELECT ... FROM ... WHERE ... PROCEDURE ANALYSE([max_elements,[max_memory]]);
مانند:
SELECT col1, col2 FROM table1 PROCEDURE ANALYSE(10, 2000);
یا
SELECT * FROM table1 PROCEDURE ANALYSE() \G

اسامی مشابه

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

اسامی مشابه برای نوع داده‌ها در MySQL
نوع دادهاسم مشابه
INTEGER INT
DECIMAL DEC
DECIMAL FIXED
DECIMAL NUMERIC
DOUBLE REAL
TINYINT BOOLEAN
TINYINT BOOL
VARCHAR(M) CHARACTER VARYING(M)
FLOAT FLOAT4
DOUBLE FLOAT8
TINYINT INT1
SMALLINT INT2
MEDIUMINT INT3
INT INT4
BIGINT INT8
MEDIUMBLOB LONG VARBINARY
MEDIUMTEXT LONG VARCHAR
MEDIUMTEXT LONG
MEDIUMINT MIDDLEINT


منابع

شاد و موفق باشید :)

۱۳۹۰/۰۸/۱۹

کتاب باشگاه مشت زنی (Fight Club) منتشر شد


کتاب باشگاه مشت زنی که فیلم Fight Club بر اساس آن ساخته شده است، با ترجمه فارسی منتشر شد.
اولین قانون: اعضا حق ندارند دربارهٔ باشگاه مبارزه با کسی صحبت کنند.
دومین قانون: اعضا حق ندارند دربارهٔ باشگاه مبارزه با کسی صحبت کنند.
...
..
.

اگر در مورد باشگاه مشت زنی چیزی نمی دانید ویا می خواهید بیشتر بدانید پیوندهای زیر را دنبال کنید:
باشگاه مبارزه (ویکی پدیا)
باشگاه مشت‌زنی (نشر چشمه)
باشگاه مشت‌زنی (فیلم) (در ویکی گفتار)
Fight Club (در جامعه کتاب خوانان Goodreads)

سپاسگزاری
ممنون از:
* چاک پالانیک به خاطر باشگاه مشت زنی
* پیمان خاکسار برای ترجمه این رمان
* نشر چشمه بابت انتشار این کتاب
* لبوفسکی بزرگ برای اطلاع رسانی به موقع ;)

۱۳۹۰/۰۶/۱۹

مدل های درآمدزایی نرم افزارهای آزاد، کنفرانس زنجان


سلام

دو روز گذشته، پنجشنبه و جمعه ۱۷ و ۱۸ شهریور ۹۰، دومین کنفرانس تخصصی نرم افزار های آزاد و متن باز بود. در این دو روز حدود ۲۰ مقاله ارائه شدند. با اینکه کمبودهایی در ارائه ها دیده می شد، با این حال این مراسم سطح قابل قبولی داشت. مهم ترین نکته این کنفرانس همت بچه های زنجان و مسئولین فهیم این استان بود که از همه آنها بسیار بسیار تشکر می کنم.


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


• ممکن است به دلیل فیلتر بودن سایت slideshare.net اسلاید در دسترس شما نباشد.
دانلود نسخه PDF ارائه Free Software / Open Source Business Models - 2.3 MB

همایش روز آزادی نرم‌افزار اصفهان

با نزدیک شدن به روز آزادی نرم‌افزار، مانند سال‌هالی گذشته اصفهان لاگ مراسمی را برگزار خواهد کرد. به نقل از سایت اصفهان لاگ:
هر ساله در سومین شنبه از ماه سپتامبر (شهریورماه) دوستداران و علاقه‌مندان به فلسفه نرم‌افزارهای آزاد در سرار جهان گرد هم می‌آيند تا «روز آزادی نرم‌افزار» را گرامی بدارند. امسال نیز همچون سال‌های گذشته اعضای «گروه کاربران لینوکس اصفهان» در همایشی این روز را گرامی داشته و پذیرای شما مهمانان ارجمند می‌باشد. هدف از این گردهمایی گسترش و ترویج نرم‌افزارهای آزاد/بازمتن می‌باشد.
برای شرکت در این همایش ثبت‌‌نام الزامی است. ثبت نام رایگان می‌باشد ولی از آنجا که به علت محدودیت تنها پذیرش تعداد معدودی از دوستان امکان‌پذیر است خواهشمندیم که هر چه سریع تر ثبت‌نام فرمایید.


زمان: پنج شنبه ۲۴ شهریور ماه ۱۳۹۰ ساعت ۱۴:۳۰
مکان: اصفهان – خیابان باغ گلدسته – سالن اجتماعات کتابخانه ی مرکزی شهرداری اصفهان
*خیلی دوست داشتم که برای اولین بار در این جشن باشم :(


مدل های درآمدزایی نرم افزارهای آزاد

مقدمه
با وجود اینکه امروزه نرم‌افزارهای آزاد بسیاری فراگیر شده اند، هنوز نحوه کسب درآمد این نرم‌افزارها برای بسیاری مبهم است. همیشه سؤالاتی مطرح می‌شود که پاسخ آن‌ها مفهوم نیست. چطور با نوشتن یک نرم‌افزار آزاد می‌توان کسب درآمد کرد؟ آیا امکان کسب درآمد بعد از انتشار سورس نرم‌افزار وجود دارد؟ آیا می‌توان نرم افزاری را فروخت که سورس آن برای همگان در دسترس است؟
برای پاسخ به این سؤالات باید با دید وسیع‌تری به مقوله ایجاد، انتشار، توسعه و پشتیبانی نرم‌افزار نگاه کرد. کسب درآمد از طریق فروش لایسنس تنها یک روش کسب درآمد از نرم‌افزار می باشد. به طور کلی هزینه تولید، نگهداری و توسعه نرم‌افزارهای آزاد به مراتب کمتر از نرم‌افزارهای اختصاصی می باشد. توضیح بیشتر در این رابطه خود نیاز به مقاله‌ای جامع و کامل دارد.
یکی از مهمترین دلایل شکل‌گیری نرم افزارهای اختصاصی (Proprietary software) بحث کسب درآمد از آن‌ها بوده است. متأسفانه بسیاری بر این باورند که در دسترسی قرار دادن کد منبع مانع از ایجاد رقابت بین شرکت های نرم افزاری می شود و با این استدلال به این نتیجه می‌رسند که نرم افزارهای آزاد قابلیت درآمدزایی و رقابت تجاری با نرم افزارهای اختصاصی را ندارند. این درحالیست که شرکت های فعال در زمینه نرم‌افزارهای آزاد به مدل های تجاری موفقی دست پیدا کرده اند.
این مقاله به تفصیل مدل های درآمدزایی نرم افزارهای آزاد را بررسی خواهد کرد.


مدل های تجاری نرم افزارهای آزاد
غالباً مهمترین هدف از انجام یک کار، کسب در‌آمد از آن می باشد. با توجه به در دسترس بودن کد منبع نرم‌افزارهای آزاد، نحوه کسب درآمد از آن همیشه بحث برانگیز بود است. درحال حاضر مدل های تجاری مختلفی به منظور درآمدزایی نرم‌افزارهای آزاد پیش‌بینی شده است.
با درنظرگرفتن نحوه تولید نرم‌افزار آزاد، مدل های تجاری مختلفی برای آن طرح ریزی شده است. این مدل‌ها رویکردی اجباری ویا اختیاری دارند. به عنوان مثال donation یک مدل اختیاری بوده و خرید لایسنس نسخه های تجاری گنو/لینوکس مانند Red Hat Enterprise اجباری می باشد.

دو لایسنس بودن (Dual Licensing)
در این مدل تجاری، سورس نرم‌افزار به صورت یکسان تحت دو لایسنس منتشر می‌شود که یکی از این لایسنس ها GPL است. دلیل استفاده از این مدل را می‌توان به کار بردن نرم‌افزارها و کدهای نرم افزاری آزاد برای ایجاد و توسعه آن دانست. در نتیجه هزینه تولید نرم‌افزار به مراتب کمتر می شود. کاهش هزینه‌ها باعث استفاده بیشتر از نرم افزارهای آزاد شده و حمایت از این‌گونه نرم‌افزارها را افزایش می دهد.
نکته مثبت این مدل محفوظ ماندن سورس اصلی برنامه تحت لایسنس شرکت سازنده می باشد. با این حال نکته منفی این مدل، اجبار مشارکت کنندگان برای قبول هر دو لایسنس است که منجر به کاهش تعداد مشارکت کنندگان شده و بیشتر مشارکت ها را به رفع ایراد (Bug fixes) و تغییرات جزیی محدود می کند.
به عنوان مثال شرکتی قصد تولید برنامه به منظور مدیریت پایگاه داده MySQL دارد. با توجه به لایسنس MySQL که GPL می باشد، این شرکت نیز باید نرم‌افزار خود را تحت این لایسنس منتشر نماید. در صورتی که این شرکت قصد محفوظ نگه داشتن سورس برنامه خود را داشته باشد، نیاز به استفاده از یک لایسنس اختصاصی در کنار لایسنس GPL دارد.

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

نسخه های مختلف
در این مدل یک نسخه رایگان که معمولاً توسط جامعه کاربری توسعه پیدا می‌کند ارائه شده و در کنار آن، نسخه‌ای تجاری تحت عنوان Enterprise فروخته می شود. نسخه رایگان که توسط جامعه کاربری توسعه پیدا می‌کند معمولاً تعداد کاربران بیشتری نسبت به نسخه تجاری دارد. تفاوت این دو نسخه در نحوه توسعه، ارائه و پشتیبانی نرم‌افزار می باشد. گاهی ممکن است که یک نرم‌افزار بیش از یک نسخه تجاری داشته باشد.

فروش افزونه (plugin)
بعضی از نرم افزارهای آزاد، جدا از هسته نرم‌افزار و بسته پایه آن، افزونه هایی را برای توسعه امکانات به فروش می رسانند. این مدل نسبت به مدل «نسخه های مختلف» برای فروشنده نرم‌افزار مقرون به صرفه‌تر است. زیرا مدل «نسخه های مختلف» کاربر را محدود به چند انتخاب می کند. از طرفی نگهداری چند نسخه برای توسعه‌دهنده دشوارتر است. همچنین توسعه دادن افزونه های مختلف و تولید افزونه های بیشتر با توجه به نیازهای کاربران، نسبت به توسعه نسخه های مختلف آسان‌تر است.

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

سفارشی سازی، تحقیق و توسعه (R&D)
شرکت هایی به منظور سفارشی سازی و توسعه نرم‌افزارهای آزاد وجود دارند. هدف این شرکت ها ساخت یک نرم‌افزار ویا سفارشی سازی یک بسته نرم افزاری آزاد با توجه به نیازهای مشتری می باشد. در نهایت نرم‌افزار ساخته شده توسط این‌گونه شرکت به صورت آزاد منتشر می شود. یک نمونه عالی از این نوع توسعه، نرم‌افزار اکلیپس (Eclipse) می باشد. این نرم‌افزار ابتدا توسط شرکت آی بی ام (IBM) ساخته شد و بعدها مدیریت و توسعه آن بر عهده Eclipse Foundation قرار گرفت. با توجه به امکانات و مشخصات اکلیپس، بسیاری از شرکت ها این نرم‌افزار را به عنوان زیرساخت نرم‌افزار خود در نظر گرفته اند. این کار هزینه توسعه زیرساخت را برای این شرکت ها بسیار پایین آورده است. در نتیجه بسیاری از شرکت ها، دانشگاه‌ها به توسعه آن کمک می کنند. نحوه همیاری آن‌ها به صورت‌های مختلفی از مدلهای ذکر شده این مقاله می باشد. بر اساس آخرین گزارش‌ها ۲۵٪ توسعه دهندگان سورس کد از شرکت IBM به همراه پرداخت ۲۲٪ هزینه‌های مربوط به توسعه می باشند. همچنین شرکت‌های بزرگی از جمله اوراکل، بورلند بین ۱٪ تا ۷٪ هزینه‌ها مربوط به توسعه و نگهداری اکلیپس را بر عهده گرفته اند.
نمونه مشابه دیگری از این مدل توسعه هسته لینوکس می باشد.

مستندات و کالاهای مرتبط با نرم‌افزار آزاد
فروش مستنداتی مانند کتاب و کالاهای مرتبط مانند تی شرت مدل تجاری فعالی در حوزه نرم افزارهای آزاد است.

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

پرداخت هزینه توسعه
در این مدل برنامه نویس یا شرکت توسعه‌دهنده نرم‌افزار آزاد هزینه ای را برای افزودن امکانات (معمولاً از جامعه کاربری) درخواست می کند. البته این مدل بیشتر برای توسعه دهندگان حقیقی کاربرد دارد. توسعه‌دهنده می‌تواند در تعامل با کاربران نرم‌افزار خود، هزینه ای را بابت افزودن امکانی به نرم‌افزار درخواست کند. از طرفی کاربر نرم‌افزار نیز می‌تواند با پرداخت هزینه ای امکان یا امکانات مورد نظر خود را از توسعه‌دهنده درخواست کند. معمولاً انجمن گفتگوی نرم‌افزار آزاد مورد نظر محلی را برای این نوع مدل در نظر می گیرد.

مدل تجاری Partnership
این مدل شامل عقد قراردادهایی بین توسعه دهندگان نرم‌افزارهای آزاد و سایر شرکت های می باشد. مانند عقد قرارداد شرکت گوگل با شرکت موزیلا جهت پیش‌فرض بودن موتور جستجو گوگل در مرورگر فایرفاکس. مبلغ این قرارداد در سال ۲۰۰۶ ۷۲میلیون دلار بوده است.

Donation
در این مدل جامعه کاربری و یا شرکت های تجاری به منظور حمایت از نرم‌افزارهای آزاد و توسعه دهندگان این نرم افزارها، هزینه ای را به عنوان donation (کمک مالی) به توسعه‌دهنده اهدا می کنند. این مدل در بسیار از کشورها مرسوم می‌باشد.

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



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

نبود و یا عدم اجرای قوانین
مهم‌ترین مشکل توسعه نرم‌افزارهای آزاد ویا اختصاصی در داخل کشور نبود ویا عدم اجرای قوانین است. عدم وجود و یا اجرا نشدن قوانین مربوط به Copyright در داخل ایران رقابت را از بین برده است. چه رقابت نرم افزارهای اختصاصی با یکدیگر و چه رقابت آن‌ها با نرم افزاری های آزاد. همه روزه ما شاهد فروش بسته های نرم‌افزاری با عناوین گوناگون با قیمت بسیار نازل در داخل کشور هستیم. به عنوان مثال مجموعه بسته های King که چندین هزار نرم‌افزار اختصاصی و آزاد را در خود جای داده‌اند با قیمتی حدود ۲۰,۰۰۰ تومان به فروش می‌روند. در حالی که هزینه فروش همین بسته ها در خارج از کشور بیش از چند صد هزار دلار است. البته هیچکدام از این نرم‌افزار ها دارای پشتیبانی در داخل کشور نمی باشند لازم است. با وجود این موضوع را نمی توان دلیلی برای عدم اجرای Copyright به شمار آورد.

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

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

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

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


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





امیدوارم که در سال‌های بعد هم همایش زنجان برگزار شود و صد البته امیدوارم که چنین همایش هایی در سایر نقاط کشور نیز برگزار گردد.

شاد و پیروز باشید :)

۱۳۹۰/۰۳/۲۹

عادت های بد برنامه نویسان

سلام

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

همه بد کد می نویسند، جز من!
گاه اوقات یک برنامه نویس با دیدن کدهای شخص دیگر، به جای قبول کردن اختلاف نظر موجود در کدنویسی به زیر سوال بردن روش کدنویسی طرف مقابل می پردازد. درست است که در پروژه های تیمی رعایت استانداردهای تیم ضروریست، اما در مواردی که شخص در حال کار بر روی جزییات است و هیچ استانداردی را زیر سوال نبرده، بهتر است قبل از بحث در مورد کدهای نوشته شده، دیدگاه وی را در مورد این نوع کدنویسی بدانیم.
Control + Cut + Copy + P
Copy & Paste
یک از بدترین کارهایی که توسط برنامه نویس انجام می شود و علاوه بر خود به کل تیم و پروژه آسیب وارد کند، Copy و Paste کردن کدها بدون بررسی و فراگیری دانش موجود در آنهاست. این مورد بویژه در برنامه نویسان وب بسیار مشاهده می شود. بهتر است به جای کپی کردن کد از جای دیگری، نیاز خود را با فراگیری تکنیک های لازم رفع کنید. در صورتی که مجبور به نسخه برداری از کد دیگری هستید، بهتر است تک تک خطوط آن را بررسی کرده و لایسنس مربوط به آن را رعایت فرمایید. پیشنهاد می کنم صفحه Copy and paste programming در ویکی پدیا را مطالعه کنید.

نام گزاری نامفهوم متغیرها
این مشکل بیشتر در برنامه نویسان کم تجربه دیده می شود. مثلا متغییری را با حرف u تعریف کرده و در بخش های مختلف استفاده می کند. شما فکر می کنید که منظور از u همان user است، بعد شک می کنید که شاید username باشد و در آخر متوجه می شوید که منظور وی usability بوده است! درصورتی که نام متغییر را با توجه به محتوای آن ها برگزیده شود، خوانایی برنامه دوچندان می شود.

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

من نبودم! عدم مسئولیت پذیری و عذرخواهی
برخی اوقات بخشی از برنامه دچار ایراد می شود و کسی عهده دار ایراد بوجود آمده نیست. از لحاظ اخلاقی گفتن یک عذرخواهی نه تنها از شخصیت شما نمی کاهد، بلکه نشاندهنده حس مسئولیت پذیری شما می شود. البته با نوشتن توضیحات (Comment) در برنامه می توانید، نویسنده کد را به راحتی بیابید.

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

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

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

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

منبع تصویر: worthlessgenius.com

شاد باشید :)

۱۳۹۰/۰۱/۲۸

معرفی نقشه ذهنی و آموزش نرم افزار FreeMind

سلام :)
نقشه ذهنی یکی از موثرترین روش‌ها بیان ایده‌ها، نظرات، فعالیت‌ها و گسترش آن‌ها است. این مقاله به تعریف نقشه ذهنی پرداخته و در ادامه یکی از بهترین نرم افزارهای مورد استفاده در این زمینه را معرفی و آموزش خواهد داد.

نقشه ذهنی چیست؟
نقشه ذهنی روشی برای ترسیم ایده‌ها، نظرات و فعالیت‌ها بدون در نظر گرفتن ساختار معمول نگارش خطی و اولویت‌بندی آن‌ها است. در این روش موضوعات به صورت خیلی خلاصه به صورت سلسله مراتبی حول یک محور خاص گسترش می یابند. در زیر نمونه یک نقشه ذهنی کشیده شده توسط دست را مشاهده می کنید:


این روش نگارش باعث می شود که افراد به سرعت یک ایده را گسترش داده و موضوعات مرتب با آن را در کنار هم گردآوری کنند. مهم ترین ویژگی و فایده نقشه ذهنی درک ساده و سریع موضوع اصلی است.

نرم افزار FreeMind

FreeMind (فری مایند) نرم افزاری برای کشیدن نقشه ذهنی می باشد که به زبان جاوا و تحت مجوز GPL (متن باز و آزاد) منتشر شده است. این نرم افزار بر روی سیستم عامل های ویندوز، لینوکس و مک (Mac OS X) با استفاده از JVM (ماشین مجازی جاوا) اجرا می شود.
برخی از ویژگی های این نرم افزار

  • ذخیره سازی اطلاعات در قالب XML با فرمت .mm

  • خروجی نقشه ذهنی با فرمت‌های HTM، PDF، Flash و...

  • خروجی نقشه ذهنی با فرمت‌های تصویری PNG, JPEG و SVG

  • برچسب زدن گره ها با استفاده از آیکون

  • کشیدن ابر دور چندین گره خاص برای دسته بندی کردن آن‌ها

  • فرمت کردن خودکار نقشه ذهنی با توجه به سطح گره‌ها

  • جستجو در قسمت‌های مختلف نقشه ذهنی

  • ایجاد لینک به فایل و صفحات وب در گره‌ها

  • امکان خنثی کردن کارهای انجام شده (undo)

  • امکان Drag'n Drop (دراگ و دراپ کردن) برای کپی برداری از گره‌ها

  • حالت فایل (File mode) برای دیدن فایل‌ها و دایرکتوری‌های موجود در سیستم به صورت نقشه ذهنی

  • امکان کشیدن نقشه ذهنی بدون استفاده از ماوس

  • امکان کشیدن نقشه ذهنی رمزگزاری شده برای حفاظت بیشتر

  • پشتیبانی از تب (Tab) برای بازکردن چندین نقشه ذهنی در یک پنجره



نیازمندی‌های نصب
• نسخه ۱.۴ یا جدیدتر JRE
• ۱۳ مگابایت فضای خالی بر روی دیسک سخت (هارد دیسک) به منظور نصب FreeMind و پلاگین های پیش فرض آن
• ۵۱۲ مگابایت RAMالبته برای کشیدن نقشه های ذهنی بزرگ تر نیاز به رم بیشتری دارید.

نصب JRE
برای نصب JRE آخرین نسخه آن را از صفحه Java SE Downloads دریافت کنید. با توجه به تحریم ایران و عدم دسترسی به دریافت فایل از سایت اوراکل، کاربران داخل ایران می توانند نسخه های مورد نیاز خود را از لینک های زیر دریافت نمایند:

کاربران ویندوز
JRE 1.6.0.24 (32-bit)
JRE 1.6.0.24 (64-bit)

کاربران لینوکس
در بیشتر مخازن نرم افزاری توزیع های گنو/لینوکس این بسته وجود دارد. به عنوان مثال کاربران اوبونتو ۱۰.۱۰ می توانند با استفاده از دستور زیر ماشین مجازی جاوا را نصب نمایند:
[bash]sudo apt-get install sun-java6-jre[/bash]

نصب FreeMind
نخست نسخه مخصوص سیستم عامل خود را از صفحه دانلود سایت FreeMind دریافت کنید. در زیر لینک‌هایی برای دریافت سریع نسخه ۰.۹ این نرم افزار آمده است:
دریافت برای ویندوز
دریافت برای Mac OS X
دریافت برای گنو/لینوکس توزیع دبیان و سایر توزیع های DEB-based مانند اوبونتو
دریافت برای گنو/لینوکس توزیع سوزه و سایر توزیع های RPM-based مانند فدورا
نکته: FreeMind در بسیاری از مخازن توزیع های گنو/لینوکس وجود دارد. توضیحات بیشتر در مورد نصب در لینوکس.

شروع به کار با FreeMind
قبل از هر چیز باید موضوعی را که قصد دارید در مورد آن نقشه ذهنی بکشید را انتخاب کنید. به عنوان مثال در این بخش ما موضوع Computer programming را انتخاب کرده ایم. هدف اصلی جمع کردن موضوعات کلی مرتبط با آن می باشد. در زیر مراحل ایجاد و کامل کردن یک نقشه ذهنی در این باره را با هم دنبال می کنیم.
۱- ایجاد یک نقشه ذهنی: از منو File گزینه New را انتخاب کنید.

۲- تغییر موضوع پیش فرض به Computer programming: کافیست بر روی `New Mindmap` کلیک کرده و موضوع را به Computer programming تغییر دهید. بعد از تغییر کلید Enter را وارد کنید.

۳- گسترش موضوعات حول محصور اصلی: با انتخاب گزینه `New Child Node` از منو `Insert` یا فشردن دکمه `insert` یک گره جدید ایجاد کرده و محتوای آن را به دلخواه پر کنید.

۴- با انتخاب گزینه `Automatic Layout` از منو `Format` می توانید ظاهر نقشه ذهنی را خودکار تنظیم و زیباتر کنید.

۵- مرحله ۳ را بر روی گره‌ها و موضوع اصلی آن قدر ادامه دهید تا نقشه ذهنی‌تان را کامل کنید:





۶- شخصی سازی نقشه ذهنی: شما می توانید گره های مختلف را با کشیدن جابجا کنید. همچنین می توانید آیکون های مختلف را به گره ها اضافه کنید.



۷- برای ذخیره کردن نقشه ذهنی کافیست گزینه Save را از منو File انتخاب کنید.

۸- برای گرفتن خروجی (Export) از نقشه ذهنی، فرمت مورد نظر را از گزینه export در منو فایل انتخاب نمایید.


* شما می توانید نقشه ذهنی Computer programming را دریافت کنید.

کلیدهای میانبر
یکی از ویژگی هایی که باعث می شود کشیدن نقشه ذهنی منجر به طوفان فکری شود، سرعت توسعه گره ها و در نتیجه موضوعات در آن است. به همین جهت استفاده از کلید های میانبر برای افزایش سرعت عمل در نگارش نقشه ذهنی بسیار موثر است. تصویر زیر کلیدهای میانبر نرم افزار FreeMind را نشان می دهد:


پیوندها


موفق باشید 8-)

۱۳۹۰/۰۱/۱۴

معرفی کتاب: انسان در جستجوی معنی

سلام :)

تعطیلات عید فرصتی شد تا کتاب های مورد علاقه ام را مطالعه کنم. یکی از کتاب های تاثیرگزاری که خواندم «انسان در جستجوی معنی» نوشته ویکتور فرانکل ترجمه نهضت صالحیان و مهین میلانی بود.

معرفی
این کتاب با عنوان Man's Search for Meaning نخستین بار در سال ۱۹۴۶ در وین اتریش و سپس در سال ۱۹۵۹ در آمریکا منتشر شد. این کتاب دارای دو بخش اصلی است. بخش اول با عنوان «تجاربی از اردوگاه کار اجباری» شرح حالی از درون اردوگاه های کار اجباری است که خود نویسنده آن ها لمس کرده و دیده است. بخش دوم به معرفی لوگوتراپی (Logotherapy - معنا درمانی) می پردازد. در این بخش مفاهیمی مانند معناجویی، پویایی اندیشه ای، خلا وجودی، جوهر وجود، معنای رنج و... به صورت خلاصه معرفی شده و انعکاسی از مفاهیم اساسی لوگوتراپی را ارائه می دهد. در آخر نیز بخشی با عنوان پس گفتار وجود دارد که توسط نهضت صالحیان درباره ویکتور فرانکل و معنادرمانی نوشته شده است.

معنادرمانی (Logotherapy)
خاستگاه لغوی معنادرمانی یا لوگوتراپی به واژه یونانی لوگوس باز می‌گردد. لوگوس به معنای واژه یا کلمه، اراده پروردگار یا معناست. اما رساترین معادل آن معنا می‌باشد (logo=meaning). بر این اساس و بنا به گفته ویکتور فرانکل معنادرمانی عبارت است از: «درمان از رهگذر معنا یا شفابخشی از رهگذر معنا» یا «روان درمانی متمرکز بر معنا».
بنابر اصول لوگوتراپی، تلاش برای یافتن معنی در زندگی اساسی ترین نیروی محرکه هر فرد در دوران زندگی اوست. در بخشی از کتاب نویسنده یکی از دغدغه های اصلی خود درباره معنای رنج را اینگونه بیان می کند:



پس از مدت کوتاهی حس کردم که به زودی خواهم مرد. نگرانی های من در این اوضاع بحرانی با سایر رفقا فرق داشت. پرسش آن ها این بود که: « آیا ما از این اردوگاه جان سالم به در خواهیم برد؟ و اگر نه، پس ارزش این همه درد و رنجی که متحمل می شویم چیست؟» ولی پرسشی که پیوسته در گوش من زنگ می زد این بود که: «آیا این همه رنج کشیدن ها و مرگ هایی که شاهد آنیم، معنایی دارد؟ و اگر نه پس نهایتا بقا و جان سالم بدر بردن هم معنایی نخواهد داشت. زیرا اگر معنای زندگی به این تصادفات بستگی داشته باشد، چه از آن جان بدر ببریم و چه نبریم زندگی ارزش زیستن نخواهد داشت.



درباره ویکتور امیل فرانکل
ویکتور فرانکل در ۱۹۰۵ در وین به‌دنیا آمد. او در ۱۹۴۹ از دو دانشگاه وین و آدیتشنالی موفق به گرفتن درجهٔ دکترای اعصاب و روان شد. در ضمن او از ۱۲۰ دانشگاه در سراسر جهان دکترای افتخاری گرفت.
فرانکل به علت یهودی بودن در سال‌های ۱۹۴۲ تا ۱۹۴۵ به وسیله نازی‌ها ابتدا در آشویتس و سپس در داخائو زندانی شد. تجارب او در این اردوگاه‌ها موجب شد مکتب جدیدی را در روانشناسی بنیان‌گذاری کند که معنا درمانی یا لوگوتراپی نامیده می‌شود.

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

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

او پس از پایان جنگ دوم جهانی ریاست بخش اعصاب بیمارستانی در وین را به عهده گرفت و به مقام استادی دانشگاه در رشتهٔ عصب‌شناسی و روان‌پزشکی نایل آمد. در سال‌های ۱۹۷۰ تا ۱۹۷۳ استاد داشنگاه بین‌اللملی سن دیه‌گو بود و نظریه معنا درمانی‌اش در میان روان‌شناسان و روان‌پزشکان پیروان زیادی دارد.
فرانکل در سپتامبر ۱۹۹۷ در سن ۹۲ سالگی در وین درگذشت.

بخش هایی از کتاب

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

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

  • هر یک از ما باید از خود بپرسد که چه چیزهایی از دست داده است که غیرقابل بازگشت است.

  • آنچه موجب مرگ من نشود، مرا نیرومندتر می کند. نیچه

  • رنج وقتی معنا یافت، معنایی چون گذشت و فداکاری، دیگر آزاردهنده نیست.

  • آنچه انسان ها را از پا در می آورد، رنج ها و سرنوشت نامطلوبشان نیست بلکه بی معنا شدن زندگی است که مصیبت بارتر است. و معنا تنها در لذت و شادمانی و خوشی نیست، بلکه در رنج و مرگ هم می توان معنایی یافت.



پیوندها و منابع


موفق و سربلند باشید 8-)

۱۳۸۹/۱۲/۲۲

نکاتی در زمینه استفاده راحت تر از پایگاه داده MySQL

سلام :)

در طول چند سال کار با پایگاه داده MySQL تعدادی Tips (نکته یا راهنما) یاد گرفتم که کار با آن را برای من ساده تر می کردند. مطلب امروز تعدادی از این نکات را معرفی می کند.


نمایش عمودی نتایج
برای مشاهده عمومی نتایج یک query به جای ; از \G در انتهای آن استفاده کنید. مانند:

[sql]
mysql> select * from PARTITIONS limit 2 \G
*************************** 1. row ***************************
TABLE_CATALOG: NULL
TABLE_SCHEMA: information_schema
TABLE_NAME: CHARACTER_SETS
PARTITION_NAME: NULL
SUBPARTITION_NAME: NULL
PARTITION_ORDINAL_POSITION: NULL
SUBPARTITION_ORDINAL_POSITION: NULL
PARTITION_METHOD: NULL
SUBPARTITION_METHOD: NULL
PARTITION_EXPRESSION: NULL
SUBPARTITION_EXPRESSION: NULL
PARTITION_DESCRIPTION: NULL
TABLE_ROWS: 0
AVG_ROW_LENGTH: 384
DATA_LENGTH: 0
MAX_DATA_LENGTH: 16604160
INDEX_LENGTH: 0
DATA_FREE: 0
CREATE_TIME: NULL
UPDATE_TIME: NULL
CHECK_TIME: NULL
CHECKSUM: NULL
PARTITION_COMMENT:
NODEGROUP:
TABLESPACE_NAME: NULL
*************************** 2. row ***************************
TABLE_CATALOG: NULL
TABLE_SCHEMA: information_schema
TABLE_NAME: COLLATIONS
PARTITION_NAME: NULL
SUBPARTITION_NAME: NULL
PARTITION_ORDINAL_POSITION: NULL
SUBPARTITION_ORDINAL_POSITION: NULL
PARTITION_METHOD: NULL
SUBPARTITION_METHOD: NULL
PARTITION_EXPRESSION: NULL
SUBPARTITION_EXPRESSION: NULL
PARTITION_DESCRIPTION: NULL
TABLE_ROWS: 0
AVG_ROW_LENGTH: 231
DATA_LENGTH: 0
MAX_DATA_LENGTH: 16704765
INDEX_LENGTH: 0
DATA_FREE: 0
CREATE_TIME: NULL
UPDATE_TIME: NULL
CHECK_TIME: NULL
CHECKSUM: NULL
PARTITION_COMMENT:
NODEGROUP:
TABLESPACE_NAME: NULL
[/sql]

استفاده از --safe-updates
با استفاده از پارامتر --safe-updates (:معادل --i-am-a-dummy یا -U) می توانید یک حصار امنیتی برای query های مربوط به update و delete فعال کنید. بدین صورت که اگر query حذف یا ویرایش شما where نداشته باشد، اجرا نمی شود. مانند:
[sql]
mysql> delete from meta;
ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
[/sql]
یا
[sql]
mysql> update meta set meta_key = 'my_key';
ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
[/sql]
همچنین شما می توانید به جای استفاده از پارامتر --safe-updates از دستور SET در MySQL استفاده نمایید. مانند:
[sql]
mysql> SET sql_safe_updates=1, sql_select_limit=1000, sql_max_join_size=1000000;
[/sql]
دستور بالا علاوه بر فعال کردن safe updates ، حداکثرهایی نیز برای محدودیت select ساده و انتخاب چندین جدولی اعمال می کند.


فعال سازی auto complete و بروزرسانی cache آن
بعد از نصب MySQL در بسیاری از موارد قابلیت auto complete یا همان «کامل کردن خودکار» فعال است. پارامتر مربوط به فعال سازی آن --auto-rehash می باشد. همچنین شما می توانید در خط فرمان MySQL با تایپ \# این قابلیت را فعال کنید. کاربرد دیگر \# بروزرسانی کش auto completion بعد از انجام تغییرات بر روی پایگاه داده می باشد.
*برای کامل کردن یک خط کافیست دکمه Tab را فشار دهید. در صورتی که نتایج برای کامل کردن یک عبارت بیش از یک مورد باشد، با زدن دو tab پشت سر هم، فهرست این نتایج را مشاهده می فرمایید.

مشاهده فهرست کامل فرایندهای در حال اجرا
برای مشاهده فرایندهای در حال اجرا کافیست دستور show processlist را در خط فرمان وارد کنید. همچنین برای نمایش کامل query در حال اجرا می توانید پارامتر full را به این دستور اضافه کنید. مانند:
[sql]
mysql> show full processlist;
+------+------+-----------+---------+---------+------+-------+-----------------------+
| Id | User | Host | db | Command | Time | State | Info |
+------+------+-----------+---------+---------+------+-------+-----------------------+
| 3101 | root | localhost | efs_tmp | Query | 0 | NULL | show full processlist |
+------+------+-----------+---------+---------+------+-------+-----------------------+
[/sql]

کشتن (kill) یک فرایند
در ستون اول خروجی دستور show processlist آی دی مربوط به فرآیند در حال اجرا را مشاهده کردید. برای متوقف ساختن این فرایند کافیست دستور kill را به صورت زیر اجرا کنیم:
[sql]
mysql> kill 3101;
[/sql]

مشاهده وضعیت MySQL و برخی اطلاعات بیشتر
برای مشاهده وضعیت کلی MySQL شامل تنظیمات و پارامتر های فعال شده از دستور show status استفاده می کنیم. مانند:
[sql]
mysql> show status;
+-----------------------------------+-----------+
| Variable_name | Value |
+-----------------------------------+-----------+
| Aborted_clients | 3 |
| Aborted_connects | 0 |
| Binlog_cache_disk_use | 0 |
| Binlog_cache_use | 0 |
| Bytes_received | 1346 |
..........
........
......
...
.
[/sql]

همچنین برای مشاهده وضعیت INNODB از دستور SHOW ENGINE INNODB STATUS استفاده نمایید.
دستور show table status نیز برای مشاهده وضعیت جداول استفاده می شود. مانند:
[sql]
mysql> show table status like '%user%' \G
*************************** 1. row ***************************
Name: user
Engine: MyISAM
Version: 10
Row_format: Dynamic
Rows: 14
Avg_row_length: 80
Data_length: 1128
Max_data_length: 281474976710655
Index_length: 2048
Data_free: 0
Auto_increment: NULL
Create_time: 2010-11-21 18:07:11
Update_time: 2011-02-27 14:57:28
Check_time: NULL
Collation: utf8_bin
Checksum: NULL
Create_options:
Comment: Users and global privileges
1 row in set (0.00 sec)
[/sql]
* از like برای محدود ساختن نتایج استفاده کرده ام.

دسترسی سریع به وضعیت پایگاه داده
برای دسترسی سریع به پایگاه داده کافیست دستور \s را در خط فرمان MySQL وارد نمایید:
[sql]
mysql> \s
--------------
mysql Ver 14.14 Distrib 5.1.49, for debian-linux-gnu (i686) using readline 6.1

Connection id: 3103
Current database: mydb_tmp
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.1.49-1ubuntu8.1 (Ubuntu)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8
Db characterset: utf8
Client characterset: latin1
Conn. characterset: latin1
UNIX socket: /var/run/mysqld/mysqld.sock
Uptime: 12 hours 39 min 28 sec

Threads: 1 Questions: 27846 Slow queries: 2 Opens: 7711 Flush tables: 1 Open tables: 64 Queries per second avg: 0.611
--------------
[/sql]
دستور show create
به طور کلی دستور show create برای مشاهده نحوه ساخت یک جدول، پایگاه داده، تابع و... استفاده می شود. مانند:

[sql]
mysql> show create database mysql \G
*************************** 1. row ***************************
Database: mysql
Create Database: CREATE DATABASE `mysql` /*!40100 DEFAULT CHARACTER SET utf8 */
[/sql]
یا
[sql]
mysql> show create table time_zone \G
*************************** 1. row ***************************
Table: time_zone
Create Table: CREATE TABLE `time_zone` (
`Time_zone_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Use_leap_seconds` enum('Y','N') NOT NULL DEFAULT 'N',
PRIMARY KEY (`Time_zone_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Time zones'
[/sql]

ساخت یک جدول از ترکیب چند جدول
یکی از انواع engine های موجود در MySQL انجین MERGE یا MRG_MyISAM می باشد. این engine برای ترکیب چندین جدول در یک جدول مورد استفاده قرار می گیرد.
در زیر ما دو جدول با انجین MyISAM و یک جدول total با انجین MERGE از ترکیب دو جدول اول ساخته ایم:
[sql]
mysql> CREATE TABLE t1 (
-> a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> message CHAR(20)) ENGINE=MyISAM;
mysql> CREATE TABLE t2 (
-> a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> message CHAR(20)) ENGINE=MyISAM;
mysql> CREATE TABLE total (
-> a INT NOT NULL AUTO_INCREMENT,
-> message CHAR(20), INDEX(a))
-> ENGINE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;
[/sql]
در صورت وارد کردن اطلاعات به t1 و t ویا بروزرسانی اطلاعات آن ها، امکان دستیابی به اطلاعات از طریق جدول total وجود دارد. مانند:
[sql]
mysql> INSERT INTO t1 (message) VALUES ('Testing'),('table'),('t1');
mysql> INSERT INTO t2 (message) VALUES ('Testing'),('table'),('t2');

mysql> SELECT * FROM total;
+---+---------+
| a | message |
+---+---------+
| 1 | Testing |
| 2 | table |
| 3 | t1 |
| 1 | Testing |
| 2 | table |
| 3 | t2 |
+---+---------+
[/sql]

دستور mysqlshow برای دسترسی سریع به فهرست اطلاعات
شما می توانید برای دسترسی سریع به فهرست پایگاه های داده، جداول و ستون های آنها از دستور mysqlshow استفاده نمایید. مانند:
[sql]$ mysqlshow -uroot
+--------------------+
| Databases |
+--------------------+
| information_schema |
| mydb_tmp |
| mydb |
| mysql |
| radius |
| security |
+--------------------+
[/sql]
یا
[sql]$ mysqlshow -uroot mysql
Database: mysql
+---------------------------+
| Tables |
+---------------------------+
| columns_priv |
| db |
| event |
| func |
| general_log |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| host |
| ndb_binlog_index |
| plugin |
| proc |
| procs_priv |
| servers |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
[/sql]
یا
[sql]$ mysqlshow -uroot mysql servers
Database: mysql Table: servers
+-------------+----------+-----------------+------+-----+---------+-------+---------------------------------+---------+
| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |
+-------------+----------+-----------------+------+-----+---------+-------+---------------------------------+---------+
| Server_name | char(64) | utf8_general_ci | NO | PRI | | | select,insert,update,references | |
| Host | char(64) | utf8_general_ci | NO | | | | select,insert,update,references | |
| Db | char(64) | utf8_general_ci | NO | | | | select,insert,update,references | |
| Username | char(64) | utf8_general_ci | NO | | | | select,insert,update,references | |
| Password | char(64) | utf8_general_ci | NO | | | | select,insert,update,references | |
| Port | int(4) | | NO | | 0 | | select,insert,update,references | |
| Socket | char(64) | utf8_general_ci | NO | | | | select,insert,update,references | |
| Wrapper | char(64) | utf8_general_ci | NO | | | | select,insert,update,references | |
| Owner | char(64) | utf8_general_ci | NO | | | | select,insert,update,references | |
+-------------+----------+-----------------+------+-----+---------+-------+---------------------------------+---------+
[/sql]


مرتب سازی همراه با ارجحیت
در صورتی که قصد دارید علاوه بر مرتب سازی یک query انتخاب، ارجحیتی نیز به بعضی از ریف های آن بدهید، کافیست از ترکیب IN() و order by استفاده کنید. در مثال زیر علاوه بر مرتب سازی بر اساس ستون iso_code به ردیف های IR و US ارجحیت و وزن بالاتری داده ایم:
[sql]
mysql>SELECT * FROM countries ORDER by iso_code IN ('IR', 'US') desc;
+----------+----------------------------------------+
| iso_code | name |
+----------+----------------------------------------+
| IR | IRAN |
| US | United States |
| AF | Afghanistan |
| AL | Albania |
| DZ | Algeria |
| AS | American Samoa |
+----------+----------------------------------------+
[/sql]

امیدوارم که این مطلب راهنمای خوبی برای استفاده راحت تر و مفید تر از پایگاه داده MySQL باشد.

موفق باشید 8)

۱۳۸۹/۱۲/۰۷

بدست آوردن کشور یک آدرس IP به کمک MySQL

سلام :)

مطلب امروز روشی برای بدست آوردن کشور یک آدرس IP (بخوانید آی پی) با استفاده از پایگاه داده MySQL را آموزش می دهد. در این مطلب ابتدا یک جدول که حاوی نام کشور و محدوده IP های آن می باشد ایجاد می کنیم. سپس با تعریف یک تابع، امکان تشخیص سریع کشور مرتبط با هر آی پی را ارائه می دهیم.

IP چیست؟


به نقل از صفحه «نشانی پروتکل اینترنت» در ویکی پدیا، دانشنامه آزاد:

نشانی پروتکل اینترنت (Internet Protocol Address) یا به اختصار نشانی آی‌پی (IP Address) نشانی‌ عددی است که به هریک از دستگاه ها و رایانه‌های متصل به شبکه ی رایانه ای که بر مبنای نمایه TCP/IP (از جمله اینترنت) کار می‌کند، اختصاص داده می‌شوند. پیام‌هایی که دیگر رایانه‌ها برای این رایانه می‌فرستند با این نشانه ی عددی همراه است و راه یاب های شبکه آن را مانند «نشانی گیرنده» در نامه‌های پستی تعبیر می‌کنند، تا بالاخره پیام به رابط شبکه رایانه مورد نظر برسد.


جدول پایگاه داده


من اطلاعات مربوط به محدوده آدرس های آی پی و کشور مرتبط با آنها در جدولی با نام ip_location ذخیره کرده ام. برای ایجاد این جدول دستور زیر را در خط فرمان MySQL وارد نمایید:
[sql]
CREATE TABLE `ip_location` (
`from_ip` int(15) DEFAULT NULL,
`to_ip` int(15) DEFAULT NULL,
`country` varchar(32) DEFAULT NULL,
KEY `from_ip` (`from_ip`,`country`),
KEY `to_ip` (`to_ip`,`country`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
[/sql]
مرحله بعد وارد کردن فهرست کشورها و محدوده آی پی های آن هاست. برای سادگی کار من یک خروجی (Dump) از دستور ایجاد جدول ip_location و اطلاعات موجود در آن تهیه کرده ام.
دریافت ip_location.sql با حجم 165KB
در صورتی که آشنایی با وارد کردن (import) چنین فایل هایی ندارید، پیشنهاد می کنم مطلب «راهنمای وارد کردن(import) و صادر کردن(export) در MySQL» را مطالعه کنید.

تابع getIpCountry


مرحله بعد تعریف تابعی برای محاسبه آدرس ۳۲ بیتی هر آی پی و مقایسه آن با محدوده های موجود در جدول ip_location است. برای تعریف این تابع دستورات زیر را در خط فرمان MySQL وارد کنید:
[sql]
DELIMITER $$
CREATE FUNCTION getIpCountry(ip varchar(15)) RETURNS varchar(64)
BEGIN
declare a tinyint unsigned;
declare b tinyint unsigned;
declare c tinyint unsigned;
declare d tinyint unsigned;
declare total bigint;
declare result varchar(64);
select substring_index(ip, '.', 1 ) into a;
select substring_index(substring_index(ip , '.', 2 ),'.',-1) into b;
select substring_index(substring_index(ip , '.', -2 ),'.',1) into c;
select substring_index(ip, '.', -1 ) into d;
set total := (a*256*256*256) + (b*256*256) + (c*256) + d;
select SQL_CACHE country into result from ip_location where total between from_ip and to_ip limit 1;
if (result is null) or (result = '') then
set result := 'unknown';
end if;
return result;
END$$
DELIMITER ;
[/sql]

بدست آوردن کشور


برای مشاهده کشور مرتبط با هر آی پی کافیست تا با استفاده از دستور SELECT تابع getIpCountry را فراخوانی نماییم. مانند:
[sql]
mysql> SELECT getIpCountry('79.175.165.171');
+--------------------------------+
| getIpCountry('79.175.165.171') |
+--------------------------------+
| IRAN (ISLAMIC REPUBLIC OF) |
+--------------------------------+
1 row in set (0.03 sec)

mysql> SELECT getIpCountry('4.2.2.4');
+-------------------------+
| getIpCountry('4.2.2.4') |
+-------------------------+
| UNITED STATES |
+-------------------------+
1 row in set (0.00 sec)
[/sql]

ایده استفاده


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

پی نوشت


• این مطلب فقط برای آدرس های آی پی نسخه ۴ قابل استفاده است.

موفق باشید 8)

۱۳۸۹/۱۱/۲۷

معرفی کتاب: خلاصه ۵۰ کتاب برتر در زمینه خودیاری

سلام :)

دیروز مطالعه کتاب «خلاصه ۵۰ کتاب برتر در زمینه خودیاری»‌ را تمام کردم. از لحاظ محتوا کتاب فوق العاده ای بود. از نظر ترجمه هم خیلی خوب بود

معرفی
این کتاب شامل ۵۰ فصل می باشد که هر فصل آن به ۳ بخش تقسیم می شود. بخش اول پاراگراف های برگزیده ای از متن کتاب به همراه معرفی کتاب های مشابه می باشد. بخش دوم نقد و بررسی کتاب و ویژگی های نویسنده آن می باشد. بخش سوم نیز به زندگینامه نویسنده کتاب می پردازد.
این کتاب در سال ۲۰۰۱ در استرالیا و سپس در آمریکا و اروپا منتشر شده و در سال ۲۰۰۴ میلادی جایزه بنجامین فرانکلین را دریافت کرده است. عنوان انگلیسی این کتاب `50 Self-Help Classics: 50 Inspirational Books to Transform Your Life.` می باشد که به ۱۶ زبان از جمله فارسی ترجمه شده و در ۲۵ کشور به فروش رفته است.
قدیمی ترین کتاب بررسی شده در این کتاب «داماپادا: آموزه های بودا» و تازه ترین کتاب «مارتا بک: در جستجوی ستاره شمال (۲۰۰۱)» می باشد. این کتاب توسط انتشارات راشین و مترجمی خانوم آزاده مبشر و آقای سیامک صادقی خیابانیان در سال ۱۳۸۹ منتشر شده است. انتشارات راشین در صفحه «خلاصه ۵۰ کتاب برتر در زمینه خودیاری» این امکان را برای خوانندگان خود فراهم کرده است تا ۳ فصل از این کتاب را به صورت رایگان مطالعه نمایند.

بخشی از مقدمه کتاب
«بزرگ ترین کشف انسان معاصر این است که زندگی هر کس می تواند با تغییر فکرش، تغییر کند.» ویلیام جیمز (1842 – 1910)
«عادت های فکری، ثابت و غیرقابل تغییر نیستند. یکی از مهم ترین یافته های علم روان شناسی در 20 سال اخیر این است که انسان می تواند روش فکری خودش را انتخاب کند.» مار تین سلیگمن - نویسنده کتاب خوشبینی آموخته شده
بارها شنیده اید که: «باتغییر دادن فکر و عادتهای ذهنی تان می توانید زندگی تان را تغییر بدهید.» اما آیا هیچ وقت خوب به این جمله فکر کرده اید؟ در کتابی که پیش رو دارید به بررسی بعضی از موثر ترین ایده ها درباره تغییر شخصیت پرداخته ام؛ تغییر کامل و از درون به بیرون.


من این کتاب ها را «آثار برتر خودیاری» می نامم. احتماﻻ شما تعریفی از خودیاری دارید، اما این درک و شناخت شما از خودیاری باید با مطالعه آثار بزرگانی که در این زمینه تحقیق کرده اند و من در این کتاب خلاصه ای از نظرات آنها را جمع آوری کرده ام، عمیق و کامل شود. ار تباطی که بین این آثار وجود دارد این است که همه آنها ناخشنودی و یاس و درماندگی را رد می کنند. البته همه این محققین و نویسندگان، مشکلات و شکست های زندگی را می پذیرند اما معتقدند که انسان نباید در مقابل این ناملایمات و شکست ها تسلیم شود. عمق ناراحتی و شدت شکست مهم نیست، باید بتوانید درک کنید که معنا و مفهوم مشکلات تان چیست و چه اشکالی در فکر و تصمیم هایتان وجود دارد که دچار این سختی ها شده اید. این نکته مهم در دو کتاب یکی از ویکتور فرانکل به نام انسان در جستجوی معنا و دیگری تسلای فلسفه از بوئتیوس (فیلسوف رومی) مطرح شده است. این رویکرد در کمک کردن انسان به خودش اساسی است.

مردم معموﻻ خودیاری را به مشکلات ربط می دهند اما واقعیت این است که بیشتر کتاب ها و نوشته های مربوط به خودیاری درباره امکانات و چیزهای امکانپذیر هستند. کتابهایی که درباره خودیاری هستند به شما کمک می کنند تا مسیر مناسبی را برای خودتان پیدا کنید و بتوانید نگرانی تان را به آرامش و شادی تبدیل کنید یا حداقل شما را تشویق می کنند تا انسان بهتری شوید.

فهرست
در زیر فهرست کتاب های بررسی شده از این کتاب را مشاهده می فرمایید:

١) ﺟِﻴﻤﺰ آﻟِﻦ: ﺗﻮ ﻫﻤﺎﻧﻲ ﻛﻪ ﻣﻲاﻧﺪﻳﺸﻲ؛ 1902
٢) ِاﺳﺘﻴﻮ آﻧﺪرﻳﺎس و ﭼﺎرﻟﺰ ﻓﺎﻛﻨِﺮ: ِان ِال ﭘﻲ؛ 1994
٣) ﻣﺎرﻛﻮس اورِﻟﻴﻮس: ﺗﺄﻣﻼت؛ ﻗﺮن دوم
٤) ﻣﺎرﺗﺎ ِﺑﻚ: در ﺟﺴﺘﺠﻮی ﺳﺘﺎره ﺷﻤﺎل؛ 2001
۵) باگاوادگیتا
٦) اﻧﺠﻴﻞ ﻣﻘﺪس
٧) راﺑﺮت ﺑﻼی: ﻣﺮدِ ﻣﺮد؛ 1990
٨) ﺑﻮﺋِﺘﻴﻮس: ﺗﺴﻼی ﻓﻠﺴﻔﻪ؛ ﻗﺮن ﺷﺸﻢ ﻣﻴﻼدی
٩) آﻟِﻦ دو ﺑﺎﺗُﻦ: ﭘﺮوﺳﺖ؛ 1997
١٠) وﻳﻠﻴﺎم ﺑﺮﻳﺠِﺰ: ﻋﺒﻮر از ﻣﺮﺣﻠﻪای ﺑﻪ ﻣﺮﺣﻠﻪ دﻳﮕﺮ؛ 1980
١١) دﻳﻮﻳﺪ ِﺑﺮﻧﺰ: ﺷﻨﺎﺧﺖدرﻣﺎﻧﻲ؛ 1980
١٢) ﺟﻮزف ﻛَﻤﭙِﻞ و ﺑﻴﻞ ﻣﻮﻳِﺮز: ﻗﺪرت اﺳﻄﻮره؛ 1987
١٣) رﻳﭽﺎرد ﻛﺎرﻟﺴﻮن: ﻧﮕﺮان ﻣﺴﺎﺋﻞ ﻛﻢاﻫﻤﻴﺖ ﻧﺒﺎش؛ 1997
١٤) دِﻳﻞ ﻛﺎرﻧِﮕﻲ: آﻳﻴﻦ دوﺳﺖﻳﺎﺑﻲ؛ 1936
١٥) دﻳﭙﺎك ﭼﺎﭘﺮا: ﻫﻔﺖ ﻗﺎﻧﻮن ﻣﻌﻨﻮی ﻣﻮﻓﻘﻴﺖ؛ 1994
١٦) ﭘﺎﺋﻮﻟﻮ ﻛﻮﺋﻠﻴﻮ: ﻛﻴﻤﻴﺎﮔﺮ؛ 1993
١٧) اﺳﺘﻴﻮِن ﻛﺎوی: ﻫﻔﺖ ﻋﺎدت ﻣﺮدﻣﺎن ﻣﻮﺛﺮ؛ 1989
١٨) ﻣﻴﻬﺎی ﭼﻴﻜﺴِﻨﺖﻣﻴﻬﺎﻳﻲ: روانﺷﻨﺎﺳﻲ ﺗﺠﺮﺑﻴﺎت ﺧﻮﺷﺎﻳﻨﺪ؛ 1990
١٩) داﻻﻳﻲ ﻻﻣﺎ: ﻫﻨﺮ ﺷﺎدﻣﺎﻧﮕﻲ؛ 1998
٢٠) داﻣﺎﭘﺎدا: آﻣﻮزهﻫﺎی ﺑﻮدا
٢١) وِﻳﻦ داﻳِﺮ: ﺟﺎدوی واﻗﻌﻲ؛ 1992
٢٢) راﻟﻒ واﻟﺪو ِاﻣِﺮﺳﻮن: اﺗﻜﺎء ﺑﻪ ﻧﻔﺲ؛ 1841
٢٣) ﻛﻼرﻳﺴﺎ ﭘﻴﻨﻜﻮﻻ ِاﺳﺘﻴﺲ: زﻧﺎﻧﻲ ﻛﻪ ﺑﺎ ﮔﺮگﻫﺎ ﻣﻲدوﻧﺪ؛ 1992
٢٤) وﻳﻜﺘﻮر ﻓﺮاﻧﻜِﻞ: اﻧﺴﺎن در ﺟﺴﺘﺠﻮی ﻣﻌﻨﺎ؛ 1959
٢٥) ِﺑﻨﺠﺎﻣﻴﻦ ﻓﺮاﻧﻜﻠﻴﻦ: اﺗﻮﺑﻴﻮﮔﺮاﻓﻲ؛ 1790
٢٦) ﺷﺎﻛﺘﻲ ﮔﺎوِﻳﻦ: ﺗﺠﺴﻢ ﺧﻼق؛ 1978
٢٧) داﻧﻴِﻞ ﮔُﻠﻤﻦ: ﻫﻮش ﻫﻴﺠﺎﻧﻲ؛ 1995
٢٨) ﺟﺎن ﮔﺮِی: ﻣﺮدان ﻣﺮﻳﺨﻲ- زﻧﺎن وﻧﻮﺳﻲ؛ 1992
٢٩) ﻟﻮﺋﻴﺰ ﻫِﻲ: ﺳﻼﻣﺖ ﺗﻦ در ﺳﻼﻣﺖ روح ؛ 1984
٣٠) ﺟِﻴﻤﺰ ﻫﻴﻠﻤﻦ:رﻣﺰ روح ؛ 1996
٣١) ﺳﻮزان ﺟِﻔِﺮز: ﺑﺘﺮس اﻣﺎ اﻧﺠﺎم ﺑﺪه؛ 1987
٣٢) رﻳﭽﺎرد ﻛُﺦ: ﻗﺎﻧﻮن 80/20؛ 1998
٣٣) ِاِﻟﻦ ﺟِﻲ ﻻﻧﮕِﺮ:ﺗﺼﻤﻴﻢﮔﻴﺮی و ﻛﻨﺘﺮل زﻧﺪﮔﻲ روزﻣﺮه؛ 1989
٣٤) ﻻﺋﻮ دزو: داﺋﻮدِﺟﻴﻨﮓ؛ ﻗﺮن ﭘﻨﺠﻢ ﺗﺎ ﺳﻮم ﻗﺒﻞ از ﻣﻴﻼد
٣٥) ﻣﺎﻛﺴﻮِل ﻣﺎﻟﺘﺲ: ﺳﺎﻳﻜﻮ ﺳﺎﻳﺒِﺮﻧِﺘﻴﻚ؛ 1960
٣٦) آﺑﺮاﻫﺎم ﻣﺎزﻟﻮ: اﻧﮕﻴﺰش و ﺷﺨﺼﻴﺖ؛ 1954
٣٧) ﻓﻴﻠﻴﭗ ﻣﻚﮔﺮا: ﺗﺪاﺑﻴﺮ زﻧﺪﮔﻲ؛ 1999
٣٨) ﺗﻮﻣﺎس ﻣﻮر: ﻣﺮاﻗﺒﺖ از روح؛ 1992
٣٩) ﺟﻮزِف ﻣﻮرﻓﻲ: ﻗﺪرت ﺗﻔﻜﺮ؛ 1963
٤٠) ﻧﻮرﻣﻦ وﻳﻨﺴِﻨﺖ ﭘﻴﻞ: ﻗﺪرت ﻣﺜﺒﺖاﻧﺪﻳﺸﻲ؛ 1952
٤١) ﻛﺎرول ﭘﻴﻴِﺮﺳﻮن: ﻗﻬﺮﻣﺎن درون؛ 1986
٤٢) ِام ِاﺳﻜﺎت ِﭘﻚ: ﺳﻔﺮی ﺑﻲﭘﺎﻳﺎن در ﻣﺴﻴﺮ رﺷﺪ ﻣﻌﻨﻮی؛ 1978
٤٣) ِاﻳﻦ راﻧﺪ: اﻃﻠﺲ ﺷﺎﻧﻪ ﺧﺎﻟﻲ ﻛﺮد؛ 1957
٤٤) آﻧﺘﻮﻧﻲ راﺑﻴﻨﺰ: ﻏﻮل درونﺗﺎن را ﺑﻴﺪار ﻛﻨﻴﺪ؛ 1991
٤٥) ﻓﻠﻮراﻧﺲ ِاﺳﻜﺎوِل ﺷﻴﻦ: ﺑﺎزی زﻧﺪﮔﻲ و روش اﻳﻦ ﺑﺎزی؛ 1925
٤٦) ﻣﺎرﺗﻴﻦ ﺳِﻠﻴﮕﻤﻦ: ﺧﻮشﺑﻴﻨﻲ آﻣﻮﺧﺘﻪﺷﺪه؛ 1991
٤٧) ﺳﺎﻣﻮﺋِﻞ ِاﺳﻤﺎﻳﻠﺰ: ﺧﻮدﻳﺎری؛ 1859
٤٨) ﭘﻴﻴِﺮ ﺗﻴﺎر دو ﺷﺎردن: ﭘﺪﻳﺪهای ﺑﻪ ﻧﺎم اﻧﺴﺎن
٤٩) ﻫﻨﺮی دﻳﻮﻳﺪ ﺗﺎرو: واﻟﺪِن؛ 1854
٥٠) ﻣﺎرﻳﺎن وﻳﻠﻴﺎﻣﺴﻮن: ﺑﺎزﮔﺸﺖ ﺑﻪ ﻋﺸﻖ؛ 1994


برخی از جملات کتاب
در طول مطالعه کتاب برخی از جملات تاثیرگزار آن را انتخاب کردم تا هر از چند گاهی آنها را مطالعه کنم. در زیر تعدادی از آنها را مشاهده می فرمایید:

  • وقتی تصمیم می گیریم تغییری در زندگی مان ایجاد کنیم (مثلا بچه دار شویم، شغلمان را عوض کنیم یا یکسال استراحت کنیم) صدایی در درون مان اعتراض می کند و می گوید: «اگر این کار را بکنی همه می گویند دیوانه شده ای، همه از تو متنفر می شوند و...» این حالت واقعا ناراحت کننده است. کاری که باید بکنیم این است که بپذیریم «همه» فقط شامل چند نفر هستند. علم روان شناسی این پدیده را تحت عنوان «دیگری تعمیم یافته» می شناسند. مثلا مدت ها طول کشید تا مارتا بک متوجه شود که فقط برای راضی نگه داشتن پدرش است که وقتش را برای نوشتن مطالب طولانی معمولی در یک نشریه دانشگاهی تلف می کند.

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

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

  • مهم نیست چه اتفاقی برای انسان می افتد. او همیشه حق انتخاب دارد.

  • وقتی انسان به چیزی عادت می کند دیگر درستی یا نادرستی آن برایش اهمیت ندارد.

  • احساس، تقریبا آخرین عاملی است که باید به آن اعتماد کنیم چون احساس، واقعیت نیست.

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

  • نگران وقت های آزادتان نباشید. به هر حال شما انسان هستید نه ماشین

  • بهترین راخ برخورد با مشاجره، دوری از آن است.

  • در گفتگوها اجازه دهید طرف مقابلتان بیشتر از شما صبحت کند.

  • مشکلات همیشه وجود دارند اما بهتر است انسان مشکلاتی را تجربه کند که در جهت خواسته هایش هستند



پیوندها


پی نوشت
من این کتاب رو به همه پیشنهاد می کنم. واقعا کتاب خوبی بود. بخصوص سبک نگارشش که همراه با نقد کتاب ها نوشته شده.

موفق و سربلند باشید :)

۱۳۸۹/۱۱/۱۵

تشخیص اعمال محدودیت سرعت دسترسی به پروتکل های وب

سلام :)

یکی از مواردی که در جهت کنترل ترافیک وب نیز اعمال محدودیت دسترسی کاربران در بعضی از کشور از جمله ایران صورت می گیرد، مدیریت سرعت دسترسی به برخی از پروتکل های وب می باشد. مثلا گاهی اوقات سرعت اتصال و استفاده از دسترسی امن (SSL و SSH) به شدت کاهش می یابد. مثلا با وجود سرعت مناسب، دسترسی به سرویس ایمیل گوگل (جی میل) با پروتکل SSL که با https صورت می گیرد بسیار کم می شود. البته در این مواقع این مشکل مختص سرویس جی میل نمی باشد و اعمال محدودیت بر روی تمامی آدرس های https صورت می گیرد. از جمله دسترسی به پلسک (مدیریت هاستینگ) وب سایت ها.

Traffic Shaping
در اصطلاح به مدیریت ترافیک بین کاربر و سرویس دهنده اینترنت Traffic Shaping گفته می شود. بعد از ظهور سرویس های P2P و بخصوص BitTorrent استفاده از Traffic shaping در جهان به شدت افزایش یافت.
البته هدف اصلی از ایجاد چنین سیستمی، بهینه سازی دسترسی به اینترنت برای کاربران و سازمان ها می باشد. به عنوان مثال شرکتی که بیش از ۱۰۰۰ کارمند دارد، جهت بهینه سازی سرعت استفاده از اینترنت و نیز جلوگیری از اتلاف پهنای باند، هنگام عقد قرارداد با سرویس دهنده خدمات اینترنتی (ISP) از وی تقاضا می کند تا دسترسی به پروتکل P2P مانند تورنت را کاهش دهد.
یکی از ساده ترین راه ها برای تشخیص اعمال محدودیت صورت گرفته از سوی سرویس دهنده استفاده از سایت و سرویس Glasnost می باشد.



هدف از پروژه Glasnost شفاف سازی خدمات ارائه شده و سیاست های صورت گرفته توسط ISP ها در قبال مشتریان می باشد.



این سایت برای محاسبه سرعت و تشخیص محدودیت از Applet جاوا استفاده می کند. در نتیجه شما باید JRE را بر روی کامپیوتر خود نصب کرده باشد. کاربران سیستم عامل ویندوز می توانند JRE را از صفحه مربوط به JRE در سایت filehippo.com دریافت کنند. کاربران سیستم عامل اوبونتو نیز می توانند از دستور زیر جهت نصب و فعال سازی پلاگین جاوا استفاده کنند:
[bash]sudo apt-get install sun-java6-plugin[/bash]
کاربران بقیه سیستم عامل ها نیز می توانند نسخه مرتبط با سیستم عامل خود را از سایت اوراکل دریافت نمایند.
بعد از نصب پلاگین جاوا، کافیست به آدرس Glasnost Tests مراجعه و پروتکل مورد نظر خود جهت بررسی سرعت را انتخاب کنید. بعد از انتخاب پروتکل، بر روی دکمه Start testing کلیک نمایید:

*بررسی و تشخیص اعمال محدودیت صورت گرفته بین ۵ تا ۸ دقیقه زمان می برد.
*در هنگام بررسی سرعت از انجام دانلودهای حجیم خودداری فرمایید.
و تست در حال اجراست:


در زیر نمونه ای از نتایج بدست آمده را مشاهده می فرمایید:


سورس ابزار تست سرعت Glasnost
سرویس Glasnost سورس ابزار تست سرعت خود را در اختیار عموم قرار داده است. برای اطلاعات بیشتر دراین زمینه به صفحه Glasnost: Hosting a test server ، بخش How to get the source code مراجعه نمایید.



پی نوشت
• امیدوارم که سایت Glasnost فیلتر نشه!

شاد و موفق باشید ;)

۱۳۸۹/۱۰/۱۹

شروع کار با Google Maps API

سلام :)
خیلی از ما با سرویس نقشه های گوگل (Google Maps) آشنا هستیم. این سرویس در ویکی پدیا اینگونه تعریف شده است:

گوگل مپس (به انگلیسی: Google Maps، به معنی: نقشه‌های گوگل) یک محصول وب از شرکت گوگل است. در گوگل مپس، نقشه‌های دقیق و کاملی از زمین ارائه می‌گردد. گوگل مپس از فن‌آوری‌هایی چون Tele Atlas استفاده می‌کند.


گوگل مپس این امکان را برای مدیران و برنامه نویسان وب سایت ها فراهم کرده است تا با استفاده از API آن، نقشه های موجود را به دلخواه در وب سایت خود نمایش دهند. در حال حاضر، گوگل رابط های زیر را ارائه می کند:

در ادامه شروع کار با Google Maps JavaScript API V3 را با هم بررسی می کنیم.

برای استفاده از این سرویس در وب سایت یا وبلاگ خود، قبل از هر چیز باید کلید لازم برای ارتباط دامنه خود با گوگل را بدست بیاورید. البته این کلید فقط در برخی مواقع ضروری است. دریافت این key با ثبت نام در Google Maps API براحتی از طرف گوگل برای شما نمایش داده می شود.

ساده ترین نوع پیاده سازی (برنامه Hello, World)
[html]
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no"/>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<style type="text/css">
html {
height: 100%
}
body {
height: 100%;
margin: 0px;
padding: 0px
}
#map_canvas {
height: 100%
}
</style>
<title>Google Maps JavaScript API v3 Example: Map Simple</title>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
function initialize() {
var myLatlng = new google.maps.LatLng(35.695964, 51.417704);
var myOptions = {
zoom: 8,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
}
</script>
</head>
<body onload="initialize()">
<div id="map_canvas"></div>
</body>
</html>
[/html]
کدهای بالا خیلی گویا هستند ولی چند نکته برای توجه وجود دارد:
• با استفاده از <!DOCTYPE html> مشخص کردیم که مرورگر این صفحه را با استانداردهای html5 پردازش کند.
• کدهای مربوط به API را در داخل تگ script قرار دادیم.
• یک div با شناسه "map_canvas" برای نشان دادن نقشه در نظر گرفتیم.
• با استفاده از اتریبیوت onload تگ body، نقشه را initialize یا مقداردهی اولیه کردیم.
اطلاعات بیشتر در Google Maps Javascript API V3 Tutorial ارائه شده است.

همین مراحل برای نمایش نقشه زیر کافیست:




یکی از کارهایی که در حال انجام آن هستم، پیاده سازی مراکز پوشش اینترنت توسط یکی از شرکت های ارائه دهنده خدمات اینترنتیست. نمونه اولیه این کار را در زیر مشاهده می فرمایید:






Opacity: 25%   50%   100%




پیوندها

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

همیشه شاد، و موفق باشید ;)