Sunday, 27 August 2017

Ask A Techie 20 Questions – Ravi Seetaram - ICT Support

How would you define a techie?

Someone who is very smart.

Tell us about yourself (short bio).

I am very passionate about technology. A gamer and book reader.

How has tech improved your life?

It has allowed me to work in tech doing something that I love.

What areas of tech interests you and why?

My areas of interest are Networking and IT Security because there are a lot of career opportunities.

What is unique about the number 8549176320?

It is very long.

What technical websites do you follow?

Wired.com

How do you go about learning a new technology?

Self study mostly.

What question would you ask yourself and how would you answer it?

What are your next steps and my answer would be, to advance more into my field of study.

How do you imagine the world would be in 50 years?

Very advanced.

What tech would you like to own?

A VR headset.

Would you choose a million dollars or a year with Satya Nadella?

A million dollars

The best advice you have received?

Stay consistent

Your PC says, "Keyboard error, press any key to continue...", explain this.

Don't know

What sports teams do you support?

None

How do you deal with disappointments?

Keep trying

What tech event would you like to attend?

Defcon

How would you invest a million dollars?

Start my own business

What future technology interests you?

Virtualisation

If you had to start a tech company what would you call it and why?

Not sure

What question would you ask the next techie?

Why did you chose to get into tech?

Friday, 25 August 2017

My Experience Deploying a Node.js Docker Container to Heroku

Docker's website describes the container as
A container image is a lightweight, stand-alone, executable package of a piece of software that includes everything needed to run it: code, runtime, system tools, system libraries, settings. Available for both Linux and Windows based apps, containerized software will always run the same, regardless of the environment. Containers isolate software from its surroundings, for example differences between development and staging environments and help reduce conflicts between teams running different software on the same infrastructure.
Containers are an alternative to traditional Virtual Machines and are plenty more portable and convenient. Docker is not the only container solution (or containerisation platform). For example there is Google's Kubernetes - kubernetes.io.

For my demo I decided to use platforms familiar to me and that I have access to. My starting point was this guide nodejs.org/en/docs/guides/nodejs-docker-webapp/. The below are the noteworthy things that I encountered.

I wanted to use Docker Community Edition but my laptop runs Windows 10 Home Edition which meant that I had to use Docker Toolbox instead and the CE told me this
HyperV is not available on Home editions. Please use Docker Toolbox.

https://www.docker.com/products/docker-toolbox
I use powershell and I was able to start Docker with the command docker-machine start default. First problem I encountered was running the docker ps command
The system cannot find the file specified. In the default daemon configuration on Windows, the docker client must be run elevated to connect. This error may also indicate that the docker daemon is not running.
At the end of starting the docker machine it does indicate Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command. After troubleshooting I found out that by running & "C:\Program Files\Docker Toolbox\docker-machine.exe" env | Invoke-Expression I would be setting the required environment variables. Alternatively I could use the Docker quick start terminal or Kitematic GUI.

Pay attention to the following warning. This is something for me to revisit
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.
The next problem I had was that I could not load the app in the browser from localhost - ERR_CONNECTION_REFUSED. Found out I could access it from the container ip and if I wanted to use localhost I needed to map the ports in VirtualBox.

Next up was deploying to Heroku. My starting point was this article.
https://devcenter.heroku.com/articles/container-registry-and-runtime. I only needed the below 3 commands

heroku create
heroku container:push web --app your_app_name
heroku open --app your_app_name

The next error to deal with was from the Heroku logs
web process failed to bind to $PORT within 60 seconds of launch
Heroku assigns you a port and you have to use that so I had to modify my listen code as follows
app.listen(process.env.PORT || PORT, HOST);
One of the things I like to do is give my app a friendly name. After changing the app name I encountered the following error message because I forgot to pass the new app name in my commands
error parsing HTTP 400 response body: unexpected end of JSON input: ""
I noticed that the initial push takes a while but after then pushes with changes to server.js (for example) were much quicker with heroku reporting Layer already exists. Share your thoughts and experiences with me in the comments below.

Monday, 21 August 2017

My Experience Getting Started with Wagtail CMS and Deploying to Heroku

I was looking at the design of one of our Government Ministry websites and came to learn that they were using Wagtail CMS. Wagtail is free and open source and written in Python and uses the Django framework. I agree with Wikipedia when they say it is developer focused. There isn't the same ease as with something like WordPress. I couldn't even find a repository of templates or a place in settings to upload or install a template. How did they come up with the name? From the website -
Wagtails are pretty little birds from the Motacilla family. From spring to autumn they gather on the lawns outside Torchbox's offices, charming us and our visitors. We wanted a name which reflected our beautiful setting and which had a sense of light and delight. Plus birds make easy logos.
I chose to use Heroku because I used it before to deploy my Ruby on Rails. My advice is to test deployment early and intermittently. If you do a search you might find the below post from 2015 which is from the perspective of an OS X user. I later found an updated post from 2017. I followed this and made adjustments for Windows.

