Moodle Cron

Although it is not an obvious part of the installation of Moodle, setting up Cron is very important when it comes to Moodle.

For example, some emails are sent out immediately while others are scheduled and only sent out when cron runs. Other things that are often affected by Cron jobs are report generation. Eventually, if you never run cron, your Moodle site will also stop working so it is important to make sure that this is setup properly. This happened to one of our clients. They had their own people do the installation and they skipped the step of setting up Cron. A year and a bit later, they contacted us thinking someone had hacked their site. It turned out they had just never run the Cron job that does Moodle maintenance.

You can check the last time Cron was run by going to the Site Administration > Notifications.

If cron hasn't run in the last 24 hours, you will see something like:

"The cron.php maintenance script has not been run for at least 24 hours.

If you don't see anything about it, chances are that Cron is being run automatically every once in a while.

There is also the possibility that an error is preventing Cron from working properly. The likelihood of this happening is much lower since Moodle 2.7. You should be able to manually run Cron and see the results by logging in as a Moodle administrator and going to:

http://example.com/admin/cron.php

Just replace "http://example.com/" with the URL to your Moodle site. There are some settings in Moodle which can prevent this URL from working so, if it doesn't seem to work, don't assume that Cron doesn't work. It might just be some Moodle settings. If Cron is running regularly, the displayed log might be pretty short as there are items which are only run once a day which may not appear in the list. This is especially noticeable if you run Cron manually twice in a row.

If you are running Moodle on a Unix/Linux based server, documentation on how to set it up can be found on Moodle.org's Cron page.

If you are running Moodle on Windows, you may have noticed that "cron" doesn't exist. However Windows does also include a Scheduler. You will find details on how to set that up by going to the Cron with Windows OSpage on Moodle.org.

It's never too late to setup Cron. Not only will you find that your Moodle site works better, it may actually work faster too.

Useful Tools and Resources for Moodle Developers

Here is a list of resources that helped me get started in Moodle development. I've even put together a few articles of my own to share covering topics like Getting Started in MoodleGit for Moodle Developers in Windows and Upgrading Moodle packages for Windows (XAMPP Control Panel, PHP, phpMyAdmin, Apache, MySQL)

[Updated: This is an updated version of an article that was originally published on October 25, 2013]

Moodle Development Environment

Code Editors

I have also tested a number of source code editors on Windows including Atom, Brackets, Notepad++ and Sublime Text v2 and v3. I don't recommend using Atom. While a nice editor, it slows to a crawl when editing some of Moodle's larger files that can be upwards of 250KB at times. This is important because much of Moodle's development documentation is in the source code. In Atom, a single keystroke can take up to several seconds to happen.

Notepad++ is super fast and my text editor of choice for most work. The down side is that Notepad++ can't effectively use XDEBUG PHP tracing on larger source code files.

Brackets and Sublime Text ($) aren't quite as fast however their advantage is that plugins are available which are specifically targeted to help Moodle development. I think Sublime Text is a little faster. I have yet to try either of these with XDEBUG.

As for NetBeans, once you've got it configured properly with XDEBUG, it works almost perfectly though it is slower than a native Windows application because it needs to run in a Java virtual machine.

I have yet to try the following popular alternatives:

  • phpStorm ($) --  Besides being is Java based, it can take a little getting used to the user interface.
  • phpDesigner ($) -- a native Windows application.

Moodle Development Books

The only Moodle 2.0 development book I know of is called "Moodle JavaScript Cookbook". Unfortunately I don't know of any other books. Maybe the fact that Moodle 2.7 will be an LTS version will encourage authors to publish books.

Moodle Programming Courses

Introduction to Moodle 1.8 Programming -- Important note: Moodle 2.x has some important different from 1.8. That being said, I found it very helpful to go through this course. It is unfortunate that it was never updated for Moodle 2.x.

Introduction to Moodle Programming by Tim Hunt

Moodle Documentation for Developers

Useful Moodle Related Online Development Tools

More to come…

Have a resource you'd like to see added? Drop me a comment!

Best regards,

Michael Milette

Setting Up a WordPress Website

Note: Originally published May 4, 2012 -- updated August 28, 2016.

Web Hosting

Step 1. Get Web Hosting

Sign up for Web Hosting, preferably with a company that offers a cPanel, Panelbox, 1-Click or Fantastico from a Web Hosting company such as HostPapa, Funio or HostGator (NOT GoDaddy!). If the company offers domain registration, simplify your life and take it. That way it will all be integrated and working for you. Otherwise, you can get domains from places like GoDaddy (but not web hosting!), HostGator, or NameCheap.com.

