متن و ترجمه ی آهنگ Mujer از Gipsy Kings

اسپانیایی :

No quiero
Mandar a nadie que me mande a mi
Me gusta vivir de herrante
Hoy aquí, mañana allí

Mi vida sique adelante
Lo que tanto he sufrido por ti
Lo que tanto he sufrido por ti

No quiero
Mandar a nadie que me mande a mi
Me gusta vivir de herrante
Hoy aquí, mañana allí

Mi vida sique adelante
Lo que tanto he sufrido por ti
Lo que tanto he sufrido por ti

Mujer, mujer
¿Por qué cambias
tu manera y forma de vivir?
Mujer, mujer
¿Por qué cambias
tu manera y forma de vivir?


انگلیسی : 


I don't want to
Rule over someone that would also rule over me
I like to live as a wanderer
Today I'm here, tomorrow there

My life keeps going
How much I've suffered because of you
How much I've suffered because of you

I don't want to
Rule over someone that would also rule over me
I like to live as a wanderer
Today I'm here, tomorrow there

My life keeps going
How much I've suffered because of you
How much I've suffered because of you

Woman, woman
Why do you change
The way and manner in which you live?
Woman, woman
Why do you change
The way and manner in which you live?


فارسی :

زن

من نمیخواهم
بر کسی سلطه (تملک) داشته باشم که او نیز بخواهد بر من سلطه داشته باشد
من دوست دارم مانند یک سرگردان زندگی کنم
امروز اینجا هستم، فردا آنجا

زندگی من ادامه دارد
چقدر به خاطر تو زجر کشیدم
چقدر به خاطر تو زجر کشیدم

من نمیخواهم
بر کسی سلطه داشته باشم که او نیز بخواهد بر من سلطه داشته باشد
من دوست دارم مانند یک سرگردان زندگی کنم
امروز اینجا هستم، فردا آنجا

زندگی من ادامه دارد
چقدر به خاطر تو زجر کشیدم
چقدر به خاطر تو زجر کشیدم

زن، زن
چرا سبک و شیوه ی زندگیت را تغییر دادی؟ (چرا عوض شدی؟)
زن، زن
چرا سبک و شیوه ی زندگیت را تغییر دادی؟ (چرا عوض شدی؟)

اختصاص ToolTip به کنترل ها

 
ToolTip یکی از ابزار های مفید برای نمایش توضیحات در برنامه ها است. همه ما این ابزار را در برنامه های مختلف دیده ایم، پنجره ی کوچکی که هنگام قرار دادن نشانگر موس بر روی ایکون ها، کلیدها ، پنجره ها و دیگر ابزار ها، ظاهر می شود و توضیحاتی را در مورد عملکرد آن ابزار نشان می دهد. در این پست با نحوه ی ایجاد یک Tooltip و اختصاص دادن آن به یک کنترل در زبان C++ یا C# اشنا می شویم.


برای ایجاد یک tooltip میتوان از کلاس tooltip استفاده کرد یا در صفحه ی طراحی برنامه از منوی ابزار (tool box) ابزار tooltip را انتخاب کرده و یک tooltip در فرم ایجاد کنید. در زیر ایجاد یک شی از کلاس tooltip برای دو زبان C++ و C# نشان داده شده است.

C++ : ToolTip ^ myTollTip = gcnew ToolTip();
C# : ToolTip myToolTip = new TooTip();


کلاس tooltip دارای متد ها و خواص مختلفی است که میتوان از انها برای شخصی سازی این ابزار استفاه کرد. برای مثال از "AutoPopDelay" برای تنظیم زمان نمایشtooltip ، و "AutomaticDelay" برای تنظیم تاخیر نمایش tooltip استفاده می شود. برای اختصاص دادن tooltip به یک کنترل از تابع SetToolTip استفاده می شود که به صورت زیر می باشد :


myToolTip - > AutoPopDelay = 4000;
myToolTip - > SetToolTip (this - > botton1, "Your message");


