Archive

Programming

Just wanted to quickly share something on ES6 and CoffeeScript I recently came across. Those who love CoffeeScript being a non-javascript developer like me, may find it interesting to know more about ES6 features and CoffeeScript.

This article on Toptal on what is new in ES6 the author provides a wonderful introduction on both of the worlds.

I had been really lazy to write this blog to finish off the thor application example. So I’ll just go right to the application, it’s nothing complicated. This application intends not to tweet actually in twitter but to demonstrate how thor tasks work.

So where I left from last post add a new folder bin in your application root and create a file tweet. This is going to be our executable file which will allow us to do something like,


tweet post hello

and will print You tweeted: hello.

Put the following in your bin/tweet file,


#!/usr/bin/ruby

require "tweet"

Tweet.start # this registers the thor class as task

Now install build and install the gem by executing ‘rake install’ command in application root. It will install the executable as well. So that’s it, the code can be downloaded from https://github.com/mftaher/Tweet-Thor. You can use it as a basic structure to create your own executable thor tasks.

Note: Before you install or build the gem always commit your git changes.

Ruby is a a wonderful language, you can never stop praising what it lets you do and help you create great applications. To eliminate the need to copy my initial application structure every time I decided to write a scaffolding application in ruby that will give me an initial structure with necessary files in it just like rails generator (I use Sinatra micro web-framework for ruby web development).

I had been researching many options out there to accomplish this and ruby gives you not only wide range of options but also quickest turn around time for a command line application. To name a few the ruby core OptionParser is a powerful class to begin with, there is also Trollop, of course rake and there’s Thor that replaces rake, sake and rubigen.

A great advantage with Thor is, it documents your command line tool as you develop. Thus makes it easy for the developers create several tasks with plenty options and documenting at the same time. So I thought this reason is good enough to build my application using Thor then the others.

Instead of doing a hello world application, I’m going to demonstrate a simple tweeting application using thor. First you’ll need to have a structure of your application you can easily get it by doing:

bundle gem tweet

You will get the default app structure provided by bundle which can be used to publish your own gem. Then create and edit tweet.thor in your project lib diretory:

class Tweet > Thor
  desc "post MESSAGE", "Tweet message in your command line"
  def post(message)
    puts "You tweeted: #{message}"
  end
end

You should be able to see the task list typing `thor -T`.

To make the command available in your terminal, we’ll cover that in next blog post when we will actually post a tweet.

Yes, I’m getting very intoxicated with coffescript as I’m writing this yet another blog on coffeescript. It’s because coffeescript has made my life easier while I’m writing javascript whether applications or libraries or RIA. Here, I’m going to share some useful resources that might help everyone who are interested in learning coffeescript.

First, starting with what is coffeescript and an detailed overview blogged by krawaller, the writer has given a very good overview on coffeescript which I’m sure will help beginners. This article has referenced links that any new beginner can treat as a learning resource.

Second, coffeescript site. http://www.coffeescript.org. it has very good tutorials an online compiler and many more useful code snippets.
Third, a conversion tool js2coffee or coffee2js http://www.js2coffee.org

Enjoy! Coffee!

I have been using coffeescript lately a lot to build a javascript library. The experience so far has been great as far as the complex programming I’m doing instead of using javascript. Coffeescript does the conversion for my code. I’m using jquery with coffeescript which is really easy to use nothing complex at all.

Here’s how I do it

$ ->
  $(some_link_id).click () ->
    # do something

which translates to

$(function() {
  return $(some_link_id).click(function() {
    // do something
  });
});

If you are going to use underscore you can just use as you would in your javascript functions i.e

_.map () ->

Yeah it’s that simple.

The coffeescript author has a coffee port of underscore which you can use directly if you are interested.

Mostly I have enjoyed using the loops in coffeescript since I’m more familiar with ruby syntax. It follows kind of the same way as I would do in ruby for ‘for loop’ or if using ‘when’

show = console.log # I like doing this to print in console
for code of codes
  show code

Coffeescript has great deal of resource in it’s website www.coffeescript.org. It’s really simple if you have ruby background and even if you don’t it’s just that simple to understand. I’m enjoying writing 300 lines of coffeescript instead of writing 1000 lines of javascript when coding OO style programming which transforms in javascript prototypical programming.

I hope you’ll like coffeescript as much I do. Enjoy!

Switching to Ruby from PHP wasn’t as hard as deploying rails/sinatra app on existing Apache-PHP environment. It should’ve been fairly easy as I choose to do it with Phusion Passenger instead of using Proxy to the rails/sinatra app. But who knew things can get really ugly if I hadn’t tested locally.

Problem Ughhh @#$@%@:

Actually I deployed a rails/sinatra app in production first then was trying to configure in my localhost but then figured out when passenger module is loaded DirectoryIndex index.php isn’t working, meaning index.php of any web application wasn’t recognized by apache by default anymore as before you have to type it in the browser. Digging deeper found out mod_dir is not compatible with phusion passenger offering no fix yet. You might want to check with conflicting apache module with phusion passenger before even trying to install passenger in your existing apache-php environment.

Avoid Catastrophe:

The reason why I did not notice it in my production environment at first because of cache. Once I tried to deploy in my local machine things aren’t working as it was in production. I had to type in index.php to gain access. Checked AddHandler, AddType, DirectoryIndex index.php everything in place and nothing seems to work until I found the conflicting apache modules.

Solution:

There’s a workaround provided by the Passenger team i.e. using PassengerEnabled off. After Passenger module is loaded you can turn it off so that mod_dir can do it’s job setting correct DirectoryIndex, and then enable it where Phusion Passenger is required, preferable inside rails/sinatra app  <Directory> block. If you put it outside it may globally configure which will again make mod_dir not to work. Only when an agent is requesting for the rails/sinatra app it gets turned on for that Directory block and there’s no conflict anymore. A good example is provided at Phusion Passenger Guide. This setting can be done otherway around depending on the number of rails/sinatra and php application you have running in your environment.

Still waiting for something to go wrong just hoping it happens in my local machine ealier.

Local Environment:

Mac OS X Lion 10.7.2 , built in apache2, php5.3.6., rvm 1.10.0, ruby 1.9.2, passenger 3.0.11

Google very recently released its +1 button similar to the Facebook Like button. It’s part of the Google+ project which seems to take on Facebook and Skype at the same time with social networking and online audio/video chat feature.

To add google +1 button to your website you have to add the following scripts in your html.

<script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script>

By default the included script will walk the DOM and render any +1 tags. The syntax is as follows:

 <g:plusone size="standard" count="true"></g:plusone>

That’s about it! If you want to know more in details you can visit the link: The Google +1

%d bloggers like this: