زکات علم

زَکاةُ العِلمِ أن تُعَلِّمَهُ عِبادَ اللّه‏ِ امام باقر (ع)
زکات علم

مطالبی در زمینه کامپیوتر و علاقه مندی های شخصی من مطالب این وبلاگ غالبا مطالبی ست که در جای جای اینترنت کتاب یا دانشته های شخصی خودم می باشد که به عنوان مرجعی برای رجوع دوباره در اینجا جمع آوری شده اند .
ehsunitd.ir personal website

پیوندها

۳۵ مطلب در مهر ۱۳۹۲ ثبت شده است

از آنجاییکه که دیواره آتش میکروتیک از کرنل بهینه سازی شده لینوکسی بهمراه مجموعه NetFilter  بهره می گیرد ، پس برای درک بهتر اصول و قوائد نحوه کار دیواره آتش میکروتیک باید اصول Netfilter در لینوکس مورد بررسی قرار گیرد.

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

  • زنجیره PreRouting
  • زنجیره Forward
  • زنجیره Input
  • زنجیره Outout
  • زنجیره PostRouting

جدول های کلی شامل :

  • جدول Mangle
  • جدول Nat
  • جدول Filter

  • ehsan gholami

احتمالا تا حالا به فکر استفاده از روترهای سیسکو به عنوان VPN سرور افتادین ولی بخاطر اینکه فکر میکردین حتما باید از Cisco VPN client استفاده کنید از انجام اون منصرف شدن...باید بگم که سیسکو هم این قابلیت رو داره که بصورت یک PPTP VPNسرور تنظیم بشه تا از VPN client پیش فرض ویندوز استفاده کنیم که همچنین نسخه های لینوکسی اون هم موجود است.
برای آنکه IOS روتر شما همچون یک VPNسرور عمل کند باید نسخه ای از IOS که DES یا 3DES را پشتیبانی میکند تهیه کنید.
این نسخه هایی هستند که قابلیت Encryption را دارند که همراه با PPTP برای استفاده از MSChap v1&2 الزامی هستند.
IOSهایی که از DES یا 3DES پشتیبانی میکنند در نام خود یک k8 یا k9 دارند و از این طریق قابل شناسایی هستند.

  • ehsan gholami

ممکن است برای شما زمانی که از قابلیت زمانبندی برای اجرای فرامینی در ویندوز یا لینوکس یا حتی گوشی تلفن همراه خود استفاده می کنید , این سوال پیش آمده باشد که "آیا می شود در سیسکو هم از این قابلیت مهم و پرکاربرد استفاده کرد؟" , جواب این سوال مثبت است .منتها استفاده از زمانبندی در سیسکو با محدودیت هایی همراه هست و این محدودیت ها از این حقیقت ناشی می شود که هدف از طراحی زمانبندی در سیسکو برای این بوده است که دستگاه اجازه داشته باشد به Cisco's CNS server متصل شود و درخواست بروزرسانی را بصورت خودکار انجام دهد , ولی چون این ویژگی دارای قابلیت های خوبی می باشد از آن جهت اجرای خودکار برخی امور دیگر هم استفاده میشود.
ویژگی زمانبندی اجرای دستورات در سیسکو این قابلیت را برای ما فراهم می کند تا مقداری از بار مسئولیت خود کاسته و برخی از دستورات مد Privileged یا EXEC CLI را در زمان بخصوص برای یکبار یا برای چندین مرتبه در دوره های زمانی پی در پی اجرا کنیم.

  • ehsan gholami

Network Address Translation

NAT یکی از ابزارهای قدرتمند دنیای IT است که دقیقا همان کاری را انجام می دهد که از اسم آن بر می آید,به وسیله NAT میتوانیم آدرسهای یک شبکه را به یک شبکه دیگر ترجمه کنیم.
NAT تقریبا در تمامی سیستم عاملها و روتر ها قابل انجام است که هر کدام شیوه و روش خود را دارند.
برای همه متخصصین واضح است که قوی ترین روتر های دنیا Cisco هستند و تقریبا 80 درصد از بستر اینترنت بر روی دستگا های Cisco بنا شده اند. در این آموزش به توضیح مراحل انجام NAT به صورت عملی بر روی سخت افزارهای سیسکو می پردازیم.
از کاربردهای NAT می توان به موارد زیر اشاره کرد:

  • ترجمه IP های Private به Public یا بلعکس
  • تغییر مرکز سرویس دهنده اینترنت بدون نیاز به تغییر IP ها داخلی
  • حفاظت از یک شبکه حساس در مقابل برخی حملات خارجی
  • تغییر پورت مقصد پکتها برای کاربران داخلی به صورت transparent

 

  • ehsan gholami

شــــرم مــــیکــــنم

کــــه وزن ســــیــــری ام را

بــــا تــــرازوی {گــــرســــنه} ایی بکــــشم !

  • ehsan gholami

● RAID چیست؟
کوتاه شده عبارت Redundant Array of Inexpensive Disks میباشد و کار آن ایجاد یک واحد از مجموع چند هارد دیسک میباشد. در واقع با قرار دادن چند هارد دیسک در کنار هم و پیاده سازی RAID همه هارد دیسکهای ما به یک واحد تبدیل میشوند و سیستم همه آنها را فقط به عنوان یک منبع واحد میبیند که بسته به اینکه چه سطحی از RAID پیاده سازی شده باشد میتواند باعث افزایش کارایی و یا امنیت اطلاعات و یا تلفیقی از این دو شود.
پیاده سازی RAID همچون بسیاری دیگر از تکنولوژی ها هم بصورت سخت افزاری و هم نرم افزاری امکان پذیر است که مسلماً مدل سخت افزاری دارای سرعت و پایداری بیشتری است و مدل نرم افزاری فقط در شرایطی پیشنهاد میشود که با کمبود امکانات و بودجه مواجه هستیم و یا اینکه قرار است بر روی یک سیستم پشتیبان و نه مادر پیاده سازی شود. همیشه با این مساله مخالف بوده ام که سیستمی را که در آن از تکنولوژی RAID استفاده نشده است را یک سرویس دهنده بنامم و به همین دلیل همیشه سعی کردم مشتری را به پیاده سازی حداقل، که همانا پیاده سازی RAID به روش نرم افزاری است قانع کنم. خوشبختانه همزمان با گسترش فرهنگ استفاده از سیستمها در بین مدیران و صاحبان مشاغل و اهمیت اطلاعات و حفظ آن برای این گروه، هزینه پیاده سازی RAID به کمک پیشرفت تکنولوژی روز به روز ارزانتر میشود و هم اکنون با توسعه بیش از پیش این تکنولوژی و کشیده شدن آن به دایره دیسکهای با تکنولوژی ATA حتی شاهد درخواست پیاده سازی این تکنولوژی بر روی سیستمهای رومیزی هستیم! اما فارغ از اینکه RAID بصورت نرم افزاری و یا سخت افزاری پیاده سازی میشود و یا نیاز ما استفاده از هارد دیسکهای SCSI و یا ATA است، تکنولوژی RAID دارای سطوح گوناگون است که در ادامه به ذکر عمده ترین آنها میپردازم:
● RAID۰
ذخیره سازی روی چند دیسک بدون کنترل خطا مزایا و مشخصات : - داده ها به بلوکهایی تبدیل می شوند و هر بلوک در هارد دیسک مجزا ذخیره می شود. - باعث بالا رفتن کارایی سیستم I/O می گردد چرا که بار ترافیکی نقل و انتقالات بین چندین کانال مجزا تقسیم می شود. - بالارفتن کارایی بدلیل وجود کنترلرهای مختلفی که عمل کنترل ترافیک را به عهده می گیرند (افزایش سرعت) - طراحی بسیار ساده ( زیرا مدار محاسبه Parity وجود ندارد ) - عدم پرداختن به محاسبات مربوطه به Parity وکنترل خطا (افزایش سرعت به دلیل عدم پرداختن به محاسبات مربوط به Parity ) معایب : - عدم استفاده از Parity .(هیچ گونه کد تشخیص و تصحیح خطا در این نوع RAID وجود ندارد ). - از کار افتادن یک درایو باعث از دست رفتن کلیه اطلاعات خواهد شد. - عدم کارایی در محیطهای حساس به حفظ داده ها موارد استفاده : - میکس و پردازش تصاویر ویدیویی (میکس و مونتاژ ). - واژه پردازی (نرم افزارهای تایپ و... ) - کارهایی که نیاز به سرعت بالا دارد.
● RAID۱
Backup گیری همزمان داده ها به منظور Mirroring و Duplexing Mirroningکپی برداری هم زمان روی دو درایو Duplexing : زمانی است که یکی از درایوها دچار مشکل شود و درایو سالمی را جایگزین نماییم سپس داده ها را روی درایو سالم کپی کنیم . مزایا و مشخصات : -هنگام سیکل نوشتن , گویی اطلاعات روی یک دیسک نوشته می شود (در صورتیکه عملأ بر روی دو دیسک نوشته می شود . مانند RAID۰ ) ولی عمل خواندن , ازهر دودیسک انجام می شود ( کاهش ترافیک گذرگاه - نوشتن بر روی هر دو دیسک ولی خواندن مجزا ) - قابلیت برگرداندن %۱۰۰ داده ها هنگام بروز مشکل برای یک دیسک . - در نرخ انتقالات داده تغییر محسوسی نداریم. (یعنی وجود دو دیسک تفاوتی با یک دیسک ندارد ) . - در شرایط خاص RAID۱, توانایی تحمل خرابی بیش از یک دیسک را نیز دارد . - ساده ترین طراحی در تکنولوژی RAID (مدار مربوط به Parity وجود ندارد ) معایب : - بیشترین تعداد هارد دیسک در میان انواع RAID (بسته به انتخاب User ) - هزینه بالا
● RAID۲
دارای خاصیت ECC با استفاده از کد همینگمزایا و مشخصات : - تصحیح خطای بسیار سریع - مناسب برای انتقال اطلاعات معایب : - طراحی بسیار یچیده که با صدمه دیدن یک دیسک دچار مشکل می شود . - نامناسب در دید تجاری (تعداد زیاد درایوها ) کد همینگ : یکی از روشهای محاسبه و کنترل خطا در سیستمهای دیجیتال می باشد .انواع روشها برای کنترل ترافیک داده های دیجیتال وجود دارد به عنوان مثال Parity haming code ,… که مجموعه این روشها را ECC می نامند .
RAID۳ :Error Checking and Correcting : انتقال موازی با استفاده از خاصیت Parity مزایا و مشخصات : - سیکل خواندن و نوشتن بسیار سریع . معایب : - طراحی بسیار پیچیده که با صدمه دیدن یک دیسک مجموعه دچار مشکل می شود . کاربرد : - میکس و مونتاژ تصویر - ویرایش تصویر مانند RAID۰
● RAID۴
دیسک های داده مجزا دیسک مربوط به Parity مشترک مزایا و مشخصات : - سیکل خواندن بسیار سریع ( ترافیک کمتر در گذرگاه) معایب : - پیچیدگی بسیار بالا در طراحی مدار کنترلی مشکل در برگرداندن داده ها هنگام بروز اشکال در یک دیسک ( چرا که داده ها روی دیسکها توزیع شده است )
● RAID۵
دیسک های داده مجزا و Parity توزیع شده در دیسکهای Data مزایا و مشخصات : - در این نوع به حداقل ۳ درایو دیسک سخت نیاز داریم . - تک تک بلوک های داده روی دیسک ها نوشته می شوند و Parity مربوط به هر بلوک نیز داخل هارد مربوط ذخیره می گردد. - سیکل خواندن بسیار سریع (ترافیک کمتر در گذرگاه ) - سیکل نوشتن متوسط (محاسبات مربوط به Parity ) - قابلیت و اطمینان بالا (وجود ECC ) معایب : - خرابی در یک دیسک در خروجی تاثیر ندارد. - طراحی پیچیده مدار کنترلی - مشکل در برگرداندن داده ها هنگام بروز اشکال کاربرد : - در سیستمهای Server و بانکهای اطلاعاتی ISPها
● RAID۶
دیسکهای داده ها مجزا با دو Parity توزیع شده مجزا مزایا و مشخصات : - RAID۶ در واقع نسخه پیشرفته RAID۵ می باشد که تصحیح و کنترل خطا را بهبود می بخشد . این ویرایش RAID اطمینان و توانایی بالا در زمینه data storage فراهم می کند . - بهترین انتخاب برای کاربردهای بحرانی و حساس معایب : - طراحی مدار کنترلی بسیار پیشرفته و پیچیده . - سیکل نوشتن بسیار کند ( دوبار محاسبه مربوط به Parity ) - نیاز به N+۲ درایو دیسک سخت . بدلیل دارا بودن حالت Parity دو بعدی . ( N تعداد دیسکهای سخت در حالت معمولی ) - ادغام اطمینان بالا با قابلیت بالا
● RAID۷
نقل وانتقال بهینه شده غیر همزمان به منظوردستیابی به نرخ انتقال بسیار سریع مزایا و مشخصات : - نقل و انتقال غیر همزمان و دارای کنترلگرهای مستقل. - درایو مجزا برای ذخیره کردن اطلاعات مربوط بهParity - برخورداری از سیستم Open System و استفاده از گذرگاهSCSI - گذرگاه Cache داخلی با سرعت بالا (X-bus ) - دیسک های خواندن و نوشتن از امکان Choching استفاده میکنند. - تکنولوژی مدار تولید Parity تا حدودی با سایر انواع Raid تفاوت دارد . -امکان Hot Swaping Open system : به سیستمی اطلاق می شود که قابلیت سازگاری با سخت افزارها و نرم افزارهای مختلف را داشته باشد و امکان کارکردن در سیستمهای مختلف را به راحتی داشته باشد .
● RAID۱۰
این Raid حداقل به ۴ دستگاه هاردیسک نیاز دارد مزایا و مشخصات : - عمل تکه تکه کردن بلوکهای داده همانند Raid۱ انجام می پذیرد . - تصحیح و کنترل خطا نیز مانند Raid۲ می باشد . - نرخ انتقال بالا - در شرایط معین , امکان تحمل خرابی چند دیسک در این نوع RAID وجود دارد . معایب : - بسیار گران قیمت - منبع تغذیه حتمأ باید متصل به ups باشد . - جابجایی درایوها باید به صورت موازی انجام گیرد . - سیستمهای Server و بانکهای اطلاعاتی .
● RAID۵۳
نرخ انتقال بالا همراه با قابلیت انتقال مناسب مشخصات و مزایا : - این آرایه RAID حداقل به ۵ دستگاه دیسک سخت نیاز دارد . - RAID۵۳ در واقع باید RAID۰۳ نامیده شود زیرا عمل Striping آن همانند RAID۰ بوده و Segment بندی آن نیز مانند RAID۳ می باشد. - تحمل خطای آن مانند RAID۳ می باشد. - نسبت به RAID۳ دارای نرخ انتقال بسیار بهتری می باشد. معایب : - قیمت بالا - همه دیسک ها باید با همدیگر سنکرون شوند که انتخاب نوع و مدل درایو را محدود می سازد . - Stripe کردن در سطح بایتها نهایتأ در محاسبه ظرفیت فرمت شده تأثیر منفی می گذارد .
● RAID ۰+۱
▪ نرخ انتقال داده بهینه مزایا و مشخصات : - حداقل به ۴ دستگاه هاردیسک نیاز دارد . - RAID ۰+۱ به عنوان آرایه آینه ای نیز معروف است با این تفاوت که قطعات داده ها یا Segment ها طبق استراتژی RAID۰ ایجاد شده اند . - تحمل خطای این نوع آرایه مانند RAID۵ می باشد . - نرخ انتقال بالا . - بهترین انتخاب برای سیستمهایی که به کارایی بالا بدون توجه به حداکثر اطمینان نیاز داشته باشند . معایب : - RAID ۰+۱ نباید با RAID۱۰ اشتباه گرفته شود . کوچکترین مشکل در عملکرد یک درایو , آرایه را به مدل RAID۰ تبدیل خواهد کرد . - قیمت بسیار بالا - جابجایی درایوها باید به صورت موازی انجام گیرد . کاربرد : - پردازشهای تصویری و fileserever های عمومی .
▪ نتیجه گیری : همانطور که مشخص شد ، استفاده ازRAID برای مقاصد معین می باشد و در کاربردهای عادی و روزمره کارایی چشمگیری را به سیستم PC اضافه نمی کند . به عنوان مثال امکان استفاده از CD-ROM و Rewriter روی این کانکتورها وجود ندارد . بنابراین هنگام استفاده از RAID ابتدا هدف و مورد استفاده خود را مشخص کنید سپس RAID مناسب را انتخاب نمایید.

  • ehsan gholami