What's the issue with GoDaddy? Although they have a great Domain registration service, their web hosting service has been rated very poorly in the past. For example, there are limitation on how much and how often people can visit your website. The last thing you want is for your potential clients to have trouble accessing your website.

Step 2. Login to your Web Hosting's Management Site

Login to your web hosting service as per the instructions provided to you from the web hosting company. Install WordPress and login to WordPress. The URL to login is usually www.yourdomain.com/wp-login/ .

Setting up WordPress

Complete the following steps after having logged into your new WordPress site.

Step 3. Update WordPress.

Depending on your  host provider and when you are installing WordPress, it is not uncommon for an updated version of WordPress to be available. It is important to upgrade before you get started as the developers of WordPress are constantly working on fixing bugs and improving security. If any plugins or themes work differently depending on the version of WordPress, you'll want them working the the best and most secure version of WordPress.

If an update is available, a link will appear at the top of the browser window when you are logged in which will take you to a page where you can automatically upgrade WordPress. Click the link. The whole process should take less than a minute or so to complete.

Step 3. Plugins

Start by removing the unnecessary "Hello Dolly" plugin. Click on Plugins and click the "Delete" link near the Hello Dolly checkbox to remove this plugin. Follow the prompts to remove the plugin files. Repeat the same process to remove Akismet. There are more effective anti-spam options available these days.

Next, install some essential plugins including. Remember to activate each of the plugins after they are installed.

