Cron and Crontab in Linux

  1. Cron is a daemon that executes scheduled commands in linux.
  2. Also known as clock daemon.
  3. This daemon execute so many jobs known as cron jobs.
  4. This cron jobs are described in crontab files in UNIX systems.

How to add a cron job in crontab files?

    • There are almost 7 categories. That are listed below.
      1. Minute : Add the minute here (eg : 12, 45)
      2. Hour : Add hour here (eg: 6, 17)
      3. Day Of month : Add day of month (eg : 10, 25)
      4. Month : Add month here (eg : 5, Dec, jan)
      5. Day Of Week : Add day of week (eg : 0=> sunday, 5 => friday)
      6. User : Add username
      7. Command : Add Your command here.
    An Example

Open the terminal and type
$ vim /etc/crontab
and add the following line (you can see the time by typing the date command)
50 15 * * * abhi sh /home/abhi/Project/my_project_no1/my_first_cron_job.sh
my my_first_cron_job.sh file contains:
cd /home/abhi/Projects/myProject/ && touch file1.txt file2.txt
Note : Don’t forget to give executable permission to my_first_cron_job.sh file
Here my my_first_cron_job.sh file executes at 15hr 50 min all days and creates two files named file1 and file2 in my /home/abhi/Projects/myProject folder.

# Example of job definition:
# .—————- minute (0 – 59)
#  |   .————- hour (0 – 23)
#  |   |  .———- day of month (1 – 31)
#  |   |  |   .——- month (1 – 12) OR jan,feb,mar,apr …
#  |   |  |   |   .—- day of week (0 – 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
#  |   |  |   |   |
# * * * * * user-name command to be executed

Note : You can also use * mark that denotes ‘all’. For example If you give 3 * * in day of month, month, day of week respectively ,that means it executes all month 3rd day whatever cron job you given.

Install Rails 3 on Ubuntu 10.04 Lucid Lynx Using RVM with Mysql and sphinx

First install ‘curl’ and ‘git’

  • step 1: install curl
    $ sudo apt-get install curl
  • step 2: install git
    $ sudo apt-get install git-core
  • Then install RVM

  • step 3: install rvm
    $ bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )
  • step 4: edit .bashrc file to load rvm into the shell session
    $ gedit .bashrc
    Add the following line to the end of the file:
    if [[ -s “$HOME/.rvm/scripts/rvm” ]] ; then source “$HOME/.rvm/scripts/rvm” ; fi
  • step 5 : restart linux
    $ sudo reboot
  • step 6 : type
    $ rvm notes
    In the notes RVM tells you what packages you’re gonna need to install for various flavors of Ruby. Since we’re going with 1.9.2 we want the packages it lists under the MRI & ree section. Let’s install those now.
    $ sudo aptitude install build-essential bison openssl libreadline5 libreadline-dev curl git-core zlib1g zlib1g-dev libssl-dev vim libsqlite3-0 libsqlite3-dev sqlite3 libreadline-dev libxml2-dev git-core subversion autoconf
  • Install Ruby 1.9.2

  • step 7 : install ruby 1.9.2 through rvm
    $ rvm list known
    $ rvm install 1.9.2-head
    for 64bit:
    $ rvm install 1.9.2
  • step 8 : make ruby 1.9.2 as default
    $ rvm –default ruby-1.9.2-head
    for 64bit:
    $ rvm –default ruby-1.9.2
    check ruby version
    $ ruby -v
  • Install Rails 3

  • step 9 : Install rails 3
    $ gem install i18n tzinfo builder memcache-client rack rack-test rack-mount erubis mail text-format thor bundler
    $ gem install rails –pre
  • Select your database

  • step 10 : Install database
    For Sqlite3
    $ sudo apt-get install sqlite3 libsqlite3-dev
    $ gem install sqlite3-ruby
    (OR)
    $ sudo apt-get update
    For Mysql goto synaptic package manager and type
    mysql-server, mysql-client and install and set password.
    Install mysql client libraries :
    $ sudo aptitude install libmysqlclient16-dev
    or
    $ sudo apt-get install libmysql-ruby libmysqlclient-dev
  • Install Sphinx

  • If you want sphinx, install Sphinx
    $ wget http://sphinxsearch.com/downloads/sphinx-0.9.8.1.tar.gz
    $ tar xzvf sphinx-0.9.8.1.tar.gz
    $ cd sphinx-0.9.8.1/
    $ ./configure
    $ make
    $ sudo make install
  • To know about sphinx type
    $ search

If you are getting error when starting sphinx make sure that the ‘indexer’,’searchd’,’search’ is under /usr/local/bin or under where sphinx specifies.
You are now ready to go…

HTML parsing using gem Nokogiri in Rails