در خط اول مدت زمان نمایش tooltip را تعیین کرده ایم؛ در خط دوم؛ پارامتر اول تابع SetToolTip ، کنترلی است که میخوهیم tooltip به آن اختصاص داده شود (در اینجا button1 ) و پارامتر دوم، متن tooltip است. میتوان کد ها بالا را در قسمت از برنامه قرار داد ولی بهتر است در تابع Load فرم خود قرار دهید تا در هنگام بارگذاری برنامه این دستورات اجرا شوند.  

برنامه نویسی به زبان PHP (مقدمات)


این پست اولین پست از مجموعه پست های برنامه نویسی به زبان PHP است که انشاا... در آینده به مرور اضافه خواهند شد. در این پست به معرفی این زبان و برخی اصطلاحات پایه آن، سپس در پست های آینده به مباحث پیشرفته تر می پردازیم.
PHP در پایه مخفف Personal Home Page و امروزه مخفف HyperText Pre-Processor است. PHP یک زبان کامل اسکریپت نویسی و Server-Side (به این معنی که کد های شما توسط سرور اجرا می شود نه توسط مرورگر) است که برای ایجاد صفحات وب پویا (دینامیک) ایجاد شده است. این زبان همچنین قابلیت به کار گیری در برنامه های کاربردی گرافیکی را نیز دارد. برخی از ویژگی های این زبان عبارتند از :

- رایگان و فراگیر بودن
- Sever-Side
- مستقل از فضای خالی (WhiteSpace-Indipendent)
- متن باز بودن
- قابل ادغام با اچ تی ام ال.
- اعلانی (Declarative) یا شی گرا (Object Oriented) بودن.

اطلاعاتی کلی در مورد زبان PHP :

 تگ جدا سازی کد ها : < ? php .... ? >  - 
- سایت رسمی : www.Php.net
- فایل تنظیمات کلی : Php.ini
- توضیحات : // یا /* */
- متغیر ها نیازی به اعلان ندارند. تنها علامت $ را به ابتدای متغیر اضافه می کنیم.
- دستور ها با علامت نقطه ویرگول (;) پایان می یابند.




کلاس FileInfo


کلاس FileInfo در دات نت (.Net)، برای دریافت اطلاعات درباره یک فایل و کار با آن ایجاد شده است. این کلاس در سر فایل System.IO تعریف شده و شیوه به کار بردن آن به صورت زیر است. کد زیر یک نمونه (شی) از این کلاس ایجاد می کند.


C# : System.IO.FileInfo Object_Name = new System.IO.FileInfo ("File Address");

C++CLI : System::IO::FileInfo ^ Object_Name = gcnew System::IO::Fileinfo:: ("File Address");


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

attributes : مشخصه فایل
ReadOnly : فقط خواندنی بودن
FullName : آدرس و نام کامل
Length : طول فایل
Directory : پوشه حاوی فایل

در بالا چند نمونه از خواص این کلاس را ذکر کردیم. با استفاده از یک شی میتوانیم به این خواص (و همچنین متد های) کلاس دسترسی پیدا کنیم. برای مثال :

FileInfo ^ myFile = gcnew FileInfo ("C:/File1.txt");
Console::WriteLine (myFile - > FullName);

نام و آدرس کامل فایل را برمی گرداند و :

myFile - > CopyTo ("Destination File" , "overwrite flag");

فایل انتخاب شده را در فایل دیگر (موجود یا ایجاد شده توسط برنامه) کپی می کند.

چک باکس Do Not Show this Message Again


