IdeaMonk

thoughts, ideas, code and other things...

Sunday, August 30, 2009

Web2Hunter.py - find that awesome web2.0 name for your startup

Python inspires a lot of code-reuse, every script you write today can be imported into something else tomorrow if written well. That's exactly what happened right now! the domainhunter script I wrote yesterday, I could actually re-use it right now and make a web2.0 domain hunter :) in just 5 minutes! Seriously it took nothing more than 5 minutes. Here it is -
#!/usr/bin/env python

# Web2Hunter -- Abhishek Mishra <ideamonk at gmail.com>
#
# a web 2.0 name generator extension to domainhunter.py
#
# usage -
# $ python web2hunter.py

import domainhunter as DH
import random

A = ["Anti", "Aero", "Babble", "Buzz", "Blog", "Blue", "Brain", "Bright", "Browse", "Bubble", "Chat", "Chatter", "Dab", "Dazzle", "Dev", "Digi", "Edge", "Feed", "Five", "Flash", "Flip", "Gab", "Giga", "Inno", "Jabber", "Jax", "Jet", "Jump", "Link", "Live", "My", "N", "Photo", "Pod", "Real", "Riff", "Shuffle", "Snap", "Skip", "Tag", "Tek", "Thought", "Top", "Topic", "Twitter", "Word", "You", "Zoom"]
B = ["bean", "beat", "bird", "blab", "box", "bridge", "bug", "buzz", "cast", "cat", "chat", "club", "cube", "dog", "drive", "feed", "fire", "fish", "fly", "ify", "jam", "links", "list", "lounge", "mix", "nation", "opia", "pad", "path", "pedia", "point", "pulse", "set", "space", "span", "share", "shots", "sphere", "spot", "storm", "ster", "tag", "tags", "tube", "tune", "type", "verse", "vine", "ware", "wire", "works", "XS", "Z", "zone", "zoom"]
C = ["Ai", "Aba", "Agi", "Ava", "Awesome", "Cami", "Centi", "Cogi", "Demi", "Diva", "Dyna", "Ea", "Ei", "Fa", "Ge", "Ja", "I", "Ka", "Kay", "Ki", "Kwi", "La", "Lee", "Mee", "Mi", "Mu", "My", "Oo", "O", "Oyo", "Pixo", "Pla", "Qua", "Qui", "Roo", "Rhy", "Ska", "Sky", "Ski", "Ta", "Tri", "Twi", "Tru", "Vi", "Voo", "Wiki", "Ya", "Yaki", "Yo", "Za", "Zoo"]
D = ["ba", "ble", "boo", "box", "cero", "deo", "del", "do", "doo", "gen", "jo", "lane", "lia", "lith", "loo", "lium", "mba", "mbee", "mbo", "mbu", "mia", "mm", "nder", "ndo", "ndu", "noodle", "nix", "nte", "nti", "nu", "nyx", "pe", "re", "ta", "tri", "tz", "va", "vee", "veo", "vu", "xo", "yo", "zz", "zzy", "zio", "zu"]

if __name__ == "__main__":
while (1):
# lets shuffle our pack of cards
random.shuffle(A)
random.shuffle(B)
random.shuffle(C)
random.shuffle(D)

if (random.randint(0,1) == 1):
awesomename = A[0] + B[0]
else:
awesomename = C[0] + D[0]

print awesomename + ": \t\t",

for tld in DH.tlds:
if ( DH.domainSearch(awesomename + tld) ):
print "[+]" + tld + "\t",
else:
print "[X]" + tld + "\t",
print

$ python web2hunter.py
Photospace: [X].com [X].net [X].org
Zoomcast: [X].com [X].net [+].org
Digitags: [X].com [+].net [+].org
Jabberpath: [+].com [+].net [+].org
Kaboo: [X].com [X].net [X].org

Just press Ctrl+Z if you see an awesome domain.
You can now get domainhunter+web2hunter from its guthub repository -
$ git clone git://github.com/ideamonk/web2hunter.git

Have fun! (woah! what a find - Awesomenoodle .com/.net/.org )

