The way Windows 10 updates machine’s drivers is awesome

I am a Windows (10) fan and I am proud of it. I am telling this because these days most people I meet prefer to use non-Windows operating systems such as Linux and OS X. In fact, in the community I am dealing with these days, working with non-Windows operating systems is a way of showing geekness.

But I love Windows 10 and I am using it almost everyday and I am proud of it.

One of the cool things Microsoft has done in Windows 10 (It started to test it in Windows 8.1) is the way it updates your machine’s drivers. Previously, you had to visit a hardware manufacturer website to get the latest drivers for your machine but with Windows 10, you don’t need to do such a thing anymore. I think Microsoft negotiated with hardware manufacturing companies such as AMD, Intel, etc., and told them to send their drivers to Microsoft every time they released a new version so the driver updates can be shipped to users via Windows Update automatically.

The following picture shows that Windows Update automatically updated my graphic cards and printer drivers:

Windows Update updates drivers automatically

This way of upgrading has lot of advantages over the previous ways. First of all, it prevents the user from downloading a incompatible driver. Windows recognizes the model of each hardware and installs the appropriate driver. Second, since most Windows users turn the automatic update option on, they always have the latest driver. The latest driver you have, the more reliable your machine works. Last but not least, you don’t have to be worry about anything; it just works.

I know most of you may had bad experiences using previous versions of Windows; but Windows 10 is a very reliable OS and I highly recommend you to start using it if you haven’t yet.

A better cross-platform client for Longman dictionary

During past 7 years, I have always been into learning English; not only because it’s the language I really like, but learning a new language opens new gates into a new world with new people and new ideas.

Although English is a key language in worldwide communications, but if your native language is English, it’s also good to learn a new language such as French or Spanish.

When it comes to learning a new language, having a good dictionary is a must. For me, Longman dictionary is a good one. Because the dictionary is for learners (Built for those who are learning English) not native speakers, it has lots of examples and the definitions are very easy to understand.

When I’m using my Windows machine, I use its wonderful app. It’s one of the bests, in my opinion. But, when it comes to Mac, unfortunately, I realized that the app DVD doesn’t have any OS X app included.

ldoce_earthI Googled about it and suddenly came across an app called LDOCE5 Viewer. The app uses the Longman dictionary database as the source and acts like its client.In fact, it does things that the Longman official app itself doesn’t!

Once you launch the app for the first time, you will be asked to specify the Longman database. The Longman database is a folder in the official DVD called “”. To be able to use the app, you need to copy that folder to a place in hard drive; then, specify that folder to the app. Once the data folder specified, the app starts indexing the dictionary data. It may take a few minutes to complete according to your machine’s performance. The app is also  available for Windows and Linux as well.

To download it visit its official website at:

Write your 2015 goals before the year begins

To-Do listWriting goals is one of the most important tasks that I believe everyone should pay attention to. It’s all about your plans for the upcoming year.

Unfortunately, most people don’t have an annual plan which is so bad. Some people have goals to achieve in their mind but don’t write their goals down which is not so good as well. Some write their annual goals after the year is begun.

None of those I’ve mentioned are good. I believe, we all have long-term goals. Writing your tasks down is one of key parts of being a successful person. It’s important to plan for a day/week/month/year before it begins. For example, if you’re going to plan for tomorrow, you should write your tasks down tonight.

In addition, be realistic when writing your goals. For instance, you may won’t be able to accomplish 20 tasks in a single day. Just write three most important tasks and sort them by priority.

Write three most important plans you want to do in the upcoming year. If you’re writing those on a paper, it can be stuck on your room’s wall. If you’re writing your plans/tasks in a file stored in your computer like what I do, put them somewhere on your desktop; so, you can see them every day.

Before install a Chrome extension, check out its permissions

Chrome-Store1It’s about a week that I am working on developing a Chrome extension. Actually, this was my first experience developing an extension. During the process of R&D, I’ve checked out some of existing Chrome extension for learning purposes. While searching, I’ve found some extensions which had suspicious activities. Actually, some of them has access to users’ sensitive information such as files on their computer!

The fact is that, extensions are one of the most dangerous piece of software I’ve ever worked with because of the access level they can get. A Chrome extension can get access to almost anything on your computer. from file system, to your web history. Even most desktop apps don’t have access to such resources. Here are some of things an extension can do and you may want to consider:

  • It can have direct access to all of your Chrome stuff: including your tabs, websites you visit, your password and a lot more.
  • It can have access your file system. This means that an extension can access all of your personal files in your computer.
  • It can execute a file: The extension developer can also include an executable file inside a chrome extension and run it in background without notifying you about. This can be very dangerous. Assume that extension developer develops a keylogger using C++ and run it on your computer. As a result, it can gather all of your password and personal information and then send it to a server.
  • It also can access system memory and CPU as well. This is ridiculous because only some low-level apps and services can have access to such resources.
  • And a lot more…