parsing html is easy using Nokogiri, to do follow the steps

    Step 1 : Open the terminal and go to your rails application folder.

  • $ cd yourRailsApp
    add  the following line to your Gemfile
    gem  ‘nokogiri’
    First install the dependencies

    $  sudo apt-get install libxml2 libxml2-dev libxslt1-dev
    

    For Fedora do

    $ sudo yum install libxml2-devel libxslt-devel
    

    For CentOS:

    $ sudo yum install -y gcc ruby-devel libxml2 libxml2-devel libxslt libxslt-devel
    

    do bundle install
    /yourRailsApp $ bundle install
    Your nokogiri installation is completed. Parsing HTML documents look like
    doc = Nokogiri::HTML(html_document) and parsing XML documents look like
    doc = Nokogiri::XML(xml_document)
    Nokogiri converts HTML and XML documents into a tree data structure. Nokogiri extracts data using this tree. Xpath and CSS are small languages used for tree traversal. Xpath is a language that was written to traverse an XML tree struture, but we can use it with HTML tree as well.

  • Lets try an example take the folowing html code

    Step 2 : In views/form.erb add

  • Add a text field in your form
    <%= text_field_tag(“my[url]”, @user.url) %> and enter the sample code in this text field.
  • Step 3 : In controller add

  • @user.url = params[“my”][“url”]
    call the function
    @user.get_value_from_url
    write the function in the model
    def get_value_from_url
    node = Nokogiri::XML(self.url)
    node.xpath(‘//param[@name=”pic”]’).each do |node|
    @result = node.attribute(“value”).to_s
    end
    @result
    end

Then you get the value : “http://www.my_site.com/v/xedFamzsaaxo7hc0?fs=1&amp;hl=en_US&#8221; in the result. Look its so easy to use nokogiri. Its Wonderful !!

You can also view Aaron Patterson’s (creator of Nokogiri) blog from here.

PDF Generation with Wicked pdf in Rails

I am using ruby 1.9.2 and rails 3. I think Wicked pdf is better than other rails pdf generation plugins. To start with wicked follow the steps :

    Step 1: Open the terminal and go to your rails application folder.

  • $ cd /home/MyApp
    Install wkhtmltopdf first .Open gem file, and add the line
    gem ‘wkhtmltopdf’
    $ bundle install
    Wicked pdf is using the wkhtmltopdf to create a pdf document from a rails html template.
    With wicked pdf we can, 

    1. Define documents structure through a simple html document.
    2. Theme them through CSS
    3. Just Download the static complied version from wkhtmltopdf home page. Extract it and place it under /usr/local/bin.
      Note : If your system is 64-bit download the 64Bit version. Else you get error, Something like ‘Exec Error’,’Executable format error’, etc.

    Step 2: Install wicked pdf plugin

  • $ rails plugin install git://github.com/mileszs/wicked_pdf.git
    now a configuration file is needed, we can use plugins generator script for it . But in rails 3 it will not work. Just copy the wicked_pdf.rb to initializers.
    $ cp vendor/plugins/wicked_pdf/lib/wicked_pdf.rb config/initializers
    and add the following to the config/initializers/wicked_pdf.rb
    WICKED_PDF = {
    :exe_path => ‘/usr/local/bin’
    }

    Step 3:Add pdf instructions to your controller.

  • In my rails app I created an action index_pdf. Under the action put the following line.
    def index_pdf
    render :pdf => “my_pdf”,:layout => false,:template => ‘/users/index_pdf’,:footer => {:center =>
    “Center”, :left => “Left”, :right => “Right”}
    end
    The render :pdf call has a lot of options. you can use these.

    Step 4: Create a view file in app/view/index_pdf.erb

  • Put the link in your app, in your home page or somewhere.
    <%= link_to ‘Create PDF document’, index_pdf_path(@user, :format => :pdf) %>
    the index_pdf_path is the path I mentioned in the route.rb file,
    match “/download_pdf(.:format)” => “users#index_pdf”, :method => :get, :as=>:index_pdf
    When all are set click the link to download the pdf.
  • Include image in Wicked pdf

    write a function in application helper to take your images in wicked pdf.
    def pdf_image_tag(image, options = {})
    options[:src] = File.expand_path(RAILS_ROOT) + ‘/public/images’ + image
    tag(:img, options)
    end
    Add your image in public/images.
    Write the following code in view  <%= pdf_image_tag(‘photo.png’, :style=>”margin:0px;padding:0px”,

    :width=>”160″, :height=>”160″)%>

Its ‘wicked!!’ isn’t it?

Wifi no longer working on ubuntu 10.04 (Lucid)

Here describing the steps that taken by me to get the wireless connection right on my Ubuntu 10.04

After installing ubuntu 10.04, check the wireless network is enabled.

Open the terminal and type the following commands.
$ sudo su
# ifconfig
# mii-tool -A 10baseT-FD eth0
Restart your system. It will work.

If not, activate broadcom STA wireless driver in your ubuntu by going to System > Administration > Hardware drivers . Select ‘Broadcom STA’ driver and click on the activate button. Restart your system. It will work. If your system has no such driver then install it by going to System > Administration > Synaptic Package Manager. Enter root password. Type ‘broadcom’ in Quick search. Right click on broadcom-sta-common and mark for install. Then click apply.

If your system is not showing any drivers in Hardware drivers, and showing ‘No proprietary drivers are use on this system.’ then uninstall the broadcom-sta driver and bcmwl-modalises and install it again. Restart the system. It will work.
Again if it’s not working download the package rt3090-dkms_2.3.1.3-0ubuntu0~ppa1_all from here. Now install the package by double-clicking the package. Restart the system. It will be Ok.

Storing a simple student database in Rails

Set up Ruby on Rails from http://rubyonrails.org/download. Make a directory ‘my_rails’ in your home folder for rails applications.
$ cd my_rails

create your application as following
$ rails new student_db
$ cd student_db
For including gems, you need to update the Gemfile, that resides in your application folder. Open the ‘Gemfile’ and update.

Gemfile :
source ‘http://rubygems.org&#8217;
gem ‘rails’, ‘3.0.0’
gem ‘sqlite3-ruby’, ‘1.2.5’, :require => ‘sqlite3’

Specify the version number for sqlite3.    This is for avoiding confusion while installing the gems.

Install gems
$ bundle install

Now you are ready to generate the student model. Use scaffold generator.

Student data model

Note : Rails developers dislike scaffold. Because it itself generates code. So don’t use it. This is only for referring the application.
$ rails generate scaffold Student first_name:string last_name:string roll_no:integer total_mark:integer

Migrate the database using rake.

$ rake db:migrate

Now run the server.

$ rails s

open the browser and go to http://localhost:3000/student

To see this application visit,
Student_data_base

Deploying Rails application in Heroku

Sign up using e-mail and a password.
http://heroku.com/
Then Heroku asks to check our mail and continue. Install git. Then Install heroku gem.

$ gem install heroku
Create SSH keys and tell Heroku the public key by
$ heroku keys:add
Create a new application in Heroku
$ heroku create
Then Heroku creates a random sub domain for our application. We can change it as we like. Then deploy the app to Heroku by
$ git push heroku master
Now we can visit our application by using the address.

Heroku pricing plans

Heroku provides different plans to deploy the application and for using the database space. Here the plan is Blossom. It is free and can take 5MB database maximum.

Git – The version control system

Git is a version control system and a very good friend of a developer. Todays all projects are very much depend on git. What’s the use of git? If a programmer develops a project he want to take copies of the progressing project at stage by stage. Using git we can ‘commit’ the project by giving comments like ‘first commit’ , ‘second commit’ etc. When a programmer deletes a file, he can recover the file using git. Git uses a tree structure to hold the data. It has a parent repository called master branch. We can change the branch to another and can process the data. Multiple branches are using when working on a projects with multiple developers. This branch master is unaltered when working on another branch. Download .rpm packages from RPM packages, and .deb packages from Debian Packages

Turtle graphics programming in python

Using python’s tkinter module we can create a logo style programs. To do this in python import the module tkinter. Draw the class turtle. Initialize the turtle class with coordinates and angle. Write a function draw_turtle. Draw three straight lines to form a triangle. Write another function delete_turtle to delete the lines. To move forward write mv_fwd function with a parameter ‘distance’. In this function first delete the turtle, draw a line to that distance and redraw the turtle. Preserve the angle.

Turtle graphics in python

Visit my github location for source code – http://github.com/abhilashak/logo_in_python

To rotate write rt_lt and rt_rt functions. First delete the existing turtle. From the angle this function calculates the position of new turtle. Redraw it.  rt_rt is just the negative angle of rt_lt.

My project in Web application field – Graph colouring Algorithm

Today the web applications have a great value. Anyone can access the application and do their jobs through the web. Hosting the application require a server, that manages the request and stores the data. Here the google appengine does the job. Google app engine is a cloud environment that provides the server-side services we want. Here the application is a graph colouring technique which takes a graph and provides a proper colour to each of the nodes according to the vertex colouring algorithm. This algorithm is implemented in python.

The front end of the project is a HTML5 page. It uses the web application languages javascript and jquery. Here the front-end consists of a html5 canvas and the control buttons. We can draw an undirected graph in the canvas using the control buttons. These buttons are created in html5 page. The program code resides in two files. One html5 file and one javascript file.

My graph colouring canvas

A html5 canvas is created using the canvas tag in html5 file. It contains the id and the size of the canvas. Using this id we can obtain the context of the canvas. Specifing this context it creates, the colour of the canvas, style etc. The html5 page displays the canvas and the buttons when it loads.

Visit my github location to get the project code : http://github.com/abhilashak/project_graph_color

Visit my application at : http://colourthegraph.appspot.com/canvas/se11.html
Usually the term graph colouring algorithm indicates the vertex-colouring algorithm even though other algorithms are exists such as edge-colouring algorithm. The input of the graph colouring algorithm is the adjacentcy list of each node. It gives the nodes with the proper colour.

This Algorithm keeps a set of colours and the ‘availability list’ of colours for each node. First it takes each node in the order. It then checks the adjacentcy list of that node. If the first node in the list is coloured, it deletes that colour from the availability list. Then takes the next node from the adjacentcy list and the process continues. Last assigns the first colour in the availability list. This ensures the algorithm to take smallest number of colours.