بدون شک همه ی ما در برنامه های مختلف با چک باکس هایی مشابه "Dont show this message again" روبه رو شده ایم؛ این چک باکس ها همان طور که از نامشان بر می آید برای جلوگیری از نمایش مکرر اطلاعات خاص به کار روند. در برنامه نویسی هم بسیاری از مواقع لازم میشود تا گزینه ای را برای کاربر ایجاد کنیم تا در صورت لزوم کاربر بتواند از نمایش مکرر پیغام ها و اطلاعات جلوگیری کند. در ادامه با نحوه ی ایجاد چنین گزینه ای اشنا خواهیم شد.
معمولا در فرم ها یا ویندوز ها این چک باکس قرار داده می شود؛ متاسفانه در کلاس MessageBox امکان اضافه کردن چک باکس (یا هر تغییر دیگر) وجود ندارد و بایستی خودتان یک فرم ایجاد کرده و این چک باکس را به همراه دیگر کنترل های لازم در داخل آن قرار دهید. پس از ایجاد فرم جدید و قرار دادن چک باکس در درون آن باید تصمیم بگیرید که تصمیم کاربر برای انتخاب این چک باکس تا چه زمانی اعتبار دارد (؟) در طول زمان اجرای برنامه یا برای همیشه. اگر میخواهید این تصمیم برای همیشه اعتبار داشته باشد نیاز دارید که آن را به نحوی در یک فایل ذخیره کنید ولی اگر قرار است که فقط تا زمانی که برنامه در حال اجرا است این چک باکس عمل کند و دوباره در هنگام اجرای مجدد، چک نشده باشد نیازی به ذخیره اطلاعات در فایل نیست.
به هر حال برای ذخیره ی تیک خوردن این چک باکس میتوانید از یک متغیر سراسری (General) استفاده کنید. برای مثال متغیر زیر به نام Flag که از نوع boolean است و متغیری سراسری تعریف شده است (متغیری که میتواند در تمامی فرم ها قابل دسترس باشد) میتواند برای کار ما استفاده شود.

if (SampleCheckBox::Checked)
{
    Flag = false;
}

کد بالا در فرمی که برای نمایش ایجاد کرده اید و چک باکس را درون ان قرار داده اید (در اینجا به نام SampleCheckBox ) نوشته می شود و باعث می شود که هنگامی که کاربر این چک باکس را تیک می زند، متغیر سراسری Flag به "نادرست" (false) تغییر کند. سپس در فرم های دیگر میتوانید که این متغیر را در هنگام نمایش این فرم بررسی کنید.

if (Flag == true)
{
     SampleForm^ myFrm = gcnew SampleForm();
     myFrm - > Show();
}

در کد بالا اگر متغیر Flag ارزش "درست" داشته باشد فرم ایجاد شده نمایش داده می شود و در غیر این صورت (اگر چک باکس تیک خورده باشد) چیزی نمایش داده نخواهد شد. حالا اگر قرار باشد که این چک باکس برای همیشه از نمایش این فرم جلوگیری کند میتوانید اطلاعات را برای مثال در یک فایل ذخیره کنید. البته میتوان این کار را با روش های دیگری نیز انجام داد.

توابع Static عضو کلاس


با تعریف یک تابع به صورت ایستا یا Static ، آن را مستقل از هر شی منحصر به فرد از کلاس خواهید کرد. به عبارت دیگر این تابع برای همه ی اشیاء کلاس، یکسان خواهد بود. مزیت توابع static نسبت به توابع دیگر این است که میتوان آنها را بدون اینکه شیئی از کلاس را در اختیار داشته باشیم، فراخوانی کنیم. تابع زیر نمونه ی یک تابع static برای کلاس است. از کلمه ی کلیدی static برای تعریف چنین تابعی استفاده می شود.

class Sample
{
public:
     static void Msg()
    {
        Console::WriteLine("hello world !");
    }
};

تابع Msg را میتوان به دو صورت فراخوانی کرد، به صورت مستقیم یا با استفاده از یک شی :

Direct call :  Sample::Msg();


with "object" : Sample obj;
                    obj.Msg();

With "pointer to object" : Sample* obj = new Sample();
                                   obj - > Msg(); 

برنامه الگوریتم فشرده سازی lempel-ziv


در پست های قبل در مورد الگوریتم lempel-ziv صحبت کرده بودیم، در این پست نیز پیاده سازی این الگوریتم را در زبان C# یا C++ بررسی می کنیم. پیش از هر کاری باید بدانید که هدف ما در این پست، اشنایی با نحوه ی کار این الگوریتم و افزایش مهارت در برنامه نویسی است، نه ساخت یک برنامه کاربردی.
پیاده سازی این الگوریم را میتوان به چندین شیوه ی مختلف انجام داد، و چندان پیچیده نیست. برای نوشتن این برنامه به یک آرایه یا رشته برای ورودی، یک آرایه یا رشته برای دیکشنری و یک آرایه یا رشته برای خروجی نیازمندیم. میتوانیم اطلاعات را هم در یک آرایه ذخیره کنیم و هم به صورت متوالی در یک رشته (string)؛ ولی بهتر است از ارایه برای این کار استفاده کنیم.
اولین کار پس از دریافت ورودی از کاربر این است که دیکشنری اولیه را تشکیل دهیم. ما ورودی را در این برنامه به صورت "متن" در نظر میگیریم؛ پس ابتدا باید به دنبال کاراکتر های متمایز در این ورودی بگردیم. تکه کدی مانند کد زیر میتواند این کار را برای ما انجام دهد :

