<?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/"
	>

<channel>
	<title>noor - نور &#187; linux</title>
	<atom:link href="http://noor.ojuba.org/category/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://noor.ojuba.org</link>
	<description>Kefah Issa weblog - مدونة كفاح عيسى</description>
	<lastBuildDate>Thu, 17 Dec 2009 07:52:24 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>QT for GNOME</title>
		<link>http://noor.ojuba.org/2008/07/qt-for-gnome/</link>
		<comments>http://noor.ojuba.org/2008/07/qt-for-gnome/#comments</comments>
		<pubDate>Tue, 15 Jul 2008 21:23:34 +0000</pubDate>
		<dc:creator>Kefah Issa</dc:creator>
				<category><![CDATA[Fedora 9]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://noor.ojuba.org/?p=18</guid>
		<description><![CDATA[I feel very strongly about the historical opportunity for the GNOME community to switch their tool kit over to QT 4.x. GNOME was originally a fork of effort from KDE back in the old days when QT was not GPL-enabled.

Now it is &#8212; and so for many years &#8212; I can see no reason why [...]]]></description>
			<content:encoded><![CDATA[<p>I feel very strongly about the historical opportunity for the GNOME community to switch their tool kit over to QT 4.x. GNOME was originally a fork of effort from KDE back in the old days when QT was not GPL-enabled.</p>
<p><span id="more-18"></span></p>
<p>Now it is &#8212; and so for many years &#8212; I can see no reason why GNOME can&#8217;t do the switch.</p>
<p>This will be a major effort of course, and there will be two types of opponents in the GNOME community :<br />
A. C-Lovers : Those who like C-language (not C++) as GTK and GNOME in general is more C-Lang than C++.<br />
B. Mono-lovers : Those who are after mono, which is not a very successful imitation for Microsot .NET.</p>
<p>Lets put that a side for a minute and lets give it a hard look, GNOME development has been stalled due to many technology limitation. Even with the latest GUADEC and talk about tab-enabling (which i still think is a joke).</p>
<p>So, despite our love and hate, at the end of the day QT is THE most mature toolkit in the FLOSS world. It deserves all the blessings it can get &#8230; and very well deserves to be considered as an excellent candidate for the GNOME project, especially after what happened with KDE4 and their move into directions that are far from the users and community. The failure in KDE4 was a result of the people who assumed its leader ship in the last two years, and its not in any way related to QT.</p>
]]></content:encoded>
			<wfw:commentRss>http://noor.ojuba.org/2008/07/qt-for-gnome/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The wars are over, let the era of peace and prosperty begin!</title>
		<link>http://noor.ojuba.org/2008/07/the-wars-are-over-let-the-era-of-peace-and-prosperty-begin/</link>
		<comments>http://noor.ojuba.org/2008/07/the-wars-are-over-let-the-era-of-peace-and-prosperty-begin/#comments</comments>
		<pubDate>Sat, 05 Jul 2008 08:50:08 +0000</pubDate>
		<dc:creator>Kefah Issa</dc:creator>
				<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://noor.ojuba.org/?p=13</guid>
		<description><![CDATA[In the computer industry, the pendulum of debate, innovation, and building infrastructure at one end vs building up complete and ready solutions on the other end keeps swinging every 20 years (more or less).
So here it comes, to the rest of the thinkers and planners and to the delight of the builders and engineers; the [...]]]></description>
			<content:encoded><![CDATA[<p>In the computer industry, the pendulum of debate, innovation, and building infrastructure at one end vs building up complete and ready solutions on the other end keeps swinging every 20 years (more or less).</p>
<p>So here it comes, to the rest of the thinkers and planners and to the delight of the builders and engineers; the era of FLOSS</p>
<p><span id="more-13"></span></p>
<p>In this blog, I might sound biased or short-sighted. Its really just an opinion based on my day to day findings. Please don&#8217;t be harsh on me, if you want to comment, take me completely out of the picture and focus on the ideas and let them debate in a professional fashion.</p>
<p><br/></p>
<h2>In the beginning there was the operating system</h2>
<p>In my professional view, GNU/Linux (and  FLOSS) is the clear winner (over MacOs and Windows) &#8230;<br />
<strong>GNU/Linux</strong> is not a prospect, or a great idea any more. its a solid fact on the ground. that is being used millions of people in mission critical systems addressing real life needs, both at home and at work. with an ever increasing adoption rate, the whole <strong>FLOSS era</strong> has certainly passed its childhood as being opted by hopiests and enthusiasts into being used in real life by real people wither individuals or organizations.</p>
<p>In a very ironic and unexpected fashion, Windows Vista is a great failure. It took too long to come up with, and when it came it was a disaster on two important aspects : performance, hence requiring considerably more hardware power to run, and stability. </p>
<p>This very incident is what probably gave GNU/Linux the time to get a head of Windows.<br />
<br/></p>
<h2>On the server-side</h2>
<p>The FLOSS has the lead in adoption and innovation, this wasn&#8217;t the case few years ago.</p>
<p>Java et al has become fully open source; Groovy and Grails is second to none when it comes to agile web-development, Ruby on Rails started the new era of web 2.0 and RAD web development, Php is the people&#8217;s scripting language, Apache is the leading web server, MySQL and PostgreSQL have the full horse power to compete with the big boys and so forth.</p>
<p>The road a head is so clear to the point where there is no need to make any case for FLOSS on the server side. FLOSS offers a wide variety of options covering most of today&#8217;s needs.<br />
No need for me, as a technology consultant, to ever think twice about choosing FLOSS vs Proprietary.</p>
<p>What about <strong>Open Solaris</strong>? That will surely continue to be the big brother covering up for GNU/Linux for even more critical situation. The relation between Open Solaris and GNU/Linux is not a competition, its rather complementary.<br />
<br/></p>
<h2>On the desktop/client-side</h2>
<p>Within GNU/Linux there has been another war, the War of the Desktop Environments (DE) and the war of toolkits &#8230;<br />
On the Desktop Environment side, I believe its time to declare that there has been no winner! <img src='http://noor.ojuba.org/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /><br />
Not KDE nor GNOME.<br />
<strong>KDE</strong> went into a very unpleasant direction with KDE4, its becoming more like the fantasy of its developers as opposed to being practical and usable. With the huge effort and long time (2years plus now) put on those fantasies as opposed to just upgrading its core tool kit from Qt 3.x to Qt 4.x means its not expected that KDE4 steers back to doing just that. KDE 3.x series was the best ever released Desktop  environment on Linux platform.<br />
<strong>GNOME</strong> has caught the infection, actually even before KDE 4 started. With the completely unjustified adoration to Microsoft &#8230; comes the Mono project. Which is &#8211; with all respect to the hard working people who made it happen &#8211; a shame. <strong>Most</strong> of the FLOSS working class who create software <em>have</em> realized that following on the heels of someone else is a never ending story, and will get us no where. FLOSS project leaders need to have independent thinking and a clear vision. Let alone the ugly heaviness of the Mono project and its apps, compared to plain gtk.</p>
<p>For my day to day use, I am relying on <strong>XFCE</strong> is my DE of choice, as it covers all my needs, and does a great job in letting me focus on the apps rather than DE. ( I used to be a die-hard KDE users for the past seven years)</p>
<p>XFCE is so close to becoming a winner and surpassing KDE and GNOME with bounds and leaps, when it comes to simplicity,  and performance.</p>
<p>One important good thing that has been going on for the last few years, is freedesktop.org doing a great job in standardizing the desktop operation regardless of the running environment. All distros have also adopted dbus as their core inter-process communication engine.<br />
Minimizing the importance the importance of KDE or GNOME and maximizing the importance of standardization. This is why XFCE was able to fit so easily.</p>
<p>Back to the basics, XFCE (or the like of a lightweight DE) along with Gtk/Qt only apps seem to be the natural direction. Given the fact that Gtk and Qt app run on the other platforms without much of a hassle. Application developer from the two camps (kde and gnome) need now to steer away from DE and back into being Toolkit centric; or at least offer that option.</p>
<p>Both Qt and Gtk only apps are fast and snappy and don&#8217;t require lots of depdency. Unlike DE Apps, which would require the whole underlying libraries and subsystems of the respective DE.</p>
<p>If I like konqueror why should I live with the kde dinosaur?!</p>
<p>As with the Gtk case, more and more Qt-only apps are showing (e.g. Speedcrunch, Aurora), some KDE apps are also supporting Qt-only mode (kchmviewer).</p>
<p>I tried those types of apps on GNOME or XFCE only environment and they are a breeze to run. No performance overhead, despite the fact they need to load Qt libraries, but this happens only once and doesn&#8217;t eat much memory.</p>
<p>In the debate between Qt and Gtk, and despite all the nice things Gtk offers. Qt is the clear winner.<br />
Qt 4.4 is becoming the jewel of the crown in the FLOSS world, Qt 4.5 is expected to shine even more.</p>
<p>Last but not least, Qt being GPL&#8217;ed on all platforms eliminates the last obstacle of adoption. Remember, this was the very reason why GNOME started off from KDE.</p>
<p>I predict that Qt Apps will have a huge edge, presenting cross-platform open-source alternatives, every overtaking existing big names such as firefox and Openoffice.</p>
<ul>
<li>Web-kit based Web browser</li>
<li>Phonon based player</li>
<li>Office suite that natively supports ODF</li>
<li>Simplified Desktop environment that is xfce-like, that runs on all platforms</li>
<li>&#8230; and so forth</li>
</ul>
<p>The very notion of becoming cross-platform is really important and intriguing; no more do you as an application developer limit your user with their choice of platform. hence giving your app a far wider base of audience.<br />
Look at what OpenOffice and Firefox did. They are almost every where.</p>
<p>Same token applies on embedded systems, wither mobiles, sub-notebooks, modems and routers, media centres and so forth.<br />
<br/></p>
<h2>Conclusion</h2>
<p>The important and strategic point to bear in mind is the peace of mind and durability of the software. All FLOSS software is being built to live far longer than its counter part. No fear of vendor locking or  platform dying out. Being cross platform means both developers and users will feel better.</p>
<p>This year, 2008, FLOSS community has completed laying down the technology foundations for many years to come. The pillars and infrastructure is there, its now the time to reap the advantage and develop even more mature applications.</p>
<p>Investing in learning those technologies is a guaranteed one, and could only mean having the advantage.</p>
<p>That shift of mentality and focus is needed to make the next wave of change.</p>
<p>Does that mean innovation on those areas has reached its limit? no. but it means the pendulum is now shifting to building up applications as the infrastructure and its related thinking process is completed.</p>
<p>The road for the next years is clear for FLOSS to become the leader in the computer software industry. I am very optimistic on where FLOSS stands now and where its heading, having great confident that the best is yet to come.</p>
]]></content:encoded>
			<wfw:commentRss>http://noor.ojuba.org/2008/07/the-wars-are-over-let-the-era-of-peace-and-prosperty-begin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GEdit with Groovy</title>
		<link>http://noor.ojuba.org/2008/06/gedit-with-groovy/</link>
		<comments>http://noor.ojuba.org/2008/06/gedit-with-groovy/#comments</comments>
		<pubDate>Sat, 14 Jun 2008 07:22:26 +0000</pubDate>
		<dc:creator>Kefah Issa</dc:creator>
				<category><![CDATA[Fedora 9]]></category>
		<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovlet]]></category>
		<category><![CDATA[groovy]]></category>

		<guid isPermaLink="false">http://ojuba.org/kefahblog/?p=8</guid>
		<description><![CDATA[Need a cool development setup for Groovy and Grails on Linux?
No I don&#8217;t mean Eclipse nor IntelliJ, and Yes, I&#8217;m smart enough for that I&#8217;m dumping the autocompletion and autoerror detection; at least I know i&#8217;m smarter than the current plugins for those two.  

Searching for a good development setup for my groovy and [...]]]></description>
			<content:encoded><![CDATA[<p>Need a cool development setup for Groovy and Grails on Linux?</p>
<p>No I don&#8217;t mean Eclipse nor IntelliJ, and Yes, I&#8217;m smart enough for that I&#8217;m dumping the autocompletion and autoerror detection; at least I know i&#8217;m smarter than the current plugins for those two. <img src='http://noor.ojuba.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><span id="more-8"></span></p>
<p>Searching for a good development setup for my groovy and grails projects, i tried IntelliJ and Eclipse along with their groovy and grails plugins. I wasn&#8217;t impressed, more so because they fail to properly understand things and give you errors where there are none.</p>
<p>So, I eneded up using GEdit which is a very nice piece of software. I whished Geany had groovy syntax highlight support, but it doesn&#8217;t, further more, Geany doesn&#8217;t do a good job when dealing with Arabic text inside the code; while GEdit has a fairly good support for arabic.</p>
<p>GEdit doesn&#8217;t come with groovy support out of the box, after a short search I found this article :<br />
http://www.sudovi.com/blog/show/teach_gedit_grails<br />
That worked for me.</p>
<p>Here is how it looks like :</p>
<p><a href="http://ojuba.org/kefahblog/wp-content/uploads/2008/06/grails-app-gedit1.png"><img class="alignnone size-medium wp-image-10" title="Grails development on GEdit" src="http://ojuba.org/kefahblog/wp-content/uploads/2008/06/grails-app-gedit1-300x264.png" alt="Grails and GEdit" width="300" height="264" /></a><br />
I then compiled all the steps needed to enable groovy on gedit in one handy bashscript file for Fedora 9:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">&nbsp;
<span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">&gt;</span> groovy-gsp-mime.xml <span style="color: #cc0000; font-style: italic;">&lt;&lt; EOF
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;mime-info xmlns=&quot;http://www.freedesktop.org/standards/shared-mime-info&quot;&gt;
&nbsp;
	&lt;mime-type type=&quot;text/x-groovy&quot;&gt;
		&lt;sub-class-of type=&quot;text/x-java&quot;/&gt;
		&lt;comment&gt;Groovy Source File&lt;/comment&gt;
		&lt;glob pattern=&quot;*.groovy&quot;/&gt;
	&lt;/mime-type&gt;
&nbsp;
	&lt;mime-type type=&quot;text/x-gsp&quot;&gt;
		&lt;sub-class-of type=&quot;text/html&quot;/&gt;
		&lt;comment&gt;Grails GSP File&lt;/comment&gt;
		&lt;glob pattern=&quot;*.gsp&quot;/&gt;
	&lt;/mime-type&gt;
&nbsp;
&lt;/mime-info&gt;
EOF</span>
&nbsp;
<span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">&gt;</span> groovy.lang <span style="color: #cc0000; font-style: italic;">&lt;&lt; EOF
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;language id=&quot;groovy&quot; _name=&quot;Groovy&quot; version=&quot;2.0&quot; _section=&quot;Sources&quot;&gt;
  &lt;metadata&gt;
    &lt;property name=&quot;mimetypes&quot;&gt;text/x-groovy&lt;/property&gt;
    &lt;property name=&quot;globs&quot;&gt;*.groovy&lt;/property&gt;
    &lt;property name=&quot;line-comment-start&quot;&gt;//&lt;/property&gt;
    &lt;property name=&quot;block-comment-start&quot;&gt;/*&lt;/property&gt;
    &lt;property name=&quot;block-comment-end&quot;&gt;*/&lt;/property&gt;
  &lt;/metadata&gt;
&nbsp;
  &lt;styles&gt;
    &lt;style id=&quot;comment&quot; _name=&quot;Comment&quot; map-to=&quot;def:comment&quot;/&gt;
    &lt;style id=&quot;error&quot; _name=&quot;Error&quot; map-to=&quot;def:error&quot;/&gt;
    &lt;style id=&quot;string&quot; _name=&quot;String&quot; map-to=&quot;def:string&quot;/&gt;
    &lt;style id=&quot;external&quot; _name=&quot;External&quot; map-to=&quot;def:preprocessor&quot;/&gt;
    &lt;style id=&quot;declaration&quot; _name=&quot;Declaration&quot; map-to=&quot;def:type&quot;/&gt;
    &lt;style id=&quot;storage-class&quot; _name=&quot;Storage Class&quot; map-to=&quot;def:type&quot;/&gt;
    &lt;style id=&quot;scope-declaration&quot; _name=&quot;Scope Declaration&quot; map-to=&quot;def:type&quot;/&gt;
    &lt;style id=&quot;keyword&quot; _name=&quot;Keyword&quot; map-to=&quot;def:keyword&quot;/&gt;
    &lt;style id=&quot;null-value&quot; _name=&quot;Null Value&quot; map-to=&quot;def:special-constant&quot;/&gt;
    &lt;style id=&quot;boolean&quot; _name=&quot;Boolean value&quot; map-to=&quot;def:boolean&quot;/&gt;
    &lt;style id=&quot;number&quot; _name=&quot;Number&quot; map-to=&quot;def:decimal&quot;/&gt;
    &lt;style id=&quot;reserved&quot; _name=&quot;Future Reserved Keywords&quot; map-to=&quot;def:error&quot;/&gt;
    &lt;style id=&quot;type&quot; _name=&quot;Data Type&quot; map-to=&quot;def:type&quot;/&gt;
  &lt;/styles&gt;
&nbsp;
  &lt;definitions&gt;
&nbsp;
    &lt;context id=&quot;string&quot; style-ref=&quot;string&quot; end-at-line-end=&quot;true&quot;&gt;
      &lt;start&gt;&quot;&lt;/start&gt;
      &lt;end&gt;&quot;&lt;/end&gt;
    &lt;/context&gt;
&nbsp;
    &lt;context id=&quot;string-2&quot; style-ref=&quot;string&quot; end-at-line-end=&quot;true&quot;&gt;
      &lt;start&gt;'&lt;/start&gt;
      &lt;end&gt;'&lt;/end&gt;
    &lt;/context&gt;
&nbsp;
    &lt;context id=&quot;line-comment&quot; style-ref=&quot;comment&quot; end-at-line-end=&quot;true&quot;&gt;
      &lt;start&gt;//&lt;/start&gt;
      &lt;include&gt;
        &lt;context ref=&quot;def:in-line-comment&quot;/&gt;
      &lt;/include&gt;
    &lt;/context&gt;
&nbsp;
    &lt;context id=&quot;block-comment&quot; style-ref=&quot;comment&quot;&gt;
      &lt;start&gt;/*&lt;/start&gt;
      &lt;end&gt;*/&lt;/end&gt;
      &lt;include&gt;
        &lt;context ref=&quot;def:in-comment&quot;/&gt;
      &lt;/include&gt;
    &lt;/context&gt;
&nbsp;
    &lt;context id=&quot;close-comment-outside-comment&quot; style-ref=&quot;error&quot;&gt;
      &lt;match&gt;*/(?!*)&lt;/match&gt;
    &lt;/context&gt;
&nbsp;
    &lt;context id=&quot;externals&quot; style-ref=&quot;external&quot;&gt;
      &lt;keyword&gt;import&lt;/keyword&gt;
      &lt;keyword&gt;package&lt;/keyword&gt;
    &lt;/context&gt;
&nbsp;
    &lt;context id=&quot;declarations&quot; style-ref=&quot;declaration&quot;&gt;
      &lt;keyword&gt;class&lt;/keyword&gt;
      &lt;keyword&gt;enum&lt;/keyword&gt;
      &lt;keyword&gt;extends&lt;/keyword&gt;
      &lt;keyword&gt;implements&lt;/keyword&gt;
      &lt;keyword&gt;instanceof&lt;/keyword&gt;
      &lt;keyword&gt;interface&lt;/keyword&gt;
      &lt;keyword&gt;native&lt;/keyword&gt;
      &lt;keyword&gt;throws&lt;/keyword&gt;
    &lt;/context&gt;
&nbsp;
    &lt;context id=&quot;primitive-types&quot; style-ref=&quot;type&quot;&gt;
      &lt;keyword&gt;boolean&lt;/keyword&gt;
      &lt;keyword&gt;byte&lt;/keyword&gt;
      &lt;keyword&gt;char&lt;/keyword&gt;
      &lt;keyword&gt;def&lt;/keyword&gt;
      &lt;keyword&gt;double&lt;/keyword&gt;
      &lt;keyword&gt;float&lt;/keyword&gt;
      &lt;keyword&gt;int&lt;/keyword&gt;
      &lt;keyword&gt;long&lt;/keyword&gt;
      &lt;keyword&gt;short&lt;/keyword&gt;
      &lt;keyword&gt;void&lt;/keyword&gt;
    &lt;/context&gt;
&nbsp;
    &lt;context id=&quot;storage-class&quot; style-ref=&quot;storage-class&quot;&gt;
      &lt;keyword&gt;abstract&lt;/keyword&gt;
      &lt;keyword&gt;final&lt;/keyword&gt;
      &lt;keyword&gt;static&lt;/keyword&gt;
      &lt;keyword&gt;strictfp&lt;/keyword&gt;
      &lt;keyword&gt;synchronized&lt;/keyword&gt;
      &lt;keyword&gt;transient&lt;/keyword&gt;
      &lt;keyword&gt;volatile&lt;/keyword&gt;
    &lt;/context&gt;
&nbsp;
    &lt;context id=&quot;scope-declarations&quot; style-ref=&quot;scope-declaration&quot;&gt;
      &lt;keyword&gt;private&lt;/keyword&gt;
      &lt;keyword&gt;protected&lt;/keyword&gt;
      &lt;keyword&gt;public&lt;/keyword&gt;
    &lt;/context&gt;
&nbsp;
    &lt;context id=&quot;flow&quot; style-ref=&quot;keyword&quot;&gt;
      &lt;keyword&gt;assert&lt;/keyword&gt;
      &lt;keyword&gt;break&lt;/keyword&gt;
      &lt;keyword&gt;case&lt;/keyword&gt;
      &lt;keyword&gt;catch&lt;/keyword&gt;
      &lt;keyword&gt;continue&lt;/keyword&gt;
      &lt;keyword&gt;default&lt;/keyword&gt;
      &lt;keyword&gt;do&lt;/keyword&gt;
      &lt;keyword&gt;each&lt;/keyword&gt;
      &lt;keyword&gt;else&lt;/keyword&gt;
      &lt;keyword&gt;finally&lt;/keyword&gt;
      &lt;keyword&gt;for&lt;/keyword&gt;
      &lt;keyword&gt;if&lt;/keyword&gt;
      &lt;keyword&gt;render&lt;/keyword&gt;
      &lt;keyword&gt;return&lt;/keyword&gt;
      &lt;keyword&gt;throw&lt;/keyword&gt;
      &lt;keyword&gt;switch&lt;/keyword&gt;
      &lt;keyword&gt;try&lt;/keyword&gt;
      &lt;keyword&gt;while&lt;/keyword&gt;
      &lt;keyword&gt;with&lt;/keyword&gt;
    &lt;/context&gt;
&nbsp;
    &lt;context id=&quot;memory&quot; style-ref=&quot;keyword&quot;&gt;
      &lt;keyword&gt;new&lt;/keyword&gt;
      &lt;keyword&gt;super&lt;/keyword&gt;
      &lt;keyword&gt;this&lt;/keyword&gt;
    &lt;/context&gt;
&nbsp;
    &lt;context id=&quot;future-reserved-words&quot; style-ref=&quot;reserved&quot;&gt;
      &lt;keyword&gt;const&lt;/keyword&gt;
      &lt;keyword&gt;goto&lt;/keyword&gt;
    &lt;/context&gt;
&nbsp;
    &lt;context id=&quot;null-value&quot; style-ref=&quot;null-value&quot;&gt;
      &lt;keyword&gt;null&lt;/keyword&gt;
    &lt;/context&gt;
&nbsp;
    &lt;context id=&quot;boolean&quot; style-ref=&quot;boolean&quot;&gt;
      &lt;keyword&gt;false&lt;/keyword&gt;
      &lt;keyword&gt;true&lt;/keyword&gt;
    &lt;/context&gt;
&nbsp;
    &lt;context id=&quot;numeric&quot; style-ref=&quot;number&quot;&gt;
      &lt;match extended=&quot;true&quot;&gt;
        (b([0-9]+|0[xX][0-9a-fA-F]+)[Ll]?b|
         b(([0-9]+[Ee][-]?[0-9]+|
            ([0-9]*.[0-9]+|[0-9]+.)([Ee][-]?[0-9]+)?)[fFdD]?|
            [0-9]+[FfDd]))
      &lt;/match&gt;
    &lt;/context&gt;
&nbsp;
    &lt;context id=&quot;groovy&quot;&gt;
      &lt;include&gt;
        &lt;context ref=&quot;string&quot;/&gt;
        &lt;context ref=&quot;string-2&quot;/&gt;
        &lt;context ref=&quot;line-comment&quot;/&gt;
        &lt;context ref=&quot;block-comment&quot;/&gt;
        &lt;context ref=&quot;close-comment-outside-comment&quot;/&gt;
        &lt;context ref=&quot;externals&quot;/&gt;
        &lt;context ref=&quot;declarations&quot;/&gt;
        &lt;context ref=&quot;primitive-types&quot;/&gt;
        &lt;context ref=&quot;storage-class&quot;/&gt;
        &lt;context ref=&quot;scope-declarations&quot;/&gt;
        &lt;context ref=&quot;flow&quot;/&gt;
        &lt;context ref=&quot;memory&quot;/&gt;
        &lt;context ref=&quot;future-reserved-words&quot;/&gt;
        &lt;context ref=&quot;null-value&quot;/&gt;
        &lt;context ref=&quot;boolean&quot;/&gt;
        &lt;context ref=&quot;numeric&quot;/&gt;
      &lt;/include&gt;
    &lt;/context&gt;
&nbsp;
  &lt;/definitions&gt;
&lt;/language&gt;
EOF</span>
&nbsp;
<span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">&gt;</span> gsp.lang <span style="color: #cc0000; font-style: italic;">&lt;&lt; EOF
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;language id=&quot;gsp&quot; _name=&quot;GSP&quot; version=&quot;2.0&quot; _section=&quot;Markup&quot;&gt;
    &lt;metadata&gt;
      &lt;property name=&quot;mimetypes&quot;&gt;text/x-gsp&lt;/property&gt;
      &lt;property name=&quot;globs&quot;&gt;*.gsp&lt;/property&gt;
      &lt;property name=&quot;block-comment-start&quot;&gt;&amp;lt;!--&lt;/property&gt;
      &lt;property name=&quot;block-comment-end&quot;&gt;--&amp;gt;&lt;/property&gt;
    &lt;/metadata&gt;
&nbsp;
    &lt;styles&gt;
        &lt;style id=&quot;comment&quot; _name=&quot;Comment&quot; map-to=&quot;xml:comment&quot;/&gt;
        &lt;style id=&quot;tag&quot; _name=&quot;Tag&quot; map-to=&quot;xml:element-name&quot;/&gt;
        &lt;style id=&quot;attrib-name&quot; _name=&quot;Attribute Name&quot; map-to=&quot;xml:attribute-name&quot;/&gt;
        &lt;style id=&quot;attrib-value&quot; _name=&quot;Attribute Value&quot; map-to=&quot;xml:attribute-value&quot;/&gt;
        &lt;style id=&quot;dtd&quot; _name=&quot;DTD&quot; map-to=&quot;xml:doctype&quot;/&gt;
        &lt;style id=&quot;error&quot; _name=&quot;Error&quot; map-to=&quot;xml:error&quot;/&gt;
    &lt;/styles&gt;
&nbsp;
    &lt;default-regex-options case-sensitive=&quot;false&quot;/&gt;
&nbsp;
    &lt;definitions&gt;
        &lt;!-- Html comments are more permissive than xml comments --&gt;
        &lt;context id=&quot;comment&quot; style-ref=&quot;comment&quot;&gt;
            &lt;start&gt;&amp;lt;!--&lt;/start&gt;
            &lt;end&gt;--s*&amp;gt;&lt;/end&gt;
            &lt;include&gt;
                &lt;context ref=&quot;def:in-comment&quot;/&gt;
            &lt;/include&gt;
        &lt;/context&gt;
&nbsp;
        &lt;context id=&quot;dtd&quot; style-ref=&quot;dtd&quot;&gt;
            &lt;start&gt;&amp;lt;!&lt;/start&gt;
            &lt;end&gt;&amp;gt;&lt;/end&gt;
        &lt;/context&gt;
&nbsp;
        &lt;!-- This is a placeholder context intended to be &lt;replace&gt;d
             in languages like php that need to embedd contexts inside
             html tags and attributes.
        --&gt;
        &lt;context id=&quot;embedded-lang-hook&quot;&gt;
            &lt;start&gt;%{def:never-match}&lt;/start&gt;
            &lt;end&gt;&lt;/end&gt;
        &lt;/context&gt;
&nbsp;
        &lt;context id=&quot;generic-tag&quot;&gt;
            &lt;include&gt;
&nbsp;
                &lt;!-- Attribute in the form: name=&quot;value&quot; --&gt;
                &lt;context id=&quot;attrib-quoted&quot; style-ref=&quot;attrib-name&quot;&gt;
                    &lt;start extended=&quot;true&quot;&gt;
                        [A-Za-z0-9:_-]+ # attribute name
                        s*=s*         # &quot;=&quot;
                        (&quot;)            # string beginning
                    &lt;/start&gt;
                    &lt;end&gt;&quot;&lt;/end&gt;
                    &lt;include&gt;
                        &lt;context sub-pattern=&quot;1&quot; where=&quot;start&quot; style-ref=&quot;attrib-value&quot;/&gt;
                        &lt;context sub-pattern=&quot;0&quot; where=&quot;end&quot; style-ref=&quot;attrib-value&quot;/&gt;
                        &lt;context id=&quot;string&quot; extend-parent=&quot;false&quot; end-at-line-end=&quot;true&quot; style-ref=&quot;attrib-value&quot;&gt;
                            &lt;start&gt;%{def:always-match}&lt;/start&gt;
                            &lt;include&gt;
                                &lt;context ref=&quot;xml:entity&quot;/&gt;
                                &lt;context ref=&quot;xml:character-reference&quot;/&gt;
                                &lt;context ref=&quot;embedded-lang-hook&quot;/&gt;
                            &lt;/include&gt;
                        &lt;/context&gt;
                    &lt;/include&gt;
                &lt;/context&gt;
&nbsp;
                &lt;!-- Attribute in the form: name=value --&gt;
                &lt;context id=&quot;attrib-unquoted&quot; style-ref=&quot;attrib-value&quot;&gt;
                    &lt;start extended=&quot;true&quot;&gt;
                        [a-z0-9:_-]+ # attribute name
                        s*=s*      # &quot;=&quot;
                    &lt;/start&gt;
                    &lt;end&gt;(?=&amp;gt;|s)&lt;/end&gt;
                    &lt;include&gt;
                        &lt;context sub-pattern=&quot;0&quot; where=&quot;start&quot; style-ref=&quot;attrib-name&quot;/&gt;
                        &lt;context ref=&quot;xml:entity&quot;/&gt;
                        &lt;context ref=&quot;xml:character-reference&quot;/&gt;
                    &lt;/include&gt;
                &lt;/context&gt;
&nbsp;
                &lt;!-- Attribute in the form: name --&gt;
                &lt;context id=&quot;attrib-no-value&quot; style-ref=&quot;attrib-name&quot;&gt;
                    &lt;match extended=&quot;true&quot;&gt;
                        [a-z0-9:_-]+  # attribute name
                    &lt;/match&gt;
                &lt;/context&gt;
&nbsp;
                &lt;context ref=&quot;embedded-lang-hook&quot;/&gt;
&nbsp;
            &lt;/include&gt;
        &lt;/context&gt;
&nbsp;
        &lt;context id=&quot;script&quot;&gt;
            &lt;start&gt;&amp;lt;s*script%]&lt;/start&gt;
            &lt;end&gt;&amp;lt;s*/s*scripts*&amp;gt;&lt;/end&gt;
&nbsp;
            &lt;include&gt;
                &lt;context sub-pattern=&quot;0&quot; where=&quot;start&quot; style-ref=&quot;tag&quot;/&gt;
                &lt;context sub-pattern=&quot;0&quot; where=&quot;end&quot; style-ref=&quot;tag&quot;/&gt;
                &lt;context ref=&quot;generic-tag&quot;/&gt;
                &lt;context id=&quot;js-code&quot; extend-parent=&quot;false&quot;&gt;
                    &lt;start&gt;&amp;gt;&lt;/start&gt;
                    &lt;include&gt;
                        &lt;context sub-pattern=&quot;0&quot; where=&quot;start&quot; style-ref=&quot;tag&quot;/&gt;
                        &lt;context ref=&quot;js:js&quot;/&gt;
                    &lt;/include&gt;
                &lt;/context&gt;
            &lt;/include&gt;
        &lt;/context&gt;
&nbsp;
        &lt;context id=&quot;tag&quot;&gt;
            &lt;start&gt;&amp;lt;s*/?s*[a-z0-9_-]+&lt;/start&gt;
            &lt;end&gt;/?s*&amp;gt;&lt;/end&gt;
            &lt;include&gt;
                &lt;context sub-pattern=&quot;0&quot; where=&quot;start&quot; style-ref=&quot;tag&quot;/&gt;
                &lt;context sub-pattern=&quot;0&quot; where=&quot;end&quot; style-ref=&quot;tag&quot;/&gt;
                &lt;context ref=&quot;generic-tag&quot;/&gt;
            &lt;/include&gt;
        &lt;/context&gt;
&nbsp;
	&lt;context id=&quot;gtag&quot;&gt;
		&lt;start&gt;&amp;lt;g:s*/?s*[a-z0-9_-]+&lt;/start&gt;
                &lt;end&gt;/?s*&amp;gt;&lt;/end&gt;
            	&lt;include&gt;
                	&lt;context sub-pattern=&quot;0&quot; where=&quot;start&quot; style-ref=&quot;tag&quot;/&gt;
                	&lt;context sub-pattern=&quot;0&quot; where=&quot;end&quot; style-ref=&quot;tag&quot;/&gt;
                	&lt;context ref=&quot;generic-tag&quot;/&gt;
		&lt;/include&gt;
	&lt;/context&gt;
&nbsp;
        &lt;context id=&quot;gsp&quot;&gt;
            &lt;include&gt;
                &lt;context ref=&quot;xml:doctype&quot;/&gt;
                &lt;context ref=&quot;xml:entity&quot;/&gt;
                &lt;context ref=&quot;xml:character-reference&quot;/&gt;
                &lt;context ref=&quot;xml:cdata&quot;/&gt;
                &lt;context ref=&quot;comment&quot;/&gt;
                &lt;context ref=&quot;dtd&quot;/&gt;
                &lt;context ref=&quot;script&quot;/&gt;
                &lt;context ref=&quot;tag&quot;/&gt;
                &lt;context ref=&quot;gtag&quot;/&gt;
            &lt;/include&gt;
        &lt;/context&gt;
&nbsp;
    &lt;/definitions&gt;
&lt;/language&gt;
&nbsp;
EOF</span>
&nbsp;
&nbsp;
<span style="color: #666666; font-style: italic;"># Copy the mime</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">cp</span> groovy-gsp-mime.xml <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>mime<span style="color: #000000; font-weight: bold;">/</span>packages<span style="color: #000000; font-weight: bold;">/</span>groovy.xml
&nbsp;
<span style="color: #666666; font-style: italic;"># Copy the language spec's</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">cp</span> groovy.lang gsp.lang <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>gtksourceview-<span style="color: #000000;">2.0</span><span style="color: #000000; font-weight: bold;">/</span>language-specs<span style="color: #000000; font-weight: bold;">/</span>
&nbsp;
<span style="color: #c20cb9; font-weight: bold;">sudo</span> update-mime-database <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>mime
&nbsp;
<span style="color: #666666; font-style: italic;"># Create an empty groovy file</span>
<span style="color: #c20cb9; font-weight: bold;">touch</span> foo.groovy
&nbsp;
<span style="color: #666666; font-style: italic;"># Check if the mime is properly defined</span>
gnomevfs-info foo.groovy</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://noor.ojuba.org/2008/06/gedit-with-groovy/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