How do I change hostname under Linux operating system?

You need to use the hostname command. It is used to either set or display the current host or domain name of the system. The hostname is used by many of the networking programs (such as sendmail, Apache servers) to identify the machine.

Display Hostname

Type the following command:

hostname

Sample ouputs:

server.nixcraft.net.in

Step # 1: Change Hostname

You need to update two files:

  1. Linux Distribution specific file. Edit appropriate file as per your distribution as follows.
  2. /etc/hosts

Redhat / CentOS / Fedora: Change Hostname

Edit /etc/sysconfig/network, enter:

vi /etc/sysconfig/network

Set HOSTNAME=newhost.example.com, enter:

HOSTNAME=server2.nixcraft.com

Save and close the file. Type the following command:

hostname server2.nixcraft.com
hostname

Now, proceed to step # 2.

Debian / Ubuntu: Change Hostname

Edit, /etc/hostname file, enter:

vi /etc/hostname

Delete old name and add new name:

server2.nixcraft.com

Save and close the file. Type the following command:

hostname server2.nixcraft.com
hostname

Now, proceed to step # 2.

Slackware: Change Hostname

Edit /etc/HOSTNAME, enter:

vi /etc/HOSTNAME

Delete old name and add new one:

server2.nixcraft.com

Save and close the file. Type the following command:

hostname server2.nixcraft.com
hostname

Now, proceed to step # 2.

Suse / OpenSuse: Change Hostname

Edit /etc/HOSTNAME, enter:
Delete old name and add new one:

server2.nixcraft.com

Save and close the file. Type the following command:

hostname server2.nixcraft.com
hostname

Now, proceed to step # 2.

Step #2: Update /etc/hosts

Now, you need to edit /etc/hosts file, enteR:

vi /etc/hosts

Change all old hostname with newer one.

  • ehsan gholami

Running rsync as a daemon

If the host computer is not running SSH (or RSH), we can configure and run rsync as a daemon in this computer. This would have rsync listening to the port 873 for incoming connections from other computers utilizing rsync. While this is not recommended for the transfer of files across unsecured networks, such as the Internet, because the actual data transfer is not encrypted, we can use this to keep information synchronized between different computers in internal networks, as well as perform backups.

  • ehsan gholami

Interpreter (computing)

From Wikipedia, the free encyclopedia

In computer science, an interpreter is a computer program that executes, i.e. performs, instructions written in a programming language. An interpreter generally uses one of the following strategies for program execution:

  1. parse the source code and perform its behavior directly
  2. translate source code into some efficient intermediate representation and immediately execute this
  3. explicitly execute stored precompiled code[1] made by a compiler which is part of the interpreter system