Labels: , , ,

Domain hunting in Python

Since last week, we've been looking for a new name for MadeToKill Design Studios for we think its too big a name and too funky to sound serious. Cool but ahem, int abundance of awesomeness, it lacks a little business sense. Soon we would be known by our new name W3Ninjas and our team expands to 4 looking forward to better and bigger projects :)
Even FOSS-shudaan people have a tough time choosing a domain! So taking inspiration from a post on HN, I set out to write a small python script to look for domains while I'm away from my desk. Its nothing more than two simple urllib2 calls. Here it is -
#!/usr/bin/env python
# Domain Hunter -- Abhishek Mishra <ideamonk at gmail.com>
# usage -
# $ python domainhunter.py < wordlist.txt

import urllib2
from sys import stdin

def domainSearch(domain):
baseurl = "http://www.google.com/a/cpanel/domain/selectDomain?domain="
try:
handle = urllib2.urlopen(baseurl + domain)
data = handle.read()

if (data.find("is available") != -1):
return True
else:
return False

except:
print " connection error ... ",

tlds = ['.com', '.net', '.org'];
# you can modify tlds to suit your needs,
# complete list of Google Apps supported tlds -
# tlds = ['.com', '.net', '.org', '.net', '.biz', '.info'];

if __name__ == '__main__':
search = stdin.readline()

while (search):
for word in search.split():
print (word + ":").ljust(30,' '),

for tld in tlds:
if ( domainSearch(word + tld) ):
print "[+]" + tld + "\t",
else:
print "[X]" + tld + "\t",

print

search = stdin.readline()


$ python domainhunter.py < list.txt
bluebells: [X].com [X].net [X].org
itchyscratchy: [X].com [+].net [+].org
muffintops: [X].com [X].net [X].org
smokinjoes: [X].com [X].net [X].org
pizzahut: [X].com [X].net [X].org

I tried it over a list of adjectives, the output was as expected, most of the words were taken, apart from agonizing.org and ossified :)

Labels: , ,

Sunday, August 23, 2009

FOSS and the Digital Divide - Reducing it one phrase a time

Wikipedia says that the "Digital Divide" is the gap between people with effective access to digital and information technology and those with very limited or no access at all. You should think of this word whenever you feel great about "Technology being an enabler". The Digital Divide is an essential roadblock to that dream. For, technology can't be a true enabler unless it is in reach of everyone.
So what is reach? Reach is not about being able to purchase a technology. I know for sure that even an auto-wallah can purchase a cell-phone and benefit from technology, but I'm sure many can't reach my blog even though many have enough money to avail a cyber-cafe for an hour. It isn't more than Rs.20/hr if I am correct. That alone doesn't ensure whether they can utilize it well or not. This is where Digital Divide comes into picture.
Now coming to the software side of it. We all have observed that majority of all software that we've used ever, was either in English or in some other major languages in use, but not in our own. There are reasons for that, if a software company A wants to push their product B into the French market, only then would they bother about spending resources on its French translation. Business is not always about doing good for others. McDonalds won't change just because your kids have grown obese eating they burgers with extra cheese.
Something similar happens in a closed-source proprietary software scenario. Consider this example - You purchase a software X for $YYY.YY, no cut that, you get a closed-source shareware for free and the license says that "you're free to share it with anyone, provided you retain the copy of this license... bla bla". That's just half of the story. Think a little more over the sharing part, you will realize that you can share it only with a fraction of people. The fraction that understands the languages that software X supports. Maybe you got it for free. Maybe you thought you were free to share it with others. But all that freedom was so incomplete!
But FOSS (Free and Open Source Software) on the other hand solves this problem in a very practical manner. It invites people to make changes to it, so as to suit their needs. Code being open source, you're always free to modify and customize to great extents. To that, many people reply back with this - "Okay, so the average Joe still can't get this working in his own language for his non-english cousins." Well, friends that's a question fair enough, but one thing I learnt from my experiences is that you should not deny anything unless you've thoroughly explored its deniability.
Let me show you how easy it is to translate a free software to your language, even if you're an average Joe. All you'll ever need is some free time to do something good, to bring a change in the world of many. Enter Launchpad.net - An open source code hosting and software collaboration platform by Canonical Ltd. It lets developers and yeah not just them but everyone collaborate over software projects and improve them, be it bug tracking, be it translation, feature request, anything at all. So in this context we would take a look at the translation part. Here's the tour for it which gives an overview - https://launchpad.net/+tour/translation
Let's say you're running Ubuntu as I do, and happen to use 'GNOME Do' a lot. Wouldn't you like to make it easy to use for people of your native language?
First, make an account on http://launchpad.net. Once done, head on to https://translations.launchpad.net/ and search for "GNOME Do". This would take you to translation page for GNOME Do - https://translations.launchpad.net/do/+translations
You can see an informative report on what progress on translation has already been made in different languages. Look for any untranslated entries in your language, click on the language to contribute.