If you use the default menu (some themes don't support them), the first 3 plugins will be useful:

  • Exclude Pages: Allows you to create pages that won't appear in your sites menu. For example, Terms of Use, Privacy Statement and Thank You pages.
  • Page Link to: This will allow you to create menu items that point to something other than your own web pages. For example, a PDF file or a different website.
  • Simple Page Ordering: This plugin will enable you to sort your pages by just dragging and dropping them in the Pages list.
  • Page Comments Off Please: This will enable you to turn off comments for all pages, but not posts, by default on your website. You can of course turn it on on a per page basis.
  • Security and Maintenance: Limit Login Attempts, Wordfence SecurityBroken Link Checker and Heartbeat Control: You almost never hear people talk about this last one but it can save you from your ISP blocking your website because it is using up too many of your web host resources. It will also enable your site to handle more concurrent visitors.

Optional but useful:

  • P3 (Plugin Performance Profiler) -- Although not essential, this will help you figure out what is slowing the site down if you find your site getting slow. Note that this plugin currently has problems working in Internet Explorer. Use Firefox or Chrome instead. Once you have optimized your site, uninstall this plugin. You can always re-install it again in the future if you notice poor performance on your website.
  • Yoast SEO -- You may want to wait to activate this one until you've added some content to your site as one of the things this plugin will do right away is to start telling the Google, Bing and Yahoo search engines about your site.
  • Clipboard Images -- This is a super useful plugin that will allow you to simply copy and paste images from your clipboard right into WordPress. Note that the free version offers no control over the file names so, if image filename SEO is important to you, skip this one.
  • Contact Form 7 -- Allows you to create HTML forms in your website. Although it may not be the most friendly application out there, in the world of free plugins, this one offers lots of features that others may leave out. For example, it will not only send you emails containing information that visitors filled out, you can set it up to generate an auto-response back to let the sender know you will get back to them shortly, provide information to a valid email address or even suggest links to additional pages on your site which may be of interest to them. And yes, there are other add-on plugins to give it even more functionality.
  • Post Expirator -- WordPress gives you the option of specifying the date on which your post will appear on your site. However if you have an active site where you want to have some also posts "expire", this is the plugin you are looking for.

Step 5: Create your basic website page.

Click on Pages and then on the Sample Page. Change the title of the page to "Home", "Welcome". This will be the home page for your site. Also change the "Slug" to the "home", "welcome" so that it matches the page title.

Create a new page and call it "Blog", "News", "Testimonials" or anything else you like.

Create pages for "Products" or "Services" (optional), "About" and "Contact Us". I highly recommend you don't try to be too original with the name of your About and Contact Us pages as these are words that people will be looking for on your site. The last thing you want is to make it difficult for people or search engines to understand and use your website.

You need not create the content of these pages right now. This is just to give you space to work things out.

Back on the Pages page, drag and drop your pages into the order you'll want them to appear in in the menu.

We will talk about creating additional pages a little later.

Step 6: Turn WordPress into a Website instead of a Blog.

Complete the following steps:

  • In the left menu, click on Settings. Review the General Settings and update the information. ClickSave Changes.
  • Click on Reading in the sub-menu.
  • Set the Font page displays section to "A static page".
  • Set the Front Page pull-down menu to your home or welcome page.

Don't forget to scroll down to the bottom of the page and click the Save Changes button.

Selecting a Theme

Step 6: Choose the look of your website

The next step involves deciding how your website will look. WordPress has about free 1,500 themes listed on their website and there are even more companies offering Premium(i.e. pay-for) themes.

To select a theme, click on Appearance and then on Themes. Then click on the Install Themes tab near the top of the screen. You can browse through them, try them out and remove them if you don't like it. Take some time to choose a theme you like as this will be a reflection of the professionalism of your company. Also keep in mind that most themes allow you to change the image at the top of the page while others allow you to change the colours. Others that provide you with even more control are are called Framework Themes.

The most flexible Premium themes include:

  • Thesis DIY: One of the most highly rated Framework themes.
  • Genesis: One of the most highly rated Framework themes.
  • OptimizePress: This Framework theme is specifically designed with Internet Marketers in mind.

I've tried dozens of promising looking themes but eventually, I always seem to paint myself into a corner with no way out or with features that just don't work right. With that in mind, some of the best and highly configurable free themes I have come across include:

  • Atahualpa: If you like to roll your own theme, this Framework theme comes very close to the customization level available in the commercial Thesis and Genesis themes. Not so pretty out of the box. Takes a bit of work but you can accomplish great things if you know a bit of CSS.

For people who want to focus on content

Kadence Themes: Unlike many of the framework themes mentioned above, these these look great right out of the box and include many options to modify the look of your site. Kadence Themes currently offer two themes which include Virtue theme and Pinnacle theme. In case you decide to create an on-line store once day, these are even compatible with WooCommerce. Don't forget to also install the Virtue / Pinnacle Toolkit plugin which adds a Portfolio and enables Shortcode functionality in this theme.

If you want more functionality than what is included with the themes from Kadence, you can add Page Builder by SiteOrigin which enables you to easily create professional looking web pages regardless of your skill level. There are tons of Widgets available for SiteOrigin's Page builder including but not limited to: Livemesh SiteOrigin Widgets, Widgets for SiteOrigin, SiteOrigin Widgets by CodeLights and Ultimate Addons for SiteOrigin. If you have a relatively fast computer, you may also enjoy SiteOrigin CSS which adds an easy to use visual editor to SiteOrigin. Note: Only include the add-ons you will actually use. Each plugin may make your website appear a little slower. Also note that some of these add-ons may not be optimized for SEO even if the results look fabulous.

Even though I am a fan of SiteOrigin, if you have even a small  budget, spend the money on Beaver Builder instead. It is super intuitive, minimal learning curve, excellent support, loaded with useful functionality and widgets, includes tons of pre-configured page templates and is compatible with most WordPress themes. You'll have your new site up and running in no time with this tool. Otherwise, don't waste a lot of time trying out Page Builders. Trust me on the SiteOrigin recommendation.

Cache

Caching is something that improves the speed of your website by just displaying a cached version of a web page instead of re-creating it each time. W3 Total Cache is an excellent plugin that does just that. This particular plugin is compatible with all of the recommended plugins on this page.

Tip: To avoid annoying frustrations while creating your website, only activate this particular plugin when you have completed most of the major work on your website. To understand why, see FAQ below.

FAQ (Frequently Asked Questions)

Question: I see two link to my home page in the menu. How can I get rid of one.
Answer: Uncheck the box that says "Include this page in list of pages".

Question: I made a change to my website which is not reflected when I try to view the page. What would cause this to happen?
Answer: First, make sure the page you are editing and the page you are viewing are the same page. I've been caught more than a couple of times with this. If you are using the W3 Total Cache plugin, you may need to clear the cache.

Other Useful Plugins

Widget Logic -- One of the common frustrations you will quickly encounter when using WordPress as a website instead of a blog is it's limited ability to only include certain widgets on certain pages. This is where Widget Logic comes to the rescue by providing you with a way to limit certain widgets so that they only appear on certain pages, categories of pages on your site or only appear under certain conditions.

Cleaverness To-Do List -- If you are like me, this plugin will help you keep track of everything you need and want to do to your website and even let you prioritize each task.

Duplicate Post -- This will allow you to easily clone a page or post on your website. This is extremely useful when you've put a lot of work into creating a page and want to use it as a template for other pages, but it can also be useful when trying to track the results of an ad campaigns

Tip: Create a copy of an existing page on your site and promote it instead of the usual page. This will enable you to use analytics of the cloned version to track the effectiveness of your ad campaign.

Slim Stat Analytics --  If you have a small site and just want to see some useful statistics in your WordPress dashboard, give SlimStat a try. Unlike Google Analytics, it doesn't share your analytics with others as the whole thing runs completely on your website. If you have a large site, Google Analyticator will show stats from Google Analytics right in your website's dashboard too.

Social Metrics -- Gives you a running total of how many likes you received on a per-page basis on your social networks.

Tweet, Like, Plusone and Share -- Add like buttons on your site.

Social Media Widget: Add social media icons (ex: Facebook, Twitter, YouTube, LinkedIn) to your website.

WP Edit -- Enhance the WordPress editor adding features like being able to create tables.

s2Member (free) or WishList Member ($$$) -- Allows you to setup a membership site.

WooCommerce -- Create a professional e-commerce website for your products. Not only is this versatile, but it is compatible with the Canadian tax system.

XCloner -- Enables you to make complete backups (database and files) of your website.

WP Simple Paypal Shopping Cart and UI for WP Simple Paypal Shopping Cart -- Easily add items or services for sale on your website. Use Paypal Merchant (Pro is not required) to take payments by Credit or Debit cards. (Not recommended for single payments over $2000.). This is not required if you use WooCommerce.

File Manager -- Allows you to browse and view any file on your website.

JetPack -- Get many of the same features that you will find on WordPress.com. Only use if you are going to make use of some unique feature or you are going to use multiple features. Otherwise just get specialized plugins that will meet your needs.

WP-Poll -- Conduct polls on your website.

3rd Party Services

To get the most from your site, you will need the following services:

  • PayPal Merchant -- Take Debit and Credit Card payments online.
  • Social Media such as Facebook, LinkedIn, Twitter and YouTube. These are the major sites on the Web. Work on these first and then look for others if you feel like it.
  • Google Services -- Google Analytics, Feedburner and Google Search Console
  • MailChimp ($$$/Free) -- Autoresponder/Newletter tool. Where as others offer a free trial period, MailChimp remains free for up to 2,000 recipients and a maximum of 12,000 emails in total per month. This is perfect when you are just getting started. If this isn't enough to meet your needs, check out AWeber ($$$) and InfusionSoft ($$$).
  • YouTube -- Host you videos on YouTube. Their systems are designed to work with video much better than your host provider's server will ever be.

In challenging times, remember this…

You learned to walk. You learned to talk. You learned to love and how to forgive. Don't believe. Have faith. Things will work out and, if you pay attention, your life will get better. Be grateful for what you do have and trust that you can and will grow from the experience. Help others by sharing your new-found perspective.

PHP Developer Tip: End-of-line format

If you are editing a PHP code file on Windows or Linux, make sure your file end-of-line format isn't Old Mac Format. This could cause problems when executing even if your PHP is flawless.

Buying memory for your Laptop / Notebook

Thinking of adding more memory to your laptop? Buying more memory can often one of the best ways to increase the speed of your laptop. When a computer runs out of memory, the operating system will start using your hard drive store memory temporarily. Unfortunately hard disk is MUCH slower than memory resulting in even the fastest computers slowing down to a crawl.

The good news is that, instead of buying memory from the manufacturer, you can often save some money if you have the right part number for your memory which you should be able to find out by asking questions where you initially purchased your computer or using Google to search for your make, model number and the words memory upgrade.

Always make sure that it is even possible to upgrade the memory. If you are lucky, you may even have an empty memory slot. Other times, you will have to replace existing memory. For example, if you have 2 sticks of 2 GB of memory in your computer and want to add 4 more GB, you may have to remove one of the 2 GB sticks of memory and replace it with the new 4 GB. If you don't know about this ahead of time, you may end up surprised when your computer starts up only claiming to have 6 GB of memory. And what do you do with the stick you removed? Sell it on eBay to recover some of your investment or just keep it as a spare part in a save place -- like the packaging that the new 4 GB of memory came in.

Most laptops and notebooks use a format of memory called SODIMM which is different from regular SDRAM type desktop memory even if the rest of the specs seem to match. It's a physical difference. Also, DDR2, DDR3 and DD4 are not compatible. Make sure you buy the right memory. If you are not sure, ask in a store or online before you buy. What doesn't usually matter as much is the brand. Most computer manufacturers don't make their own memory anyway.

 
Compatible memory will usually work but occasionally it won't. This happened to me a couple of years ago with a Lenovo Thinkpad.

The computer was constantly close to or actually running out of memory (according to Windows Task Manager) which seriously impacted my productivity. I needed to upgrade the memory quickly so I went over to Staples, purchased some memory and stuck it in my laptop. It worked perfectly on the first shot and was totally reliable.

About 6 months later my laptop got stolen and I replace it with the exact same model. Once again I had to upgrade the memory so I went back to Staples and purchased the exact same part number. My laptop wouldn't start up. I suspected that it was probably just a bad stick so I went back to staples and exchanged it for another of the exact same memory. The new stick didn't work any better. So I returned it. I admit that I was surprised and disappointed, especially since it had worked so well in my previous machine.

This was the first time since way back in the days of 386 CPUs that such a thing happened to me. I've even got great deals purchasing memory off of eBay, knowing full well that I was taking a chance, and they always worked well and were super reliable.

The moral of the story is, wherever you buy your memory, make sure they either have a good return policy or that you are getting a really good deal. The alternative is to get certified Lenovo memory from a place which may not have such a great return policy which is what I ended up doing. It was just a few dollars more and it worked on the first shot.

Which Web Development Programming Languages Should I Learn?

I am often asked this question by other Web developers. In fact, I regularly need to figure decide which web programming languages and technologies I need to learn next as part of my life long learning.

Start with Web Browser Technologies

Did you know? Even after over 20 years of mainstream web technology, web browsers only natively understand 3 things: HTML, CSS and JavaScript. That's it, that's all!

There actually used to be a fourth, vbScript, but it was only available in Internet Explorer and Microsoft finally deprecated it as of IE11. Anything more and it is usually an add-on, plugin or other synonym for what is essentially an extension.

So my recommendation would be to get the basics down. No matter what you end up working with after that, you won't be able to do without this basic foundation unless you just want to end up editing content in WYSIWYG editors.

Once you've got those down, you can expand into jQuery, Angular.js, Bootstrap and Foundation which are implementations of JavaScript and CSS. These should give you enough experience so that, if you do end up using different libraries or frameworks, you'll have an idea of how things work and will be able to adapt.

Server Side Technologies

Once you've got a good handle on web browser technologies, the next step is to look at Web server technologies. There are many options and you will have to make a decision as where you want to go with it.

Server side technologies enable servers to deliver dynamic content to web browsers. For example, it may send the browser different content depending on the context such as page being displayed. Basically your website has a theme/layout is separated from the content of the page. The advantage is that you can easily change the look of your website without having to modify the content.

Your first choice will be whether you want to work on Windows based technologies or cross platform technologies that can include Windows, Unix/Linux, OS X.

I could rattle off a whole list of server side programming languages like Java, Python, Ruby on rails, .Net, PHP, Perl, node.js and databases like MS SQL Server, MySQL/MariaDB, MongoDB, Postgres and many more. Is there a right one to choose? Who knows really. In my opinion, the right one is the one that lands you the job in my opinion. Just try to avoid the fads if you can. Those are the technologies that are supposed to be the next big thing and then fizzle out over the next year or two. It's like trying to always wear the latest fashion. Tomorrow what was way cool is so passé. Stay a little conservative… and again, pay attention to what is happening in your industry. In fact, you may even discover that certain industries have standardized on particular programming languages and technologies making the choice a no brainer.

Which ever server technology you end up working with, take the time to learn how to set it up and configure it yourself. Over time, this will serve you well, especially when something worked in the development environment and didn't when it went live onto the production site.

Life Long Learning is the Only Sustainable a Way of Life

There are so technologies that it will often seem like you picked the wrong one for the job. My recommendation here is to pay attention to what your employers are using, what the employers of your friends are using and learn those technologies.

If you are paying attention to your industry, even if you make a mistake and choose the wrong technologies to learn, it will still be possible to find work with companies that made the same mistake and you'll have less competition for these jobs when you find them.

I once had a job working for a company that used a programming language called "Crackhaven". You may not have heard of this programming language because the founders of the company invented it and it isn't used anywhere else in the world. Documentation was almost non-existent and was often incorrect. I didn't get the job because I knew Crackhaven -- I didn't. I got the job because I had lived a career of Constant And Never ending Improvement (CANI) which resulted in knowing so many programming languages that I can adapt to new programming languages with relative ease. Programming concepts are similar across most programming languages. Most of the time, it's just about learning how to use their function libraries and APIs.

Whatever technologies you end up learning, try to stick with them for at least a couple of years if you can. Notice that employers are looking for at least 6 months experience, often even 2-3 years minimum in job postings. If you constantly jump from one technology to the next, you may become very skilled but you still won't meet the requirements.

Follow the Money

Stay focused on your desired outcome and the results you really want. Pay attention to your industry and keep an eye on the job postings, even when you are not looking for a job. Keep in mind that 80% of all jobs are never advertised so you may assume that those that are might also be the ones that are harder to follow.

When you are working, also take the time to learn something new. You don't have to spend tons of time on learning, just a little every day. If you really want to change the direction of your career because you see yourself in a dying technology, you'll need to spend more time to ramp up. Stay focused on your desired outcome and the results you want to get.

To help you keep an eye on job market trends, take a look at Job Trends on Indeed.com. You can enter multiple technologies and see how they've been trending over the last few months/years.

Above all else, have fun. There is nothing worse than working in technology and hating what you do. Follow your passion and become an expert in what you do and there will always be new opportunities opening up,

While not computer programming, program your brain by learning about marketing. It doesn't matter if you are the best in the world at what you do, nobody is going to come knocking on your door if they don't even know you exist.

Don't keep it all to yourself. Share your knowledge at every opportunity, except when it is clearly not wanted. People don't hire you in hopes of learning your secrets, they hire you because they can't, don't know how or don't want to do it themselves. By helping people regularly, they will begin to recognize you as the go-to guy or gal, see you an authoritative figure and remember you fondly for years to come.

Shopping for the best laptop for web developement

As a developer with a diverse background in IT and web development, I prefer to purchase a solid laptop that will serve me for 5-7 years rather than replace it every 1-2 years. This is because it takes me over a week to install and configure all the software, tweaking the registry and getting things working just the way I need it. It's been getting better since I discovered Ninite and Chocolatey but I still prefer not to do it any more than I have to.

Another advantage is that, by the time I am through with a laptop and ready to replace it, it is still good enough for me to pass on to a typical non-programmer user for browsing the web, email, social media, watching videos and typical computing tasks.

With that in mind, here is my advice for buying the best laptop for web development…

The best laptops for Web Developers

As others have mentioned, go with business class. They are built so much better and are more reliable that consumer class machines. That said, if you are a student on a tight budget, you may need to compromise. Just make sure they are compromises that you an live with.

The Macbook Pro is probably the most versatile platform. You can run OS X (which runs on Unix), Windows and even Linux if you really wanted to. You can also develop for iOS AND Android. These machines are also very well built. If you are not sure what you will be working on, this is probably the most flexibility option you will find. I don't personally use a Macbook Pro but know many web developers who love these machines.

That said, I've been using Thinkpads for over a decade. Every time I go out shopping (I really do my homework), the best option has always ended up being Thinkpads. I think the Lenovo Thinkpad P50 is your the best option. It replaces last year's Thinkpad W540.

I actually have high hopes for the Retro Thinkpad, hopefully coming out later this year or next year for the 25th anniversary of the Thinkpad. I hear that it's going to have a the famous classic 7 row keyboard, 16:10 ratio screen, dedicated volume controls, cursor navigation keys in a layout that makes sense, as well as with many other highly desirable modern features that have been missing from the Thinkpad line since the T520 and W520.

Thinkpads are not usually on the bleeding edge of technology. However they are solid and often well thought out machines. After using them for a while, you start to realize the rational behind many of the choices that go into their design… except for the trackpad which was terrible for the last few years but is starting to get better on select models.

It's not going to help you with your needs today but, if you can hang on to your current laptop a little longer, it might be well worth the wait.

If you want something to tide you over or are a student on a tight budget, look for a used 2.4 GHz Thinkpad T520 or W520 with i5 (dual core) or i7 (quad core), a screen resolution of  1600 x 900 or higher and 8 GB of memory. Add an SSD drive to it and this machine perform just about as well or even run circles around many of laptops sold today.

Keyboard

Typing on a poor quality keyboard will actually slow you down and result in more typos. There is nothing like working on the legendary quality keyboard found on a Lenovo Thinkpad in my opinion. They just feel great and, if I am going to be typing 8-15 hours a day, I want my fingers to be happy. Go to a store and type a page of text. After doing this on a few computers, you'll quickly realize that not all keyboards are the same. Don't forget lighting for the keyboard. Programmers often work until it's dark outside. A well lit keyboard can be less disturbing to those who are sleeping than having a bright light on. Try typing on a perfectly flat keyboard with the lights off. It's a lot harder than one might think. Get good overhead or back lighting for your keyboard. If you live in Canada, note that most laptops sold in this country seem to have the multilingual keyboard layout with the bigger inverted L shaped enter key (and some keys shuffled around). If you are used to a US keyboard layout, look for it specifically. Finally, make sure that you can activate the function F1-F12 functon keys by default. Although most of the world rarely uses these keys, developers use them all the time and it quickly becomes a pain to have to press the Fn key in addition to one or more keys in order to activate functions keys.

Trackpad

Don't just look at it, try it out. Is it responsive? Can you scroll with it? Is it multi-touch?Does it have mouse physical buttons that are not just part of the trackpad? Try dragging and dropping something. Try right clicking. I prefer to use the little red trackpoint in the middle of Thinkpad keyboards but hey, everyone has a preference. I also have a separate wireless mouse in which case the trackpad may not be important at all. I think it still is because I don't always have my mouse with me.

Memory

If you don't need to run a local web server or virtual machine, 8 GB should do just fine. Otherwise go for 16 GB. When ordering your computer with 8 GB, make sure it is just one memory module so that you can add another at a later date. Otherwise you may need to remove one or both of your 4 GB memory modules to bring it up to 12 or 16 GB in the future. Also compare the price of the laptop with less memory and adding 3rd party memory vs getting it fully loaded. You may discover that you can save quite a bit of money by doing an post-sales upgrade.

Storage

I can't be objective here anymore -- I admit that I am an SSD drive junky. I am so used to these that it is actually painful to go back to an HDD these days. When you run out of memory, swapping memory to disk also has much less of an impact. How much space will you need? What ever that number is, double it or you will very likely run out of disk space over the lifespan of the computer. My research has also shown that Samsung 850 Evo SSD drives to be much more reliable over the long term than others. Otherwise, plan on replacing your SSD drive every 2-3 years to ensure it doesn't fail.

CPU

Minimum i5 -- don't even look at an i3! Choosing between an i5 vs i7 really depends on the type of programming you will be doing. The only time you should consider an i7 is if you are looking at a quad-core for better performance. A dual core i7 is more expensive and provide little performance gain over dual core. Intel is the standard on both Windows and Apple OS X laptops. AMD? If something doesn't work, will you ever feel confident that the problem isn't the result of you wanting to save a few bucks? Being able to rely on my tools is paramount to me. I know people who shop at the other end of the pricing spectrum and they are forever wondering why their computers aren't reliable.

Video chipset

If you are going to be developing games, you'll want a faster video chipset. If you are just doing web development, the Intel video built into a CPU will do just fine and is much more likely to be supported in the future than niche high performance video chipsets. I made that mistake once. It was fine until I upgraded the operating system and discovered that the manufacturer didn't come out with updated drivers. That said, if you play games in your time off, it might be worth spending a couple of hundred dollars for a computer that will address both your needs for work and play.

That said, my laptops have always been pretty solid over the years -- except when I start installing games on them. Might just be a coincidence but I'm just saying that I noticed a pattern. As long as I keep games off my laptop, I very rarely seem to have problems with it. Be concious of what you install on your laptop. If you just want to try trial software out, do it in a virtual machine and only install it on your computer's operating system when you feel confident with it. That's what trial software is for… to try it.

Display

I recommend a minimum of 1600 x 900. Anything less and you will always feel like you don't have enough space on the screen to work… even if you have a second display. I made that mistake once. I was lucky that it was possible to upgrade the display on my Thinkpad by just replacing the LCD. That's not always possible. Seriously consider 1920 x 1200 or better. You can always reduce the resolution but you can't always raise it. While glossy screens are fun to watch, matte anti-glare screens are much easier on the eyes especially over many hours. A wide horizontal and vertical viewing angle is also a god send. Personally, my ideal screen is 15″ but I know a lot of people who like the portability of laptops with a 14″ screen… if you also have a nice big 23+ inch external monitor to work on most of the time. Other factors to consider include brightness (brighter and better contrast is needed if you are in a very bright environment) and colour gamut. Some might say that colour gamut isn't that important however, the day you have two screens connected and notice that blues and reds look purple and orange on your other screen, you'll be wishing you had a laptop with a better screen gamut to be sure which colour you are using. When you know you are seeing the right colours, you can feel safe telling others that it's their screen that is displaying the colours wrong. Finally, there is the issue of touch screens. Touch interfaces may not be perfect yet but they are definitely on the books for the future. Tablets, smartphones -- if you want to make sure your websites work with these technologies, it is probably wise to get a laptop with touch screen if you can afford it.

Battery

Most quality laptops should get you through an 7-8 hour day these days. It only becomes important if you are going to be away from a power source for extended periods of time. That said, keep in mind that after a while, the battery won't be able to store as much power and will likely only last half that time or less. Bonus if the battery can be replaced without having to send it out for service.

Audio

You are probably going to have external speakers or wear headphones anyway so don't worry about this too much. Do listen closely to the computer sound. Make sure there is no distortion. When testing, listen to both music and to sounds. Noisy chips in the computer and SSD drives, and annoying noisy fans can really get on your nerves after a few hours. While fans do make some noise, it's the solid state chips that really surprise me as sources of noise since I changed to an SSD drive. Also make sure that there is no sound coming from the laptop when the speakers are muted.

External Connectivity

Don't even look at a laptop that doesn't have USB 3.0 connectors, preferably at least 3. You will live to regret it. HDMI is nice because you rarely need adapters but DisplayPorts tend to be more versatile. You can always get a DisplayPort to HDMI adapter. VGA is finally on the way out so get HDMI or DisplayPort if possible. Audio jack is nice but as soon as you get tired of the wires, you'll start looking at Bluetooth so make sure it is included (some laptops still don't). WiFi, G/N/Dual AC should be standard. G for backwards compatibility and Dual AC for the future. Optical drives are no longer worth including for the limited number of times you need it these days. Get an external DVD/RW drive instead if you think you will you need it.