Early versions of the Lisp programming language and Dartmouth BASIC would be examples of the first type. PerlPythonMATLAB, and Ruby are examples of the second, while UCSD Pascal is an example of the third type. Source programs are compiled ahead of time and stored as machine independent code, which is then linked at run-time and executed by an interpreter and/or compiler (for JIT systems). Some systems, such as Smalltalk, contemporary versions of BASICJava and others may also combine two and three.

While interpretation and compilation are the two main means by which programming languages are implemented, they are not mutually exclusive, as most interpreting systems also perform some translation work, just like compilers. The terms "interpreted language" or "compiled language" signify that the canonical implementation of that language is an interpreter or a compiler, respectively. A high level language is ideally an abstraction independent of particular implementations.

History[edit]

The first interpreted high-level language was probably Lisp. Lisp was first implemented by Steve Russell on an IBM 704 computer. Russell had read John McCarthy's paper, and realized (to McCarthy's surprise) that the Lisp eval function could be implemented in machine code.[2] The result was a working Lisp interpreter which could be used to run Lisp programs, or more properly, "evaluate Lisp expressions".

Advantages and disadvantages of using interpreters

Programs are usually written in high level code, which has to be converted into machine code for the CPU to execute it. This conversion is done by either a compiler or an interpreter. A compiler makes the conversion just once, while an interpreter typically converts it every time a program is executed (or in some languages like early versions of BASIC, every time a single instruction is executed).[citation needed]

Development cycle