I will take Hindi as an example. So once you've selected the language, you're presented with a list of required translations. The English for is presented on the top, below you have other suggestions submitted previously by users. Now the beauty of collaboration comes out when Launchpad suggests translations from other projects. That is, there are some commonly used words like "Close", "Open" etc, Launchpad is intelligent enough to pull off their Hindi translations into suggestions list for me. There's a big difference in outright crowdsourcing and crowdsourcing done right in Launchpad's way. You can also mark a suggestion for review if you're unsure of anything.
Okay one important aspect I forgot to talk about, how do I type in my language, I use English usually as I happen to know it? As for Hindi, you can use Google Indic to type out and Shabdkosh to find definitions you're unsure of. However a smarter method, which works for any language, was suggested by a friend - SCIM (Smart Common Input Method). Checkout Ubuntu Community Documentation for SCIM to know more. or just do a 'sudo apt-get install scim'
That's it, by going one phrase a time you've actually contributed into translation of a project which is used my many people, and in fact by your efforts yet many more people are going to use it! After sometime your Launchpad profile would show an increase in your Karma ranking and show your contributions in "Most Active in" heading.
Amazing isn't it, instead of sitting idle and getting bored you can actually help free software and your own community, even if you aren't a geek.

Also Sankarshan from DGPLUG points to an important check-list to must-have a look at before you proceed - How to get your translations/localization contribution integrated with existing communities
All the best.

Labels: ,

Wednesday, August 19, 2009

A bit of politics

Through 42 Questions, I feel its worth publishing for it consumed some effort to read through it all...

In Americal terms, I am a

Social Liberal
(73% permissive)

and an...

Economic Liberal
(38% permissive)

I am best described as a:

Democrat









Link: The Politics Test

Labels:

Monday, August 17, 2009

Gwibbly, another theme for Gwibber

Damn! its 6 am already, this one tool exceptionally more time. I noticed many cool looking twitter clients on OS X have that shiny-little twitter bubble to display message. Though not that, but this one - Gwibbly, is one attempt to get those tweet bubbles into gwibber. Initially I did round corners with javascript, which actually slowed down the rendering very much, replaced that by -webkit-border-radius: 10px; and done :) Well, this time I got 3 variants -


To install the new gwibber theme:

1. Download the new theme from google code
2. Decompress it to ~/.local/share/gwibber/ui/themes/
You should end up with folders names gwibbly-* with a few files inside it.
Make that path if it not present
3. In Gwibber, open Preferences (Gwibber->Preferences or Ctrl+P).
Pull down the theme chooser and choose ‘gwibbly’, or 'gwibbly-dark' etc.
4. On my system, it took Gwibber a few seconds to apply the new theme.
Be patient, and things should shape up.

Labels: , , ,

Gwibbiquity-micro

As I switched back to 1280x800, I felt the previous theme was too big to show more than 5 tweets a page. So I just modded the old one a little bit into a micro edition.


To install the new gwibber theme:

1. Download the new theme from github
2. Decompress it to ~/.local/share/gwibber/ui/themes/
You should end up with a folder called gwibbiquity-micro with a few files inside it.
Make that path if it not present
3. In Gwibber, open Preferences (Gwibber->Preferences or Ctrl+P).
Pull down the theme chooser and choose ‘gwibbiquity-micro’.
4. On my system, it took Gwibber a few seconds to apply the new theme.
Be patient, and things should shape up.

Labels: , ,

Sunday, August 16, 2009

Gwibbiquity a theme for Gwibber

I've been using Gwibber for accessing twitter and syncing my facebook status with twitter. Earlier I was disappointed with Adobe AIR based clients for AIR itself didn't run well on amd64 :/ . Gwibber's default theme looks quite disappointing and the best you can get is Brave by Ginkyo. Gwibber 2.0's prototype looks awesome, but before we get there, I would like to add up one more theme to the project - Gwibbiquity - another theme based on Brave and inspired by the gradients of Lounge.
It didn't take more than an hour to come up with it. Thanks to Gerry Ilagan's tutorial on how to create one :) Here's how it looks -


To install the new gwibber theme:

1. Download the new theme from github
2. Decompress it to ~/.local/share/gwibber/ui/themes/
You should end up with a folder called gwibbiquity with a few files inside it.
Make that path if it not present
3. In Gwibber, open Preferences (Gwibber->Preferences or Ctrl+P).
Pull down the theme chooser and choose ‘gwibbiquity’.
4. On my system, it took Gwibber a few seconds to apply the new theme.
Be patient, and things should shape up.

* thanks to Jake Tolbert for easy installation instructions

Labels: , , , ,

Backups on Ubuntu

I finally have switched to Ubuntu i386 though my CPU is an amd64. I have reasons to do so, which basically comprise of having a fine wine, being able to install and run maemo sdk without hassles, getting a more responsive firefox and many more. Although this benchmark states the otherwise, I'm okay with the minor performance compromise, which I don't even happen to notice.
Coming to discovery of the day - backups on Ubuntu. Truth - I never created backups, for if I had been doing so, your kids would've had some amazing QuickBasic source codes to learn from :(. I don't even remember how many such things I've lost just because I didn't do a backup or put them over internet. From today I wish to do so on my external harddisk. Here are my options -
I'm using Back in Time, am pretty pleased with its simplicity. If you're looking for a tool to sync directories, try out YADSync by the same author/s.
Wow, just found MyPaint today, it seems like a free alternative to ArtRage (which is a paid software) on windows. Gonna be fun being able to use crayons digitally :)
Now look at this, how impressive and realistic the stroke looks (i did not draw this) -

Turned off syntaxhighlighter on my blog. Using a custom style for pre tag. Saves some loading time and keeps your browser at peace :)

Labels: , , ,

Saturday, August 15, 2009

GDB, Why didn't I use you all this time.... ?!

My first introduction to gdb was through "Hacking - The art of exploitation", a book on writing exploits and many other basics of network/application security by Jon Erickson. During those days, I neither ran linux on my machine, nor did I care to go deep into tools explained in the book. Installing Gentoo, which was used to write examples of the book was a painful experience. And I did not know of the wonderful offsprings of mother Debian like Ubuntu!
Anyways coming to the point, I seriously wonder why don't they teach gdb at our colleges. I just realised that just two weeks back we had network simulation lab, one boy said "Ma'am I got segmentaton fault! I'll do it next time..." and the teacher too, aware of the mysteries of segmentation fault, let him go. Forget mysteries, everyone in my college knows debugging as a painful task that involves putting printfs everywhere in your code. And, that's not all, it alone doesn't assure where the hell things went wrong, then you start printing the values too, its more of a guesswork! Now think about this - they wrote the linux kernel in C right ? did they debug their way to every new releases by putting a printf before every damn line ?! And before the release, did they spend sleepless nights just removing those printf patches left out here n there! Nopes, not at all.
Anyways lol, coming back to the point, let me show you some nice things about gdb, the GNU Debugger that I just found out right now reading 'Developing with Gnome'
Consider this code -
#include <stdio.h>

int total;

foo(){
// calls bar() 5 times
int i=5;
while (i--)
bar();
}