D[0] = Input[0].ToString();
LEN = 1;
for (i = 1; i < Input.Length; i++)
{
flag = true;
for (j = 0; j < LEN; j++)
{
if (Input[i].ToString() == D[j])
{
flag = false;
break;
}
}

if (flag)
{
D[LEN++] = Input[i].ToString();
}
}

ورودی : Input
دیکشنری : D
طول دیکشنری : LEN
پرچم : flag

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

تکه کد زیر را میتوان برای هسته ی اصلی برنامه به کار برد. این کد را میتوان به روش های دیگر و بهتر نیز نوشت ولی کد زیر نیز تا این جا جواب داده است!

// true : found
// false : not there
for (i = 0; i < Input.Length; i++)
{
k = i;
p = -1;
Temp = Input[i].ToString();
Loop:
flag = false;
for (j = 0; j < LEN && k < Input.Length - 1; j++)
{
if (D[j] == Temp)
{
flag = true;
break;
}
}
if (flag == true)
{
Temp += Input[++k];
p++;
goto Loop;
}
else if (Temp.Length > 1)
{
D[LEN++] = Temp;
O += Find(D, LEN, sub(Temp)).ToString() + Separator;
i += p;
}
if (Temp.Length == 1 && i + 1 == Input.Length)
{
O += Find(D, LEN, Temp);
}

خروجی : O
تابع برای پیدا کردن شماره یک داده در دیکشنری : Find
تابع برای حذف کردن یک کاراکتر از انتهای یک رشته : sub

برنامه زیر را میتوانید برای مشاهده نتیجه فشرده سازی متن با این الگوریتم استفاده کنید. (برای اجرای برنامه به .Net نسخه ی 4 نیاز دارید).

الگوریتم Lempel-Ziv


Lempel-Ziv یکی از الگوریتم های بی اتلاف و "دیکشنری پایه" فشرده سازی است که در سال 1977 توسط دو دانشمند کامپیوتر اسرائیلی به نام های Abraham Lempel و Jacob Ziv ارائه شد و تا به حال مشتقات بسیاری از آن ایجاد شده است. منظور از "دیکشنری پایه" این است که این الگوریتم برای رمزکردن اطلاعات از یک دیکشنری یا پایگاه اطلاعات استفاده می کند؛ این دیکشنری در طول اجرای الگوریتم ایجاد و تکمیل می شود؛ یا به عبارت دیگر به صورت On-the-Fly ایجاد می شود.
در این الگوریتم، قسمت های مختلفی از ورودی (با توجه به قسمت های قبلی) توسط کد های خاص و متمایزی جایگزین می شوند. در آخر ورودی به صورت سلسله ای از این کد ها در خواهد امد. کد های جایگزین شده از روی منبع داده ای که به آن "دیکشنری" (Dictionary) گفته می شود انتخاب خواهند شد و دیکشنری نیز بر اساس ورودی ایجاد و تکمیل می شود. تصویر متحرک زیر چگونگی کارکرد این الگوریتم برای یک ورودی مشخص را نشان می دهد.




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

چه چیز جدیدی در Opera 12 وجود دارد ؟


نسخه 12 (بتا) اپرا دارای ویژگی های جذابی است که وبگردی را برای کاربرانش سریعتر و روان تر از همیشه خواهد کرد. در ادامه با برخی از این ویژگی ها آشنا می شویم :


ویژگی های ارتقا یافته :
- شروع مجدد سریعتر به لطف توالی بارگذاری tab هوشمند تر.
- بارگذاری سریعتر صفحات، حتی برای صفحات وب ایمن.
- پشتیبانی از ویندوز و مک 64 بیتی.
- وبگردی روان و پایدار، به لطف پشتیبانی از افزونه های "خارج از پردازش" (out-of-process).
ویژگی های جدید :
"تم های سبک" جدید باعث سهولت در شخصی سازی مرورگر خواهند شد، و نصب و پاک کردن تم ها تنها با یک کلیک انجام خواهد شد. همچنین طراحان می توانند تم های جدید ایجاد کنند.
- علائم امنیتی دوباره طراحی شده (اصلاح شده) :
حالا با علائم رنگی مخصوص، میتوان آسان تر تنظیمات امنیتی و حریم خصوصی را وب سایت ها مشاهده کرد.
- دوربین و رابط های برنامه نویسی افزونه ها :
پشتیبانی از دوربین ویدئویی از طریق API های که امکان سرویس های جالبی مانند برنامه های کاربردی تصاویر و ردیابی صورت و ... را فراهم می کند. اپرا همچنین یک API قدرتمند برای ویندوز و تبلت ها ارائه خواهد داد که امکان تعامل افزونه ها با tab ها ، ساخت گروه های tab یا مدیریت ویندوز را ارائه خواهد داد.
- پشتیبانی از اسکریپت های راست-به-چپ :
اپرا 12 حالا زبان های دیگری را همراهی می کند. حالا که اپرا رابط کاربری زبان های راست-به-چپ را پشتیبانی می کند، کاربران عربی، فارسی، اردو و دیگر زبان ها میتوانند از اپرا در زبان دلخواه خود لذت ببرند.
پشتیبانی آزمایشی از شتاب دهی سخت افزاری WebGL :
اپرا 12 قادر خواهد بود تا از کارت گرافیک کامپیوتر شما برای قدرت پردازش استفاده کند. این افزایش قدرت باعث می شود تا برنامه ها یا بازی ها سنگین بهتر از قبل اجرا شوند.
پشتیبانی از استاندارد های جدید وب :
در بین این ویژگی های جدید، اپرا همچنین پشتیبانی از WebRTC (دوربین) ، کشیدن و رها کردن (Drag & Drop) در HTML5 ، انیمیشن ها و واریخت های CSS3 ، Do-Not-Track و...

- حذف شدن Opera Unite ، Opera Widgets و Voice :
در این نسخه سه قابلیت Opera Unite ، Opera Widgets و Voice به صورت پبشفرض برای کاربر حذف شده اند. Opera Extensions جایگزین Widgets خواهند شد و برنامه نویسان میتوانند به این سمت حرکت کنند.

تفاوت آرایه ها در زبان C# و C++


در حالت کلی اصول تعریف و استفاده از آرایه ها در زبان C++ و C# مشابه یکدیگر است ولی نحو این دو زبان در مورد آرایه ها کمی تفاوت دارد. در زیر به برخی از تفاوت های کلی این دو زبان در مورد نحو تعریف و به کار بردن آرایه ها را با یکدیگر مشاهده می کنیم.
زبان C# تنها دارای ارایه های CLR است ولی زبان C++ به غیر از پشتیبانی آرایه های CLR ، دارای آرایه های استاندارد و بومی اش (Native) نیز است. در زیر تعریف یک آرایه ی دو بعدی صحیح (int) با نام Sample با ابعاد a و b را برای هر زبان می بینید.


C++ (native) :  int Sample [a ][ b];
C++ (CLR) :     array < int , 2 > ^ Sample = gcnew array < int , 2 > (a , b);
C# :               int [ , ] Sample = new int [a , b];

همکین طور که مشاهد می کنید تفاوت هایی در نحو تعریف آرایه ها وجود دارند برای مثال در زبان C# ابعاد آرایه همگی در یک کروشه قید می شوند ولی در زبان C++ بومی، اندیس هر بعد در یک کروشه قرار می گیرد؛ ولی اصول کلی به کار بردن آنها یکسان است. یکی دیگر از تفاوت های آرایه های CLR با ارایه های بومی این است که آرایه های CLR از مشخصه "طول" یا length برخوردار هستند، به این معنی که طول آرایه های CLR قابل استخراج است.
دسترسی به درایه های آرایه های تعریف شده در بالا :

C++ (native) : Sample [x][y] = 100;
C++ (CLR) : Sample [x , y] = 100;
C# : Sample [x , y] = 100;