During the software development cycle, programmers make frequent changes to source code.[citation needed] When using a compiler, each time a change is made to the source code, they must wait for the compiler to translate the altered source files and link all of the binary code files together before the program can be executed. The larger the program, the longer the wait. By contrast, a programmer using an interpreter does a lot less waiting, as the interpreter usually just needs to translate the code being worked on to an intermediate representation (or not translate it at all), thus requiring much less time before the changes can be tested.[citation needed]

Distribution[edit]

compiler converts source code into binary instruction for a specific processor's architecture, thus making it less portable. This conversion is made just once, on the developer's environment, and after that the same binary can be distributed to the user's machines where it can be executed without further translation. A cross compiler can generate binary code for the user machine even if it has a different processor than the machine where the code is compiled.

An interpreted program can be distributed as source code. It needs to be translated in each final machine, which takes more time but makes the program distribution independent of the machine's architecture. However, the portability of interpreted source code is dependent on the target machine actually having a suitable interpreter. If the interpreter needs to be supplied along with the source, the overall installation process is more complex than delivery of a monolithic executable.[citation needed]

The fact that interpreted code can easily be read and copied by humans can be of concern from the point of view of copyright. However, various systems of encryption and obfuscation exist. Delivery of intermediate code, such as bytecode, has a similar effect to obfuscation, but bytecode could be decoded with a decompiler or disassembler.[citation needed]

Efficiency

The main disadvantage of interpreters is that when a program is interpreted, it typically runs more slowly than if it had been compiled. The difference in speeds could be tiny or great; often an order of magnitude and sometimes more. It generally takes longer to run a program under an interpreter than to run the compiled code but it can take less time to interpret it than the total time required to compile and run it. This is especially important when prototyping and testing code when an edit-interpret-debug cycle can often be much shorter than an edit-compile-run-debug cycle.[citation needed]

Interpreting code is slower than running the compiled code because the interpreter must analyze each statement in the program each time it is executed and then perform the desired action, whereas the compiled code just performs the action within a fixed context determined by the compilation. This run-time analysis is known as "interpretive overhead". Access to variables is also slower in an interpreter because the mapping of identifiers to storage locations must be done repeatedly at run-time rather than at compile time.[citation needed]

There are various compromises between the development speed when using an interpreter and the execution speed when using a compiler. Some systems (such as some Lisps) allow interpreted and compiled code to call each other and to share variables. This means that once a routine has been tested and debugged under the interpreter it can be compiled and thus benefit from faster execution while other routines are being developed.[citation needed] Many interpreters do not execute the source code as it stands but convert it into some more compact internal form. Many BASICinterpreters replace keywords with single byte tokens which can be used to find the instruction in a jump table. A few interpreters, such as the PBASIC interpreter, achieve even higher levels of program compaction by using a bit-oriented rather than a byte-oriented program memory structure, where commands tokens occupy perhaps 5 bits, nominally "16-bit" constants are stored in avariable-length code requiring 3, 6, 10, or 18 bits, and address operands include a "bit offset". Many BASIC interpreters can store and read back their own tokenized internal representation.

An interpreter might well use the same lexical analyzer and parser as the compiler and then interpret the resulting abstract syntax tree.

Regress

Interpretation cannot be used as the sole method of execution: even though an interpreter can itself be interpreted and so on, a directly executed program is needed somewhere at the bottom of the stack because the code being interpreted is not, by definition, the same as the machine code that the CPU can execute.[3][4]

Variations

Bytecode interpreters

There is a spectrum of possibilities between interpreting and compiling, depending on the amount of analysis performed before the program is executed. For example, Emacs Lisp is compiled tobytecode, which is a highly compressed and optimized representation of the Lisp source, but is not machine code (and therefore not tied to any particular hardware). This "compiled" code is then interpreted by a bytecode interpreter (itself written in C). The compiled code in this case is machine code for a virtual machine, which is implemented not in hardware, but in the bytecode interpreter. The same approach is used with the Forth code used in Open Firmware systems: the source language is compiled into "F code" (a bytecode), which is then interpreted by a virtual machine.[citation needed]

Control tables - that do not necessarily ever need to pass through a compiling phase - dictate appropriate algorithmic control flow via customized interpreters in similar fashion to bytecode interpreters.

Abstract Syntax Tree interpreters[edit]