bar(){
// calls baz() 2 times
int i=2;
while (i--)
baz();
}

baz(){
total++;
}

int main (){
// just calls up other funcs that do something on total
total = 0;

foo();
bar();

printf ("%d\n",total);

return 0;
}
As you can see, it increments a global integer total 5X2 times using foo() and then 2 times more by a call to bar() in main(), final output being 12. Simple enough! I've just nested the functions to stress on the fact that bigger programs can be tough to debug.

ideamonk@sacea:~$ gcc segfault.c
ideamonk@sacea:~$ ./a.out
12
ideamonk@sacea:~$

Now I'll add some weird lines to the code and try to get a segmentation fault.
Let's modify foo() as this -
foo(){
// calles bar() 5 times
int i=5;

char c1='a',*c=&c1;
while (i--){
printf ("%c ", *c);
c+=0xdeadbeef;
*c++;
bar();
}
}

What it tried to do is, have a pointer to a character, shift that pointer in insanely far that it exceeds permissible addressing, and poof! get us a segmentation fault. Here it is -

ideamonk@sacea:~$ gcc segfault.c
ideamonk@sacea:~$ ./a.out
Segmentation fault
ideamonk@sacea:~$

That's it, all I get is a segmentation fault. Now someone right from my computer programming course would go about debugging this by putting printfs before every possible suspect lines :P. But with gdb, you can actually pinpoint the line where it broke, see the source and even find out which functions were called in what order, and even more, we also get to have a look at values of local variables. What more could've anyone wanted. Let me show you how gdb makes debugging easy as a pie -

// we'll ask gcc to turn debugging flags on and optimization flags off by a -g
ideamonk@sacea:~$ gcc -g segfault.c
ideamonk@sacea:~$ gdb a.out
GNU gdb 6.8-debian
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu"...
// lets run our code
(gdb) run
Starting program: /home/ideamonk/a.out

Program received signal SIGSEGV, Segmentation fault.
0x000000000040052d in foo () at segfault.c:12
12 printf ("%c ", *c);
// Look at that! there we have it, which line, what was there, we know all :)
// lets seek more
// list would give us codeblock where it occured
(gdb) list
7 int i=5;
8
9 char c1='a',*c=&c1;
10
11 while (i--){
12 printf ("%c ", *c);
13 c+=0xdeadbeef;
14 *c++;
15 bar();
16 }
// we'll take a look at local vars now
(gdb) info locals
i = 3
c1 = 97 'a'
c = 0x8000599580ff

// there you have it :) the pointer c went out of bounds as intended
// as I said we can look at the order of function calls, here it is
(gdb) backtrace
#0 0x000000000040052d in foo () at segfault.c:12
#1 0x00000000004005c4 in main () at segfault.c:34
(gdb) ^D


Now you exactly know what went wrong and where, get back to your editors and you know exactly which line number is the bug you need to squash.
Happy debugging and a Happy Independence day to one and all :)
on #linux-india one guy asked me this when I greeted with the usual "Happy Independence Day!" thingie -
"What are you happy about?", "Why so happy?"
It set me thinking, what for? I could come up with one answer, "I'm happy for the possibility of getting a free jalebi tomorrow.", for I realised that there isn't any answer to "Are we free?", I guess we're not, unless we abandon the common road on which everyone walks and take the road not taken. I would like to take it :)

Labels: , ,

Wednesday, August 12, 2009

Glade3, PyGTK, urllib2 and a simple app

I've started exploring PyGTK to create GUI apps for linux. Today, I just made a simple app which fetches your last tweet from twitter. I used glade 3.6.3 for designing the UI and programming was done in Python. Gedit is becoming my default editor day by day. Though emacs might be glorious and vim, powerful, but at end of the day what matters is how good am I at using them.
The source code is fairly easy to understand if you've followed some PyGTK tutorials. I recommend Micah Carrick's tutorial - http://www.micahcarrick.com/01-01-2008/gtk-glade-tutorial-part-3.html for anyone who wishes to begin. Also asking questions on #pygtk, #gtk on irc.gnome.org is very helpful when you're lost in the not so obvious API.