Biometric Scanner (a.k.a. Fingerprint reader)

I tend to log in and out of many websites several times in the course of a workday. Many developers keep all their passwords in Word documents which is hopefully at least password protected itself. However what stopping anyone from peering over your shoulder as you look at your list of passwords on the screen? When used together with a password manager like Roboform, a finger print scanner can not only save you the time it takes look up and type your passwords dozens or even hundreds of times a day, it will also reduce any chance of people learning your passwords as they watch over your shoulder while you type. Your manger or clients will also feel better about trusting you when they realize that you don't type any passwords in plain view of other people. Tip: Make sure the password manager you intend to use works with the fingerprint scanner built into your laptop. True, there are USB fingerprint scanners but how long do you think it will take before someone just pulls that baby out and walks away with it?  Better to have it built-in.

Docking Station

This is optional but I find it very convenient if I need to regularly disconnect and reconnect all the peripherals plugged into my laptop. Some docking stations just connect to a single USB 3.0 plug on most laptops while your whole laptop can sit in others (like with a Thinkpad). The later has the added bonus of putting your keyboard on a slightly more comfortable angle and often comes with its own power supply.

Power supply (a.k.a. power brick)

Check out the size of the power supply, especially if portability is important to you. Some laptops literally have a power supply almost the size of a real red brick. If you don't check before you buy, you might be surprised at the size of it when you open the box. Also, if you do need to travel once in a while, it can be well worth purchasing a extra power supply that you can keep in your bag. This has saved me on many occasions from arriving at work just to realize that I forgot my power supply.