The following is an example of a chrome extension that has access to your computer resources more than it really needs (I’ve omitted the extension name and logo):


As you can see in the above picture, This extension want to have access to nearly everything on your computer:

  • It can access your USB devices!
  • It can communicate with native applications such as kernel processes.
  • It can access your entire Google Drive account including all of your personal documents, photos, and etc.
  • It has full access over your network connections.

Permissions in a Chrome extension can be gained in the manifest.json file. The extension developer can request any access he/she wants. Google reads this file when a user attempts to install the extension and shows the above dialog.


You MUST check out an extension’s permissions before attempting to install it. An extension can be very dangerous. make sure it only asks for permissions it needs. For example, a game don’t need access to the browser proxy. You should not allow such permissions.

Even extensions which are downloaded from Chrome Web Store are not safe since there’s no review process behind them.

Note that everything I’ve mentioned in this post works the same in Firefox; consequently, a Firefox extension can also have unlimited access over your computer.

Hope it helps.

Nostalgia! Installing MS-DOS alongside Windows 3.1 on Virtual Box

You may remember MS-DOS and Windows 3.1 if you are 28 or older. These were the most important software and apps on a computer in that time. Most of us had memorable moments with these operating systems and applications. Actually, I started programming with QBasic and then moved to Visual Basic on Windows.


Today I decided to get back to that sweet moments and tried to install MS-DOS on Virtual Box.

The first thing I had to do was to find the MS-DOS OS and other files; so, I can install it on my virtual machine. As a result, I Googled and found This is an amazing site contains most of old and nostalgic operating systems, games, applications and developer tools. In addition to MS-DOS, I also downloaded and installed some other apps on the virtual machine which I’ve listed below:

  • Windows 3.1: One of the first operating systems with graphical user interface by Microsoft.
  • Borland C++ for MS-DOS: A powerful IDE (Actually in its own age) to develop, debug and compile C and C++ applications in DOS.

As a gift for this Christmas, I packaged all of the apps alongside MS-DOS OS into a single “.VHD Virtual Hard Drive” file which can be access via the following link:


Note: The zip file password is:

All you need to do is to download this package, unzip it and then import it in your Virtual Box. If you don’t know how to import a VHD file in Virtual Box, follow these instructions:

Open Virtual Box and click on “New” icon to create a new Virtual Machine.


The “Create Virtual Machine” window asks for three things. The first is a name which can be anything you want. The second is type which has to be set to “Other”. The third is version which must be DOS. By clicking “Next” you’ll be navigated to the second step which is memory allocation. Since MS-DOS is a very small OS, 32 MB of RAM is enough but you can select as much as you want (Don’t select too much memory because MS-DOS may not support it).


After the amount of RAM is defined, click next to navigate to the third section. This page will ask you to whether you want to create a new virtual hard drive or use an existing one. Select “Use an existing virtual hard drive file” then select the VHD file you’ve downloaded above.

You’re done. You can now start your MS-DOS 6.22 by double clicking on its icon in Virtual Box.

Enjoy and Happy Christmas!

Introducing GoldenDict: The best dictionary I’ve worked with so far

I’ve been a big fan of Babylon dictionary for a long time. During that time, Babylon dictionary helped me a lot to look up words and phrases from languages other than Persian.

Unfortunately, Babylon became useless for me since the release of version 10, due to some bugs it had; so, I removed it from my computer. Also, during these couple of years, I’ve moved to platforms other than Windows such as Linux and Mac; therefore, I couldn’t use Babylon even if it worked correctly.

Introducing GoldenDict

68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f3833373734392f3330343230352f33383439656235342d393633372d313165322d396462382d3735363633663463343466392e706e67A few days ago, a friend of mine, introduced me GoldenDict and blown my mind. It is the best dictionary look up program I’ve ever worked with. It has a lot of benefits over other dictionaries; so, I decided to write a blog post to mention some of its features:

  • It’s completely free and open-source! This means you can use it as much as you want without even paying $1 for it. However, you can donate if you want. If you’re a developer, you can also contribute and make it even better.
  • It supports multiple dictionary file formats including Babylon glossaries, StarDict and others. Consequently, you can import all glossaries you had before! This is a very good feature if you’re a former Babylon user or want to migrate to GoldenDict. Actually this is a very important feature for me because, I’ve had some Babylon glossaries before and wanted to use them.
  • It has the Scan popup functionality. You can easily translate words even from other apps. As you may know, Babylon also has such feature but as I tested, GoldenDict word detection is much better.
  • It’s cross-platform; so, you can use it in nearly all of your devices. GoldenDict is available for Windows, Mac, Linux and even Android phones.