twitterFetch.py

#!/usr/bin/env python

import sys
import urllib2
import string
import re

try:
import pygtk
pygtk.require ("2.0")
except:
pass

try:
import gtk
import gtk.glade
except:
print "You need to install pyGTK or GTKv2"
print "or set your PYTHONPATH correctly."
sys.exit(1)

def remove_html_tags(data):
''' removes unnecessary html tags from the tweet '''
p = re.compile(r'<.*?>')
return p.sub('', data)

class newapp:
builder = gtk.Builder()

def __init__(self):
windowname = "MainWindow"
gladefile = "tweetui.xml"

# Loads the UI from GtkBuilder XML file
self.builder.add_from_file(gladefile)

# Lets extract a reference to window object to use later
self.window = self.builder.get_object(windowname)

# Sets up event handlers
dic = {
"on_btnFetch_clicked" : self.fetchTweet,
"on_MainWindow_destroy" : gtk.main_quit
}
self.builder.connect_signals (dic)

return

def fetchTweet(self,widget):
widget.set_label("loading...")

# disable's the fetch tweet button
widget.set_sensitive(False)
# man, we got 3 ways to do the same thing
# widget.set_state(False)
# widget.props.sensitive = False
# widget.set_sensitive(False)

username = self.builder.get_object("txtUsername").props.text
lblTweet = self.builder.get_object("lblTweet")

tweet = ""

try:
# grab html of twitter page
response = urllib2.urlopen ("http://twitter.com/" + username)
tweet = response.read()
except:
print "Error loading twitter url"
gtk.main_quit()

try:
# parse the first tweet, split with html on edges as markers
# I know I could use twitter API and parse the json...
crap,tweet = tweet.split("<span class=\"status-body\"><span class=\"entry-content\">",1)
tweet,crap = tweet.split ("</span>",1)
except:
print "Error parsing result"
gtk.main_quit()

# set the tweet into label
lblTweet.props.label = remove_html_tags(tweet)

# reset the fetch tweet button
widget.set_label("fetch tweet")
widget.set_sensitive(True)

return

myapp = newapp()
gtk.main()


tweetui.xml
<?xml version="1.0"?>
<interface>
<requires lib="gtk+" version="2.16"/>
<!-- interface-naming-policy project-wide -->
<object class="GtkWindow" id="MainWindow">
<property name="visible">True</property>
<property name="title" translatable="yes">Hello World</property>
<property name="default_width">440</property>
<property name="default_height">250</property>
<signal name="destroy" handler="on_MainWindow_destroy"/>
<child>
<object class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="lblTweet">
<property name="visible">True</property>
<property name="xpad">7</property>
<property name="label" translatable="yes">label</property>
<property name="wrap">True</property>
<property name="selectable">True</property>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="txtUsername">
<property name="height_request">47</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">•</property>
<property name="text" translatable="yes">ideamonk</property>
<property name="xalign">0.5</property>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btnFetch">
<property name="label" translatable="yes">fetch tweet</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="clicked" handler="on_btnFetch_clicked"/>
</object>
<packing>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
</object>
</interface>


Labels: , , , , ,

Sunday, August 09, 2009

ILUG Bengaluru August 08 Meetup

Yesterday, I was at ILUG Bengaluru meet! or in other words, in a heaven where some amazing linux geeks sat together. I was there for the first time! and had no idea what we were supposed to do in a barcamp-ish style meetup. But in the end it was fun, though many things went over my head :), but one thing I was sure of is that all that made sense. It was organised by Mr. Manish Chakravarty of ThoughtWorks who seemed to be extremely passionate about linux, gadgets and now Gentoo.
It began, I guess right from the chair for guests where their sysadmin and I had a little chit-chat about each other. He told be about BeleniX, which is an OpenSolaris based distro and it has contributed a lot to Sun's OpenSolaris distro itself. And, then he talked about what they do at ThoughtWorks, and about testing software. I wondered how do they do that... the answer was there in the discussion later. I told him about PyPaste, the recent useful python script I wrote, though such utilities pre-existed it.
We were soon joined by Mr. Ritesh from NetApp and Tejas Dinkar. As the meetup began, we had Kingsly John, Manish, one eclipse commiter and one more fellow from ThoughtWorks joining up. Later we were joined by another Debian geek who happened to be running Debian on his PS3!!!
Seriously, man! those people really did some exciting stuff, right from developing their own distro, to putting linux on ps3, to limiting a wireless router's signal instead of boosting it (that was kingsly :P ) , to extending connectivity by setting a chain of repeaters, to controlling a running app through D-Bus (if i am correct), to I don't know what not.
SHA1, Apple, Google Apps, GNOME, KDE, maemo, Facebook, Email clients, Corporate mail stuff, Ext4, power saving techniques, Firefox, OSX, Qt, GTK, Android, Evolution, Kmail, libPurple, Kopete, Pidgin, Gentoo, Arch... the list of topic goes on.
The application level power saving idea from Ritesh was awesome! You better ask him, I don't wish to put it up here for it is too awesome to be mentioned in detail here. The coolness of the idea lies in its simplicity.
I asked everyone about how to begin contributing, whether making own independent apps is the way to go? talked about a twitter integration idea I had in mind from long and then more doubts like there are so many ways to go, which one to begin with... etc. And they definitely gave some real answers coming out of their experience and expertise of years. Later we went over a nice resto-bar to have dinner, I left early after a beer as dinner was ready at home.
Moreover I realised that linux is a way of life to some! and am deeply inspired. I wish I never lose the enthusiasm they filled me up with :) Seriously, those guys work on FOSS after they get back home in the evening and on weekends.
Meetups are one good place to be, even though you just sit and listen, the point is you get to learn a lot. Truly said by someone, "You can learn a lot more by walking 100 steps , than reading 100 pages of a book"
These days I'm checking out GTK+ documentation and tutorials to get along with it. I plan to finish up the gnome applet before it is lost into oblivion and then would look into contributing to other projects. Applet would be a nice way to get familiar with Glade, GTK+ and Bonobo :)
.

Labels: , ,

Saturday, August 01, 2009

Firefox 3.5.1 on Ubuntu 64 bit

So, you must've come across this awesome link on http://getfirefox.com inviting you to get the latest Firefox 3.5.1 on your system. But I'm sure you would have come across compatibility issues on a 64 bit machine. Most probably you'll google for "firefox + 64 bit+ linux". So did I and came across a really handy project called Ubuntuzilla, which is a Python script that helps you get the latest Firefox release as it comes up, and automatically finds out which one suits your architecture. All you need to do is, grab an appropriate deb package for your machine and the job is done. Fire up a new terminal and issue following commands -
$ ubuntuzilla.py -a install -p firefox
Pass through some y/n question answers and you will be given a list of 74!! languages to choose from. Isn't that great, and that includes Telegu, Tamil, Punjabi, Oriya, Marathi, Malayalam, Kannada, Hindi, Gujarati, Bengali, Assamese. Yes! we dominate the list. Once you're done with it, enter your password, it would back-up your old firefox preferences and get the job done soon. There you go -
Some people have had problems with Adobe Flash plugin and latest Firefox. To get it fixed, get the latest 64-bit flash player from Adobe Labs. Unpack the tarball and put the libflashplayer.so file into your ~/.mozilla/plugins folder.

You can go through these commands for now, but I recommend getting latest Flash plugin from the Labs website.
$ wget http://download.macromedia.com/pub/labs/flashplayer10/libflashplayer-10.0.32.18.linux-x86_64.so.tar.gz
$ tar -xvf libflashplayer-10.0.32.18.linux-x86_64.so.tar.gz
$ cp libflashplayer.so ~/.mozilla/plugins/
Have fun hopping the web with the world's best browser. Head on to Firefox Addons page to make your experience even better with browser customizations. If you think your friends, relatives or anyone needs a better browser, don't hesitate in recommending Firefox. You can even become a Campus Rep for Mozilla if you go to a college. Checkout the SpreadFirefox campaign for that -

Labels: , ,