https://wagtail.io/blog/deploying-wagtail-heroku/
https://wagtail.io/blog/wagtail-heroku-2017/

My adjustments and notes are below

Download and install latest Python 3.6.2 - https://www.python.org/downloads/
There is an option to Disable path length limit. I ignored this because I didn't know if I needed it and I thought to myself that I could enable it later if I needed it.

Command pyvenv project_title gave me the following error. pyvenv : The term 'pyvenv' is not recognized as the name of a cmdlet, function, script file, or operable program. Found out that I could achieve the same using this command python -m venv project_title. Also source is not a Windows command so I needed to run .\project_title\scripts\activate.bat

Download and install PostgreSQL https://www.postgresql.org/download/windows/ and add postgres to PATH. C:\Program Files\PostgreSQL\9.6\bin and C:\Program Files\PostgreSQL\9.6\lib. Pass username to createdb command else it will try to use the Windows username e.g. createdb -U db_username demoapp_db

Your database settings in base.py should look like and that will get you started locally

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'demoapp_db',
'USER': 'app_user',
'PASSWORD': 'app_user_pass',
'HOST': 'localhost',
'PORT': '',
}
}

Download and install Heroku CLI. It has an option to install Git at the same time. https://devcenter.heroku.com/articles/getting-started-with-python. Configure your git email address else it will try to use some weird email address from the Windows powershell environment. git config --global user.email "your@email.address"

My push to Heroku failed the first time because I specified the wrong Python version in runtime.txt. /app/.heroku/python/bin/pip: No such file or directory. I used python --version command to verify the version (python-3.6.2) and luckily it was in the list of supported versions in Heroku https://devcenter.heroku.com/articles/python-runtimes. Remember to add and commit again before push. If you delete and recreate the Heroku app or rename it like I did then you will need to change remote with command heroku git:remote -a "heroku_app_name".

By default pages only have a title. From the getting started guide you can add a body and work your way from there. http://docs.wagtail.io/en/v1.12/getting_started/index.html. Two questions I would like to ask persons experienced in Wagtail. Why use Wagtail? Who uses Wagtail? Share your thoughts and experiences with me in the comments below.

Tuesday, 8 August 2017

My Experience Setting Up FLOW's TG2492LG-FLO WIFI Modem


I had one of the early purely modem devices for about 7 or more years now. I connected this to my Linksys router and I was set. The router is old and does not have all the features of modern routers but it worked. Did a house call the other day and saw that the person had the WIFI modem with their AVS setup. Then it occurred to me that I should switch out my modem for a WIFI modem. That way I wouldn't have to worry about buying a new router when it was time for that. Made some notes after setting up my device and I am sharing it on my blog here.
  • I access the settings using the https link so that credentials entered are encrypted while communicating with the router - https://192.168.0.1/
  • I was told to skip the change password on first login prompt. Do it afterwards from the admin menu.
  • I chose to not broadcast SSID. You will have to manually add your WIFI to your devices if you do this. This is an extra layer of security.
  • I disabled 2.4 GHz. Reading that 5GHz gives less range but supports higher speeds and has less interference.
  • Love that there is a guest network separate for visitors where I can set a timer.
  • Discovered that there is nowhere to specify custom DNS. I can do that at the device level in Windows 10 for example if I really need it.
  • What I will do with the old router? Probably use it for experimenting with various custom firmware like DD-WRT, OpenWRT, and Tomato - if they support my aging router. Read that MAYBE you can brick your device or not go back to stock with custom firmware sometimes.
  • WIFI modem is behind Flow's NAT. I guess if you need a public facing IP on the router you have to contact Flow.
  • There is a modem mode if you want your own connected router to be internet facing.
  • I always enable MAC address filtering to only allow my devices.
  • The branded settings UI is easy to use and simple and beautiful.
  • Initial passwords for the router settings and WIFI are labelled on the device. It is recommended that you change these.
  • Couldn't find a user guide online. Arris does not have one and says I need to contact the ISP. Maybe they should put a link to one or something. Hire me to do a video guide.
  • You can restrict internet at certain times for certain devices. Maybe something for the kids.
  • I disable UPnP because I don't use it and it feels more secure that way.
  • There is an on/off switch at the back and a reset button. I don't know what the reset button does and you should probably contact your ISP before resetting.
  • There are no QoS controls for you to adjust under settings.
Share your thoughts and experience with us in the comments below.