To download GoldenDict, please check out As I’ve mentioned, GoldenDict is a free product and you don’t have to pay for it; but, if you think this project worth it, please make a donation to help making it even better.

How to create dynamic XML sitemaps in ASP.NET MVC

When developing web applications (especially websites), some rules have to be obeyed. One of those rules are Sitemaps. Sitemap is an essential to tell more about a website to search engines. According to, sitemaps are an easy way for webmasters to inform search engines about pages on their sites:

Sitemaps are an easy way for webmasters to inform search engines about pages on their sites that are available for crawling. In its simplest form, a Sitemap is an XML file that lists URLs for a site along with additional metadata about each URL (when it was last updated, how often it usually changes, and how important it is, relative to other URLs in the site) so that search engines can more intelligently crawl the site.

Implement sitemaps in ASP.NET MVC is very easy and this post is going to cover it.

There are several ways to implement sitemaps in ASP.NET MVC. Since sitemaps are just XML files, they can be generated using XLINQ (LINQ to XML) technology.

The process of creating a sitemap in a website can be divided into the following steps:

  • Get a list of URLs which has to be included in the sitemap.
  • Create the sitemap XML in code.
  • Return the created XML to the user.

Note: You don’t really need to create an actual XML file. All of the process above can be done inside a controller action.

The first step is to get the list of objects we want to create the sitemap based on. In this post, I have a list of categories which have a unique URL based on its ID. So:

public ActionResult SiteMap() {
    var items = categoryService.SelectAll();

After that, it’s time to create the XML document. Sitemaps must have a specific format; so, they can recognized by search engines. The following is a valid XML sitemap:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="">

As you know, creating such XML file in LINQ to XML is a very simple task to do:

public ActionResult SiteMap() {
    XNamespace ns = "";
    const string url = "{0}";
    var items = categoryService.SelectAll();
    var sitemap = new XDocument(
    new XDeclaration("1.0", "utf-8", "yes"),
    new XElement(ns + "urlset",
        from i in items
        new XElement(ns + "url",
            new XElement(ns + "loc", string.Format(url, i.CategoryId)),
            new XElement(ns + "lastmod", String.Format("{0:yyyy-MM-dd}", DateTime.Now)),
            new XElement(ns + "changefreq", "always"),
            new XElement(ns + "priority", "0.5")

As you can see in above code, we’ve simply created an XML file in sitemap format. Now we can return it to the user.

return Content("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + sitemap.ToString(), "text/xml");

Look at the code above. When creating normal actions, we usually return a View or PartialView objects; but, since we’re going to return a content, we use the Content method. Content method requires two arguments. The first argument is the content we’re going to return to the user as string and the second is the content’s MIME type.

Hope it helps.

The most essential apps I use everyday

Since I purchased my first ever smartphone which was an iPhone 3G, I started using some apps to help me get organized, learn more, stay in touch with my friends and family and have fun on my device.

During these four years I have used and tried a lot of apps and selected some of them to fulfill my needs. Nowadays, I can’t live without some of these apps. In this post I am going to share some of the most effective apps I use everyday. I thought this might be useful for you as well.

1. iPhone’s official Mail App

Mail appOne of the most important applications I use on my iPhone is the Mail app. The built-in iPhone mail app is not as feature-rich as some other third-party applications but I think its features are enough. It covers all of my expectations including the following:

  • It let me setup multiple accounts on it. Currently, I have setup my iCloud account and my main (i [at] ramezanpour [dot] net) account on it.
  • It supports signatures.
  • Its has a feature called VIP; so, you can add the most important people you’re communicating with in it. Email from those people will be shown bolder than others; also, they will be placed in a separate folder called VIP.
  • It supports all major email providers including GMail, Yahoo, AOL, Outlook and also Exchange.

2. Podcasts

Podcasts appOne of the iOS’s most unique features over Android or other mobile operating systems is the podcast. Podcasts app will let you have all of your favorite podcasts in one place. I usually connect my iPhone to my car’s stereo and listen to my favorite podcasts instead of listening to music.

Podcasts are available in a wide range of categories such as music, news, arts, education, science and technology. I have subscribed to some science and technology podcasts and listen to them when on my way to work or returning home. My wife also likes some of them; so we listen to them together.

3. Viber

ViberAlmost all of friends are using Viber nowadays. It’s the most popular messaging app in Iran. According to a report, more than 40 million Iranians are using Viber these days. Viber let me stay in touch with my friends and family at a very low cost. It’s not the best messaging app (I perfer Whatsapp messenger) but since most of my friends are using it’s difficult to find them on other messaging apps.

4. Skype

SkypeAlthough Viber covers all of my text needs; but, when it comes to voice and video messaging, Skype is by far the best option. The voice quality is awesome (Even with Iran’s bad internet service) and the service is almost free. I use Skype to talk to some of my friends who live overseas. Beside its mobile app, Skype is also available for desktop computers as I am currently using it in my Windows and Mac machines.

5. Evernote

Evernote“Getting used to productivity apps is always a very hard thing to do but once you get used to them, your life gets brighter.” – Mohammad M. Ramezanpour

Evernote is one of those apps I use almost everyday. Since I use Evernote I don’t use papers anymore. I use Evernote for taking notes and creating checklists. One of the good features of Evernote is the ability to share a note or notebook with someone else. My wife has created a shopping list in Evernote and shared it to me. Every time she needs something at home, she adds a new item to that list. We go shopping almost every week and purchase things according to that list.

6. DropBox

DropBoxDropBox is the best online cloud storage. I have been using SkyDrive (OneDrive) and Google Drive but in my opinion, non of them were as powerful as DropBox. DropBox is available in all operating systems. I use it in my iPhone, Windows and Mac devices. DropBox is very simple and easy to use. One of the coolest features of DropBox in comparison with other cloud storage apps is its “Lan Sync” feature which let users to share files in-between without using the internet bandwidth. all of the files will be transferred via local network.

I use some other apps but these 6 apps are very essential for me. What apps do use the most? Please share your list by commenting down below.

Hope it helps.

Create an on-demand VPN connection programmatically in iOS 8

A while ago, I published a post about configuring and managing VPN connections programmatically in iOS 8. By default, established VPN connection will be disconnected if user iOS device goes to sleep to save battery life. To avoid this, Apple introduced a feature called on-demand; so, iOS will get connected to VPN whenever it needs to connect to the internet.

Well, it can be implemented programmatically too using the NetworkExtension framework and that’s exactly what this post is all about. In this post, I am going to create an on-demand VPN connection using NetworkExtension; therefore, VPN connection will be established whenever an app opens a network connection.

Note: I am not going to describe how to create a VPN connection in this post. If you’re not familiar with creating a VPN connection programmatically, please take a checkout my post.

Turn on On-Demand

The first thing you need to do is to tell the NetworkExtension framework that you want to create an on-demand connection. To do so, set the onDemandEnabled property to YES:

[[NEVPNManager sharedManager] setOnDemandEnabled:YES];

turning on-demand on is not enough. You will also need to tell the OS when exactly you want on-demand to be enabled. To do so, you will need to assign some rules to your configuration. These rules called “On-demand rules”:

What are On-demand rules?

On-demand rules are set of attributes which must be set to tell the OS when VPN connection should be established on-demand. onDemandRules property accepts an array of rules. Consequently, you can set multiple rules for a VPN configuration.

For example, you can set a rule and tell the OS to establish the VPN connection whenever user wants to open; otherwise, the VPN connection won’t be established.

One thing you may want to do it to activate the VPN connection whenever an app open a network connection; so, all iOS network traffic will be transferred through your VPN server. To achieve this, NEOnDemandRuleConnect class must be used.

In Network Extension framework, Apple has provided some useful on-demand rule templates you can make use of. Although you can create your own rule, it’s possible to use templates as well.  NEOnDemandRuleConnect class is one of those templates. It will tell the OS to establish VPN connection whenever iOS needs to connect to the internet; as a result, users will always connect to your VPN servers whenever they want to access the internet. As far as I know, this is what most VPN providers and users want:

[[NEVPNManager sharedManager] setOnDemandEnabled:YES];
NSMutableArray *rules = [[NSMutableArray alloc] init];
NEOnDemandRuleConnect *connectRule = [NEOnDemandRuleConnect new];
[rules addObject:connectRule];
[[NEVPNManager sharedManager] setOnDemandRules:array];

Once you changed the configuration you have to save it using saveToPreferencesWithCompletionHandler: method.

Hope it helps :)