وبلاگ فرهاد مرتضی پور

Farhad Mortezapour's Blog

وبلاگ فرهاد مرتضی پور

Farhad Mortezapour's Blog

مکانیسم عینی ذخیره سازی

کاش میشد اشتباهات خود را Undo کرد . . . !

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

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

اینترنت ماهواره ایی

ارتباط دوطرفه با ماهواره جهت سند و رسیو به صورت اس سی پی سی (scpc ) نسبت به سرویس های دریافت یک طرفه تفاوت اساسی دارد.با استفاده از این تجهیزات می توان سند ددیکیت و تضمینی با پهنای باند بالا دریافت کرد و برای رسیو از همان ماهواره یا هر سرویس دیگری روی هر ماهواره ای استفاده نمود.
می توان برای isp یا سرویس تلفنی (phone to phone ) یا ارتباطات وایرلس برای شرکت ها کافی نت ها و ادارات و کارخانجات بهره گرفت با سرعت مناسب بدون تایم اوت و قطعی سرویس . البته کیفیت سرویس بیشتر به پهنای باند درخواستی شما بستگی دارد که مثلا برروی ماهواره دبلیو 5 ( w5) این کیفیت بی نظیر است و تضمین مناسبی را سبب میگردد .
قطعات اصلی این تجهیزات در ذیل اشاره گردیده است اما لازم به توضییح است که دیش سند بسیار متفاوت از دیش های رسیو معمولی است و کانون بسیار دقیقی را لازم دارد زیرا که در میزان سند شما تاثیر بسزایی دارد .
اما مهم ترین عامل های اصلی شما ست مودم و باک (بی یو سی ) می باشد که میزان سند شما را تعیین می کنند. مثلا با یک باک 2وات و یک دیش 1.8 تا 512 کیلو بیت در ثانیه می توان سند نمود اما با یک باک 4 وات تا یک مگ و کمی بالاتر و با یک باک 8 وات به راحتی می توان تا 2 مگابیت در ثانیه نیز سند نمود که البته درایران اغلب از 2 وات استفاده می شود چون اولا در رسیو دیتا محدودیتی نیست و برای سند هم پهنای باند بالای 512 برای مکان های خیلی خاص لازم می گردد.
گاهی از اوقات با کوچکتر و بزرگتر بودن ابعاد دیش می توان با هزینه کمتر به سند مورد نظر دست یافت . برای مثال ممکن است با یک دیش 1.2 یا 98 با هزینه کمتر حتی 128 را هم به راحتی سند نمود و احتیاجی به تهیه دیش با ابعاد بزرگتر نباشد و هزینه کمتری بابت دیش پرداخت گردد.
نمونه دیگر و ارزان قیمت تجهیزات دوطرفه با پهنای باند اشتراکی عرضه میگردد و اکثرا این سرویس ها تعداد یوزرها را محدود می نماید که این عمل با محدود کردن تعداد کانکشن تی سی پی آی پی انجام میگیرد که اتفاقا نرم افزار های جالبی هم در این زمینه عرضه شده . این تجهیزات را می توان بین 2 تا 4 میلیون هم درایران تهیه نمود که البته متفاوت هستند و هرکدام پهنای باند مخصوصی را ارائه میدهند از معایب اینها اغلب بالا بودتن زمان پینگ - استفاده از کش سرور های بسیار قوی -محدود بودن تعداد آی پی های ولید - قدرت سند ضعیف - نداشتن تضمین کیفیت در سرویس مثل ارائه پهنای باند ددیکیت - استفاده از یک نوع پهنای باند بالاجبار و ... می باشد که البته از مزیت آنها هم ارزان بودن تجهیزات و ارزان بودن پهنای باند اشتراکی دوطرفه می باشد . البته مدل های جدید تر این قابلیت را داراهستند که پهنای باند متفاوتی را از شرکت دیگری خریداری کنید . در کل این تجهیزات بیشتر جهت امور کافی نت و اداری استفاده میگردد.

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

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

