Friday, December 19, 2014

A 2-in-1 laptop that just works under Linux: Dell Inspiron 13 7000 Series i7347

For quite some time, I've felt the need for an x86 tablet computer that I could carry with me when I was away from my main workstation. This need became a necessity when I started travelling for business, and while my trusty Bonobo Extreme, from System76, was everything I ever needed for a computer to be, it was also a little too bulky and heavy, which made it almost impractical to operate in tight spaces like in a car - while not driving, of course - and in planes. I knew that I needed something that was modern with a tight form factor like that of a Tablet, yet full featured, unlike many Tablets. 

The ideal tablet computer needed to be cost effective and with known compatibility under Linux 32bit and 64bit. I had considered buying the Surface or the Transformer earlier, but since this was going to be a companion computer and not the primary one, and I needed offline storage to install all my software for when I was on the go, the Surface didn't have enough storage or compatibility to just justify the cost, and in addition to the lack of sufficient storage, the Transformer wasn't powerful enough for my needs.

I discovered Dell Inspiron 13 7000 Series i7347 while researching 2-in-1 laptops on Amazon. After spending time researching it, it seemed like it was created with my needs in mind. The additional $100 off the sticker price of the Dell's original $599 made it an even more attractive purchase I could not afford to miss. I was a purchase I did not regret making.
The laptop is very slick and professional looking, which works great, since I intend to take it with me on my business and family trips instead of my more powerful, yet bulky, 17 inch Bonobo Extreme Laptop/Workstation. The hinges on the Inspiron are very sturdy and the laptop easily folds into a tablet. The touchscreen is very responsive. With a 500 GB hard disk at my disposal, I am able to use all my office productivity applications, as well as, software development tools and related services, without any difficulty. Now granted that this model is not an i7 or even an i5, but neither is it an Atom or ARM based. It provides a full computing experience with enough horsepower for smoother operation and functioning.

Installing Linux on it was a breeze. Almost everything worked right out of the box, and the only hiccup under Linux was, the not-so-well supported Wireless/Bluetooth module with Broadcom chipset. However, with little research, I was able to find Intel's Dual Band AC 7260 module, with the proper form factor, that was compatible and well supported under Linux. A version of that module, 7265, is also listed in Dell's specifications document for this laptop as an option. I suppose, if I had bought this directly from Dell, I might have been able to choose the Intel over the Dell Wifi module.

I also made the right call, when I decided to upgrade the WLAN module myself. The laptop is very easy to upgrade manually. The HDD, the RAM, the battery, and the WLAN module, among other things, are easily accessible, once you unscrew the base lid. On their website, Dell provides a Service Repair guide for this model, which provided all the necessary steps needed to help with the hardware upgrade, and that has only boosted my confidence in this machine and it's quality.

I am very happy with the purchase and would recommend it to anyone who intends to run Linux on it.

The 2-in-1 can be purchased from Amazon using the link below.


Note: there are two form factors the Wifi module is available under. You are looking for the smaller of the two.

7260NGW Intel® Dual Band Wireless-AC 7260 802.11ac, Dual Band, 2x2 Wi-Fi + Bluetooth 4.0

The Wifi Module can be purchased from Amazon using the link below. 



Thank you for reading and I hope you enjoyed the article.

Monday, July 28, 2014

How I learned to program in Scala: The Nexus 5 experiment

Few months back I broke up my long term affair with Mono and I started looking into the the Play Framework from TypeSafe as a replacement stack.

Through Play Framework, I discovered Scala and the wonders of functional programming. My interest grew even deeper when I installed Scala on my laptop and tried some example code in the REPL tool (think Scala interactive shell).

However, I found very soon that I was not able to dedicate enough time during the week to learning Scala due to my full time day job doing .Net development.

Something had to be done.

I thought, I have this wonderfully powerful device on me all the time - my Nexus 5. Surely, I should be able to put it to use to help me spend more time with Scala. So began the experiment.

I rooted my Nexus 5, installed "Linux Deploy" from Google Play Store and installed a chroot Arch Linux environment. I also installed JuiceSSH client and a VNC viewer application. I already had "Terminal IDE" installed which comes with a great android keyboard geared towards software development on Android.

The last piece to the puzzle, I bought a $25 ANKER bluetooth keyboard compatible with my Nexus 5.

I fired up the Arch chroot on my phone, downloaded tmux and vim using pacman and oracle java 7 packages from AUR (some PKGBUILD tweeking was needed).

Then I installed TypeSafe Activator from AUR. I also downloaded vim plugins like vim-scala and CtrlP which proved to be of great help.

It worked!!!

Using the setup described above, I was able to not only learn how to program Scala, I am also able to write software using Play Framework. I can test the same on my phone's browser. The code is backed up on github and I can work on the same codebase from anywhere - as long as I have my Nexus 5 and data connection.

And after the recent KitKat update with Cast Screen - I am able to cast my phone's screen to my big screen HD TV over ChromeCast. This solves the issue of developing on the relatively small Nexus 5 screen.

This experience has made me appreciate VIM, TMUX, and the terminal in general at a whole new level. Even when on my laptop, I now find myself doing more and more coding in VIM instead of IntelliJ.

Think about it, you can now get a decent android box or even a phone, and with a setup similar to what I described, have an almost full fledged development environment. Rich graphical applications can be written in Scala using Swing (sigh) and possibly other graphical toolkits and can be tested within the Arch (or other Linux distro) chroot using VNC.

Side note about Oracle Java instead of OpenJDK: I went with Oracle Java instead of OpenJDK due to an "issue" with OpenJDK on arm chips. Its something to do with JVM running in "mixed mode".

Monday, March 17, 2014

CloudNotes - New project - using the Play Framework

I recently came across the Play Framework and decided to take it for a spin. Needless to say I was amazed. I've decided to use it instead of .Net/Mono on a new project I've recently started work on.
The project is called CloudNotes. The goal of the project is to create a web-based collaborative notes taking and sharing application that is accessible from all platforms. As mentioned above, it'll be built use the Play Framework. I've chosen MongoDB as the database backend for this. LessCssCoffeeScript, and jQuery, all of which come packaged as part of Play Framework, will be used extensively.

Currently, the application features:
  1. Create and share notes using a web interface
  2. Notes dimension and position on screen are stored along with notes - think web based collaborative brainstorming tool
  3. GoogleDocs like collaborative editing of notes, although not yet realtime.
Features, I hope to develop into the application in the coming weeks:
  1. User authentication
  2. Access Control List on Notes and entries
  3. Realtime interface with AJAX calls (currently causes full postbacks)
  4. Mobile and desktop clients
  5. Items reordering
  6. Checklist module
The source code is hosted on github and licensed under GPL v2.
Once complete, I'll probably host a demo on a DigitalOcean droplet.

DigitalOcean offers cloud hosting for as low as $5/month or $0.007/hr for dedicated server with:
  • 512MB Memory
  • 1 Core Processor
  • 20GB SSD Disk
  • 1TB Transfer
  • Additional bandwidth transfer is only 2¢ per GB