<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Cyberpython Online</title>
	<atom:link href="http://cyberpython.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://cyberpython.wordpress.com</link>
	<description>Programming, FOSS, Linux and more...</description>
	<lastBuildDate>Tue, 17 Nov 2009 19:11:43 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>el</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='cyberpython.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/7400b397ec11093169a3ff295430fad0?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Cyberpython Online</title>
		<link>http://cyberpython.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://cyberpython.wordpress.com/osd.xml" title="Cyberpython Online" />
		<item>
		<title>Java: Native GTK+ GUIs on Gnome using Java-Gnome</title>
		<link>http://cyberpython.wordpress.com/2009/11/17/java-native-gtk-guis-on-gnome-using-java-gnome/</link>
		<comments>http://cyberpython.wordpress.com/2009/11/17/java-native-gtk-guis-on-gnome-using-java-gnome/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 19:05:18 +0000</pubDate>
		<dc:creator>cyberpython</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Προγραμματισμός]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[java-gnome]]></category>

		<guid isPermaLink="false">http://cyberpython.wordpress.com/?p=441</guid>
		<description><![CDATA[In this post we&#8217;ll see how to create a simple text editor for Linux systems using Java and GTK+.
First of all we will need to have a Linux system with:

JRE and JDK
GTK (if you are using a Gnome-based distro like Ubuntu it&#8217;s already there)
Gnome-Java GTK+ bindings for Java
If you are using Ubuntu Karmic you can [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cyberpython.wordpress.com&blog=4406102&post=441&subd=cyberpython&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>In this post we&#8217;ll see how to create a simple text editor for Linux systems using Java and GTK+.</p>
<p>First of all we will need to have a Linux system with:</p>
<ul>
<li>JRE and JDK</li>
<li>GTK (if you are using a Gnome-based distro like Ubuntu it&#8217;s already there)</li>
<li>Gnome-Java GTK+ bindings for Java<br />
If you are using Ubuntu Karmic you can install these with:<br />
sudo apt-get install libjava-gnome-java libjava-gnome-jni libjava-gnome-java-doc<br />
Otherwise you can grab the bindings from <a href="http://java-gnome.sourceforge.net/4.0/get/" target="_blank">here</a> and follow these <a href="http://java-gnome.sourceforge.net/4.0/README.html" target="_blank">instructions</a> for manual installation.</li>
<li>Glade Interface Designer (It must be available through your distribution&#8217;s package management tool)</li>
<li>Your favorite Java editor/IDE &#8211; I&#8217;ll be using Netbeans (if you don&#8217;t, make sure you have a grasp of how the classpath works).</li>
</ul>
<p><span id="more-441"></span></p>
<p>Now that we have everything we need installed and configured, we start Netbeans and create a new Java Application Project named MyGtkTextEditor.</p>
<p style="text-align:center;"><a href="http://cyberpython.files.wordpress.com/2009/11/screenshot-2.png"><img class="size-thumbnail wp-image-443" title="Screenshot-2" src="http://cyberpython.files.wordpress.com/2009/11/screenshot-2.png?w=150&#038;h=100" alt="" width="150" height="100" /></a><a href="http://cyberpython.files.wordpress.com/2009/11/screenshot-3.png"><img class="size-thumbnail wp-image-444" title="Screenshot-3" src="http://cyberpython.files.wordpress.com/2009/11/screenshot-3.png?w=150&#038;h=103" alt="" width="150" height="103" /></a></p>
<p>Next, we have to tell Netbeans to include the necessary java-gnome JAR files in order to be able to compile our project. Right click on &#8220;Libraries&#8221; and choose &#8220;Add JAR/folder&#8221;.</p>
<p style="text-align:center;"><a href="http://cyberpython.files.wordpress.com/2009/11/screenshot-4.png"><img class="alignnone size-thumbnail wp-image-445" title="Screenshot-4" src="http://cyberpython.files.wordpress.com/2009/11/screenshot-4.png?w=136&#038;h=150" alt="" width="136" height="150" /></a></p>
<p>Now, navigate to /usr/share/java , select gtk.jar and gtk-4.0.jar and click on &#8220;OK&#8221;.</p>
<p style="text-align:center;"><a href="http://cyberpython.files.wordpress.com/2009/11/screenshot-5.png"><img class="alignnone size-thumbnail wp-image-446" title="Screenshot-5" src="http://cyberpython.files.wordpress.com/2009/11/screenshot-5.png?w=150&#038;h=96" alt="" width="150" height="96" /></a></p>
<p>From now on we can use GTK+ in our Java application!<br />
Next we will design the GUI using Glade Interface Designer. Start Glade and select &#8220;Libglade&#8221; as the project&#8217;s file format. The libglade format is scheduled for deprecation and will be replaced by GtkBuilder, but java-gnome only supports libglade in its current version.</p>
<p style="text-align:center;"><a href="http://cyberpython.files.wordpress.com/2009/11/screenshot.png"><img class="alignnone size-thumbnail wp-image-447" title="Screenshot" src="http://cyberpython.files.wordpress.com/2009/11/screenshot.png?w=150&#038;h=86" alt="" width="150" height="86" /></a></p>
<p>Now create a window and add a vertical box with 4 slots. Then add a menubar, a toolbar, a ScrolledWindow and a statusbar. We add a TextView inside the ScrolledWindow. Then populate the toolbar (using the &#8220;pencil&#8221; icon on Glade&#8217;s main toolbar which appears after selecting the toolbar) to look like the one on the following picture:</p>
<p style="text-align:center;"><a href="http://cyberpython.files.wordpress.com/2009/11/screenshot-1.png"><img class="alignnone size-thumbnail wp-image-448" title="Screenshot-1" src="http://cyberpython.files.wordpress.com/2009/11/screenshot-1.png?w=150&#038;h=88" alt="" width="150" height="88" /></a></p>
<p>Now save the project as &#8220;main_window.glade&#8221; in a folder named &#8220;glade&#8221; inside your Netbeans project directory and close Glade:</p>
<p style="text-align:center;"><a href="http://cyberpython.files.wordpress.com/2009/11/screenshot-6.png"><img class="alignnone size-thumbnail wp-image-449" title="Screenshot-6" src="http://cyberpython.files.wordpress.com/2009/11/screenshot-6.png?w=150&#038;h=88" alt="" width="150" height="88" /></a></p>
<p>You can download the glade file from <a href="http://cyberpython.net76.net/files/mygtktexteditor/glade/main_window.glade">here</a>.</p>
<p>In order to be able to build/run our project with Netbeans and create redistributable &#8220;dist&#8221; folder we must tell Ant to copy out glade file in our build/dist folder somewhere where we can locate it at runtime &#8211; e.g. to build/glade/main_window.glade  and dist/glade/main_window.glade . Open build.xml using your favorite text editor and add the following before &lt;/project&gt; :</p>
<pre style="color:#000000;background:#ffffff;"><span style="color:#7f0055;">&lt;</span><span style="color:#7f0055;">target</span> name=<span style="color:#2a00ff;">"</span><span style="color:#2a00ff;">-post-compile</span><span style="color:#2a00ff;">"</span><span style="color:#7f0055;">&gt;</span>
    <span style="color:#7f0055;">&lt;</span><span style="color:#7f0055;">copy</span> todir=<span style="color:#2a00ff;">"</span><span style="color:#2a00ff;">build/glade</span><span style="color:#2a00ff;">"</span><span style="color:#7f0055;">&gt;</span>
        <span style="color:#7f0055;">&lt;</span><span style="color:#7f0055;">fileset</span> dir=<span style="color:#2a00ff;">"</span><span style="color:#2a00ff;">glade</span><span style="color:#2a00ff;">"</span><span style="color:#7f0055;">/&gt;</span>
    <span style="color:#7f0055;">&lt;/</span><span style="color:#7f0055;">copy</span><span style="color:#7f0055;">&gt;</span>
<span style="color:#7f0055;">&lt;/</span><span style="color:#7f0055;">target</span><span style="color:#7f0055;">&gt;</span>
<span style="color:#7f0055;">&lt;</span><span style="color:#7f0055;">target</span> name=<span style="color:#2a00ff;">"</span><span style="color:#2a00ff;">-post-jar</span><span style="color:#2a00ff;">"</span><span style="color:#7f0055;">&gt;</span>
    <span style="color:#7f0055;">&lt;</span><span style="color:#7f0055;">copy</span> todir=<span style="color:#2a00ff;">"</span><span style="color:#2a00ff;">dist/glade</span><span style="color:#2a00ff;">"</span><span style="color:#7f0055;">&gt;</span>
        <span style="color:#7f0055;">&lt;</span><span style="color:#7f0055;">fileset</span> dir=<span style="color:#2a00ff;">"</span><span style="color:#2a00ff;">glade</span><span style="color:#2a00ff;">"</span><span style="color:#7f0055;">/&gt;</span>
    <span style="color:#7f0055;">&lt;/</span><span style="color:#7f0055;">copy</span><span style="color:#7f0055;">&gt;</span>
<span style="color:#7f0055;">&lt;/</span><span style="color:#7f0055;">target</span><span style="color:#7f0055;">&gt;</span></pre>
<p style="text-align:center;"><a href="http://cyberpython.files.wordpress.com/2009/11/screenshot-7.png"><img class="alignnone size-thumbnail wp-image-450" title="Screenshot-7" src="http://cyberpython.files.wordpress.com/2009/11/screenshot-7.png?w=150&#038;h=89" alt="" width="150" height="89" /></a><a href="http://cyberpython.files.wordpress.com/2009/11/screenshot-8.png"><img class="alignnone size-thumbnail wp-image-451" title="Screenshot-8" src="http://cyberpython.files.wordpress.com/2009/11/screenshot-8.png?w=150&#038;h=100" alt="" width="150" height="100" /></a></p>
<p>Now go to NetBeans and create a new Java class named &#8220;MyGtkTextEditor&#8221; inside mygtktexteditor:</p>
<p style="text-align:center;"><a href="http://cyberpython.files.wordpress.com/2009/11/screenshot-9.png"><img class="alignnone size-thumbnail wp-image-452" title="Screenshot-9" src="http://cyberpython.files.wordpress.com/2009/11/screenshot-9.png?w=150&#038;h=95" alt="" width="150" height="95" /></a></p>
<p>First we will create a method that returns the path of the gladefile at runtime:</p>
<pre style="color:#000000;background:#ffffff;"><span style="color:#7f0055;font-weight:bold;">private</span> String getGladefilePath() {
    <span style="color:#7f0055;font-weight:bold;">try</span> {
        URI uri = <span style="color:#7f0055;font-weight:bold;">this</span>.getClass().getProtectionDomain().getCodeSource().getLocation().toURI();
        <span style="color:#7f0055;font-weight:bold;">File</span> f = <span style="color:#7f0055;font-weight:bold;">new</span> <span style="color:#7f0055;font-weight:bold;">File</span>(uri);
        <span style="color:#7f0055;font-weight:bold;">String</span> canonicalPath = f.getParentFile().getCanonicalPath();
        <span style="color:#7f0055;font-weight:bold;">File</span> f2 = <span style="color:#7f0055;font-weight:bold;">new</span> <span style="color:#7f0055;font-weight:bold;">File</span>(canonicalPath + <span style="color:#7f0055;font-weight:bold;">File</span>.separator + <span style="color:#2a00ff;">"glade"</span> + <span style="color:#7f0055;font-weight:bold;">File</span>.separator + <span style="color:#2a00ff;">"main_window.glade"</span>);
        <span style="color:#7f0055;font-weight:bold;">return</span> f2.getCanonicalPath();
    } <span style="color:#7f0055;font-weight:bold;">catch</span> (<span style="color:#7f0055;font-weight:bold;">Exception</span> e) {
        e.printStackTrace();
        <span style="color:#7f0055;font-weight:bold;">return</span> <span style="color:#7f0055;font-weight:bold;">null</span>;
    }
}</pre>
<p>Next a method that parses the XML glade file and gets object references:</p>
<pre style="color:#000000;background:#ffffff;"><span style="color:#7f0055;font-weight:bold;">private</span> void initComponents(String path) {
    <span style="color:#7f0055;font-weight:bold;">try</span> {
        XML gladeXML = Glade.parse(path, <span style="color:#2a00ff;">"window1"</span>);

        <span style="color:#7f0055;font-weight:bold;">this</span>.mainWindow = (<span style="color:#7f0055;font-weight:bold;">Window</span>) gladeXML.getWidget(<span style="color:#2a00ff;">"window1"</span>);
        <span style="color:#7f0055;font-weight:bold;">this</span>.openButton = (ToolButton) gladeXML.getWidget(<span style="color:#2a00ff;">"toolbutton2"</span>);
        <span style="color:#7f0055;font-weight:bold;">this</span>.textView = (TextView) gladeXML.getWidget(<span style="color:#2a00ff;">"textview1"</span>);

        <span style="color:#7f0055;font-weight:bold;">this</span>.textBuffer = <span style="color:#7f0055;font-weight:bold;">new</span> TextBuffer();
        <span style="color:#7f0055;font-weight:bold;">this</span>.textView.setBuffer(<span style="color:#7f0055;font-weight:bold;">this</span>.textBuffer);

        <span style="color:#7f0055;font-weight:bold;">this</span>.mainWindow.showAll();
    } <span style="color:#7f0055;font-weight:bold;">catch</span> (<span style="color:#7f0055;font-weight:bold;">FileNotFoundException</span> fnfe) {
        fnfe.printStackTrace();
    }

}</pre>
<p>A method that connects widgets and events:</p>
<pre style="color:#000000;background:#ffffff;"><span style="color:#7f0055;font-weight:bold;">private</span> void connectWidgetsAndEvents() {

    <span style="color:#7f0055;font-weight:bold;">this</span>.mainWindow.connect(<span style="color:#7f0055;font-weight:bold;">new</span> <span style="color:#7f0055;font-weight:bold;">Window</span>.DeleteEvent() {
        <span style="color:#7f0055;font-weight:bold;">public</span> <span style="color:#7f0055;font-weight:bold;">boolean</span> onDeleteEvent(Widget source, <span style="color:#7f0055;font-weight:bold;">Event</span> event) {
        Gtk.mainQuit();
        <span style="color:#7f0055;font-weight:bold;">return</span> <span style="color:#7f0055;font-weight:bold;">false</span>;
        }
    });

    <span style="color:#7f0055;font-weight:bold;">this</span>.openButton.connect(<span style="color:#7f0055;font-weight:bold;">new</span> ToolButton.Clicked() {
        <span style="color:#7f0055;font-weight:bold;">public</span> <span style="color:#7f0055;font-weight:bold;">void</span> onClicked(ToolButton arg0) {
        openFile();
        }
    });

}</pre>
<p>Another one that loads a file in our TextView:</p>
<pre style="color:#000000;background:#ffffff;"><span style="color:#7f0055;font-weight:bold;">private</span> void openFile() {
    FileChooserDialog dlg = <span style="color:#7f0055;font-weight:bold;">new</span> FileChooserDialog(<span style="color:#2a00ff;">"Open..."</span>, <span style="color:#7f0055;font-weight:bold;">this</span>.mainWindow, FileChooserAction.OPEN);
    FileFilter textFileFilter = <span style="color:#7f0055;font-weight:bold;">new</span> FileFilter(<span style="color:#2a00ff;">"Text files"</span>);
    textFileFilter.addMimeType(<span style="color:#2a00ff;">"text/plain"</span>);
    dlg.addFilter(textFileFilter);

    ResponseType response = dlg.run();
    dlg.hide();
    <span style="color:#7f0055;font-weight:bold;">if</span>(response.equals(ResponseType.OK)){
        <span style="color:#7f0055;font-weight:bold;">String</span> text = <span style="color:#2a00ff;">""</span>;
        <span style="color:#7f0055;font-weight:bold;">try</span>{
        <span style="color:#7f0055;font-weight:bold;">InputStreamReader</span> reader = <span style="color:#7f0055;font-weight:bold;">new</span> <span style="color:#7f0055;font-weight:bold;">InputStreamReader</span>(<span style="color:#7f0055;font-weight:bold;">new</span> <span style="color:#7f0055;font-weight:bold;">FileInputStream</span>(dlg.getFilename()), <span style="color:#2a00ff;">"UTF-8"</span>);
        <span style="color:#7f0055;font-weight:bold;">char</span>[] buffer = <span style="color:#7f0055;font-weight:bold;">new</span> <span style="color:#7f0055;font-weight:bold;">char</span>[512];
        <span style="color:#7f0055;font-weight:bold;">while</span>(reader.read(buffer)!=-1){
            text = text + <span style="color:#7f0055;font-weight:bold;">String</span>.valueOf(buffer);
        }
        reader.close();
        }<span style="color:#7f0055;font-weight:bold;">catch</span>(<span style="color:#7f0055;font-weight:bold;">IOException</span> ioe){
        ioe.printStackTrace();
        text = <span style="color:#2a00ff;">""</span>;
        }
        <span style="color:#7f0055;font-weight:bold;">this</span>.textBuffer.setText(text);
    }
}</pre>
<p>And finally the constructor that uses all the above methods:</p>
<pre style="color:#000000;background:#ffffff;"><span style="color:#7f0055;font-weight:bold;">public</span> MyGtkTextEditor(){
    Gtk.init(<span style="color:#7f0055;font-weight:bold;">new</span> <span style="color:#7f0055;font-weight:bold;">String</span>[0]);<span style="color:#3f7f59;">//This must be called before </span>
                        <span style="color:#3f7f59;">//anything else that is GTK related</span>

    initComponents(<span style="color:#7f0055;font-weight:bold;">this</span>.getGladefilePath());
    connectWidgetsAndEvents();

    Gtk.main();<span style="color:#3f7f59;">//invokes the GTK main loop</span>
}</pre>
<p>Our class should now look like this:</p>
<pre style="color:#000000;background:#ffffff;"><span style="color:#3f7f59;">/*</span>
<span style="color:#3f7f59;"> * To change this template, choose Tools | Templates</span>
<span style="color:#3f7f59;"> * and open the template in the editor.</span>
<span style="color:#3f7f59;"> */</span>
<span style="color:#7f0055;font-weight:bold;">package</span><span style="color:#7f0055;"> mygtktexteditor</span><span style="color:#7f0055;">;</span>

<span style="color:#7f0055;font-weight:bold;">import</span><span style="color:#7f0055;"> java</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">io</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">File</span><span style="color:#7f0055;">;</span>
<span style="color:#7f0055;font-weight:bold;">import</span><span style="color:#7f0055;"> java</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">io</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">FileInputStream</span><span style="color:#7f0055;">;</span>
<span style="color:#7f0055;font-weight:bold;">import</span><span style="color:#7f0055;"> java</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">io</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">FileNotFoundException</span><span style="color:#7f0055;">;</span>
<span style="color:#7f0055;font-weight:bold;">import</span><span style="color:#7f0055;"> java</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">io</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">IOException</span><span style="color:#7f0055;">;</span>
<span style="color:#7f0055;font-weight:bold;">import</span><span style="color:#7f0055;"> java</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">io</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">InputStreamReader</span><span style="color:#7f0055;">;</span>
<span style="color:#7f0055;font-weight:bold;">import</span><span style="color:#7f0055;"> java</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">net</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">URI</span><span style="color:#7f0055;">;</span>
<span style="color:#7f0055;font-weight:bold;">import</span><span style="color:#7f0055;"> org</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">gnome</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">gdk</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">Event</span><span style="color:#7f0055;">;</span>
<span style="color:#7f0055;font-weight:bold;">import</span><span style="color:#7f0055;"> org</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">gnome</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">glade</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">Glade</span><span style="color:#7f0055;">;</span>
<span style="color:#7f0055;font-weight:bold;">import</span><span style="color:#7f0055;"> org</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">gnome</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">glade</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">XML</span><span style="color:#7f0055;">;</span>
<span style="color:#7f0055;font-weight:bold;">import</span><span style="color:#7f0055;"> org</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">gnome</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">gtk</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">FileChooserAction</span><span style="color:#7f0055;">;</span>
<span style="color:#7f0055;font-weight:bold;">import</span><span style="color:#7f0055;"> org</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">gnome</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">gtk</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">FileChooserDialog</span><span style="color:#7f0055;">;</span>
<span style="color:#7f0055;font-weight:bold;">import</span><span style="color:#7f0055;"> org</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">gnome</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">gtk</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">FileFilter</span><span style="color:#7f0055;">;</span>
<span style="color:#7f0055;font-weight:bold;">import</span><span style="color:#7f0055;"> org</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">gnome</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">gtk</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">Gtk</span><span style="color:#7f0055;">;</span>
<span style="color:#7f0055;font-weight:bold;">import</span><span style="color:#7f0055;"> org</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">gnome</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">gtk</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">ResponseType</span><span style="color:#7f0055;">;</span>
<span style="color:#7f0055;font-weight:bold;">import</span><span style="color:#7f0055;"> org</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">gnome</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">gtk</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">TextBuffer</span><span style="color:#7f0055;">;</span>
<span style="color:#7f0055;font-weight:bold;">import</span><span style="color:#7f0055;"> org</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">gnome</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">gtk</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">TextView</span><span style="color:#7f0055;">;</span>
<span style="color:#7f0055;font-weight:bold;">import</span><span style="color:#7f0055;"> org</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">gnome</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">gtk</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">ToolButton</span><span style="color:#7f0055;">;</span>
<span style="color:#7f0055;font-weight:bold;">import</span><span style="color:#7f0055;"> org</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">gnome</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">gtk</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">Widget</span><span style="color:#7f0055;">;</span>
<span style="color:#7f0055;font-weight:bold;">import</span><span style="color:#7f0055;"> org</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">gnome</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">gtk</span><span style="color:#7f0055;">.</span><span style="color:#7f0055;">Window</span><span style="color:#7f0055;">;</span>

<span style="color:#3f5fbf;">/**</span>
<span style="color:#3f5fbf;"> </span><span style="color:#7f9fbf;font-weight:bold;">*</span>
<span style="color:#3f5fbf;"> </span><span style="color:#7f9fbf;font-weight:bold;">*</span><span style="color:#3f5fbf;"> </span><span style="color:#7f9fbf;font-weight:bold;">@author</span><span style="color:#3f5fbf;"> </span><span style="color:#7f9fbf;font-weight:bold;">Georgios "cyberpython" Migdos &lt;cyberpython@gmail.com&gt;</span>
<span style="color:#3f5fbf;"> */</span>
<span style="color:#7f0055;font-weight:bold;">public</span> <span style="color:#7f0055;font-weight:bold;">class</span> MyGtkTextEditor {

    <span style="color:#7f0055;font-weight:bold;">private</span> <span style="color:#7f0055;font-weight:bold;">Window</span> mainWindow;
    <span style="color:#7f0055;font-weight:bold;">private</span> ToolButton openButton;
    <span style="color:#7f0055;font-weight:bold;">private</span> TextView textView;
    <span style="color:#7f0055;font-weight:bold;">private</span> TextBuffer textBuffer;

    <span style="color:#7f0055;font-weight:bold;">public</span> MyGtkTextEditor(){

        Gtk.init(<span style="color:#7f0055;font-weight:bold;">new</span> <span style="color:#7f0055;font-weight:bold;">String</span>[0]);<span style="color:#3f7f59;">//This must be called before</span>
                                <span style="color:#3f7f59;">//anything else that is GTK related</span>

        initComponents(<span style="color:#7f0055;font-weight:bold;">this</span>.getGladefilePath());
        connectWidgetsAndEvents();

        Gtk.main();<span style="color:#3f7f59;">//invokes the GTK main loop</span>
    }

    <span style="color:#7f0055;font-weight:bold;">private</span> <span style="color:#7f0055;font-weight:bold;">void</span> initComponents(<span style="color:#7f0055;font-weight:bold;">String</span> path) {
        <span style="color:#7f0055;font-weight:bold;">try</span> {
            XML gladeXML = Glade.parse(path, <span style="color:#2a00ff;">"window1"</span>);

            <span style="color:#7f0055;font-weight:bold;">this</span>.mainWindow = (<span style="color:#7f0055;font-weight:bold;">Window</span>) gladeXML.getWidget(<span style="color:#2a00ff;">"window1"</span>);
            <span style="color:#7f0055;font-weight:bold;">this</span>.openButton = (ToolButton) gladeXML.getWidget(<span style="color:#2a00ff;">"toolbutton2"</span>);
            <span style="color:#7f0055;font-weight:bold;">this</span>.textView = (TextView) gladeXML.getWidget(<span style="color:#2a00ff;">"textview1"</span>);

            <span style="color:#7f0055;font-weight:bold;">this</span>.textBuffer = <span style="color:#7f0055;font-weight:bold;">new</span> TextBuffer();
            <span style="color:#7f0055;font-weight:bold;">this</span>.textView.setBuffer(<span style="color:#7f0055;font-weight:bold;">this</span>.textBuffer);

            <span style="color:#7f0055;font-weight:bold;">this</span>.mainWindow.showAll();
        } <span style="color:#7f0055;font-weight:bold;">catch</span> (<span style="color:#7f0055;font-weight:bold;">FileNotFoundException</span> fnfe) {
            fnfe.printStackTrace();
        }

    }

    <span style="color:#7f0055;font-weight:bold;">private</span> <span style="color:#7f0055;font-weight:bold;">void</span> connectWidgetsAndEvents() {

        <span style="color:#7f0055;font-weight:bold;">this</span>.mainWindow.connect(<span style="color:#7f0055;font-weight:bold;">new</span> <span style="color:#7f0055;font-weight:bold;">Window</span>.DeleteEvent() {
            <span style="color:#7f0055;font-weight:bold;">public</span> <span style="color:#7f0055;font-weight:bold;">boolean</span> onDeleteEvent(Widget source, <span style="color:#7f0055;font-weight:bold;">Event</span> event) {
                Gtk.mainQuit();
                <span style="color:#7f0055;font-weight:bold;">return</span> <span style="color:#7f0055;font-weight:bold;">false</span>;
            }
        });

        <span style="color:#7f0055;font-weight:bold;">this</span>.openButton.connect(<span style="color:#7f0055;font-weight:bold;">new</span> ToolButton.Clicked() {
            <span style="color:#7f0055;font-weight:bold;">public</span> <span style="color:#7f0055;font-weight:bold;">void</span> onClicked(ToolButton arg0) {
                openFile();
            }
        });

    }

    <span style="color:#7f0055;font-weight:bold;">private</span> <span style="color:#7f0055;font-weight:bold;">void</span> openFile() {
        FileChooserDialog dlg = <span style="color:#7f0055;font-weight:bold;">new</span> FileChooserDialog(<span style="color:#2a00ff;">"Open..."</span>, <span style="color:#7f0055;font-weight:bold;">this</span>.mainWindow, FileChooserAction.OPEN);
        FileFilter textFileFilter = <span style="color:#7f0055;font-weight:bold;">new</span> FileFilter(<span style="color:#2a00ff;">"Text files"</span>);
        textFileFilter.addMimeType(<span style="color:#2a00ff;">"text/plain"</span>);
        dlg.addFilter(textFileFilter);

        ResponseType response = dlg.run();
        dlg.hide();
        <span style="color:#7f0055;font-weight:bold;">if</span>(response.equals(ResponseType.OK)){
            <span style="color:#7f0055;font-weight:bold;">String</span> text = <span style="color:#2a00ff;">""</span>;
            <span style="color:#7f0055;font-weight:bold;">try</span>{
                <span style="color:#7f0055;font-weight:bold;">InputStreamReader</span> reader = <span style="color:#7f0055;font-weight:bold;">new</span> <span style="color:#7f0055;font-weight:bold;">InputStreamReader</span>(<span style="color:#7f0055;font-weight:bold;">new</span> <span style="color:#7f0055;font-weight:bold;">FileInputStream</span>(dlg.getFilename()), <span style="color:#2a00ff;">"UTF-8"</span>);
                <span style="color:#7f0055;font-weight:bold;">char</span>[] buffer = <span style="color:#7f0055;font-weight:bold;">new</span> <span style="color:#7f0055;font-weight:bold;">char</span>[512];
                <span style="color:#7f0055;font-weight:bold;">while</span>(reader.read(buffer)!=-1){
                    text = text + <span style="color:#7f0055;font-weight:bold;">String</span>.valueOf(buffer);
                }
                reader.close();
            }<span style="color:#7f0055;font-weight:bold;">catch</span>(<span style="color:#7f0055;font-weight:bold;">IOException</span> ioe){
                ioe.printStackTrace();
                text = <span style="color:#2a00ff;">""</span>;
            }
            <span style="color:#7f0055;font-weight:bold;">this</span>.textBuffer.setText(text);
        }
    }

    <span style="color:#7f0055;font-weight:bold;">private</span> <span style="color:#7f0055;font-weight:bold;">String</span> getGladefilePath() {
        <span style="color:#7f0055;font-weight:bold;">try</span> {
            URI uri = <span style="color:#7f0055;font-weight:bold;">this</span>.getClass().getProtectionDomain().getCodeSource().getLocation().toURI();
            <span style="color:#7f0055;font-weight:bold;">File</span> f = <span style="color:#7f0055;font-weight:bold;">new</span> <span style="color:#7f0055;font-weight:bold;">File</span>(uri);
            <span style="color:#7f0055;font-weight:bold;">String</span> canonicalPath = f.getParentFile().getCanonicalPath();
            <span style="color:#7f0055;font-weight:bold;">File</span> f2 = <span style="color:#7f0055;font-weight:bold;">new</span> <span style="color:#7f0055;font-weight:bold;">File</span>(canonicalPath + <span style="color:#7f0055;font-weight:bold;">File</span>.separator + <span style="color:#2a00ff;">"glade"</span> + <span style="color:#7f0055;font-weight:bold;">File</span>.separator + <span style="color:#2a00ff;">"main_window.glade"</span>);
            <span style="color:#7f0055;font-weight:bold;">return</span> f2.getCanonicalPath();
        } <span style="color:#7f0055;font-weight:bold;">catch</span> (<span style="color:#7f0055;font-weight:bold;">Exception</span> e) {
            e.printStackTrace();
            <span style="color:#7f0055;font-weight:bold;">return</span> <span style="color:#7f0055;font-weight:bold;">null</span>;
        }
    }
}</pre>
<p>Now, edit Main.java and create a MyGtkTextEditor object in the main method:</p>
<pre style="color:#000000;background:#ffffff;">MyGtkTextEditor myTextEditor = <span style="color:#7f0055;font-weight:bold;">new</span> MyGtkTextEditor();</pre>
<p>Finally, click on &#8220;Run&#8221; -&gt; &#8220;Clean and Build Main Project&#8221; and then click &#8220;Run&#8221; -&gt; &#8220;Run Main Project&#8221;. You should get something like this:</p>
<p><a href="http://cyberpython.files.wordpress.com/2009/11/screenshot-11.png"><img class="aligncenter size-thumbnail wp-image-453" title="Screenshot-11" src="http://cyberpython.files.wordpress.com/2009/11/screenshot-11.png?w=150&#038;h=70" alt="" width="150" height="70" /></a></p>
<p>You can browse the Java-Gnome API documention <a href="http://java-gnome.sourceforge.net/4.0/doc/api/overview-summary.html" target="_blank">here</a>.</p>
<p>Now that you know how to work with GTK+ and Java you can implement the missing functionality for our application (New/Save, clipboard operations etc.). Or you can replace the TextView with a GtkSourceView and turn this into a code editor with syntax-highlighting.</p>
<p>Have fun!</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cyberpython.wordpress.com/441/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cyberpython.wordpress.com/441/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cyberpython.wordpress.com/441/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cyberpython.wordpress.com/441/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cyberpython.wordpress.com/441/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cyberpython.wordpress.com/441/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cyberpython.wordpress.com/441/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cyberpython.wordpress.com/441/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cyberpython.wordpress.com/441/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cyberpython.wordpress.com/441/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cyberpython.wordpress.com&blog=4406102&post=441&subd=cyberpython&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://cyberpython.wordpress.com/2009/11/17/java-native-gtk-guis-on-gnome-using-java-gnome/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0595685bf66054babe04b4e57e311e74?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cyberpython</media:title>
		</media:content>

		<media:content url="http://cyberpython.files.wordpress.com/2009/11/screenshot-2.png?w=150" medium="image">
			<media:title type="html">Screenshot-2</media:title>
		</media:content>

		<media:content url="http://cyberpython.files.wordpress.com/2009/11/screenshot-3.png?w=150" medium="image">
			<media:title type="html">Screenshot-3</media:title>
		</media:content>

		<media:content url="http://cyberpython.files.wordpress.com/2009/11/screenshot-4.png?w=136" medium="image">
			<media:title type="html">Screenshot-4</media:title>
		</media:content>

		<media:content url="http://cyberpython.files.wordpress.com/2009/11/screenshot-5.png?w=150" medium="image">
			<media:title type="html">Screenshot-5</media:title>
		</media:content>

		<media:content url="http://cyberpython.files.wordpress.com/2009/11/screenshot.png?w=150" medium="image">
			<media:title type="html">Screenshot</media:title>
		</media:content>

		<media:content url="http://cyberpython.files.wordpress.com/2009/11/screenshot-1.png?w=150" medium="image">
			<media:title type="html">Screenshot-1</media:title>
		</media:content>

		<media:content url="http://cyberpython.files.wordpress.com/2009/11/screenshot-6.png?w=150" medium="image">
			<media:title type="html">Screenshot-6</media:title>
		</media:content>

		<media:content url="http://cyberpython.files.wordpress.com/2009/11/screenshot-7.png?w=150" medium="image">
			<media:title type="html">Screenshot-7</media:title>
		</media:content>

		<media:content url="http://cyberpython.files.wordpress.com/2009/11/screenshot-8.png?w=150" medium="image">
			<media:title type="html">Screenshot-8</media:title>
		</media:content>

		<media:content url="http://cyberpython.files.wordpress.com/2009/11/screenshot-9.png?w=150" medium="image">
			<media:title type="html">Screenshot-9</media:title>
		</media:content>

		<media:content url="http://cyberpython.files.wordpress.com/2009/11/screenshot-11.png?w=150" medium="image">
			<media:title type="html">Screenshot-11</media:title>
		</media:content>
	</item>
		<item>
		<title>Διορθώστε το χρώμα της tab bar στον Chromium</title>
		<link>http://cyberpython.wordpress.com/2009/11/03/%ce%b4%ce%b9%ce%bf%cf%81%ce%b8%cf%8e%cf%83%cf%84%ce%b5-%cf%84%ce%bf-%cf%87%cf%81%cf%8e%ce%bc%ce%b1-%cf%84%ce%b7%cf%82-tab-bar-%cf%83%cf%84%ce%bf%ce%bd-chromium/</link>
		<comments>http://cyberpython.wordpress.com/2009/11/03/%ce%b4%ce%b9%ce%bf%cf%81%ce%b8%cf%8e%cf%83%cf%84%ce%b5-%cf%84%ce%bf-%cf%87%cf%81%cf%8e%ce%bc%ce%b1-%cf%84%ce%b7%cf%82-tab-bar-%cf%83%cf%84%ce%bf%ce%bd-chromium/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 14:33:37 +0000</pubDate>
		<dc:creator>cyberpython</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[gnome]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[themes]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://cyberpython.wordpress.com/?p=439</guid>
		<description><![CDATA[Ο Chromium (όπως και ο Chrome) σε πολλές περιπτώσεις δεν χρησιμοποιούν το κατάλληλο χρώμα ώστε η tab bar να μοιάζει ως συνέχεια του πλαισίου του παραθύρου (όταν βέβαια έχουμε επιλέξει να γίνεται χρήση του GTK theme και των πλαισίων παραθύρων του συστήματος).
Για να το διορθώσουμε αυτό, πρέπει να επέμβουμε στο αρχείο .gtkrc του θέματος που [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cyberpython.wordpress.com&blog=4406102&post=439&subd=cyberpython&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Ο Chromium (όπως και ο Chrome) σε πολλές περιπτώσεις δεν χρησιμοποιούν το κατάλληλο χρώμα ώστε η tab bar να μοιάζει ως συνέχεια του πλαισίου του παραθύρου (όταν βέβαια έχουμε επιλέξει να γίνεται χρήση του GTK theme και των πλαισίων παραθύρων του συστήματος).</p>
<p>Για να το διορθώσουμε αυτό, πρέπει να επέμβουμε στο αρχείο .gtkrc του θέματος που χρησιμοποιούμε.</p>
<p><span id="more-439"></span><br />
Το αρχείο αυτό βρίσκετε στο φάκελο <strong>gtk-2.0</strong> μέσα σε ένα φάκελο με το <strong>όνομα του θέματος</strong> σε μία από τις τοποθεσίες <strong>/usr/share/themes</strong> ή <strong>~/.themes </strong>(το ~/ είναι ο φάκελος του χρήστη σας). Π.χ. για το Hanso theme που έχω εγκαταστήσει μόνο για το δικό μου χρήστη βρίσκετε στο:</p>
<p>/home/cyberpython/.themes/Hanso/gtk-2.0/gtkrc</p>
<p>Σε αυτό το αρχείο (gtkrc) θα βρούμε μία γραμμή όπου δηλώνεται η μεταβλητή:</p>
<p><strong>gtk_color_scheme</strong></p>
<p>Εμείς θα προσθέσουμε δύο επιπλέον χρώματα που θα χρησιμοποιούνται για την tab bar, τα:</p>
<p><strong>frame_color</strong></p>
<p><strong>inactive_frame_color</strong></p>
<p>Τις τιμές που θα τους δώσουμε μπορούμε να τις βρούμε χρησιμοποιώντας ένα εργαλείο όπως το <strong><a href="//gcolor2">gcolor2</a> </strong>και κάνοντας κλικ στο πλαίσιο του παραθύρου. Η τιμή για το Hanso theme είναι:</p>
<p><strong>#241E12</strong></p>
<p>Οπότε προσθέτουμε στην τιμή της <strong>gtk_color_scheme </strong>(πριν το τελευταίο <strong>&#8221; </strong>) το:</p>
<p><span style="color:#ff0000;">\n</span><strong>frame_color:</strong><span style="color:#0000ff;">#241E12</span><span style="color:#ff0000;">\n</span><strong>inactive_frame_color:</strong><span style="color:#0000ff;">#241E12</span></p>
<p><span style="color:#0000ff;"><br />
</span></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cyberpython.wordpress.com/439/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cyberpython.wordpress.com/439/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cyberpython.wordpress.com/439/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cyberpython.wordpress.com/439/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cyberpython.wordpress.com/439/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cyberpython.wordpress.com/439/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cyberpython.wordpress.com/439/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cyberpython.wordpress.com/439/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cyberpython.wordpress.com/439/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cyberpython.wordpress.com/439/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cyberpython.wordpress.com&blog=4406102&post=439&subd=cyberpython&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://cyberpython.wordpress.com/2009/11/03/%ce%b4%ce%b9%ce%bf%cf%81%ce%b8%cf%8e%cf%83%cf%84%ce%b5-%cf%84%ce%bf-%cf%87%cf%81%cf%8e%ce%bc%ce%b1-%cf%84%ce%b7%cf%82-tab-bar-%cf%83%cf%84%ce%bf%ce%bd-chromium/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0595685bf66054babe04b4e57e311e74?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cyberpython</media:title>
		</media:content>
	</item>
		<item>
		<title>Νέα Gtk και Metacity themes</title>
		<link>http://cyberpython.wordpress.com/2009/10/15/%ce%bd%ce%ad%ce%b1-gtk-%ce%ba%ce%b1%ce%b9-metacity-themes/</link>
		<comments>http://cyberpython.wordpress.com/2009/10/15/%ce%bd%ce%ad%ce%b1-gtk-%ce%ba%ce%b1%ce%b9-metacity-themes/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 15:18:15 +0000</pubDate>
		<dc:creator>cyberpython</dc:creator>
				<category><![CDATA[artwork]]></category>
		<category><![CDATA[gnome]]></category>
		<category><![CDATA[gtk theme]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[metacity theme]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://cyberpython.wordpress.com/?p=430</guid>
		<description><![CDATA[Εχθές είχα καλλιτεχνικές ανησυχίες και έτσι έχουμε ένα νέο GTK+ theme:
Clearlooks Bright Gummy:


και ένα νέο Metacity theme με 3 παραλλαγές:
GlossyTop:


       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cyberpython.wordpress.com&blog=4406102&post=430&subd=cyberpython&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Εχθές είχα καλλιτεχνικές ανησυχίες και έτσι έχουμε ένα νέο GTK+ theme:</p>
<p><strong><a href="http://gnome-look.org/content/show.php/Clearlooks+Bright+Gummy?content=113808" target="_blank">Clearlooks Bright Gummy:</a></strong></p>
<p style="text-align:center;"><a href="http://cyberpython.files.wordpress.com/2009/10/screenshot1.png"><img class="aligncenter size-medium wp-image-433" title="Screenshot" src="http://cyberpython.files.wordpress.com/2009/10/screenshot1.png?w=300&#038;h=187" alt="Screenshot" width="300" height="187" /></a><br />
<a href="http://cyberpython.files.wordpress.com/2009/10/screenshot-the-widget-factory.png"><img class="aligncenter size-medium wp-image-432" title="Screenshot-The Widget Factory" src="http://cyberpython.files.wordpress.com/2009/10/screenshot-the-widget-factory.png?w=300&#038;h=211" alt="Screenshot-The Widget Factory" width="300" height="211" /></a></p>
<p style="text-align:left;">και ένα νέο Metacity theme με 3 παραλλαγές:</p>
<p style="text-align:left;"><strong><a href="http://gnome-look.org/content/show.php/GlossyTop?content=113806" target="_blank">GlossyTop:</a></strong></p>
<p style="text-align:left;"><a href="http://cyberpython.files.wordpress.com/2009/10/screenshot-normal.png"><img class="aligncenter size-full wp-image-434" title="Screenshot-normal" src="http://cyberpython.files.wordpress.com/2009/10/screenshot-normal.png?w=486&#038;h=54" alt="Screenshot-normal" width="486" height="54" /></a></p>
<p style="text-align:left;"><a href="http://cyberpython.files.wordpress.com/2009/10/screenshot-focus1.png"><img class="aligncenter size-full wp-image-436" title="Screenshot-focus" src="http://cyberpython.files.wordpress.com/2009/10/screenshot-focus1.png?w=501&#038;h=69" alt="Screenshot-focus" width="501" height="69" /></a></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cyberpython.wordpress.com/430/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cyberpython.wordpress.com/430/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cyberpython.wordpress.com/430/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cyberpython.wordpress.com/430/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cyberpython.wordpress.com/430/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cyberpython.wordpress.com/430/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cyberpython.wordpress.com/430/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cyberpython.wordpress.com/430/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cyberpython.wordpress.com/430/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cyberpython.wordpress.com/430/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cyberpython.wordpress.com&blog=4406102&post=430&subd=cyberpython&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://cyberpython.wordpress.com/2009/10/15/%ce%bd%ce%ad%ce%b1-gtk-%ce%ba%ce%b1%ce%b9-metacity-themes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0595685bf66054babe04b4e57e311e74?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cyberpython</media:title>
		</media:content>

		<media:content url="http://cyberpython.files.wordpress.com/2009/10/screenshot1.png?w=300" medium="image">
			<media:title type="html">Screenshot</media:title>
		</media:content>

		<media:content url="http://cyberpython.files.wordpress.com/2009/10/screenshot-the-widget-factory.png?w=300" medium="image">
			<media:title type="html">Screenshot-The Widget Factory</media:title>
		</media:content>

		<media:content url="http://cyberpython.files.wordpress.com/2009/10/screenshot-normal.png" medium="image">
			<media:title type="html">Screenshot-normal</media:title>
		</media:content>

		<media:content url="http://cyberpython.files.wordpress.com/2009/10/screenshot-focus1.png" medium="image">
			<media:title type="html">Screenshot-focus</media:title>
		</media:content>
	</item>
		<item>
		<title>A simple weather program in Python</title>
		<link>http://cyberpython.wordpress.com/2009/09/27/a-simple-weather-program-in-python/</link>
		<comments>http://cyberpython.wordpress.com/2009/09/27/a-simple-weather-program-in-python/#comments</comments>
		<pubDate>Sun, 27 Sep 2009 20:58:06 +0000</pubDate>
		<dc:creator>cyberpython</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[Προγραμματισμός]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://cyberpython.wordpress.com/?p=421</guid>
		<description><![CDATA[The following program fetches an XML file from http://weather.yahooapis.com and displays the current weather information the file contains.
I wrote this program in order to use it in combination with conky. The result looks like this:


#!/usr/bin/env python3 

import sys
import urllib.request, urllib.error, urllib.parse
import xml.dom.minidom
from xml.dom.minidom import Node 

class YahooWeatherInfo: 

        [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cyberpython.wordpress.com&blog=4406102&post=421&subd=cyberpython&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>The following program fetches an XML file from <a href="http://weather.yahooapis.com" target="_blank">http://weather.yahooapis.com</a> and displays the current weather information the file contains.</p>
<p>I wrote this program in order to use it in combination with conky. The result looks like this:</p>
<p><a href="http://cyberpython.files.wordpress.com/2009/09/screenshot-92.png"><img class="aligncenter size-medium wp-image-422" title="Screenshot-92" src="http://cyberpython.files.wordpress.com/2009/09/screenshot-92.png?w=300&#038;h=187" alt="Screenshot-92" width="300" height="187" /></a><br />
<span id="more-421"></span></p>
<pre><span style="font-family:Lucida, 'Courier New';"><span style="color:#008000;">#!/usr/bin/env python3</span> 

<span style="color:#c00000;">import</span> <span style="color:#000000;">sys</span>
<span style="color:#c00000;">import</span> <span style="color:#000000;">urllib</span><span style="color:#0000c0;">.</span><span style="color:#000000;">request</span><span style="color:#0000c0;">,</span> <span style="color:#000000;">urllib</span><span style="color:#0000c0;">.</span><span style="color:#000000;">error</span><span style="color:#0000c0;">,</span> <span style="color:#000000;">urllib</span><span style="color:#0000c0;">.</span><span style="color:#000000;">parse</span>
<span style="color:#c00000;">import</span> <span style="color:#000000;">xml</span><span style="color:#0000c0;">.</span><span style="color:#000000;">dom</span><span style="color:#0000c0;">.</span><span style="color:#000000;">minidom</span>
<span style="color:#c00000;">from</span> <span style="color:#000000;">xml</span><span style="color:#0000c0;">.</span><span style="color:#000000;">dom</span><span style="color:#0000c0;">.</span><span style="color:#000000;">minidom</span> <span style="color:#c00000;">import</span> <span style="color:#000000;">Node</span> 

<span style="color:#c00000;">class</span> <span style="color:#000000;">YahooWeatherInfo</span><span style="color:#0000c0;">:</span> 

        <span style="color:#c00000;">def</span> <span style="color:#000000;">__init__</span><span style="color:#0000c0;">(</span><span style="color:#000000;">self</span><span style="color:#0000c0;">,</span> <span style="color:#000000;">areaCode</span><span style="color:#0000c0;">,</span> <span style="color:#000000;">units</span><span style="color:#0000c0;">)</span><span style="color:#0000c0;">:</span>
                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">areaCode</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">areaCode</span>
                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">units</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">units</span>
                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">city</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">""</span>
                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">region</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">""</span>
                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">country</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">""</span>
                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">temperatureUnit</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">""</span>
                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">distanceUnit</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">""</span>
                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">pressureUnit</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">""</span>
                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">speedUnit</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">""</span>
                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">temperature</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">""</span>
                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">windDirection</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">""</span>
                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">windSpeed</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">""</span>
                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">humidity</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">""</span>
                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">visibility</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">""</span>
                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">pressure</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">""</span>
                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">sunrise</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">""</span>
                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">sunset</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">""</span>
                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">forecasts</span> <span style="color:#0000c0;">=</span> <span style="color:#0000c0;">[</span><span style="color:#0000c0;">]</span> 

        <span style="color:#c00000;">def</span> <span style="color:#000000;">getWeatherInfo</span><span style="color:#0000c0;">(</span><span style="color:#000000;">self</span><span style="color:#0000c0;">)</span><span style="color:#0000c0;">:</span>
                <span style="color:#c00000;">try</span><span style="color:#0000c0;">:</span>
                        <span style="color:#000000;">url</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">"http://weather.yahooapis.com/forecastrss?p="</span><span style="color:#0000c0;">+</span><span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">areaCode</span><span style="color:#0000c0;">+</span><span style="color:#004080;">"&amp;u="</span><span style="color:#0000c0;">+</span><span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">units</span>
                        <span style="color:#000000;">xml_file</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">urllib</span><span style="color:#0000c0;">.</span><span style="color:#000000;">request</span><span style="color:#0000c0;">.</span><span style="color:#000000;">urlopen</span><span style="color:#0000c0;">(</span><span style="color:#000000;">url</span><span style="color:#0000c0;">)</span>
                        <span style="color:#000000;">doc</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">xml</span><span style="color:#0000c0;">.</span><span style="color:#000000;">dom</span><span style="color:#0000c0;">.</span><span style="color:#000000;">minidom</span><span style="color:#0000c0;">.</span><span style="color:#000000;">parse</span><span style="color:#0000c0;">(</span><span style="color:#000000;">xml_file</span><span style="color:#0000c0;">)</span> 

                        <span style="color:#008000;">#LOCATION:</span>
                        <span style="color:#c00000;">for</span> <span style="color:#000000;">node</span> <span style="color:#c00000;">in</span> <span style="color:#000000;">doc</span><span style="color:#0000c0;">.</span><span style="color:#000000;">getElementsByTagName</span><span style="color:#0000c0;">(</span><span style="color:#004080;">"yweather:location"</span><span style="color:#0000c0;">)</span><span style="color:#0000c0;">:</span>
                                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">city</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">node</span><span style="color:#0000c0;">.</span><span style="color:#000000;">getAttribute</span><span style="color:#0000c0;">(</span><span style="color:#004080;">"city"</span><span style="color:#0000c0;">)</span>
                                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">region</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">node</span><span style="color:#0000c0;">.</span><span style="color:#000000;">getAttribute</span><span style="color:#0000c0;">(</span><span style="color:#004080;">"region"</span><span style="color:#0000c0;">)</span>
                                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">country</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">node</span><span style="color:#0000c0;">.</span><span style="color:#000000;">getAttribute</span><span style="color:#0000c0;">(</span><span style="color:#004080;">"country"</span><span style="color:#0000c0;">)</span>
                        <span style="color:#008000;">#UNITS:</span>
                        <span style="color:#c00000;">for</span> <span style="color:#000000;">node</span> <span style="color:#c00000;">in</span> <span style="color:#000000;">doc</span><span style="color:#0000c0;">.</span><span style="color:#000000;">getElementsByTagName</span><span style="color:#0000c0;">(</span><span style="color:#004080;">"yweather:units"</span><span style="color:#0000c0;">)</span><span style="color:#0000c0;">:</span>
                                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">temperatureUnit</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">node</span><span style="color:#0000c0;">.</span><span style="color:#000000;">getAttribute</span><span style="color:#0000c0;">(</span><span style="color:#004080;">"temperature"</span><span style="color:#0000c0;">)</span>
                                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">distanceUnit</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">node</span><span style="color:#0000c0;">.</span><span style="color:#000000;">getAttribute</span><span style="color:#0000c0;">(</span><span style="color:#004080;">"distance"</span><span style="color:#0000c0;">)</span>
                                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">pressureUnit</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">node</span><span style="color:#0000c0;">.</span><span style="color:#000000;">getAttribute</span><span style="color:#0000c0;">(</span><span style="color:#004080;">"pressure"</span><span style="color:#0000c0;">)</span>
                                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">speedUnit</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">node</span><span style="color:#0000c0;">.</span><span style="color:#000000;">getAttribute</span><span style="color:#0000c0;">(</span><span style="color:#004080;">"speed"</span><span style="color:#0000c0;">)</span>
                        <span style="color:#008000;">#WIND:</span>
                        <span style="color:#c00000;">for</span> <span style="color:#000000;">node</span> <span style="color:#c00000;">in</span> <span style="color:#000000;">doc</span><span style="color:#0000c0;">.</span><span style="color:#000000;">getElementsByTagName</span><span style="color:#0000c0;">(</span><span style="color:#004080;">"yweather:wind"</span><span style="color:#0000c0;">)</span><span style="color:#0000c0;">:</span>
                                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">temperature</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">node</span><span style="color:#0000c0;">.</span><span style="color:#000000;">getAttribute</span><span style="color:#0000c0;">(</span><span style="color:#004080;">"chill"</span><span style="color:#0000c0;">)</span>
                                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">windDirection</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">node</span><span style="color:#0000c0;">.</span><span style="color:#000000;">getAttribute</span><span style="color:#0000c0;">(</span><span style="color:#004080;">"direction"</span><span style="color:#0000c0;">)</span>
                                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">windSpeed</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">node</span><span style="color:#0000c0;">.</span><span style="color:#000000;">getAttribute</span><span style="color:#0000c0;">(</span><span style="color:#004080;">"speed"</span><span style="color:#0000c0;">)</span>
                        <span style="color:#008000;">#ATMOSPHERE:</span>
                        <span style="color:#c00000;">for</span> <span style="color:#000000;">node</span> <span style="color:#c00000;">in</span> <span style="color:#000000;">doc</span><span style="color:#0000c0;">.</span><span style="color:#000000;">getElementsByTagName</span><span style="color:#0000c0;">(</span><span style="color:#004080;">"yweather:atmosphere"</span><span style="color:#0000c0;">)</span><span style="color:#0000c0;">:</span>
                                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">humidity</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">node</span><span style="color:#0000c0;">.</span><span style="color:#000000;">getAttribute</span><span style="color:#0000c0;">(</span><span style="color:#004080;">"humidity"</span><span style="color:#0000c0;">)</span>
                                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">visibility</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">node</span><span style="color:#0000c0;">.</span><span style="color:#000000;">getAttribute</span><span style="color:#0000c0;">(</span><span style="color:#004080;">"visibility"</span><span style="color:#0000c0;">)</span>
                                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">pressure</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">node</span><span style="color:#0000c0;">.</span><span style="color:#000000;">getAttribute</span><span style="color:#0000c0;">(</span><span style="color:#004080;">"pressure"</span><span style="color:#0000c0;">)</span>
                        <span style="color:#008000;">#ASTRONOMY:</span>
                        <span style="color:#c00000;">for</span> <span style="color:#000000;">node</span> <span style="color:#c00000;">in</span> <span style="color:#000000;">doc</span><span style="color:#0000c0;">.</span><span style="color:#000000;">getElementsByTagName</span><span style="color:#0000c0;">(</span><span style="color:#004080;">"yweather:astronomy"</span><span style="color:#0000c0;">)</span><span style="color:#0000c0;">:</span>
                                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">sunrise</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">node</span><span style="color:#0000c0;">.</span><span style="color:#000000;">getAttribute</span><span style="color:#0000c0;">(</span><span style="color:#004080;">"sunrise"</span><span style="color:#0000c0;">)</span>
                                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">sunset</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">node</span><span style="color:#0000c0;">.</span><span style="color:#000000;">getAttribute</span><span style="color:#0000c0;">(</span><span style="color:#004080;">"sunset"</span><span style="color:#0000c0;">)</span>
                        <span style="color:#008000;">#FORECAST (day, date, low, high, description):</span>
                        <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">forecasts</span> <span style="color:#0000c0;">=</span> <span style="color:#0000c0;">[</span><span style="color:#0000c0;">]</span>
                        <span style="color:#c00000;">for</span> <span style="color:#000000;">node</span> <span style="color:#c00000;">in</span> <span style="color:#000000;">doc</span><span style="color:#0000c0;">.</span><span style="color:#000000;">getElementsByTagName</span><span style="color:#0000c0;">(</span><span style="color:#004080;">"yweather:forecast"</span><span style="color:#0000c0;">)</span><span style="color:#0000c0;">:</span>
                                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">forecasts</span><span style="color:#0000c0;">.</span><span style="color:#000000;">append</span><span style="color:#0000c0;">(</span><span style="color:#0000c0;">[</span><span style="color:#000000;">node</span><span style="color:#0000c0;">.</span><span style="color:#000000;">getAttribute</span><span style="color:#0000c0;">(</span><span style="color:#004080;">"day"</span><span style="color:#0000c0;">)</span><span style="color:#0000c0;">,</span> <span style="color:#000000;">node</span><span style="color:#0000c0;">.</span><span style="color:#000000;">getAttribute</span><span style="color:#0000c0;">(</span><span style="color:#004080;">"date"</span><span style="color:#0000c0;">)</span><span style="color:#0000c0;">,</span> <span style="color:#000000;">node</span><span style="color:#0000c0;">.</span><span style="color:#000000;">getAttribute</span><span style="color:#0000c0;">(</span><span style="color:#004080;">"low"</span><span style="color:#0000c0;">)</span><span style="color:#0000c0;">,</span> <span style="color:#000000;">node</span><span style="color:#0000c0;">.</span><span style="color:#000000;">getAttribute</span><span style="color:#0000c0;">(</span><span style="color:#004080;">"high"</span><span style="color:#0000c0;">)</span><span style="color:#0000c0;">,</span> <span style="color:#000000;">node</span><span style="color:#0000c0;">.</span><span style="color:#000000;">getAttribute</span><span style="color:#0000c0;">(</span><span style="color:#004080;">"text"</span><span style="color:#0000c0;">)</span><span style="color:#0000c0;">]</span><span style="color:#0000c0;">)</span> 

                <span style="color:#c00000;">except</span> <span style="color:#0000c0;">:</span>
                        <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">city</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">"-"</span>
                        <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">region</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">"-"</span>
                        <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">country</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">"-"</span>
                        <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">temperatureUnit</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">"-"</span>
                        <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">distanceUnit</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">"-"</span>
                        <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">pressureUnit</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">"-"</span>
                        <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">speedUnit</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">"-"</span>
                        <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">temperature</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">"-"</span>
                        <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">windDirection</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">"-"</span>
                        <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">windSpeed</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">"-"</span>
                        <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">humidity</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">"-"</span>
                        <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">visibility</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">"-"</span>
                        <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">pressure</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">"-"</span>
                        <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">sunrise</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">"-"</span>
                        <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">sunset</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">"-"</span>
                        <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">forecasts</span> <span style="color:#0000c0;">=</span> <span style="color:#0000c0;">[</span><span style="color:#0000c0;">]</span> 

<span style="color:#c00000;">class</span> <span style="color:#000000;">Main</span><span style="color:#0000c0;">:</span> 

        <span style="color:#c00000;">def</span> <span style="color:#000000;">__init__</span><span style="color:#0000c0;">(</span><span style="color:#000000;">self</span><span style="color:#0000c0;">,</span> <span style="color:#000000;">areaCode</span><span style="color:#0000c0;">,</span> <span style="color:#000000;">units</span><span style="color:#0000c0;">)</span><span style="color:#0000c0;">:</span>
                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">wi</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">YahooWeatherInfo</span><span style="color:#0000c0;">(</span><span style="color:#000000;">areaCode</span><span style="color:#0000c0;">,</span> <span style="color:#000000;">units</span><span style="color:#0000c0;">)</span>
                <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">wi</span><span style="color:#0000c0;">.</span><span style="color:#000000;">getWeatherInfo</span><span style="color:#0000c0;">(</span><span style="color:#0000c0;">)</span> 

        <span style="color:#c00000;">def</span> <span style="color:#000000;">getOutput</span><span style="color:#0000c0;">(</span><span style="color:#000000;">self</span><span style="color:#0000c0;">,</span> <span style="color:#000000;">mask</span><span style="color:#0000c0;">)</span><span style="color:#0000c0;">:</span>
                <span style="color:#000000;">m</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">mask</span>
                <span style="color:#000000;">m</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">m</span><span style="color:#0000c0;">.</span><span style="color:#000000;">replace</span><span style="color:#0000c0;">(</span><span style="color:#004080;">'/c'</span><span style="color:#0000c0;">,</span> <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">wi</span><span style="color:#0000c0;">.</span><span style="color:#000000;">city</span><span style="color:#0000c0;">)</span>
                <span style="color:#000000;">m</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">m</span><span style="color:#0000c0;">.</span><span style="color:#000000;">replace</span><span style="color:#0000c0;">(</span><span style="color:#004080;">'/r'</span><span style="color:#0000c0;">,</span> <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">wi</span><span style="color:#0000c0;">.</span><span style="color:#000000;">region</span><span style="color:#0000c0;">)</span>
                <span style="color:#000000;">m</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">m</span><span style="color:#0000c0;">.</span><span style="color:#000000;">replace</span><span style="color:#0000c0;">(</span><span style="color:#004080;">'/o'</span><span style="color:#0000c0;">,</span> <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">wi</span><span style="color:#0000c0;">.</span><span style="color:#000000;">country</span><span style="color:#0000c0;">)</span>
                <span style="color:#000000;">m</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">m</span><span style="color:#0000c0;">.</span><span style="color:#000000;">replace</span><span style="color:#0000c0;">(</span><span style="color:#004080;">'/x'</span><span style="color:#0000c0;">,</span> <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">wi</span><span style="color:#0000c0;">.</span><span style="color:#000000;">temperatureUnit</span><span style="color:#0000c0;">)</span>
                <span style="color:#000000;">m</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">m</span><span style="color:#0000c0;">.</span><span style="color:#000000;">replace</span><span style="color:#0000c0;">(</span><span style="color:#004080;">'/b'</span><span style="color:#0000c0;">,</span> <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">wi</span><span style="color:#0000c0;">.</span><span style="color:#000000;">distanceUnit</span><span style="color:#0000c0;">)</span>
                <span style="color:#000000;">m</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">m</span><span style="color:#0000c0;">.</span><span style="color:#000000;">replace</span><span style="color:#0000c0;">(</span><span style="color:#004080;">'/n'</span><span style="color:#0000c0;">,</span> <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">wi</span><span style="color:#0000c0;">.</span><span style="color:#000000;">pressureUnit</span><span style="color:#0000c0;">)</span>
                <span style="color:#000000;">m</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">m</span><span style="color:#0000c0;">.</span><span style="color:#000000;">replace</span><span style="color:#0000c0;">(</span><span style="color:#004080;">'/m'</span><span style="color:#0000c0;">,</span> <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">wi</span><span style="color:#0000c0;">.</span><span style="color:#000000;">speedUnit</span><span style="color:#0000c0;">)</span>
                <span style="color:#000000;">m</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">m</span><span style="color:#0000c0;">.</span><span style="color:#000000;">replace</span><span style="color:#0000c0;">(</span><span style="color:#004080;">'/t'</span><span style="color:#0000c0;">,</span> <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">wi</span><span style="color:#0000c0;">.</span><span style="color:#000000;">temperature</span><span style="color:#0000c0;">)</span>
                <span style="color:#000000;">m</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">m</span><span style="color:#0000c0;">.</span><span style="color:#000000;">replace</span><span style="color:#0000c0;">(</span><span style="color:#004080;">'/d'</span><span style="color:#0000c0;">,</span> <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">wi</span><span style="color:#0000c0;">.</span><span style="color:#000000;">windDirection</span><span style="color:#0000c0;">)</span>
                <span style="color:#000000;">m</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">m</span><span style="color:#0000c0;">.</span><span style="color:#000000;">replace</span><span style="color:#0000c0;">(</span><span style="color:#004080;">'/s'</span><span style="color:#0000c0;">,</span> <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">wi</span><span style="color:#0000c0;">.</span><span style="color:#000000;">windSpeed</span><span style="color:#0000c0;">)</span>
                <span style="color:#000000;">m</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">m</span><span style="color:#0000c0;">.</span><span style="color:#000000;">replace</span><span style="color:#0000c0;">(</span><span style="color:#004080;">'/h'</span><span style="color:#0000c0;">,</span> <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">wi</span><span style="color:#0000c0;">.</span><span style="color:#000000;">humidity</span><span style="color:#0000c0;">)</span>
                <span style="color:#000000;">m</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">m</span><span style="color:#0000c0;">.</span><span style="color:#000000;">replace</span><span style="color:#0000c0;">(</span><span style="color:#004080;">'/v'</span><span style="color:#0000c0;">,</span> <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">wi</span><span style="color:#0000c0;">.</span><span style="color:#000000;">visibility</span><span style="color:#0000c0;">)</span>
                <span style="color:#000000;">m</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">m</span><span style="color:#0000c0;">.</span><span style="color:#000000;">replace</span><span style="color:#0000c0;">(</span><span style="color:#004080;">'/p'</span><span style="color:#0000c0;">,</span> <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">wi</span><span style="color:#0000c0;">.</span><span style="color:#000000;">pressure</span><span style="color:#0000c0;">)</span>
                <span style="color:#000000;">m</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">m</span><span style="color:#0000c0;">.</span><span style="color:#000000;">replace</span><span style="color:#0000c0;">(</span><span style="color:#004080;">'/a'</span><span style="color:#0000c0;">,</span> <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">wi</span><span style="color:#0000c0;">.</span><span style="color:#000000;">sunrise</span><span style="color:#0000c0;">)</span>
                <span style="color:#000000;">m</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">m</span><span style="color:#0000c0;">.</span><span style="color:#000000;">replace</span><span style="color:#0000c0;">(</span><span style="color:#004080;">'/z'</span><span style="color:#0000c0;">,</span> <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">wi</span><span style="color:#0000c0;">.</span><span style="color:#000000;">sunset</span><span style="color:#0000c0;">)</span>
                <span style="color:#000000;">forecasts</span> <span style="color:#0000c0;">=</span> <span style="color:#004080;">""</span>
                <span style="color:#c00000;">for</span> <span style="color:#000000;">forecast</span> <span style="color:#c00000;">in</span> <span style="color:#000000;">self</span><span style="color:#0000c0;">.</span><span style="color:#000000;">wi</span><span style="color:#0000c0;">.</span><span style="color:#000000;">forecasts</span><span style="color:#0000c0;">:</span>
                        <span style="color:#000000;">forecasts</span> <span style="color:#0000c0;">+=</span> <span style="color:#000000;">forecast</span><span style="color:#0000c0;">[</span><span style="color:#0080c0;">0</span><span style="color:#0000c0;">]</span><span style="color:#0000c0;">+</span><span style="color:#004080;">", "</span><span style="color:#0000c0;">+</span><span style="color:#000000;">forecast</span><span style="color:#0000c0;">[</span><span style="color:#0080c0;">1</span><span style="color:#0000c0;">]</span><span style="color:#0000c0;">+</span><span style="color:#004080;">" - low: "</span><span style="color:#0000c0;">+</span><span style="color:#000000;">forecast</span><span style="color:#0000c0;">[</span><span style="color:#0080c0;">2</span><span style="color:#0000c0;">]</span><span style="color:#0000c0;">+</span><span style="color:#004080;">" - high: "</span><span style="color:#0000c0;">+</span><span style="color:#000000;">forecast</span><span style="color:#0000c0;">[</span><span style="color:#0080c0;">3</span><span style="color:#0000c0;">]</span><span style="color:#0000c0;">+</span><span style="color:#004080;">" - Condition: "</span><span style="color:#0000c0;">+</span><span style="color:#000000;">forecast</span><span style="color:#0000c0;">[</span><span style="color:#0080c0;">4</span><span style="color:#0000c0;">]</span><span style="color:#0000c0;">+</span><span style="color:#004080;">"\n"</span>
                <span style="color:#000000;">m</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">m</span><span style="color:#0000c0;">.</span><span style="color:#000000;">replace</span><span style="color:#0000c0;">(</span><span style="color:#004080;">'/f'</span><span style="color:#0000c0;">,</span> <span style="color:#000000;">forecasts</span><span style="color:#0000c0;">)</span>
                <span style="color:#c00000;">return</span> <span style="color:#000000;">m</span> 

<span style="color:#c00000;">def</span> <span style="color:#000000;">checkRuntimeArguments</span><span style="color:#0000c0;">(</span><span style="color:#0000c0;">)</span><span style="color:#0000c0;">:</span>
        <span style="color:#c00000;">if</span> <span style="color:#000000;">len</span><span style="color:#0000c0;">(</span><span style="color:#000000;">sys</span><span style="color:#0000c0;">.</span><span style="color:#000000;">argv</span><span style="color:#0000c0;">)</span><span style="color:#0000c0;">!=</span><span style="color:#0080c0;">4</span><span style="color:#0000c0;">:</span>
                <span style="color:#c00000;">print</span><span style="color:#0000c0;">(</span><span style="color:#004080;">"Wrong number of parameters.\nUsage is:\n\tweather.py areacode units mask\n\tmask can include:\n\t\t/c:\tcity\n\t\t/r:\tregion\n\t\t/o:\tcountry\n\t\t/x:\ttemperature unit\n\t\t/b:\tdistance unit\n\t\t/n:\tpressure unit\n\t\t/m:\tspeed unit\n\t\t/t:\ttemperature\n\t\t/d:\twind direction\n\t\t/s:\twind speed\n\t\t/h:\thumidity\n\t\t/v:\tvisibility\n\t\t/p:\tpressure\n\t\t/a:\tsunrise\n\t\t/z:\tsunset\n\t\t/f:\t1-day forecast\n\n\texample:\n\t\tweather.py GRXX0004 c \"/c,/o - temp: /t/x, vis: /v, hum: /h, pres: /p/n - sunrise: /a, sunset: /z\"\n\tresult:\n\t\tAthens,GR - temp: 21C, vis: 15, hum: 52, pres: 1021.8mb - sunrise: 7:16 am, sunset: 7:15 pm"</span><span style="color:#0000c0;">)</span>
                <span style="color:#000000;">exit</span><span style="color:#0000c0;">(</span><span style="color:#0080c0;">0</span><span style="color:#0000c0;">)</span> 

<span style="color:#c00000;">def</span> <span style="color:#000000;">checkUnits</span><span style="color:#0000c0;">(</span><span style="color:#000000;">units</span><span style="color:#0000c0;">)</span><span style="color:#0000c0;">:</span>
        <span style="color:#c00000;">if</span><span style="color:#0000c0;">(</span><span style="color:#000000;">units</span> <span style="color:#0000c0;">!=</span> <span style="color:#004080;">"c"</span><span style="color:#0000c0;">)</span><span style="color:#c00000;">and</span><span style="color:#0000c0;">(</span><span style="color:#000000;">units</span><span style="color:#0000c0;">!=</span><span style="color:#004080;">"f"</span><span style="color:#0000c0;">)</span><span style="color:#0000c0;">:</span>
                <span style="color:#c00000;">print</span><span style="color:#0000c0;">(</span><span style="color:#004080;">"Wrong units type!\nPossible values are:\n\t\tc:\tCelsius\n\t\tf:\tFarenheit\n"</span><span style="color:#0000c0;">)</span>
                <span style="color:#c00000;">return</span> <span style="color:#000000;">False</span> 

<span style="color:#000000;">checkRuntimeArguments</span><span style="color:#0000c0;">(</span><span style="color:#0000c0;">)</span> 

<span style="color:#000000;">areaCode</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">sys</span><span style="color:#0000c0;">.</span><span style="color:#000000;">argv</span><span style="color:#0000c0;">[</span><span style="color:#0080c0;">1</span><span style="color:#0000c0;">]</span>
<span style="color:#000000;">units</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">sys</span><span style="color:#0000c0;">.</span><span style="color:#000000;">argv</span><span style="color:#0000c0;">[</span><span style="color:#0080c0;">2</span><span style="color:#0000c0;">]</span>
<span style="color:#000000;">checkUnits</span><span style="color:#0000c0;">(</span><span style="color:#000000;">units</span><span style="color:#0000c0;">)</span>
<span style="color:#000000;">mask</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">sys</span><span style="color:#0000c0;">.</span><span style="color:#000000;">argv</span><span style="color:#0000c0;">[</span><span style="color:#0080c0;">3</span><span style="color:#0000c0;">]</span> 

<span style="color:#000000;">m</span> <span style="color:#0000c0;">=</span> <span style="color:#000000;">Main</span><span style="color:#0000c0;">(</span><span style="color:#000000;">areaCode</span><span style="color:#0000c0;">,</span> <span style="color:#000000;">units</span><span style="color:#0000c0;">)</span>
<span style="color:#c00000;">print</span><span style="color:#0000c0;">(</span><span style="color:#000000;">m</span><span style="color:#0000c0;">.</span><span style="color:#000000;">getOutput</span><span style="color:#0000c0;">(</span><span style="color:#000000;">mask</span><span style="color:#0000c0;">)</span><span style="color:#0000c0;">)</span></span></pre>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cyberpython.wordpress.com/421/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cyberpython.wordpress.com/421/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cyberpython.wordpress.com/421/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cyberpython.wordpress.com/421/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cyberpython.wordpress.com/421/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cyberpython.wordpress.com/421/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cyberpython.wordpress.com/421/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cyberpython.wordpress.com/421/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cyberpython.wordpress.com/421/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cyberpython.wordpress.com/421/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cyberpython.wordpress.com&blog=4406102&post=421&subd=cyberpython&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://cyberpython.wordpress.com/2009/09/27/a-simple-weather-program-in-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0595685bf66054babe04b4e57e311e74?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cyberpython</media:title>
		</media:content>

		<media:content url="http://cyberpython.files.wordpress.com/2009/09/screenshot-92.png?w=300" medium="image">
			<media:title type="html">Screenshot-92</media:title>
		</media:content>
	</item>
		<item>
		<title>Basic HTTP Authentication in Python using API keys</title>
		<link>http://cyberpython.wordpress.com/2009/07/29/basic-http-authentication-in-python-using-api-keys/</link>
		<comments>http://cyberpython.wordpress.com/2009/07/29/basic-http-authentication-in-python-using-api-keys/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 11:02:26 +0000</pubDate>
		<dc:creator>cyberpython</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[Προγραμματισμός]]></category>
		<category><![CDATA[http authentication]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[urllib]]></category>

		<guid isPermaLink="false">http://cyberpython.wordpress.com/?p=419</guid>
		<description><![CDATA[Python&#8217;s standard library provides a great and simple way &#8211; via PasswordMgr and HTTPBasicAuthHandler &#8211; to provide credentials used for basic HTTP authentication, but (at least as far as I know) it can be used only for username-password pairs.
The problem is that sometimes &#8211; for example if you want to retrieve an xml file from [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cyberpython.wordpress.com&blog=4406102&post=419&subd=cyberpython&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Python&#8217;s standard library provides a great and simple way &#8211; via PasswordMgr and HTTPBasicAuthHandler &#8211; to provide credentials used for basic HTTP authentication, but (at least as far as I know) it can be used only for username-password pairs.</p>
<p>The problem is that sometimes &#8211; for example if you want to retrieve an xml file from gnome-look.org &#8211; you want to use an API key for authentication. To achieve that all we have to do is encode the API key with the Base64 algorith and then send it along with our HTTP request included in a basic authentication header (<span style="color:#ff0000;"><em>Note: For some reason the encoded string that I got using Python&#8217;s Base64 implementation included a line break that messed things up, so it might be wise to encode the API key by hand and then insert it to your code</em></span>):</p>
<pre style="color:#000000;background:#ffffff;"><span style="color:#800000;font-weight:bold;">def</span> download_file<span style="color:#808030;">(</span>url<span style="color:#808030;">,</span> API_KEY_BASE_64<span style="color:#808030;">)</span><span style="color:#808030;">:</span>
    req <span style="color:#808030;">=</span> urllib2<span style="color:#808030;">.</span>Request<span style="color:#808030;">(</span>url<span style="color:#808030;">)</span>
    req<span style="color:#808030;">.</span>add_header<span style="color:#808030;">(</span><span style="color:#0000e6;">"Authorization"</span><span style="color:#808030;">,</span> <span style="color:#0000e6;">"Basic "</span><span style="color:#808030;">+</span>API_KEY_BASE_64<span style="color:#808030;">)</span>
    <span style="color:#800000;font-weight:bold;">return</span> urllib2<span style="color:#808030;">.</span>urlopen<span style="color:#808030;">(</span>req<span style="color:#808030;">)</span></pre>
<p>Of course you will have to import urllib2 (urllib in Python3).</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/cyberpython.wordpress.com/419/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/cyberpython.wordpress.com/419/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/cyberpython.wordpress.com/419/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/cyberpython.wordpress.com/419/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/cyberpython.wordpress.com/419/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/cyberpython.wordpress.com/419/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/cyberpython.wordpress.com/419/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/cyberpython.wordpress.com/419/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/cyberpython.wordpress.com/419/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/cyberpython.wordpress.com/419/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=cyberpython.wordpress.com&blog=4406102&post=419&subd=cyberpython&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://cyberpython.wordpress.com/2009/07/29/basic-http-authentication-in-python-using-api-keys/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0595685bf66054babe04b4e57e311e74?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">cyberpython</media:title>
		</media:content>
	</item>
	</channel>
</rss>