1- از منوی Start وارد Control Panel شوید.
2- سپس وارد Network Connections شوید.
3- کانکشنی که با آن به اینترنت وصل میشوید را انتخاب کرده و بر روی آن راست کلیک کنید ، سپس Properties را برگزنید.
4- در پنجره باز شده به تب Advanced بروید.
5 - از قسمت پایین ، دکمه Settings را برگزنید.
6- در پنجره جدید باز شده دکمه Edit را بزنید.
7- باز هم در پنجره جدید ، در کادر خالی عبارت Call Waiting را وارد نمایید.
8- در پایان تمام پنجره ها را OK کرده و خارج شوید.

اکنون در صورتی که در اینترنت باشید و کسی با شما تماس بگیرد ، با پیام Call wating now active روبرو خواهید شد.

لازم به ذکر است که باید برای بهره گیری از این سرویس ، مودم شما از Voice پشتیبانی کند و اینکه سیستم های مخابراتی برخی از مناطق امکان این کار را ندارند. همان طور که ذکر شد خط شما نیز باید قابلیت پشت خطی داشته باشد.

خاموش کردن کامپیوتر با اسم رمز

ابتدا یک اسم رمز برای کامپیوتر خود انتخاب کنید سپس از My Computer Control Panel آیکان System را کلیک کنید. در محل مشخصات و نام کامپیوتر این دستور را تایپ کرده و با فشار دادن دکمه OK از آن خارج شوید.
کامپیوتر شما پس از آن برای خاموش کردن نیز به دانستن اسم رمز نیاز خواهد داشت. Shutdown -r -m computer name -t 300 ا متغیرهای این دستور به این صورت است:
Computer name = اسم رمز کامپیوتر که شما آن را انتخاب کرده‌اید R=Restart, S=Shutdown, L=Log off T300 نشان دهنده زمان خاموش شدن اتوماتیک به ثانیه است و میتواند با عدد دیگری جایگزین شود.

آموزش SQL

زبان SQL تنها زبان استاندارد و جامع پیاده‌سازی، مدیریت، نگهداری و کار با بانکهای اطلاعاتی می‌باشد که تقریباً توسط تمام بانکهای اطلاعاتی کوچک و بزرگ مانند Access، SQL Server، Oracle و DB2 پشتیبانی می‌شود. طراحان و افرادی که بنوعی با بانکهای اطلاعاتی سروکار دارند و همچنین برنامه نویسانی که از این بانکها استفاده می‌کنند هرکدام باید تا اندازه‌‌ای با این زبان آشنایی داشته باشند. این مقاله می‌کوشد تا مفاهیم زبان SQL را در قالب یک مثال کاربردی بیان کند. هرچند که مفاهیم بکار رفته در این مقاله در تمامی بانکهای اطلاعاتی قابل پیاده‌سازی می‌باشند ولی مثالهای ارائه شده در 2000 SQL Server مورد تست قرار گرفته‌اند.

بانک اطلاعاتی که در این مقاله بعنوان مثال مورد استفاده قرار گرفته است بانک اطلاعاتی یک آموزشگاه می‌باشد که شامل دو جدول بنامهای teachers و students می‌باشد. جدول اول اطلاعات اساتید و جدول دوم اطلاعات دانشجویان را در خود نگه می‌دارد. جدول اول دارای چهار فیلد زیر می‌باشد: name یا نام از نوع text، family یا فامیل از نوع text، age یا سن از نوع عدد، salary یا حقوق از نوع عدد.

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

زبان SQL دارای دستورات متنوع و نسبتاً زیادی می‌باشد. به این دستورات Clause نیز گفته می‌شود. در این مقاله و قسمتهای بعدی آن تعدادی از مهمترین Clauseهای زبان SQL مورد بررسی قرار می‌گیرند.

1 – دستورهای SELECT و FROM :