Cost

If you are going to be making money using this machine, don't skimp. In the long run, it's worth spending a little more on tools of your trade, whether it is hardware or software as your choices affect your productivity, how happy you are to go to work and how comfortable you will be. Clients will also judge you by the professional equipment you use.

Is a quality professional computer really that expensive of an investment when you consider that it will be used to generate potentially hundreds of thousands of dollars over its lifetime? Compare the price of a $3,000 laptop to your total income over the next 5 years. Then take the $3,000 laptop and divide it by 5 years and then again by 365 days and realize that it is only costing about $1.65 per day.

You probably spend more on coffee every day. Have one latte less and get yourself some professional grade tools.

Creating Linux dot files in Windows

Ever tried creating a file Linux style dot file like .htaccess or .gitignore in Windows Explorer? It gives you a "You must type a file name." error message. This might lead people to think that Windows doesn't support these file names. If you use a command line, you know that this is definitely possible in Windows. In fact, you can even create dot files in Windows Explorer quite easily with this little know trick.

To create a filename that start with a period "." but has no extension, like .txt, simply add a period to the end of the filename.

For example, enter the file name:

    .htaccess.

…to create:

    .htaccess

Windows will automatically drop the trailing period for you but completely forget that there is nothing before the leading period.

This tip also work when renaming files. For example, you can rename htaccess.txt to .htaccess