In the spectrum between interpreting and compiling, another approach is transforming the source code into an optimized Abstract Syntax Tree (AST) then executing the program following this tree structure, or using it to generate native code Just-In-Time.[5] In this approach, each sentence needs to be parsed just once. As an advantage over bytecode, the AST keeps the global program structure and relations between statements (which is lost in a bytecode representation), and when compressed provides a more compact representation.[6] Thus, using AST has been proposed as a better intermediate format for Just-in-time compilers than bytecode. Also, it allows to perform better analysis during runtime.

However, for interpreters, an AST causes more overhead than a bytecode interpreter, because of nodes related to syntax performing no useful work, of a less sequential representation (requiring traversal of more pointers) and of overhead visiting the tree.[7]

Just-in-time compilation

Further blurring the distinction between interpreters, byte-code interpreters and compilation is just-in-time compilation (or JIT), a technique in which the intermediate representation is compiled to native machine code at runtime. This confers the efficiency of running native code, at the cost of startup time and increased memory use when the bytecode or AST is first compiled. Adaptive optimization is a complementary technique in which the interpreter profiles the running program and compiles its most frequently executed parts into native code. Both techniques are a few decades old, appearing in languages such as Smalltalk in the 1980s.[8]

Just-in-time compilation has gained mainstream attention amongst language implementers in recent years, with Java, the .NET Framework and most modern JavaScript implementations now including JITs.[citation needed]

Applications[edit]

Punched card interpreter[edit]

The term "interpreter" often referred to a piece of unit record equipment that could read punched cards and print the characters in human-readable form on the card. The IBM 550 Numeric Interpreter and IBM 557 Alphabetic Interpreter are typical examples from 1930 and 1954, respectively.[citation needed]

  • ehsan gholami

How to Maximize Space on your SSD Hard Drive in Windows 7 using Symbolic Links

If you move your winsxs folder to another drive, important/critical Windows Updates will fail with error code 80070011. Windows Update won’t work with junctioned files, it requires hardlinks to the actual location of the data. There was a workaround for this in Windows Vista, but stopped working as of SP1. You can still move the folder to save space, but won’t be able to run any more updates!

Here’s a handy article that explains the winsxs folder in detail, for those of you who just want to understand “why?!”

If you’re anything like me, you want to run the latest-greatest programs on the newest operating systems available — and the worst thing you can do is sit and stare at loading screens. Your time is too important!

One of the best ways get blazing-fast performance from your computer is to run your OS from an SSD hard drive. But, while they may be fast, let’s face it — they’re definitely not the biggest hard drives in the world. Because 500GB+ drives are so inexpensive nowadays, the latest-greatest programs and operating systems all seem to assume everybody has tons of extra space.

But what if you’re installing them onto an SSD hard drive? Do you really have 10GB to waste on a collection of restore points, previous updates, and cache files for 7 languages you don’t even speak?

While programs like CCleaner are very helpful, deleting cache and temporary files are only going to free up so much space. No, it’s time for drastic measures!

Today, I freed up over 15 GB of space on my SSD hard drive — without losing a single file.

Here’s how I did it!

The Investigation

This week, my Limited Edition copy of Crysis 2 arrived. It was a no-brainer which drive I wanted to install it on: my Corsair SSD. When I saw the system requirements, though — “at least 9 GB of free space”  — I was a bit surprised to see I only had 3GB left!

“What the heck? Where did all my space go?!”

With the help of TreeSize Free, I was quickly able to identify where all my free space went (see the program in action here.)

The first culprit was a huge (52,000 files, 9 GB) folder named “winsxs” which sat in the Windows directory. Looking through it, I found a collection folders with scary names and locked permissions. The first thing I did was search for “delete winsxs” on Google — and found a ton of pages which almost unanimously told me to leave it alone.

“Come on, really?” I thought. “I’ve only been using Windows 7 for 3 months. What happens when the winsxs folder hits 20 GB? What do I do — uninstall the programs I need to run my business?”

The Solution

Eventually, I came upon a forum discussion which told me exactly how to remove it.

WARNING: Proceed at your own risk. Incorrectly performing the following procedure may cause irreversible damage to your OS. It is highly recommended to backup your system before proceeding.

Below is the procedure:

You will need two utilities: PendMoves and MoveFile. Place them in \Windows\System32 directory for easy access.

Procedure:

1. In Windows Explorer navigate to the \Windows\WinSXS directory. Right click the directory to bring up the quick menu and select Properties. Click the Security tab to view the security properties. You will need to assign the Administrator user account ownership of the directory and then grant the Administrators group Full Access.

2. Open an administrator command prompt, and create a dummy directory. Execute “mkdir c:\windows\winsxs.moved“

3. Next, create a junction (like a Symbolic link for Vista). Execute “mklink /J c:\windows\winsxs.link winsxs.moved“

4. Now delete the winsxs.moved directory. Execute “rmdir c:\windows\winsxs.moved“

5. Now we will use MoveFile to schedule renaming of the WinSXS directory at reboot. This is the magic that will give us control over the directory.

6. From the administrator command prompt, execute “movefile c:\windows\winsxs c:\windows\winsxs.moved“. As you can see, this is renaming the WinSxS directory before Vista can get a lock.

7. From the command prompt, run “movefile c:\windows\winsxs.link c:\windows\winsxs“. This puts a winsxs directory back (as far as Vista is concerned), so everything doesn’t collapse in a heap.

8. From the command prompt, run “pendmoves“. It will show the two pending moves you’ve entered above, with NO ERRORS. If it all looks good, REBOOT!

[Note from XDude: at this point, when I rebooted my machine, I was a bit discouraged by the resulting blue screen. After a bit of confusion, I entered a command prompt from Startup Repair and put everything back to the way it was before I started. I then repeated steps 1-8, being extra-careful this time. Success!]

9. On reboot the critical renames/moves will execute, and the WinSxS directory will be unlocked and able to be moved in the next steps.

10. Open an administrator command prompt, and execute “dir c:\windows\winsxs*“. If you performed the previous steps correctly, you’ll see a WinSxS.moved directory and the WinSxS junction. If it did not work, repeat the above steps. Our next step is to relocate the WinSXS directory and amend the junction.

11. Using Windows Explorer, COPY the entire WinSxS.moved directory to a \Windows directory on another partition or drive.

12. When the copy is finished, rename the new directory from WinSxS.moved to WinSxS.

13. Go to an administrator command prompt and execute “rmdir c:\windows\winsxs“.

14. Then, execute “mklink /J c:\windows\winsxs d:\windows\winsxs“.

15. To be sure everything is happy, in Windows Explorer browse to c:\windows\winsxs. You will see all of the files. (Even though they are actually on your other partition or drive)

16. Reboot
17. After reboot, you should be able to delete c:\windows\winsxs.moved and FINALLY liberate all that disk space. Whew! Now take a bow.

This process can also be applied to the Windows Updates directory. When you download Windows Updates etc., the files get placed into C:\Windows\SoftwareDistribution, and this will quickly become huge. It is easier though… stop the Automatic Update service, move directory, create junction, restart service, DONE!

The Permissions

As it turned out, step 17 was actually quite a bit more complicated than just clicking the folder and hitting “Delete.” Though I was able to copy the folder to a different drive without hassle, deleting them would be another exciting episode of setting file and folder permissions.

Take Ownership” is a great way to set permissions for files, but the right-click option  disappears once you have more than 15 files selected. There were over 10,000 folders in the winsxs folder — and there was no way in heck I was gonna do them 15 at a time!

I needed a recursive script that would go through every single folder and set permissions. I found it here! (Note: this script refers to a file which can be downloaded here.)

To get it to work, I typed the following from a command prompt:

takecontrolof c:\windows\winsxs.moved\*.*

After that, I was finally able to delete the folder.

Success! 9 GB freed — and no files were lost!

The Fun Continues!

“Well that was exciting! How much more space can I free up?”

TreeSize told me there was a ton of other stuff taking up space, such as AdobePatchFiles, SpeechAnalysisModels and a few LocalStore folders. Most of them would probably never get used — no sense keeping them all on my precious SSD drive! If I could move it all to one of my larger-capacity 7200 RPM drives, I wouldn’t have to worry about space and the performance would be “good enough” considering how often the files would be accessed.

Typing folders into a command prompt didn’t really do it for me, though — not to mention mklink doesn’t seem to work if there’s a space in the folder name, such as “Program Files (x86)”.

My salvation came from the wonderful Junction Link Magic!

A mere 10 minutes later, I had freed up an additional 6.5 GB of space.

Long live the Symbolic Link!

  • ehsan gholami