هدف نهایی از دادن انبوه اطلاعات به کامپیوتر، جستجو و یافتن اطلاعات مفید می‌باشد. به این عمل یعنی جستجوی اطلاعات در بانک اطلاعاتی Query نیز گفته می‌شود. اکثر دستورات زبان SQL نیز در همین راستا مورد استفاده قرار می‌گیرند. در این بین مهمترین و پرکاربردترین دستور را می‌توان دستور SELECT قلمداد کرد.

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

بعنوان مثال اگر در بانک اطلاعاتی فرضی خودمان بخواهیم اسم و فامیل تمام دانشجویان را مشاهده کنیم باید برنامه‌ای به شکل زیر بنویسیم:

SELECT name, family
FROM students

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

SELECT name, family
FROM teachers

همان طوری که از مثال‌های بالا نیز مشخص است جلوی دستور SELECT نام فیلدهایی نوشته می‌شوند که قرار است نمایش داده شوند و بعنوان جداکننده نیز باید از کاراکتر کاما استفاده کرد. در صورتی که بخواهیم تمام فیلدهای یک جدول را ببینیم می‌توانیم بجای نوشتن اسم تمام فیلدها فقط از یک کاراکتر ستاره استفاده کنیم. کاراکتر ستاره بمعنی تمام فیلدهای یک جدول می‌باشد. مثلاً دو دستور زیر با هم معادلند:

SELECT *
SELECT name, family, age, gpa

2 – دستور WHERE :

دستور SELECT همان طوری که گفته شد جهت انتخاب و نمایش تعدادی از فیلدهای جداول مورد استفاده قرار می‌گیرد. در این حالت تمام رکوردها نمایش داده خواهند شد، ولی در بیشتر موارد هدف از نوشتن Query نمایش رکوردهایی است که دارای شرایط ویژه‌ای می‌‌باشند مثلاً نمایش مشخصات اساتیدی که بیش از پنجاه سال سن دارند. دستور WHERE برای گذاشتن یک یا چند شرط به دستور SELECT مورد استفاده قرار می‌گیرد. با اضافه کردن شرط به دستور SELECT تعداد رکوردهای خروجی (پاسخ) معمولاً محدودتر می‌شود. بعنوان مثال اگر بخواهیم مشخصات اساتیدی که بیش از چهل سال سن دارند را ببینیم باید برنامه‌ای بصورت زیر بنویسیم:

SELECT *
FROM teachers
WHERE age > 40

در این برنامه شرط age > 40 با استفاده از دستور WHERE به Query اضافه شده و باعث شده است تا فقط مشخصات اساتیدی نمایش داده شوند که در این شرط صدق می‌کنند یعنی بیش از چهل سال سن دارند.

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

SELECT *
FROM students
WHERE age < 15 AND name = 'ali'

در مثال بالا دو مطلب جدید وجود دارد نخست آنکه در زبان SQL رشته متنی را باید داخل کوتیشن (‘) قرارداد. بنابراین برای معرفی کلمه‌ای بنام علی باید آنرا بصورت ‘ali’ نوشت، زیرا در این حالت این کلمه یک ثابت رشته‌ای (متنی) بحساب می‌آید. نکته دیگر آنکه می‌توان شرطهای مختلف را توسط AND، OR و NOT با همدیگر ادغام کرده و شرطهای پیچیده‌تری را بدست آورد. AND، OR و NOT هر سه از کلمات کلیدی زبان SQL می‌باشند. بعنوان یک مثال دیگر فرض کنید می‌خواهیم مشخصات تمام دانشجویانی را که نام آنها، علی یا رضا نباشند را پیدا کنیم، برنامه‌ای که این Query را انجام می‌دهد بصورت زیر می‌باشد:

('SELECT * FROM studentsWHERE name NOT IN ('ali', 'reza

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

در این برنامه نیز یک کلمه کلیدی جدید وجود دارد: IN که برای تست عضویت در یک مجموعه بکار می‌رود. مجموعه‌ای که بادستور IN بکار می‌رود می‌تواند دهها عضو داشته باشد و نوع اعضا نیز می‌تواند رشته‌ای، عددی یا ... باشد. البته واضح است که تمام اعضا باید هم نوع باشند.

حال بعنوان یک مثال پیشرفته‌تر می‌خواهیم مشخصات دانشجویانی را ببینیم که اسم فامیل آنها به ‘ زاده’ ختم می‌شود مانند علیزاده، محمد زاده و ... برای این منظور باید Query زیر را نوشته و اجرا کنیم:

SELECT *
FROM family LIKE '% zadeh'

کاربرانی که با Access کار می‌کنند باید سطر آخر را به صورت زیر تغییر دهند:

WHERE family LIKE '*zadeh'

در این مثال از Wildcardها استفاده شده است که قبلاً با مفهوم آن در DOS و Windows یا حتی Unix آشنا شده‌ایم (ls a*) . در Wildcard ،SQL هایی به شرح زیر وجود دارند:

% (در Access از * استفاده کنید): این Wild card نشانگر هر تعدادی از کاراکترها (هر کاراکتری) می‌باشد.

- (در Access از ? استفاده کنید): این Wildcard نشانگر یک کاراکتر می‌باشد که این کاراکتر می‌تواند هر کدام از کاراکترهای مجاز کامپیوتر باشد.

جهت جستجو کردن فیلدهایی که دارای یک الگوی (Pattern) خاصی هستند باید از دستور LIKE و Wildcardها استفاده کرد. در مثال زیر نام و سن تمام اساتیدی که اسم آنها با Pe شروع می‌شود، نمایش داده خواهد شد.

SELECT name, age
FROM teachers
WHERE name LIKE 'Pe%'

بنابراین مشخصات افرادی که نام آنها مثلاً پدرام یا پیمان باشد در خروجی لیست خواهد شد.

3 – دستور ORDERBY :

دستور ORDERBY جهت Sort کردن رکوردهای نمایش داده شده مورد استفاده قرار می‌گیرد. با این دستور می‌توان مشخص کرد که رکوردهایی که قرار است نمایش داده شوند برحسب کدام فیلد باید مرتب شوند. بعنوان مثال برای مشاهده کردن مشخصات اساتیدی که سن آنها بیشتر از 29 سال می‌باشد و در ضمن لیست خروجی بترتیب اسم فامیل نیز مرتب شده باشد باید Query زیر را اجرا کرد.

SELECT *
FROM teachers
ORDERBY family

در این حالت افراد بترتیب اسم فامیل خود لیست خواهند شد. (از A تا Z) در صورتی که بخواهیم ترتیب Sort شدن برعکس شود (از Z تا A) می‌توان پس از دستور ORDERBY از کلمه کلیدی DESC استفاده کرد، مانند مثال زیر

SELECT *
FROM teachers
ORDERBY DESC name

در این مثال Sort شدن بترتیب اسم و نه بترتیب فامیل انجام می‌گیرد.

برای دستور ORDERBY می‌توان چند فیلد تعریف کرد، در این صورت این دستور عمل Sort کردن را با در نظرگرفتن اولین فیلد انجام خواهد داد در صورتی که چند رکورد دارای مقدار مشابهی در این فیلد باشند ملاک مرتب سازی آنها فیلد دومی خواهد بود که در دستور ORDERBY ذکر شده است، در صورتی که این فیلد نیز دارای مقادیر مشابهی باشد ملاک تصمیم‌ گیری فیلد سوم خواهد بود والی آخر.

بعنوان مثال در Query زیر نام اساتیدی که بیش از 30 سال دارند برحسب فامیل آنها مرتب می‌شود در صورتی که چند استاد دارای اسم فامیل یکسانی باشند ملاک مرتب شدن، اسم کوچک آنها خواهد بود.

SELECT *
FROM teachers
WHERE age > 30
ORDERBY family, name

4 – استفاده از توابع:

در دستور SELECT علاوه بر تعریف فیلدها می‌توان از عبارتهای ریاضی و یا توابع استاندارد SQL نیز استفاده کرد.

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

SELECT family, name, salary*5/100
FROM teachers

علاوه بر عبارتهای ریاضی می‌توان از توابع استاندارد SQL نیز استفاده کرد، تعدادی از این توابع عبارتند از:

تابع COUNT : تعداد فیلدها را برمی‌گرداند.

تابع SUM : مجموع یک فیلد عددی را برمی‌گرداند.

تابع AVG : میانگین یک فیلد عددی را برمی‌گرداند.

تابع MIN : مینیمم یک فیلد عددی را برمی‌گرداند.

تابع MAX : ماکزیمم یک فیلد عددی را برمی‌گرداند.

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

SELECT COUNT (name), SUM (Salary)
FROM teachers

5 – Queryهای چند جدولی:

تمام Queryهایی که تاکنون مشاهده کردید، Queryهای تک جدولی بودند بدین معنی که در هر Query فقط اطلاعات یک جدول مورد جستجو قرار می‌گرفت. در SQL امکان نوشتن Queryهای چند جدولی نیز وجود دارد. در این حالت اطلاعات چند جدول بطور همزمان مورد جستجو قرار می‌گیرد و حتی امکان مقایسه فیلدهایی از یک جدول با فیلدهایی از جدول دیگر نیز وجود دارد. اگر در بین جداولی که در Query شرکت داده می‌شوند فیلدهای هم نام وجود داشته باشد باید نام آن فیلدها را Fully qualified کرد بدین معنی که ابتدا اسم جدول و سپس اسم فیلد را ذکر کرد. بین اسم جدول و اسم فیلد نیز باید از یک کاراکتر نقطه (‘.’) استفاده کرد.

بعنوان مثال اگر بخواهیم لیست اساتید و دانشجویانی که دارای ارتباط فامیلی هستند را ببینیم می‌توانیم از Query زیر استفاده بکنیم:

SELECT *
FROM students, teachers
WHERE students.family = teachers. Family

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

SELECT teachers.family, teachers.name
FROM students, teachers
WHERE teachers.age < students.age

6 – کلام آخر:

کلام آخر اینکه زبان SQL برخلاف زبانهایی مانند C یک زبان Case Sensitive نیست بدین معنی که به بزرگ یا کوچک بودن حروف حساس نمی‌باشد. بنابراین به راحتی می‌‌توان دستورات و کلمات کلیدی آنرا در هر برنامه‌ای با حروف کوچک یا بزرگ تایپ کرد.

تماس رایگان با گوشی موبایل نوکیا ۳۳۱۰

هر گوشی موبایل دارای یک سری کد محرمانه است که اعمال هر کدام با توجه به نوع شبکه باعث اعمال تغییراتی میشود.بهترین گوشی که اعمال کدهای آن بر روی سیستم مخابراتی ایران جواب می دهد نوکیا است.من روش زیر را در مورد ۳۳۱۰ امتحان کرده ام وجواب داده است. کافیست کد زیر را وارد کنید. اگر درست وارد کرده باشید پیام SIM CLOCK STOP ALLOWED را می بینید و این به این معنی است که شبکه به شما اجازه توقف تایمر سیم کارت رو داده است.حال با خیال راحت شماره گیری کنید. برای جلو گیری از لو رفتن این امر بهتر است هر تماس شما بیشتر از ۵ دقیقه طول نکشد.

در ضمن به ازای هر ۵ دقیقه باید یک بار کد را وارد کنید.

این هم از کد:

#746025625 #*

الگوریتم تبدیل تاریخ میلادی به تاریخ شمسی

تبدیل تاریخ میلادی به شمسی بسیار راحتتر از تبدیل تاریخ شمسی به میلادی است.
برای نوشتن این الگوریتم به اختلاف روزهای میان اولین روز سال میلادی و اولین روز سال شمسی نیاز داریم که این اختلاف روز (در صورتی که سال کبیسه باشد یا نباشد) "79" روز است.

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

● روزی که در آن قرار داریم از 79 بیشتر است به این معنی است که در ماههای بعد از فروردین قرار داریم.
حال باید مشخص کنیم که در 6 ماه اول سال شمسی قرار داریم یا در 6 ماه دوم سال قرار داریم ، برای اینکار ابتدا 79 روز از تعداد روزها کم می کنیم تا در اول فروردین قرار بگیریم حال اگر تعداد روزها از "186" (31*6) کمتر باشد یعنی در 6 ماه اول سال شمسی قرار داریم در غیر اینصورت در 6 ماه دوم قرار داریم.
1. اگر در 6 ماه اول سال قرار گرفته باشیم : تعداد روزها را بر "31" تقسیم می کنیم (6 ماه اول در سال شمسی 31 روزه است.) اگر باقیمانده این تقسیم صفر شد خارج قسمت تقسیم برابر با ماه شمسی می شود و روز شمسی برابر با 31 می شود. اگر باقیمانده صفر نشود ماه شمسی برابر با خارج قسمت باضافه یک می شود و روز شمسی همان باقیمانده است.
2. اگر در 6 ماه دوم سالقرار گرفته باشیم : "186" روز از تعداد روزها کم می کنیم و آن را بر "30" تقسیم می کنیم .
اگرباقیمانده این تقسیم صفر شد خارج قسمت تقسیم باضافه"6" برابر با ماه شمسی می شود و روز شمسی برابر با 30 می شود. اگر باقیمانده صفر نشود ماه شمسی برابر با خارج قسمت باضافه "7" می شود و روز شمسی همان باقیمانده است. سال شمسی از تفاضل سال میلادی با "621" بدست می آید.

● روزی که در آن قرار داریم کمتر از "79" است که این به این معنی است که در روزهایی بین اولین روزسال میلادی تا اولین روز شمسی (ماههای دی ،بهمن و اسفند) قرار داریم.
اختلاف روز بین اولین روز سال میلادی داده شده و اولین روز دی ماه در سال شمسی را در نظر می گیریم که این اختلاف برای سال کبیسه "11" و برای غیر کبیسه "10" است.

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

اختلاف روز با تعداد روز محاسبه شده جمع می کنیم ، آن را بر "30" تقسیم می کنیم (3 ماه آخر سال شمسی 30 روزه است.) اگر باقیمانده این تقسیم صفر شود خارج قسمت تقسیم باضافه "9" برابر با ماه شمسی می شود و روز شمسی برابر با "30" می شود. اگر باقیمانده صفر نشود ماه شمسی برابر با خارج قسمت باضافه "10" می شود و روز شمسی همان باقیمانده است. در این حالت سال شمسی از تفاضل سال میلادی با "622" بدست می آید (زیرا در سال قبل قرار داریم.)

پیاده سازی الگوریتم به زبان
c :

 

typedef struct _SHAMSIDATE

{

int iYear;

int iMonth;

int iDay;

}SHAMSIDATE;

 

SHAMSIDATE MiladiToShamsi(int iMiladiMonth,int iMiladiDay,int iMiladiYear)

{

 

int shamsiDay, shamsiMonth, shamsiYear;

int dayCount,farvardinDayDiff,deyDayDiff ;

int sumDayMiladiMonth[] = {0,31,59,90,120,151,181,212,243,273,304,334};

int sumDayMiladiMonthLeap[]= {0,31,60,91,121,152,182,213,244,274,305,335};

SHAMSIDATE shamsidate;

 

farvardinDayDiff=79;

 

if (MiladiIsLeap(iMiladiYear))

{

dayCount = sumDayMiladiMonthLeap[iMiladiMonth-1] + iMiladiDay;

}

else

{

dayCount = sumDayMiladiMonth[iMiladiMonth-1] + iMiladiDay;

}

if((MiladiIsLeap(iMiladiYear - 1)))

{

deyDayDiff = 11;

}

else

{

deyDayDiff = 10;

}

if (dayCount > farvardinDayDiff)

{

dayCount = dayCount - farvardinDayDiff;

if (dayCount <= 186)

{

switch (dayCount%31)

{

case 0:

shamsiMonth = dayCount / 31;

shamsiDay = 31;

break;

default:

shamsiMonth = (dayCount / 31) + 1;

shamsiDay = (dayCount%31);

break;

}

shamsiYear = iMiladiYear - 621;

}

else

{

dayCount = dayCount - 186;

switch (dayCount%30)

{

case 0:

shamsiMonth = (dayCount / 30) + 6;

shamsiDay = 30;

break;

default:

shamsiMonth = (dayCount / 30) + 7;

shamsiDay = (dayCount%30);

break;

}

shamsiYear = iMiladiYear - 621;

}

}

else

{

dayCount = dayCount + deyDayDiff;

 

switch (dayCount%30)

{

case 0 :

shamsiMonth = (dayCount / 30) + 9;

shamsiDay = 30;

break;

default:

shamsiMonth = (dayCount / 30) + 10;

shamsiDay = (dayCount%30);

break;

}

shamsiYear = iMiladiYear - 622;

 

}

shamsidate.iYear = shamsiYear;

shamsidate.iMonth = shamsiMonth;

shamsidate.iDay = shamsiDay;

 

return shamsidate ;

}

 

// the function check a miladiyear is leap or not.

BOOL MiladiIsLeap(int miladiYear)

{

if(((miladiYear % 100)!= 0 && (miladiYear % 4) == 0) || ((miladiYear % 100)== 0 && (miladiYear % 400) == 0))

return TRUE;

else

return FALSE;

}

 

خداحافظ جام جهانی

دیگه حرفی واسه گفتن ندارم

استفاده از "یاهو" مسنجر به جای "ام اس ان " مسنجر

خوب برای اینکه از یاهو مسنجر به جای msn مسنجر استفاده کنید.:

در قسمت run عبارت regedit را تایپ کنید حالا مراحل زیر را دنبال کنید:

در بین عبارت های heykey آخرین را انتخاب کنید و دنبال عبارت yahoo

بگردید.حالا در قسمت پیجر روی گزینه پیجر دو بار کلیک کنید و حالا در

ستون سمت راست گزینه سرور را باز کنید و در در آن تایپ کنید: mail.hotmail.com

تقسیم یک خط اینترنت بین چند کامپیوتر

ابتدا یاد آوری می کنم که ارتباط بین کامپیوتر ها به سه روش ممکن است:

١. از طریق کابل شبکه (RJ-45) که برای این نوع اشتراک به تعدادی از این کابل ها و یک دستگاه تقسیم کننده یا HUB نیاز دارید. تعداد پورت های HUB باید حداقل یکی بیشتر از تعداد کامپیوترهای شما باشد (مگر اینکه از یکی از خود کامپیوترها برای تقسیم اینترنت استفاده کنید). استفاده از این کابل ها بهترین، ارزانترین و پرطرفدارترین روش برای تشکیل شبکه است. اشکال این روش نیاز به سیم کشی است.

٢. روش دوم استفاده از شبکه های بی سیم یا WiFi است که این روزها خیلی ها بجای استفاده از کابل از این سیستم ها استفاده می کنند. برتری این کار عدم نیاز به سیم کشی و امکان حمل و نقل است که به ویژه برای laptop ها احمیت دارد. اشکال آن یکی هزینه بسیار بالای آن (چند صد دلار برای یک شبکه ساده) است و دیگری اینکه مقدار زیادی از قدرت آن بجای افزایش سرعت برای جلوگیری از اشکال در ارتباطات مصرف می شود. ولی با این همه سرعت این سیستم ها خوب است و قیمت بالا اشگال عمده آنها است.

٣. روش دوم استفاده از خط تلفن یا HomePNA است که همانطور که در مقاله ٢٧ توضیح دادم روش خوبی است چون خیلی از سیستمهای بی سیم ارزانتر است و برخلاف شبکه های کابلی نیاز به سیم کشی ندارد. اگر از این روش استفاده می کنید حتما از کارتهای جدیدتر استفاده کنید که سریعتر هستند. سیستم های قدیمی که به HPNA1 مشهور است آرام هستند و ممکن است گاهی دچار قطع ارتباطات شوند.

اگر فقط از دو کامپیوتر استفاده می کنید خیلی از شرکتهای ارائه دهنده سرویس به شما اجازی استفاده هر دو کامپیوتر را از طریق HUB می دهند و نیازی به تقسیم اینترنت نخواهید داشت. ولی برای بیشتر از دو کامپیوتر، از هر کدام از روشهای بالا که استفاده کنید سه روش برای تقسیم یک (یا چند) خط اینترنت بین تمام کامپیوترهای شبکه وجود دارد:

١. پر طرفدارترین روش استفاده از دستگاهی بنام Router است که یک خط اینترنت را بین چند کامپیوتر تقسیم می کند. این روش برای استفاده از شبکه های کابلی بخصوص برای تعداد محدودی کامپیوتر بهترین راه است چون اکثر Router ها یک دستگاه HUB در داخل خود دارند و میتوانید مستقیما کامپیوترها را به آنها وصل کنید. بعضی شرکتهای اینترنت به شما امکان این را می دهند که از Router بجای Modem های معمولی که در اختیارتان قرار می دهند استفاده کنید. البته برای این کار باید از Router ویژه ای که شرکتها در اختیارتان قرار می دهند استفاده کنید. متاسفانه فعلا هیچکدام از شرکتهای اصلی در تورنتو این امکان را ندارند ولی برخی شرکتهای جدید DSL بجای اجاره Modem به شما امکان خرید Router یا Modem را می دهند که در این صورت اجازه انتخاب دارید. ویندوز XP و لینوکس کامپیوترها را براحتی برای استفاده از Router تنظیم می کنند. قبل تنظیم کردن کامپیوترها ابتدا آنها را آزامایش کنید زیرا معمولا نیازی به تنظیم آنها نخواهید داشت. اگر کامپیوترها قبلا مستقیما به Modem وصل می شدند باید ابتدا تنظیمات Modem را پاک کنید.

٢. بجای استفاده از Router میتوانید یکی از کامپیوترها را مستقیما به اینترنت وصل کنید تا کامپیوترهای دیگر از اینترنت آن استفاده کنند. خرج این کار کم است، ولی برای اینکه کامپیوترهای دیگر به اینترنت وصل شوند، کامپیوتر اصلی باید همیشه روشن باشد. در ضمن این کامپیوتر نیاز به دو کارت شبکه دارد که یکی به شبکه وصل میشود و دیگری به Modem (مگر اینکه Modem طور دیگری به کامپیوتر وصل شود ? مانند USB). برای استفاده از این روش در ویندوز باید از Internet Connection Sharing و در لینوکس از سرویس هایی به همین نام یا مشابه آن (بستگی به پخش لینوکس) استفاده کنید. برای تنظیم کامپیوترهای دیگر کامپیوتر اصلی حکم یک Router را دارد.

۳. روش بهتر ساختن Router خودتان با استفاده از یک کامپیوتر قدیمی است. (همانطور که گفتم اگر از شبکه های کابلی برای تعداد کمتری کامپیوتر استفاده می کنید و هنوز دستگاه HUB تهیه نکرده اید بهتر است بجای آن یک دستگاه Router بخرید، در غیر این این صورت احتمالا این روش سوم بهترین است). برای این کار به یک کامپیوتر قدیمی (مانند 386) با دو کارت شبکه و یک Floppy Drive و یک نرم افزار رایگان (نرم افزار هفته را بخوانید) نیاز دارید. این سیستم بهتر از یک Router پرقدرت و گرانقیمت عمل می کند و برای کاربرای منزل و حتی شرکت های بزرگتر ایده عال است. در شماره بعدی تهیه این سیستم را توضیح می دهم.