<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6878515242136045523</id><updated>2012-02-22T23:50:03.235+02:00</updated><category term='install'/><category term='suggestion'/><category term='path'/><category term='documentation'/><category term='3d'/><category term='gnome-3'/><category term='bug'/><category term='C'/><category term='development'/><category term='robot'/><category term='technique'/><category term='10.10'/><category term='jpg'/><category term='upgrade'/><category term='library'/><category term='motivation'/><category term='whirl and pinch'/><category term='firefox'/><category term='StructureGraphic'/><category term='git'/><category term='sports'/><category term='video'/><category term='repair'/><category term='developer'/><category term='gradient'/><category term='NAN'/><category term='grayscale'/><category term='2.6.9'/><category term='gif'/><category term='i18n'/><category term='visualize'/><category term='technical'/><category term='script-fu'/><category term='algorithm'/><category term='2.7'/><category term='compile'/><category term='gui'/><category term='user'/><category term='pdf'/><category term='misc'/><category term='beta'/><category term='dither'/><category term='ui'/><category term='gsoc-2011'/><category term='report'/><category term='text'/><category term='desktop'/><category term='build'/><category term='color'/><category term='selection'/><category term='optimization'/><category term='seamless-clone'/><category term='release'/><category term='project'/><category term='equation'/><category term='error'/><category term='xlib'/><category term='open-source'/><category term='cage-transform'/><category term='bugfix'/><category term='window-manager'/><category term='ngtk'/><category term='gsoc'/><category term='angular'/><category term='secure programming'/><category term='gnome-shell'/><category term='GIMP Tutorials'/><category term='blender'/><category term='my'/><category term='graph'/><category term='export'/><category term='demo'/><category term='general'/><category term='png'/><category term='user-interface'/><category term='gnome'/><category term='gsoc-2010'/><category term='plugin'/><category term='bicycle'/><category term='vala'/><category term='layers'/><category term='official'/><category term='hebrew'/><category term='raytracing'/><category term='script'/><category term='draw'/><category term='gimp'/><category term='windows'/><category term='programming language'/><category term='file'/><category term='vector'/><category term='usability'/><category term='update'/><category term='Maverick'/><category term='dithering'/><category term='recovery'/><category term='math'/><category term='operation'/><category term='guide'/><category term='drawing'/><category term='round'/><category term='personal'/><category term='gegl'/><category term='translation'/><category term='tool'/><category term='10.04'/><category term='photography'/><category term='programming'/><category term='tutorial'/><category term='devhelp'/><category term='multithreading'/><category term='customize'/><category term='gtk'/><category term='multicore'/><category term='single-window'/><category term='size'/><category term='meeting'/><category term='website'/><category term='blog'/><category term='cross-platform'/><category term='tip'/><category term='poly2tri'/><category term='student'/><category term='2.6.10'/><category term='antivirus'/><category term='running'/><category term='multi-color'/><category term='unix'/><category term='Linux'/><category term='indexed'/><category term='gcc'/><category term='Ubuntu'/><category term='stroke'/><category term='Maverick Meerkat'/><category term='bezier'/><category term='data'/><category term='gtk-doc'/><category term='university'/><category term='adaptive-clone'/><category term='problem'/><title type='text'>LightningIsMyName's Website</title><subtitle type='html'>My thoughts about GIMP, digital art and coding</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>58</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-2092978154383703881</id><published>2012-02-10T23:29:00.000+02:00</published><updated>2012-02-11T18:49:52.402+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='university'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='seamless-clone'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc-2011'/><title type='text'>Post-GSoC work, End(?) of University</title><content type='html'>I have done the seamless cloning project for GIMP and finished it in August. So, you may ask, why on earth is it not integrated yet? The answer is short and simple - last university semester combined with real life. But, I'm not here to bring excuses, I'm here to bring results:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;On Thursday I had my last university exam (Computational Complexity). Unless I fail, and I hope I don't, &lt;strong&gt;I finished university!&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;In the last two weeks of university, I had more and more free time so I began working again on my GSoC project. The current things that are waiting to happen are:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Fix the triangulation refinement implementation. For those who are not familiar with the algorithm behind the scene, the algorithm itself is based on interpolation of image differences in a triangular mesh. Therfor, it is a critical part.&lt;br /&gt;The algorithm currently would get stuck in an infinite loop of refining the triangulation, even though it was gauranteed to stop (meaning an implementation bug). &lt;strong&gt;I think I just fixed it now&lt;/strong&gt; (now as in 5 minutes ago), more on this below.&lt;/li&gt;&lt;li&gt;Make the algorithm iterate over tiles inside of allocating a big chunk of memory, and thus limiting the maximal image size for the algorithm.&lt;/li&gt;&lt;li&gt;Fix memory leaks (there are several known leaks, and hopefully none unknown).&lt;/li&gt;&lt;li&gt;Improve a small glitch on the borders of the image.&lt;/li&gt;&lt;li&gt;Optimize the speed!&lt;/li&gt;&lt;li&gt;Get it reviewed, and merge back to master.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Being free of university, and free from other work (I have a day work on which I don't work "after-hours"), I'm now free from chores on evenings (if I get home at sane hours) and weekends. &lt;em&gt;For the first time in the last 3.5 years, I really have free time with nothing on my mind&lt;/em&gt;. So don't worry, I'll get into GIMP :D&lt;/li&gt;&lt;/ul&gt;Now, before I get into details on my GSoC bug, a short "what's going on?".&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Last time I left the geometry library, I was completly stuck with no idea what was the bug.&lt;/li&gt;&lt;li&gt;When I got to it again, I decided to re-write it in a language which is more type-safe (no pointer bugs), with less memory issues (garbage collection), and much easier to debug (no offense, but gdb isn't always ideal). Eventually I chose C# (and not Java, my favorite language) in order to learn a bit.&lt;/li&gt;&lt;li&gt;I have been spending my free time between the exams, in the last two weekends, to re-write the library. The re-write was something like "look at the code and write it in a different language". Almost no structural changes or anything, so that I'll keep synced with the source.&lt;/li&gt;&lt;li&gt;And then I found the bug...&lt;/li&gt;&lt;/ul&gt;Now for the bug, which made me like C much less than I did before:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;// Relevant type declarations:&lt;br /&gt;typedef enum&lt;br /&gt;{&lt;br /&gt;  INCIRCLE_ON,&lt;br /&gt;  INCIRCLE_INSIDE,&lt;br /&gt;  INCIRCLE_OUTSIDE&lt;br /&gt;} P2tRInCircle;&lt;br /&gt;&lt;br /&gt;// Types from GLib&lt;br /&gt;typedef int  gint;&lt;br /&gt;typedef gint gboolean;&lt;br /&gt;&lt;br /&gt;// The function I called&lt;br /&gt;P2tRInCircle p2tr_math_incircle (P2tRPoint* a,&lt;br /&gt;                                 P2tRPoint* b,&lt;br /&gt;                                 P2tRPoint* c,&lt;br /&gt;                                 P2tRPoint* d);&lt;br /&gt;&lt;br /&gt;// Somewhere in the code, in the function that I knew that&lt;br /&gt;// was deeply related to the problem:&lt;br /&gt;&lt;strong&gt;gboolean&lt;/strong&gt; inside = p2tr_math_incircle (p, a, q, b);&lt;br /&gt;&lt;br /&gt;if (inside)&lt;br /&gt;  {&lt;br /&gt;    ...&lt;br /&gt;  }&lt;/pre&gt;&lt;br /&gt;I don't even feel like explaining this. It is so trivial (and if not, go learn C!)&amp;nbsp;Other than feeling &lt;strike&gt;stupid &lt;/strike&gt;silly for falling on such a bug for days of debugging, I don't have anything else I can say... So, with all the dislike of some people to high level languages, I like type safety. It saved my here simply since this code, when converted directly to C#, didn't compile and produce an error instead! &lt;br /&gt;&lt;br /&gt;So, Hurray for C#, Hurray for end of University (hopefully) at least untill second degree, and just some other random hapiness. And don't worry, I'm not gone yet :)&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Edit:&lt;/em&gt; More silly bugs found. I'm starting to like re-writing stuff - way better than debugging...&lt;br /&gt;&lt;em&gt;Edit 2 (February 11th, 2012):&lt;/em&gt; The geometry library works, at least in C#. Now it's time to re-implement in C.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-2092978154383703881?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/2092978154383703881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2012/02/post-gsoc-work-end-of-university.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/2092978154383703881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/2092978154383703881'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2012/02/post-gsoc-work-end-of-university.html' title='Post-GSoC work, End(?) of University'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-1606582853699494525</id><published>2011-10-23T01:06:00.003+02:00</published><updated>2011-10-23T01:06:59.540+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='bug'/><category scheme='http://www.blogger.com/atom/ns#' term='bicycle'/><category scheme='http://www.blogger.com/atom/ns#' term='ngtk'/><title type='text'>Quick Update - NGtk</title><content type='html'>To those of you who have read &lt;a href="http://lightningismyname.blogspot.com/2011/10/teaser-project-ngtk-native-gui-toolkit.html"&gt;my previous blog post regarding NGtk&lt;/a&gt;, here is a quick status update:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;NGtk works&lt;/strong&gt;. Tested the XLib and NCurses backends on several linux distributions, and tested the WinApi backend on many versions of windows. I have a calculator app working with keyboard and mouse support.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Keyboard focus is crappy, in all backends&lt;/strong&gt;. Currently, I just tell all the widgets to listen to keyboard events. This is not something that is hard to fix - an hour or two.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;In backends with custom drawings&lt;/strong&gt; (XLib, NCurses), the &lt;strong&gt;widget state isn't considered when drawing&lt;/strong&gt; (so the widget looks the same all the time (if it's visible)). Not a bug, but could use some fixing. Base code for fixing that is already there.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Clicking on disabled Widgets in the WinApi backend causes the mouse event to pass to the parent container&lt;/strong&gt; (instead of being sent to /dev/null). Does anyone actually care about this? Can this do any harm? Anyway, the nice guys at Stackoverflow suggested a solution that should be easy to implement (but it's not top priority at the moment).&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Removing widgets from their container isn't tested well enough&lt;/strong&gt;. That's not a bug, but I simply can't gaurantee good behaviour&lt;/li&gt;&lt;/ul&gt;Also, here are some good things:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It works!&lt;/li&gt;&lt;li&gt;It doesn't crash&lt;/li&gt;&lt;li&gt;It doesn't leak memory (take that Gtk+!)&lt;/li&gt;&lt;li&gt;Valgrind is generally happy&lt;/li&gt;&lt;li&gt;Did I mention that it works? :P&lt;/li&gt;&lt;/ul&gt;I handed in NGtk to my proffessor, which means I'm now on my own with this project. Expect release 1.0 soon (my submission was titled 0.99). For those who want to take a look at the API usage already, you can take a look at the tester program: &lt;a href="http://code.google.com/p/ngtk/source/browse/ngtk-c/src-test/main.c?spec=svn3740702900a489c527a860a1608bd5b08361b5eb"&gt;main.c&lt;/a&gt;&amp;nbsp;(forgive me for the ugly macro in line 204, there is already a way around it in the code on my computer).&lt;br /&gt;&lt;br /&gt;It is useable already (you can get the link to the project homepage from the main.c link), but I deeply recommend waiting for me to solve the above technical issues.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;By the way, I did 40 km of bicycling in the city last friday (October 14th) in the &lt;/em&gt;&lt;a href="http://www.shvoong.co.il/minisites/sovevTLV/"&gt;&lt;em&gt;Sovev Tel-Aviv&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&amp;nbsp;event.&amp;nbsp;It's the first time I participate, and I really enjoyed. Riding the bicycle on the busiest highways in the country and then along the sea shore together with other hundreds of people,&amp;nbsp;is a great experience. So, if you can participate next year, I highly recommend that you do so ;)&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-1606582853699494525?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/1606582853699494525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2011/10/quick-update-ngtk.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/1606582853699494525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/1606582853699494525'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2011/10/quick-update-ngtk.html' title='Quick Update - NGtk'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-6459007824707396016</id><published>2011-10-12T21:48:00.000+02:00</published><updated>2011-10-12T21:48:38.565+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='cross-platform'/><category scheme='http://www.blogger.com/atom/ns#' term='library'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='xlib'/><category scheme='http://www.blogger.com/atom/ns#' term='gui'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><category scheme='http://www.blogger.com/atom/ns#' term='ngtk'/><category scheme='http://www.blogger.com/atom/ns#' term='user-interface'/><title type='text'>Teaser: Project NGtk - Native Gui ToolKit</title><content type='html'>Recently, I wasn't exactly active in GIMP and other projects. The main reason for that is an &lt;u&gt;&lt;i&gt;open-source&lt;/i&gt;&lt;/u&gt; university project I am doing as part of my studies, in the course Advanced Topics in Operating Systems. I believe pictures can demonstrate better than words, so take a look:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-3sQIn-0Ccw4/TpXlTY9auwI/AAAAAAAAAiw/Mrn3sA1Yu7M/s1600/NGtkBanner.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="321" src="http://3.bp.blogspot.com/-3sQIn-0Ccw4/TpXlTY9auwI/AAAAAAAAAiw/Mrn3sA1Yu7M/s400/NGtkBanner.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Click on the image to view it in fullsize&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Project NGtk is an extremly light-weight library for creating GUI's on different platforms. It includes the following features/concepts:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Has support for the following widgets and events:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Button&lt;/b&gt; (stable)&lt;/li&gt;&lt;li&gt;&lt;b&gt;Labels&lt;/b&gt; (stable)&lt;/li&gt;&lt;li&gt;&lt;b&gt;Text-Entries&lt;/b&gt; (stable on 2 of 3 platforms)&lt;/li&gt;&lt;li&gt;&lt;b&gt;Windows&lt;/b&gt; (stable)&lt;/li&gt;&lt;li&gt;&lt;b&gt;Mouse up/down/click events&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Keyboard key type events&lt;/b&gt;, with translation from key code to ascii &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Works on the following platforms:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Windows&lt;/b&gt; - Uses native Windows widgets via the windows API.&lt;br /&gt;For this backend, the only dependancy is the windows libraries which already ship with Windows.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Unix/Linux &lt;u&gt;Terminal&lt;/u&gt;&lt;/b&gt; - Any terminal which NCurses works on (which should be most modern terminals). This means you can also use this via SSH without X11-forwarding! Unlike many curses applications, NGtk includes full support for mouse cursor in the terminal.&lt;br /&gt;For this backend, the only dependancy is NCurses, which is shipped with most (if not all) modern linux distributions. NCurses supports a large variety of terminals.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Xlib&lt;/b&gt; - Any operating system which has an Xlib (X11) client library. This means graphical Linux/Unix work environments.&lt;br /&gt;The only dependancy for this backend is an Xlib implementation, which is shipped with all modern graphical Linux/Unix environments.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Gtk+ wrapper&lt;/b&gt; - Support planned for near future. This will practically be a simple API wrapper to give API consistent with other NGtk backends.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;30 KB for the core library + 30 KB for each "adapter"&lt;/b&gt; (backend library). Just for comparision, Gtk+-3 is approximatly 4 MB (130 times bigger), not including it's dependancies.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Written in C&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Object-Oriented structure&lt;/b&gt; - NGtk uses a very small C object system that was written as part of this project to make it easy to rogram, and without requiring C++. The object system is easy to learn and well documented.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Display &lt;/b&gt;&lt;b&gt;"Resolution" Independant&lt;/b&gt; - Forget the term pixel, as it doesn't exist in NGtk. Since NGtk is meant for a wide amount of platforms, such as the terminal (where a the smallest unit, a "pixel", can actually be a whole letter), NGtk will handle sizing of widgets itself. You can specify logic layouts, but no need to actually specify a size for widgets. There is a built-in interface for accepting custom made layouts (anything from grids, relative sizings, etc.), and writing new layouts is easy.&lt;/li&gt;&lt;/ul&gt;As you can see, NGtk doesn't have any real dependancy - the only dependancy it has is the existance of the graphical system that you wish to use. It is also &lt;i&gt;not a replacement for Gtk+/Qt/etc.&lt;/i&gt; - it's targetted only at people who want &lt;i&gt;very light-weight GUIs&lt;/i&gt; (both in features and in actual library disk size), and want to acheive &lt;i&gt;maximal support&lt;/i&gt;. The NGtk goal is to achieve a state where every platform with a compiler will have an NGtk backend that will work on it without requiring any library which isn't already on the platform.&lt;br /&gt;&lt;br /&gt;The first stable release of NGtk will happen this week when I hand in the project to my university. You can already find the project source by googling it, but I do recommend waiting for the official stable release.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Regarding my GSoC project: no I haven't forgotten. It won't make it in time for 2.8, but I will work on it as soon as I can hand in NGtk to my proffessor. Sorry to disappoint the people who wanted to see it soon, but it just won't happen...&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-6459007824707396016?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/6459007824707396016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2011/10/teaser-project-ngtk-native-gui-toolkit.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/6459007824707396016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/6459007824707396016'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2011/10/teaser-project-ngtk-native-gui-toolkit.html' title='Teaser: Project NGtk - Native Gui ToolKit'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-3sQIn-0Ccw4/TpXlTY9auwI/AAAAAAAAAiw/Mrn3sA1Yu7M/s72-c/NGtkBanner.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-2338763077054923988</id><published>2011-09-24T21:19:00.000+03:00</published><updated>2011-09-24T21:19:11.434+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='window-manager'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='desktop'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome-shell'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome-3'/><category scheme='http://www.blogger.com/atom/ns#' term='customize'/><title type='text'>Saving Vertical space in GNOME 3 (Especially for Firefox)</title><content type='html'>I have been using GNOME 3 for more than a week now. I really like it, and after tweaking my desktop back to show the files and launchers (like in GNOME 2) I really felt at home.&lt;br /&gt;&lt;br /&gt;However, not everything is great with GNOME 3. One of the most irritating features of it, is the gigantic titlebar of windows. I actually like gigantic titlebars, but not when I need to maximize my working area. The web is full of people complaining "Why Firefox on Linux can't be space efficient as it is on Windows 7?" This is even more critical when in the fallback mode, you have two very thick panels that also take additional vertical space (I switch between fallback and regular all the time because of some hardware limitations).&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-vfkKQ0Rr8fA/Tn4X0dTAjLI/AAAAAAAAAig/4Y1kjIpu1hA/s1600/CompactsGood.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="161" src="http://3.bp.blogspot.com/-vfkKQ0Rr8fA/Tn4X0dTAjLI/AAAAAAAAAig/4Y1kjIpu1hA/s640/CompactsGood.png" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Comparision between Firefox titlebar on Windows 7 and GNOME 3 (&lt;a href="https://lh4.googleusercontent.com/-vfkKQ0Rr8fA/Tn4X0dTAjLI/AAAAAAAAAig/4Y1kjIpu1hA/CompactsGood.png"&gt;fullsize&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-xGBkNx16fuk/Tn4W6qJVAlI/AAAAAAAAAiQ/bECc_0Z7_cY/s1600/CompactsGood.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&amp;nbsp;As you can see, the Windows 7 setup takes much less space, by combining the titlebar with the tab area. Very neat!&lt;br /&gt;&lt;br /&gt;Anyway, I'm here to say that you can make Firefox on Linux thinner. I'm not talking about fullscreen mode in firefox - since I do like seeing my tabs and toolbars (Which firefox hides in fulscreen mode).&lt;br /&gt;&lt;br /&gt;In Linux, windows are displayed and managed using a special program called a &lt;i&gt;Window Manager&lt;/i&gt;. We are going to request the window manager to display Firefox in full-screen. This is different from firefox's built-in full-screen mode! In the full-screen mode created by the window manager, Firefox will continue to show it's tabs and toolbars like before, but it's titlebar will be gone and it will fill the area that was used by the gnome panels!&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Open the &lt;i&gt;System Settings&lt;/i&gt; dialog (in fallback mode, it's in &lt;i&gt;Applications → System Tools&lt;/i&gt;) and Choose &lt;i&gt;Keyboard&lt;/i&gt;. (&lt;a href="https://lh4.googleusercontent.com/-pyFHGJZFlJM/Tn4UGpV7III/AAAAAAAAAiI/pmd6cVJIbcs/s800/SystemSettings_Keyboard.png"&gt;Screenshot&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;Switch to the &lt;i&gt;Shortcuts&lt;/i&gt; tab and choose &lt;i&gt;Windows&lt;/i&gt; from the options on the side. (&lt;a href="https://lh3.googleusercontent.com/-w3C_nlae7og/Tn4UGLWEv7I/AAAAAAAAAiE/iVvZZHB9XYA/s800/Keyboard_Window_Fullscreen.png"&gt;Screenshot&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;Find the &lt;i&gt;Toggle fullscreen mode&lt;/i&gt; option, and assign a new keyboard shortcut which is easy to remember (I used &lt;i&gt;Ctrl+Alt+F&lt;/i&gt;). To assign a new shortcut, click on the area which displays the shortcut (it displays &lt;i&gt;Disabled&lt;/i&gt; if no shortcut is set) and type the desired key combination.&lt;/li&gt;&lt;/ol&gt;Now, whenever you open Firefox (or any other program that needs more vertical space, without sacrificing any toolbars that disappear in the built-in fullscreen mode of that program) simply type the shortcut from above to go fullscreen! Type again to get out of the full-screen mode.&lt;br /&gt;You are going to miss the close/un-maximize/minimize buttons in fullscreen mode. However, you can probably live without them (or if you like keyboard shortcuts, configure some for these also!) when working in fullscreen.&lt;br /&gt;&lt;br /&gt;That's it, I hope it helps those of you who need to use more height of their screen and don't like the built-in fullscreen modes (if any) of their programs. If anyone knows any better way (especially for Firefox on GNOME 3), please leave a comment :) &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-2338763077054923988?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/2338763077054923988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2011/09/saving-vertical-space-in-gnome-3.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/2338763077054923988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/2338763077054923988'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2011/09/saving-vertical-space-in-gnome-3.html' title='Saving Vertical space in GNOME 3 (Especially for Firefox)'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-vfkKQ0Rr8fA/Tn4X0dTAjLI/AAAAAAAAAig/4Y1kjIpu1hA/s72-c/CompactsGood.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-5064485184387981475</id><published>2011-09-05T22:51:00.001+03:00</published><updated>2011-09-05T22:51:26.564+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='demo'/><category scheme='http://www.blogger.com/atom/ns#' term='seamless-clone'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc-2011'/><title type='text'>Video demo of my GSoC project</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/pqVMt-ReaDc/0.jpg"&gt;&lt;param name="movie" value="http://www.youtube.com/v/pqVMt-ReaDc?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/pqVMt-ReaDc?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;[If you are reading this from RSS, you may not be able to see the video. Click &lt;a href="http://www.youtube.com/watch?v=pqVMt-ReaDc"&gt;here&lt;/a&gt;&amp;nbsp;to see it]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-5064485184387981475?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/5064485184387981475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2011/09/video-demo-of-my-gsoc-project.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/5064485184387981475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/5064485184387981475'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2011/09/video-demo-of-my-gsoc-project.html' title='Video demo of my GSoC project'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-7124504336040228025</id><published>2011-08-29T01:06:00.000+03:00</published><updated>2011-08-29T09:52:13.048+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='developer'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='adaptive-clone'/><category scheme='http://www.blogger.com/atom/ns#' term='poly2tri'/><category scheme='http://www.blogger.com/atom/ns#' term='seamless-clone'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc-2011'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><title type='text'>[GSoC-2011] Final Results and How to Try</title><content type='html'>I am very glad to announce that I now officially passed the Google-Summer-of-Code 2011 :) The email from Google arrived in the last few days, and the official Google announcements on the GSoC results (of all projects) are supposed to be published tomorrow.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Y2oyuYC__vo/Tlq20qNXwXI/AAAAAAAAAhw/FpgnMAs-NOY/s1600/Example2_Merge.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="219" src="http://3.bp.blogspot.com/-Y2oyuYC__vo/Tlq20qNXwXI/AAAAAAAAAhw/FpgnMAs-NOY/s320/Example2_Merge.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;S/He is&amp;nbsp;eyeing&amp;nbsp;you :)&lt;br /&gt;Sources: &lt;a href="http://commons.wikimedia.org/wiki/File:KF.JPG"&gt;background&lt;/a&gt;, &lt;a href="http://commons.wikimedia.org/wiki/File:OjoAzul.jpg"&gt;paste&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Now, it’s time to publish the instructions on how to get and try it for the people who want to test it. There are some known bugs, and probably some unknown bugs, so be warned.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Compilation and Set-Up Instructions&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;You should know how to build of GIMP and GEGL from Git. A partially outdated guide is available &lt;a href="http://lightningismyname.blogspot.com/p/compiling-gimp.html"&gt;here&lt;/a&gt;, and some things are explained in more depth &lt;a href="http://wiki.gimp.org/index.php/Hacking:Building"&gt;here&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Instead of building the GEGL master (main) branch, switch to the &lt;code&gt;soc-2011-seamless-clone&lt;/code&gt; branch. You can do this by running &lt;code&gt;git checkout soc-2011-seamless-clone&lt;/code&gt;. Compile it with the regular flags – nothing special is needed.&lt;/li&gt;&lt;li&gt;After building the updated version of GEGL, it’s time to build the updated version of GIMP. Switch to the &lt;code&gt;soc-2011-seamless-clone2&lt;/code&gt; branch, and build it.&lt;/li&gt;&lt;li&gt;Before running GIMP, you must set the environment variable &lt;code&gt;p2t_refine_steps&lt;/code&gt; to some number defining the maximal amount of points to be used in the mesh (in plain English, more should theoretically produce better result). I know this is annoying, I will get rid of it as soon as I finish debugging a certain code part. The typical number I use is 500 for pastes of around 200x200 pixels, and you should probably increase it if you wish to work on large pastes.If you are using the bash terminal, do &lt;code&gt;export p2t_refine_steps=500&lt;/code&gt; (and change the number as you wish)&lt;/li&gt;&lt;li&gt;Run GIMP.&lt;/li&gt;&lt;/ol&gt;&lt;b&gt;Usage Instructions&lt;/b&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Basically, you can just try copying a part, selecting the Seamless Clone tool (Shift+L) and clicking anywhere on the image to start the tool’s interaction. Click Enter to apply the final result. &lt;i&gt;If this doesn’t work (and/or crash), then the instructions below are for you&lt;/i&gt;.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Run Gimp :)&lt;/li&gt;&lt;li&gt;Open the image that you wish to use as the background, and open the image you wish to paste into the background.Copy the part you want to paste. Note that opacity of that part will be treated as if it was binary – parts under 50% opacity will be removed, parts of more than 50% opacity will be completely opaque. The shape can be any shape, as long as it follows the following rules:&lt;/li&gt;&lt;ol&gt;&lt;li&gt;It must not have holes (Temporary limitation)&lt;/li&gt;&lt;li&gt;It must be continuous, i.e. composed of only one part (Temporary(?) limitation)&lt;/li&gt;&lt;li&gt;It must not have any long thin areas (Temporary(!) limitation).&lt;br /&gt;This means that if you have any area which is 1 pixel wide and is 3 pixels long or more (i.e. a thin spike), it will crash. Solution for this was already devised, I just need to code it.Select the Seamless-Clone Tool (Either by clicking the second tool on the toolbox that has the same icon as the move tool, or by doing Shift+L).&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Click anywhere on the canvas while the background layer is active. The paste will be centered on the cursor, and so the cursor should be in a place where the entire paste is inside the background boundaries (both inside the rectangle defining the layer, and inside an area where all the background below it is opaque). This limitation will be enforced by the User Interface later.&lt;/li&gt;&lt;li&gt;Move the paste by clicking on it, dragging and releasing. If you move it slow enough (which actually shouldn’t be so slow), you’ll see the preview updating while you are moving.&lt;/li&gt;&lt;li&gt;Click Enter to Apply the effect.&lt;/li&gt;&lt;/ol&gt;&lt;b&gt;Known Bugs&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;All the above mentioned crashes and bugs :)&lt;/li&gt;&lt;li&gt;Due to not yet complete memory management, the tool leaks memory from it’s preprocessing.&lt;/li&gt;&lt;li&gt;Converting to tile-based processing is NOT 100% done, so it may crash on large pastes. Don’t ask me how large since I didn’t try anything more than 300x300 on my machine.&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Other TODO’s&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Integrate the tool with the help system&lt;/li&gt;&lt;li&gt;Test better the interaction when the the active image/display/drawable are switched during the interaction of the tool.&lt;/li&gt;&lt;li&gt;Get a decent tool icon. &lt;b&gt;Anyone with ideas for the visual metaphor to be used by a seamless paste tool, is more than welcome to leave them here as comments!&lt;/b&gt; I do design icons, but I don’t have an idea for this one.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-7124504336040228025?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/7124504336040228025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2011/08/gsoc-2011-final-results-and-how-to-try.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/7124504336040228025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/7124504336040228025'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2011/08/gsoc-2011-final-results-and-how-to-try.html' title='[GSoC-2011] Final Results and How to Try'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-Y2oyuYC__vo/Tlq20qNXwXI/AAAAAAAAAhw/FpgnMAs-NOY/s72-c/Example2_Merge.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-4497189506149565168</id><published>2011-08-15T14:50:00.009+03:00</published><updated>2011-08-15T22:33:19.191+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='developer'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='adaptive-clone'/><category scheme='http://www.blogger.com/atom/ns#' term='poly2tri'/><category scheme='http://www.blogger.com/atom/ns#' term='seamless-clone'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc-2011'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><title type='text'>GSoC 2011 - (Almost) Final results and thanks!</title><content type='html'>The end of Google Summer of Code 2011 is near, and I have failed to post enough updates on my blog. But that does not mean one bit that I failed to make progress. I'm proud to present you with my results:&lt;br /&gt;﻿﻿﻿﻿&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-kNDG8fcp6Co/TkkDBXbPNlI/AAAAAAAAAWA/--_j3leZhSg/s1600/SeamlessCloneGimp.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="111" src="http://3.bp.blogspot.com/-kNDG8fcp6Co/TkkDBXbPNlI/AAAAAAAAAWA/--_j3leZhSg/s200/SeamlessCloneGimp.png" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Result, using &lt;strong&gt;&lt;u&gt;my&lt;/u&gt;&lt;/strong&gt; GIMP tool :D&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-w0CrVyjnYUY/TkkDS18RR9I/AAAAAAAAAWE/tpurwUBeH74/s1600/SeamlessClonePaste.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="150" src="http://1.bp.blogspot.com/-w0CrVyjnYUY/TkkDS18RR9I/AAAAAAAAAWE/tpurwUBeH74/s200/SeamlessClonePaste.png" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;The&amp;nbsp;image to paste (&lt;a href="http://commons.wikimedia.org/wiki/File:Ursus_maritimus_Polar_bear_with_cub_2.jpg"&gt;source&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-becup90lJAk/TkkDUcbZZWI/AAAAAAAAAWI/EoKBWOMdW64/s1600/SeamlessCloneBg.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="150" src="http://3.bp.blogspot.com/-becup90lJAk/TkkDUcbZZWI/AAAAAAAAAWI/EoKBWOMdW64/s200/SeamlessCloneBg.png" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;The image to paste into (&lt;a href="http://commons.wikimedia.org/wiki/File:Adrar_sands.JPG"&gt;source&lt;/a&gt;)&lt;br /&gt;Licensed under &lt;a class="extiw" href="http://en.wikipedia.org/wiki/en:Creative_Commons" title="w:en:Creative Commons"&gt;&lt;span style="color: #3366bb;"&gt;Creative Commons&lt;/span&gt;&lt;/a&gt; Attribution-Share Alike &lt;a class="external text" href="http://creativecommons.org/licenses/by-sa/3.0/deed.en" rel="nofollow"&gt;&lt;span style="color: #3366bb;"&gt;3.0 Unported&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;My tool allows you to move the paste on the image and see it update according to it's environment, so that it will paste seamlessly. It's not real-time yet, since I recompute some&amp;nbsp;values that should be cached everytime, but most work to enable caching is done, and I hope to reach that before the final deadline. (Even if it won't be before the deadline, I will do it even after GSoC ends).&lt;br /&gt;&lt;br /&gt;This is also the time to thanks all the people who made this possible:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The authors of the &lt;a href="http://www.cs.huji.ac.il/~danix/mvclone/"&gt;Coordinates for Seamless Cloning article&lt;/a&gt;, who developed this algorithm.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cs.tau.ac.il/~dcor/"&gt;Prof. &lt;strong&gt;Daniel Cohen-Or&lt;/strong&gt;&lt;/a&gt;,&amp;nbsp;the professor who taught me&amp;nbsp;computer graphics at the university, and helped me understanding the article (he is also one of the article authors).&lt;/li&gt;&lt;li&gt;My GSoC mentor, &lt;strong&gt;Michael Natterer&lt;/strong&gt; (aka mitch), who agreed to mentor me and assisted me when I was stuck.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Mason Green&lt;/strong&gt;, the original author of the &lt;a href="http://code.google.com/p/poly2tri/"&gt;poly2tri&lt;/a&gt; library, which was heavily used in the project for computing interpolation meshes. I would have never reached the project deadline without his amazing library.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cs.berkeley.edu/~jrs/"&gt;Prof. &lt;strong&gt;Jonathan Richard Shewchuk&lt;/strong&gt;&lt;/a&gt;, who developed&amp;nbsp;some of the&amp;nbsp;geometrical algorithms that were used in this project.&lt;/li&gt;&lt;li&gt;Finally, &lt;strong&gt;special thanks to all the great guys on the GIMP and GEGL irc&lt;/strong&gt; who helped a lot - mitch, Bat`O, pippin, Alexia_Death, Mikachu, and more.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-4497189506149565168?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/4497189506149565168/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2011/08/gsoc-2011-almost-final-results-and.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/4497189506149565168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/4497189506149565168'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2011/08/gsoc-2011-almost-final-results-and.html' title='GSoC 2011 - (Almost) Final results and thanks!'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-kNDG8fcp6Co/TkkDBXbPNlI/AAAAAAAAAWA/--_j3leZhSg/s72-c/SeamlessCloneGimp.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-3136727451363305056</id><published>2011-08-07T03:37:00.005+03:00</published><updated>2011-08-07T12:22:02.450+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='developer'/><category scheme='http://www.blogger.com/atom/ns#' term='install'/><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='gtk-doc'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='documentation'/><category scheme='http://www.blogger.com/atom/ns#' term='devhelp'/><category scheme='http://www.blogger.com/atom/ns#' term='beta'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>Open Devhelp books installed in unusual locations</title><content type='html'>If you are a GNOME developer, there are high chances you encountered this problem - you install your beta versions to a seperate prefix (something like &lt;code&gt;/opt/my-beta&lt;/code&gt; instead of the regular &lt;code&gt;/usr&lt;/code&gt;), and then when you come to browse their documentation in Devhelp, it fails to find them. Some will be tempted to sudo, and then symlink the documentation to &lt;code&gt;/usr/share/gtk-doc&lt;/code&gt;. Personally, I'm not a fan of sudo-ing and messing around...&lt;br /&gt;&lt;br /&gt;Today I had enough of this, and decided I'm going to solve this. A quick search in the Devhelp source code found the code that searches for books. The &lt;code&gt;&lt;a href="http://git.gnome.org/browse/devhelp/tree/src/dh-book-manager.c?id=5cae21f96bcb4b3f6fde45c250bb886786abd042#n294"&gt;book_manager_add_books_in_data_dir ()&lt;/a&gt;&lt;/code&gt; function searches &lt;code&gt;SOME_PREFIX/gtk-doc/html&lt;/code&gt; for Devhelp books, and it's called from &lt;code&gt;&lt;a href="http://git.gnome.org/browse/devhelp/tree/src/dh-book-manager.c?id=5cae21f96bcb4b3f6fde45c250bb886786abd042#n309"&gt;dh_book_manager_populate ()&lt;/a&gt;&lt;/code&gt; with the directories returned by &lt;code&gt;&lt;a href="http://developer.gnome.org/glib/2.28/glib-Miscellaneous-Utility-Functions.html#g-get-user-data-dir"&gt;g_get_user_data_dir ()&lt;/a&gt;&lt;/code&gt; and by &lt;code&gt;&lt;a href="http://developer.gnome.org/glib/2.28/glib-Miscellaneous-Utility-Functions.html#g-get-system-data-dirs"&gt;g_get_system_data_dirs ()&lt;/a&gt;&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Thanks to some help from Mikachu (from #gimp irc), which matched the much longer description on the &lt;a href="http://standards.freedesktop.org/basedir-spec/latest/"&gt;freedesktop basedir-specs&lt;/a&gt;, I found out that appending a directory to the environment variable &lt;code&gt;$XDG_DATA_DIRS&lt;/code&gt; is enough to make Devhelp search for documentation there.&lt;br /&gt;&lt;br /&gt;Sweet! That was much easier than I thought it would be :D&lt;br /&gt;&lt;br /&gt;So to summarize, this is what you do:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Compile your program, while setting the installation prefix to some prefix &lt;code&gt;$PREFIX&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Build and install it (make and make install)&lt;/li&gt;&lt;li&gt;Find your installed gtk-doc documentation. Usually it is located on &lt;code&gt;$PREFIX/share/gtk-doc/html/YOUR_PROGRAM&lt;/code&gt;. Make sure that directory contains a file with the suffix of &lt;code&gt;.devhelp&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;Set the &lt;code&gt;$XDG_DATA_DIRS&lt;/code&gt; environment variables, and &lt;b&gt;&lt;u&gt;pre&lt;/u&gt;pend&lt;/b&gt;&amp;nbsp;(don't append!) that directory (usually&amp;nbsp;&lt;code&gt;$PREFIX/share&lt;/code&gt;) to that variable. In bash syntax, you should type&lt;br /&gt;&lt;code&gt;export XDG_DATA_DIRS=$PREFIX/share/:$XDG_DATA_DIRS&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Why prepend and not append? Well, apparently Devhelp doesn't seem to like having two books with the same title, so it takes the first one it finds... Since it follows the directories in that environment variables by their order, it means that we should add our directory to the begining of the search path.&lt;br /&gt;&lt;br /&gt;Note that&amp;nbsp;this method has 2 cons:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;You can't view previous versions of the documentation, since as I said Devhelp takes only the first version it finds&lt;/li&gt;&lt;li&gt;You must launch Devhelp with the above environment variable set. So either lunch it from your build console, or create a script to modify the variable and then lunch Devhelp. Note that IDEs that launch Devhelp (like anjuta, and gedit with plugins) must have the variable set for themselves (by launching them with the variable set already).&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;So, it's not perfect. But way better that symlinking stuff into the &lt;code&gt;/usr/share/gtk-doc&lt;/code&gt; directory.&amp;nbsp;This also shows why open source is so good - "If you don't like it, fix it!". Or as I prefer to say "If you don't like it, hack it" :D&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-3136727451363305056?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/3136727451363305056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2011/08/open-devhelp-books-installed-in-unusual.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/3136727451363305056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/3136727451363305056'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2011/08/open-devhelp-books-installed-in-unusual.html' title='Open Devhelp books installed in unusual locations'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-6872903714638931536</id><published>2011-08-01T06:33:00.001+03:00</published><updated>2011-08-01T06:34:56.496+03:00</updated><title type='text'>QuickBox–A quick point-in-triangle test, and an example of  how algorithm descriptions matter!</title><content type='html'>&lt;p&gt;In this blog post I'm going to post something which is rather unrelated to my usual topics. I'm going to talk about how can minor changes in concept when coding, can have dramatic impact on your code performance. I also introduce a technique that I “developed myself” while coding the problem. When I say “developed myself”, I mean that I actually took time to code all the ways people describe the problem’s solution – although all seem very similar, the performance difference is huge.  &lt;p&gt;While working on my GSoC project, I needed a fast predicate to check if a point is inside a polygon (specifically, a triangle). The test doesn't have to be accurate, but it must be sound in the sense that when it states a point is outside, then it must be outside. To do so, I decided to use bounding box testing - see if the point is in the bounding box of the polygon. Computing the bounding box of a group of points should be easy - just keep track of minimal and maximal X and Y and you should be done. So, how much can you screw it up?  &lt;p&gt;Well, apparently, you can screw pretty damn hard. By coding without thinking, you can make this twice as inefficient without even noticing! Thinking before you code, to try and merge cases, can apparently be very productive. My solution will be referred to through this post as the QuickBox solution.  &lt;p style="font-size: large"&gt;&lt;strong&gt;Explanation&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;The QuickBox test uses an improved version of a common idea. The usual checks see if in a point, one of it's components is larger/smaller than the matching component in all of the triangle's points. The implementation here takes this one step further, under the assumption we are willing to say that a triangle made of 3 collinear points contains no point at all (not even it's own points). This is fair for most triangulation libraries, that simply don't accept such triangles.  &lt;p&gt;The idea is like this: If all the points of the triangle have the same boolean result for testing order (using &amp;lt;=) against a component of the point (for all i, Pt[i].x &amp;lt;= P.x is the same) then the following cases are possible:  &lt;ul&gt; &lt;li&gt;All have the same value of the component. But then all the points of the triangle are collinear so it's practically empty!  &lt;li&gt;All triangles points have the component larger than the tested point. So the point is outside! &lt;/li&gt;&lt;/ul&gt; &lt;ul&gt; &lt;li&gt;All triangles points have the component smaller than the tested point. So the point is outside! &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Note that principle explained above is also applicable for polygons with more than 3 vertices.  &lt;p style="font-size: large"&gt;&lt;strong&gt;Implementation Analysis &lt;/strong&gt; &lt;p&gt;Let the points of the triangle be A, B and C. Let P be the point we are testing. &lt;p&gt;&lt;strong&gt;Naïve implementation&lt;/strong&gt;  &lt;p&gt;This is what people would usually do if they translate directly the description “See if all polygon points are on one side of the input point (check that for each side)”  &lt;p&gt;Compute:&lt;/p&gt;&lt;pre&gt;((Ax &amp;lt;= Px) &amp;amp;&amp;amp; (Bx &amp;lt;= Px) &amp;amp;&amp;amp; (Cx &amp;lt;= Px)) ||&lt;br&gt;((Ax &amp;gt;= Px) &amp;amp;&amp;amp; (Bx &amp;gt;= Px) &amp;amp;&amp;amp; (Cx &amp;gt;= Px)) ||&lt;br&gt;((Ay &amp;lt;= Py) &amp;amp;&amp;amp; (By &amp;lt;= Py) &amp;amp;&amp;amp; (Cy &amp;lt;= Py)) ||&lt;br&gt;((Ay &amp;gt;= Py) &amp;amp;&amp;amp; (By &amp;gt;= Py) &amp;amp;&amp;amp; (Cy &amp;gt;= Py))&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;u&gt;Total Cost:&lt;/u&gt; 12 double boolean operations, 11 binary boolean operations &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Border implementation&lt;/strong&gt; &lt;br /&gt;&lt;p&gt;This is what people would usually do if they translate directly the description “Find the the border on each side of the box, see if the point is beyond it”&lt;pre&gt;           ABx           ACx                       BCx&lt;br /&gt;xMin := (Ax &amp;lt;= Bx) ? ((Ax &amp;lt;= Cx) ? Ax : Cx)) : ((Bx &amp;lt;= Cx) ? Bx : Cx))&lt;br /&gt;yMin := (Ay &amp;lt;= By) ? ((Ay &amp;lt;= Cy) ? Ay : Cy)) : ((By &amp;lt;= Cy) ? By : Cy))&lt;br /&gt;           ABy           ACy                       BCy&lt;br /&gt;&lt;br /&gt;// OPTION 1 - Requires computing all of ABx, ACx, BCx, ABy, ACy, BCy&lt;br /&gt;xMax := (! ABx) ? ((! ACx) ? Ax : Cx)) : ((! BCx) ? Bx : Cx))&lt;br /&gt;yMax := (! ABy) ? ((! ACy) ? Ay : Cy)) : ((! BCy) ? By : Cy))&lt;br /&gt;&lt;br /&gt;// OPTION 2&lt;br /&gt;xMax := (Ax &amp;gt;= Bx) ? ((Ax &amp;gt;= Cx) ? Ax : Cx)) : ((Bx &amp;gt;= Cx) ? Bx : Cx))&lt;br /&gt;yMax := (Ay &amp;gt;= By) ? ((Ay &amp;gt;= Cy) ? Ay : Cy)) : ((By &amp;gt;= Cy) ? By : Cy))&lt;br /&gt;&lt;br /&gt;Compute:    Px &amp;lt;= xMin || Px &amp;gt;= xMax || Py &amp;lt;= yMin || Py &amp;gt;= yMax&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;I'll assume that a trenary op is just one boolean operation and I will also ignore the need to save the values computed in the process such as ABx, etc. And even with that is still costs a lot!&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;u&gt;Total Cost:&lt;/u&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Option 1: 6+4 double boolean operations, 15 binary boolean operations. Actually, this method is rather inefficient, unless binary boolean operations are much much cheaper than double ones. &lt;br /&gt;&lt;li&gt;Option 2: 8+4 double boolean operations, 11 binary boolean operations. &lt;strong&gt;Exactly the same as the naïve method!&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;Note: separating the computation to one coordinate a time, can cut memory consumption by half.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;QuickBox implementation, This is my method!&lt;/strong&gt; &lt;br /&gt;&lt;p&gt;This is what people would usually do if they translate directly the description - “See if the point is on the &lt;u&gt;same&lt;/u&gt; side of all the polygon-points”&lt;pre&gt;xPBorder := Bx &amp;lt;= Px &lt;br /&gt;yPBorder := By &amp;lt;= Py&lt;br&gt;&lt;br /&gt;&lt;br&gt;Compute: (((Ax &amp;lt;= Px) == xPBorder) &amp;amp;&amp;amp; ((C-&amp;gt;x &amp;lt;= Px) == xPBorder)) || &lt;br /&gt;         (((Ay &amp;lt;= Py) == yPBorder) &amp;amp;&amp;amp; ((C-&amp;gt;y &amp;lt;= Py) == yPBorder))&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;u&gt;Total Cost:&lt;/u&gt; 6 double boolean operations (7 if we can’t save values (not 8! see below)), 7 binary boolean operations.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Note that you can expand this to polygons of much more vertices, using the trick above to avoid repeating computations, while keeping with only 1 variables which is neat :) Work on one coordinate (component each time) and keep an accumulating variable that after it’s initialized with the first comparison, you just compare to it! When done with that coordinate, if indeed you found no proof that it’s outside, pass on to the next coordinate and repeat.&lt;/p&gt;&lt;br /&gt;&lt;p style="font-size: large"&gt;&lt;strong&gt;Conclusions&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;It’s pretty easy to see that the QuickBox method beats the hell out of the competition! Less memory, less computations, and all because we checked “all points are on the same side” and not “all points are on one side” (and checked that for each side). So, when someone tells you how to implement an algorithm, try to rephrase his sentence. It can be critical!&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Just some context about this post - I’m implementing a geometric algorithm that was given in 55 lines of pseudo code with ambiguous meanings. After passing 2500 lines of implementation (real C code), and after having to actually add many cases which were dealt with because the algorithm was phrased ambiguously enough with no hint to these cases, I started being very picky about how people describe their algorithms :P I spent 1.5 months of my GSoC on this, which is way more than I expected.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;So do us all a favor – if you know how something works, describe it &lt;strong&gt;exactly and clearly&lt;/strong&gt;, so other people can implement it correctly and efficiently. &lt;strong&gt;It’s preferable to have 100 lines of code that are readable in 15 minutes, instead of 15 lines of pseudo code which are quickly read but take a 100 minutes to understand!&lt;/strong&gt; (But don’t over-do it! Bombarding with details will make people like me fall asleep when they read your article…)&lt;/p&gt;&lt;br /&gt;&lt;p style="font-size: small"&gt;[Final note: I don’t have any criticism at the original article author – he did explain it so that people from the field would understand (and eventually, even I understood so it shows he did his job very well). I just came from a different field since this is a side dependency of my project, and not it’s main part… This simply made me aware of how much phrasing of an algorithm can change it’s implementation for people who don’t think exactly like you]&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-6872903714638931536?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/6872903714638931536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2011/08/quickboxa-quick-point-in-triangle-test.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/6872903714638931536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/6872903714638931536'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2011/08/quickboxa-quick-point-in-triangle-test.html' title='QuickBox–A quick point-in-triangle test, and an example of  how algorithm descriptions matter!'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-486558645435607408</id><published>2011-06-07T18:35:00.001+03:00</published><updated>2011-06-07T19:22:56.300+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='data'/><category scheme='http://www.blogger.com/atom/ns#' term='repair'/><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='recovery'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Rescuing data from my dead laptop</title><content type='html'>Unfortunatly, my laptop's sort of "died" yesterday. The usual procedure in such cases is to rescue your data, and then send the laptop to a service laboratory. However, rescuing the data was a bit harder than I expected it be... I'm using a dell laptop with windows 7 x64, and here are the steps I took:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://windows.microsoft.com/en-US/windows7/Create-a-system-repair-disc"&gt;Create a Windows 7 system repair disc&lt;/a&gt;&amp;nbsp;(using my brother's laptop)&lt;/li&gt;&lt;li&gt;Boot the laptop from the repair disc&lt;/li&gt;&lt;li&gt;Run Startup Repair - didn't help&lt;/li&gt;&lt;li&gt;Run Windows Memory Diagnostic - which produced the lovely warning:&lt;br /&gt;&lt;strong&gt;Hardware problems were detected.&amp;nbsp;To identify and repair these problems, you will need to contact the computer manufacturer.&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Complain about my crappy luck&lt;/li&gt;&lt;li&gt;Re-boot the laptop, and in the boot options menu choose the Diagnostics tool&lt;/li&gt;&lt;li&gt;After running the diagnostics, I got a more detailed error:&lt;br /&gt;&lt;strong&gt;Error Code 0123&lt;br /&gt;Msg: Error Code 2000-0123&lt;br /&gt;Msg: Memory - integrity test failed&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Googling that error shows that it will require reinstalling/replacing of my (RAM?) memory&lt;/li&gt;&lt;/ol&gt;So, that wasn't so bad. The problem is now, how to get the data out? Here is where things became tricky:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Boot the laptop from the repair disc&lt;/li&gt;&lt;li&gt;Connect a USB disk on key (8GB, FAT32 file-system)&lt;/li&gt;&lt;li&gt;Open the command prompt supplied in the repair disc and start copying files&lt;/li&gt;&lt;li&gt;After filling the&amp;nbsp;Disc-On-Key each time, I emptied it on my brother's computer&lt;/li&gt;&lt;/ol&gt;And here it all goes wrong:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Got an error of a file which is too large for the given file system. I had a 4.35 Gb file of a virtual machine hard disk (VDI file). The maximal file size for FAT32 file system is 4Gb-1b :P&lt;/li&gt;&lt;li&gt;Format the Disc-On-Key, and choose an NTFS file system&lt;/li&gt;&lt;li&gt;Copy the big&amp;nbsp;file and continue happily :)&lt;/li&gt;&lt;li&gt;Got another error - &lt;strong&gt;file is too big&lt;/strong&gt;. Got this for a 9Gb file which represents the hard disk of another virtual-machine.&lt;/li&gt;&lt;/ol&gt;Now, we have a problem. The largest USB storage device I had is 8Gb, and in this minimal windows recovery environment I don't have any tool to split files!&lt;br /&gt;&lt;br /&gt;After some thinking, I remembered that &lt;a href="http://www.7-zip.org/"&gt;7zip&lt;/a&gt; can create a split-zip, i.e. one zip that is split to several small chunks. Even better was the fact that 7zip has a command line portable version! So I quickly downloaded it, and went back to my dead laptop to try it. But, it didn't work... Apparently, in the repair disc, the files required to run 32 bit executables over 64 bit machines are simply not installed, and the command line version came only in 32 bit...&lt;br /&gt;&lt;br /&gt;After scratching my head, I went back to browse my homework folder from the operating-systems folder. I remebered that we wrote a splifile utility in C, which uses only windows commands (for example, CreateFile instead of fopen). But, my version of Visual Studio is the Express edition, and it didn't have the 64 bit compiler...&lt;br /&gt;&lt;br /&gt;So, I downloaded &lt;a href="http://mingw-w64.sourceforge.net/"&gt;mingw64-w64&lt;/a&gt;&amp;nbsp;and went to compile my program. After some struggles with problems regarding unicode programs (solved &lt;a href="http://sourceforge.net/apps/trac/mingw-w64/wiki/Unicode%20apps"&gt;here&lt;/a&gt;), and some other problems, I finally managed to get it compile. I went to back to my repair-disc boot, and it worked!&lt;br /&gt;&lt;br /&gt;It took me several hours to solve all this, but I finally managed to do this. I don't have many complaints to microsoft or dell - the diagnostic tools were really easy to use and the repair disc&amp;nbsp;booted&amp;nbsp;without any problems. It's just too bad that the people at&amp;nbsp;microsoft didn't think a split file utility is necessary when trying to rescue data... Overall, I began this procedure with great pesimisem, and I finished with a smile and no lost data :)&lt;br /&gt;&lt;br /&gt;Regarding my GSoC - this will prevent me from working several days this week, since it's still the last week of the semester, so I still can't sit in front of my desktop computer. I'll make up for the lost time later somehow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-486558645435607408?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/486558645435607408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2011/06/rescuing-data-from-my-dead-laptop.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/486558645435607408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/486558645435607408'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2011/06/rescuing-data-from-my-dead-laptop.html' title='Rescuing data from my dead laptop'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-4738532382276834561</id><published>2011-06-05T23:34:00.002+03:00</published><updated>2011-06-05T23:41:02.721+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='poly2tri'/><category scheme='http://www.blogger.com/atom/ns#' term='update'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc-2011'/><title type='text'>[GSoC-2011] Bi-Weekly update #1</title><content type='html'>Hi!&lt;br /&gt;&lt;br /&gt;After seeing enough student post of weekly updates, I decided that I should probably also give some progress report. I finished porting the &lt;a href="http://code.google.com/p/poly2tri/"&gt;poly2tri&lt;/a&gt; library to C! My C port can be found &lt;a href="http://code.google.com/p/poly2tri-c/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Just compiled it today with gcc and not g++, and it feels great to see it working. And when I say to see, I mean that I created an SVG output tester&amp;nbsp;so that you can see it in any modern browser&amp;nbsp;:D&lt;br /&gt;I still have some optimizations that can be done, including maybe some more documentation of the C api (especially for the constructor-destructor conversion from C++ to C), but it's usable enough for the GSoC as it is. Note that most API changes were simply from &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;p2t::SomeClass::GetFoo&lt;/span&gt; to &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;p2t_someclass_get_foo&lt;/span&gt; (where the object itself was added as a first parameter of the functions).&lt;br /&gt;It was in "almost C" state on wednesday, but then memory leaks happened&amp;nbsp;(solved with&amp;nbsp;valgrind) and some stupid compilation errors...&lt;br /&gt;&lt;br /&gt;At the weekend I went to a short vacation on the dead-sea (pictures soon!) and I had&amp;nbsp;4 people to discuss Chew's second algorithm (which I should implement next) with during the long ride to the hotel. So hopefully with their help it should be quick(er).&lt;br /&gt;&lt;br /&gt;That's all for today :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-4738532382276834561?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/4738532382276834561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2011/06/gsoc-2011-bi-weekly-update-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/4738532382276834561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/4738532382276834561'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2011/06/gsoc-2011-bi-weekly-update-1.html' title='[GSoC-2011] Bi-Weekly update #1'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-3047110402311780800</id><published>2011-05-27T12:45:00.003+03:00</published><updated>2011-05-27T15:46:40.158+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='student'/><category scheme='http://www.blogger.com/atom/ns#' term='university'/><category scheme='http://www.blogger.com/atom/ns#' term='adaptive-clone'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc-2011'/><title type='text'>The end is near, and so is the beginning</title><content type='html'>&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-ZGY0j6o_LZc/Td9ul2ChJDI/AAAAAAAAAVI/LJXkZxuB6pQ/s1600/StudentDay2011.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-ZGY0j6o_LZc/Td9ul2ChJDI/AAAAAAAAAVI/LJXkZxuB6pQ/s1600/StudentDay2011.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Pictures from Yehuda Poliker's Concert on the&lt;br /&gt;Student-Day, and a picture of my GSoC kit. Cellphone&lt;br /&gt;pictures, so low quality :P&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;There is a feeling of an end in the air. The end of university, another chapter in my life. Yesterday I took part in the Student Day party at our university - there were amazing concerts by fantastic artists, including &lt;a href="http://en.wikipedia.org/wiki/Yehuda_Poliker"&gt;Yehuda Poliker&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Monica_Sex"&gt;Monica Sex&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Hadag_Nahash"&gt;Hadag Nachash&lt;/a&gt; and more. The Student Day is a known symbol of the end of the year, which happens 2-3 weeks before the end of the semester. The fact that is practically my last year as a student (I will have one last course left for the next semester, but that doesn't really count) does start to get in, and I am gradually getting used to this.&lt;br /&gt;&lt;br /&gt;This week was also the official beginning of the Google Summer of Code coding period! After getting my cool GSoC kit (see the picture) 2 days ago I really felt that I'm a part of this great project - many thanks to google for organizing this! Anyway, I almost finished porting &lt;a href="http://code.google.com/p/poly2tri/"&gt;poly2tri&lt;/a&gt; to C. Once this is done, I can start coding my project. The milestones for my project are:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Port&amp;nbsp;poly2tri to C (from C++), a library for generating &lt;a href="http://en.wikipedia.org/wiki/Constrained_Delaunay_triangulation"&gt;Constrained Delaunay triangulation&lt;/a&gt;s for given polygons.&lt;/li&gt;&lt;li&gt;Implement &lt;span id="goog_1313457497"&gt;&lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Chew's_second_algorithm"&gt;Chew's Second Algorithm&lt;/a&gt; to create adaptive meshes from CDT's*&lt;/li&gt;&lt;li&gt;Implement code to create polygons from Black/White (1-bit) channels (The edges where the color differs should be described by polygons)*&lt;/li&gt;&lt;li&gt;Combine all these to create an adaptive mesh from a Black/White channel (which symbolizes a selection area)&lt;/li&gt;&lt;li&gt;Create a triangle mesh renderer with color interpolation between vertices (actually, Cairo may be able to do this!)*&lt;/li&gt;&lt;li&gt;Implement the Mean-Value-Coordinate cloning, using these above, as a GEGL operation*&lt;/li&gt;&lt;li&gt;Add some GUI and put it as a GIMP tool&lt;/li&gt;&lt;/ol&gt;Marked with * are the steps that would require the actual work, most other steps should hopefully be trivial. But again, hopes and reallity don't necessarily&amp;nbsp;agree :) When I applied for this GSoC I knew there was code to do adaptive mesh generation from polygon outlines. It's only too bad that none of the code to do this is small and in a GPL compatiable license :(&lt;br /&gt;&lt;br /&gt;I hope to finish everything untill step 4 (and parts of 5 if I'll be able to use Cairo) untill the midterm, but I can't really set the midterm goals yet since I haven't started to seriously code yet because there is still a university semester going on for the next week or two.&lt;br /&gt;&lt;br /&gt;To all students out there, good luck in the exam period! And for the GSoC students, good luck with the projects! :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-3047110402311780800?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/3047110402311780800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2011/05/end-is-near-and-so-is-beginning.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/3047110402311780800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/3047110402311780800'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2011/05/end-is-near-and-so-is-beginning.html' title='The end is near, and so is the beginning'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-ZGY0j6o_LZc/Td9ul2ChJDI/AAAAAAAAAVI/LJXkZxuB6pQ/s72-c/StudentDay2011.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-916070057491662923</id><published>2011-04-26T02:27:00.003+03:00</published><updated>2011-05-26T10:36:54.905+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='adaptive-clone'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc-2011'/><title type='text'>I’m doing a Google Summer of Code!</title><content type='html'>&lt;p&gt;My application for a Google Summer of Code project for GIMP was accepted! =D&lt;br&gt;After being around the development team for a year or so (and hanging around the IRC even more), and after I couldn’t apply last year for technical reasons, this year I will get my chance.&lt;/p&gt; &lt;p&gt;Here is the initial description of the project, taken from my &lt;a href="http://www.google-melange.com/gsoc/project/google/gsoc2011/lightningismyname/6001" target="_blank"&gt;project page&lt;/a&gt;:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;The project I intend to implement is something called Adaptive Cloning (aka Seamless cloning). Basically, the idea is that cloning parts from one image to another usually does not end well. This is because of different exposure/white-balance settings, or simply because of different lighting conditions.&lt;/p&gt; &lt;p&gt;The idea is to implement an algorithm which would allow to copy a part from one image, and paste it seamlessly into the other; the pasted area will be blended to fit the destination image locally. There are several techniques to do that, and the most known one is called poisson image cloning. The problem with most of these algorithms is that they are expensive (computation-wise) and are not suitable for interactive editing and previewing, unless you use hardware acceleration.&lt;/p&gt; &lt;p&gt;The suggested technique for my project is based on &lt;a title="Coordinates for Instant Image Cloning" href="http://www.cs.huji.ac.il/~danix/mvclone/" target="_blank"&gt;an article from Siggraph 2009&lt;/a&gt; (includes demos and videos), which shows realtime performance (both on the GPU and the CPU*). The user would paste a some area from the clipboard and will then be able to "blend it in" according to it's environment.&lt;/p&gt; &lt;p&gt;I'm open for any suggestions regarding usability, ui integration, or anything which relates to the project. Feedback will be more than welcome!&lt;/p&gt; &lt;p&gt;&lt;em&gt;* Note that I'm not sure for which sizes on the CPU it preforms on realtime, but it's still much more cheap computation-wise than most other techniques and a small lag of few seconds is something which should be acceptable for this sort of workflow.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;GIMP has 5 projects for this GSoC – if all these projects succeed, GIMP will gain a major boost in it’s capabilities. This year’s projects are:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.google-melange.com/gsoc/project/google/gsoc2011/lightningismyname/6001" target="_blank"&gt;Adaptive Cloning (aka Seamless cloning)&lt;/a&gt;  &lt;ul&gt; &lt;li&gt;Student: Barak Itkin (IRC nick: LightningIsMyName)  &lt;li&gt;Mentor: Michael Natterer (IRC nick: mitch)&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;a href="http://www.google-melange.com/gsoc/project/google/gsoc2011/enrico_schroeder/12001" target="_blank"&gt;Replace GimpSizeEntry widget&lt;/a&gt;  &lt;ul&gt; &lt;li&gt;Student: Enrico Schröder (IRC nick: enrico(?))  &lt;li&gt;Mentor: Martin Nordholts (IRC nick: Enselic)&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;a href="http://www.google-melange.com/gsoc/project/google/gsoc2011/michael_mure/5001" target="_blank"&gt;iWarp like tool for Gimp&lt;/a&gt;  &lt;ul&gt; &lt;li&gt;Student: Michael Muré (IRC nick: Bat`O) – the same guy who did the GSoC of the cage tool last year!  &lt;li&gt;Mentor: Alexia Death (IRC nick: Alexia_Death)&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;a href="http://www.google-melange.com/gsoc/project/google/gsoc2011/robert_sasu/17001" target="_blank"&gt;Porting GIMP plugins to GEGL operations&lt;/a&gt;  &lt;ul&gt; &lt;li&gt;Student: Robert Sasu (IRC nick: robert)  &lt;li&gt;Mentor: Mukund Sivaraman (IRC nick: muks)&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;&lt;a href="http://www.google-melange.com/gsoc/project/google/gsoc2011/victor_matheus/8001" target="_blank"&gt;OpenCL in GEGL&lt;/a&gt;  &lt;ul&gt; &lt;li&gt;Student: Victor Oliveira (IRC nick: victorm)  &lt;li&gt;Mentor: João S. O. Bueno (IRC nick: gwidion)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;I would also like to congratulate Blender (formally, The Blender Foundation) for &lt;strong&gt;an astonishing amount of 17 GSoC projects!&lt;/strong&gt; If there is any project who can do anything with 17 students, it’s Blender. Congrats also for Inkscape for 4 GSoC projects.&lt;/p&gt; &lt;p&gt;Good luck to my fellow GSoC students, especially the GIMP (and Blender) students. I hope I will finish my project – I already learned from Bat`O last year that it is feasible to code something like this ;)&lt;/p&gt; &lt;p&gt;The list of all accepted projects for all organizations for this year’s GSoC can be found &lt;a href="http://www.google-melange.com/gsoc/projects/list/google/gsoc2011" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font size="+1"&gt;Small Help Wanted&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;I searched without success for a small GPL compatible library for generating quality triangular meshes (&lt;a href="http://upload.wikimedia.org/wikipedia/commons/6/6c/LakeMichiganMesh.png" target="_blank"&gt;example&lt;/a&gt;) from a given outline (probably a quality &lt;a href="http://en.wikipedia.org/wiki/Constrained_Delaunay_triangulation"&gt;constrained Delaunay triangulations&lt;/a&gt; / conforming Delaunay triangulation) - I need this for my project. I haven’t found any library that is both small and GPL compatible. If anyone knows any such library, please tell me - it will save me lots of work and guarantee less bugs in the final result. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; It seems as if &lt;a href="http://code.google.com/p/poly2tri/"&gt;poly2tri&lt;/a&gt; may do the job of creating a CDT (Constrained Delaunay Triangulation), and on that I can apply &lt;a href="http://en.wikipedia.org/wiki/Chew%27s_second_algorithm"&gt;Chew's second algorithm&lt;/a&gt;. This is not optimal, but it is feasible since creating the CDT was probably the hard pard. If anyone finds something better, I will still be glad to knkow!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-916070057491662923?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/916070057491662923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2011/04/im-doing-google-summer-of-code.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/916070057491662923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/916070057491662923'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2011/04/im-doing-google-summer-of-code.html' title='I’m doing a Google Summer of Code!'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-4690701583372886659</id><published>2011-04-17T14:47:00.001+03:00</published><updated>2011-04-17T14:47:32.631+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='university'/><category scheme='http://www.blogger.com/atom/ns#' term='secure programming'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='general'/><title type='text'>Safe programming - Are universities doing it wrong?</title><content type='html'>&lt;p&gt;In the last 2 week I was unavailable because I had a “monstrous exercise” from university. Everyone indeed complained it was huge, but when other people saw the size of my code (2000 lines) they were shocked – this was because my code was about twice larger than the one of other people. It’s not that I suck at programming, and it’s not that I re-invented the wheel or anything like it. It was simply that my code was safe, where the code of most other people I saw wasn’t because we didn’t have to make it safe.&lt;/p&gt; &lt;p&gt;The assignment was to build servers and clients for a &lt;a href="http://en.wikipedia.org/wiki/Nim" target="_blank"&gt;Nim&lt;/a&gt; game with several players (instead of just 2 like the original version) along with a build-in chat. What was supposed to be the point of the exercise was to make the server non-blocking, i.e. to use &lt;a href="http://linux.die.net/man/2/select" target="_blank"&gt;select()&lt;/a&gt; with only one thread. For example, this means that if we temporarily can’t read data from one client, we will still check if we can send him data or communicate with other clients. But let’s leave that technical part, since the thing that actually made the code complex was the other “minor” things.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Note:&lt;/u&gt; I have no criticism at all at the course staff of this specific course&lt;/strong&gt;, It was simply an example of a university policy.&lt;/p&gt; &lt;p&gt;In general, when programming academic tasks, and especially when it’s in C, unless it is a course in security or some other special cases, you are allowed to assume the following assumptions:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Input from the user is valid (Less often than the rest of the assumptions, but still common)&lt;/li&gt; &lt;li&gt;We won’t run out of memory (in C, &lt;a href="http://linux.die.net/man/3/malloc" target="_blank"&gt;malloc()&lt;/a&gt; won’t fail)&lt;/li&gt; &lt;li&gt;Data received over the network is in the format we expected&lt;/li&gt; &lt;li&gt;No one will try to brake our system maliciously&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Now, let’s analyze in how many places we can attack the server/client from our exercise:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Entering a wrong move to win the game&lt;/li&gt; &lt;ul&gt; &lt;li&gt;Example: Enter “A -5” instead of “A 5” to add 5 cubes to a stack instead of deducing (which is what that should happen)&lt;/li&gt; &lt;li&gt;Potential Result: Win the game by cheating&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;Sending large chat messages to attack client/server&lt;/li&gt; &lt;ul&gt; &lt;li&gt;Example: The protocol requests to send the size of the message to be read over the network. Most people used a short (16 bits) variable for that = meaning 65Kb message sizes are legal!&lt;/li&gt; &lt;li&gt;Potential results:&lt;/li&gt; &lt;ul&gt; &lt;li&gt;Buffer Overflows&lt;br&gt;Most people allocated a static buffer of size 1024 bytes (1Kb) for receiving messages since someone asked if 1024 is a valid assumption on input length. Reading 65Kb to a one Kb buffer will crash our program or lead to execution of arbitrary code.&lt;/li&gt; &lt;li&gt;Wasting resources&lt;br&gt;Allocating 65Kb for each client (to read chat message progressively until receiving them is done) is a lot of memory&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt; &lt;li&gt;Abuse the lack of timeouts on clients&lt;/li&gt; &lt;ul&gt; &lt;li&gt;Example: Connect with many clients, and do nothing after the connection was initialized.&lt;/li&gt; &lt;li&gt;Result: Can DDoS the system very easily, after finishing the maximal available number of connections, or waste all the resources if no such limit is set.&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;Send messages over the network in invalid format (can happen if client/server are broken)&lt;/li&gt; &lt;ul&gt; &lt;li&gt;Example: Send random binary junk&lt;/li&gt; &lt;li&gt;Result: see server crash or behave strangely&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;More…&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Out of the above problems, I tried to take care off most of these problems, and I believe my partner and I took care of 90% of these cases. This is where we made our life harder – &lt;strong&gt;we didn’t have to handle any of these!&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Now, obviously there were no requirements to handle these cases. &lt;strong&gt;This was done in order to allow students to focus on the subject of the task&lt;/strong&gt; – non blocking network communication. And that is indeed something which should be done – otherwise you’d spend most of the time of the exercise (like me) on things which are barely relevant to the current subject.&lt;/p&gt; &lt;p&gt;So, after stating that we must take these assumptions, why am I writing this post? Because &lt;strong&gt;there is not even a single course in security and/or secure programming which is mandatory!&lt;/strong&gt; Or at least this is how it is in my university (and I’m in a relatively respectable one). This means that a student can finish his entire degree without taking care of these problems even once! The implications of this can be devastating – if we code like we did in university, in the outside world, our programs will have more security holes in them that Swiss cheese!&lt;/p&gt; &lt;p&gt;Three weeks ago, I had to give a lecture (in a seminar) about common programming mistakes that make software unsecure. At first I thought most of the mistakes I was going to discuss were ridiculous, but then I saw them pile up in more and more “respectable” places – both in commercial companies (Apple, Microsoft, …) and open-source organizations. And like other programmers, I also do these even though I hate to admit it.&lt;/p&gt; &lt;p&gt;So, what can Universities do about it?&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Changing the requirements of all exercises to be secure&lt;/li&gt; &lt;ul&gt; &lt;li&gt;Bad solution! The amount of work will make all students crash as if someone was DDoSing them :P&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;Mention the risk of each assumption inside each exercise description&lt;/li&gt; &lt;ul&gt; &lt;li&gt;Good!&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;Add mandatory courses/lessons in application security and/or safe programming&lt;/li&gt; &lt;ul&gt; &lt;li&gt;Better!&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;Instead of a one time experience during your studies (one mandatory course/lesson), have one task that should be safe in each course (where applicable)&lt;/li&gt; &lt;ul&gt; &lt;li&gt;Best!&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt; &lt;p&gt;And what can we do about it?&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Try to show people we know were their code is dangerous, and increase their awareness.&lt;/li&gt; &lt;ul&gt; &lt;li&gt;If possible, try to attack their code and show them the actual risks! (because I heard enough people saying “The risk is only theoretical – nothing will happen”)&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;If you are a student, show this to the professors in the department of application security to make them tell the university to change it.&lt;/li&gt; &lt;ul&gt; &lt;li&gt;Some of them weren’t aware of the fact the state is so bad, and when they heard they started working to integrate the solutions mentioned above&lt;/li&gt; &lt;li&gt;But this is less likely to work…&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;Make our own code safe!&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;That’s all for today. Spread the awareness about security, and if you (as a student/programmer) found this post helpful, please let me know.&lt;/p&gt; &lt;p&gt;One last thing – I applied to GSoC (before the deadline), I’ll post my application later :)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-4690701583372886659?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/4690701583372886659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2011/04/safe-programming-are-universities-doing.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/4690701583372886659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/4690701583372886659'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2011/04/safe-programming-are-universities-doing.html' title='Safe programming - Are universities doing it wrong?'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-477745670945893687</id><published>2011-04-08T15:40:00.001+03:00</published><updated>2011-04-08T15:40:35.820+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='sports'/><category scheme='http://www.blogger.com/atom/ns#' term='motivation'/><category scheme='http://www.blogger.com/atom/ns#' term='running'/><title type='text'>Powerful experience</title><content type='html'>&lt;p&gt;Today at 6:40 am, near the &lt;a href="http://en.wikipedia.org/wiki/Jaffa"&gt;Jaffa&lt;/a&gt; (יפו) clock tower, I began to walk. As I moved towards the &lt;a href="http://en.wikipedia.org/wiki/Charles_Clore_Park"&gt;Charles Clore park&lt;/a&gt; (גן צ’רלס קלור), people started to pour in from the near-by streets and slowly the stream of people grew to hundreds of people. The sky was low in the sky, hidden by large thin clouds, and rays of light blazed the sky through the clouds. When I finally reached the park, there were already thousands of people waiting.&lt;/p&gt; &lt;p&gt;At 7:00 am, I started moving towards the start line, along with many other people. Some ran bit, others stretched, and everyone were preparing. At 7:10 am, we were allowed to enter the gathering area before the start line. Gradually the area was filled, with 5,000 people, and it became pretty crowded. While we were waiting, some electronic music was played in gigantic speakers to get us all pimped up with energy. It drizzled a bit, and after 2 minutes it stopped.&lt;/p&gt; &lt;p&gt;At 7:25, a pistol shot into the air, signaling the beginning of the Tel-Aviv Marathon (מרתון תל-אביב) Urban Run Race - A quarter of a Marathon (10 Kilometers) race for people from all ages. Inside the huge “body” of participants, I started to move slowly towards the start line, and when I crossed it I began to run.&lt;/p&gt; &lt;p&gt;After several hundred meters, when the speakers were far behind us, there was a magical moment. It was silent, and the only noise that broke the silence was the soft pound of thousands of shows on the road. It was surprisingly silent, I thought that it would be much noisier.&lt;/p&gt; &lt;p&gt;After the first few kilometers, in which we went through a sleeping City, we saw people on the sides. Some of them simply stared, some have prepared in advance and stood with cameras and tripods, and some cheered the giant cloud of runners. Many of the cops who blocked the near-by streets were smiling at us, as if signaling us to go on. The city gradually came into life, shaking of the sleepiness that held it previously.&lt;/p&gt; &lt;p&gt;When we reached the middle of the race, we reached the first water stop. Many people holding bottles of waters waited for the runners to take &amp;amp; go, some were from the event staff, but some were certainly volunteers (they didn’t wear uniform). They all cheered and gave us motivation to continue. One thing that really made me smile, was one person who set-up a table on his own and gave water to the runners several hundreds of meters later. Every 2-3 kilometers there was a DJ/band playing music to keep us going.&lt;/p&gt; &lt;p&gt;Finally, when reaching the final 2 kilometers, we ran near the beach where we saw the deep blue ocean. At that spot, many people already gathered to cheer, photograph and play us music. It was a down-hill part, and everybody accelerated (knowingly or not) towards the finish line which was already in the horizon. On the right, we were passed by people participating in the &lt;a href="http://en.wikipedia.org/wiki/Handcycle"&gt;Handcycle&lt;/a&gt; race that also took place as part of the event.&lt;/p&gt; &lt;p&gt;Hundred meters before the finish line, we already heard the gigantic speakers from the initial gathering area. Then came the urge to sprint forwards, to finish it as fast as you can, proving yourself you can do it.&lt;/p&gt; &lt;p&gt;It was the first time I participated in a race, and the feeling was fantastic. For me, like most other people, it was not a competition, but simply a chance to prove yourself that you can do it. So I proved myself I can do it, and I broke my own record and set it to 49 minutes and 20 seconds (previously, I did 9 kilometers in 51 minutes). More important than the record, was the participation, and prooving to myself I can do this and in a good time.&lt;/p&gt; &lt;p&gt;I think that one of the things that made this race an important experience for me, was the huge range of participants – ages 16 and up, were many of the people where in their 20’s-40’s (so I was relatively young – only 63 people including me where in the category of 16-19). There were people who ran in pairs or small groups, others ran in teams (including army teams), and some wore shirts in memory of people.&lt;/p&gt; &lt;p&gt;One thing that really touched me, was people who wore shirts in memorial of Shneior Cheshin (שניאור חשין). He was an athlete who trained for the &lt;a href="http://en.wikipedia.org/wiki/Ironman_Triathlon"&gt;Ironman Triathlon&lt;/a&gt; earlier this year, and was ran over by a drunk/drugged driver. That driver left him there to die, and made many excuses for that later when he was caught. It was a very tragic event which symbolized how careless are some people when it comes to driving responsibly and when it comes to ignoring injured people unless you know them.&lt;/p&gt; &lt;p&gt;Another thing which wasn’t possible to ignore, were “very big” people that decided that they need a change. I saw 2 like these, that made every possible effort to run, even if slowly. Even if it’s a bit late, I must admit it was impressive to see people who decided to change their life-style and participated in this race. I don’t know these people, but I wish them lots of luck.&lt;/p&gt; &lt;p&gt;Many thanks to the person who made me start running last august. They always say you need some motivator to start, and once you are in it it’s easier. She made me start (without knowing she did), and I owe her more thanks than I can describe in this post. Last year I was simply not in-shape, and I barely did 2-3 kilometers. In the last few months I took it seriously and improved to 10 kilometers.&lt;/p&gt; &lt;p&gt;Hopefully I’ll see you next year, On March 30 2012. I’ll do the half-marathon track (or if I’ll have &lt;em&gt;enough&lt;/em&gt; luck, I’ll do the entire marathon)&lt;br&gt;Have a happy weekend :)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-477745670945893687?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/477745670945893687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2011/04/powerful-experience.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/477745670945893687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/477745670945893687'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2011/04/powerful-experience.html' title='Powerful experience'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-6038465162593989717</id><published>2011-03-18T21:12:00.001+02:00</published><updated>2011-03-18T21:14:42.132+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc-2011'/><title type='text'>GIMP was accepted to GSoC 2011</title><content type='html'>GIMP was accepted to Google Summer of Code 2011!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-EnlqsHH7iSQ/TYOt9AI1dfI/AAAAAAAAAU8/KDP1mKMw0fw/s1600/GSoC_gimp_2011.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="274" width="320" src="http://3.bp.blogspot.com/-EnlqsHH7iSQ/TYOt9AI1dfI/AAAAAAAAAU8/KDP1mKMw0fw/s320/GSoC_gimp_2011.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Congrats also for Inkscape, Blender, Scribus for making it to GSoC 2011! For the full list of projects, see &lt;a href="http://www.google-melange.com/gsoc/program/accepted_orgs/google/gsoc2011"&gt;GSoC 2011 participating projects&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-6038465162593989717?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/6038465162593989717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2011/03/gimp-was-accepted-to-gsoc.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/6038465162593989717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/6038465162593989717'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2011/03/gimp-was-accepted-to-gsoc.html' title='GIMP was accepted to GSoC 2011'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-EnlqsHH7iSQ/TYOt9AI1dfI/AAAAAAAAAU8/KDP1mKMw0fw/s72-c/GSoC_gimp_2011.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-1175945646704752938</id><published>2011-03-01T00:59:00.002+02:00</published><updated>2011-03-02T20:48:22.055+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='developer'/><category scheme='http://www.blogger.com/atom/ns#' term='meeting'/><title type='text'>First GIMP Developer Meeting - A success!</title><content type='html'>I worked hard to arrange it, but it paid off - We had a serious gimp developer meeting, with most developers attending it :)&lt;br /&gt;&lt;br /&gt;Thee meeting page, including the agenda and log can be found at:&lt;br /&gt;&lt;a href="http://gimp-wiki.who.ee/index.php/Hacking:Dev_Meeting_28_Feb_2011"&gt;http://gimp-wiki.who.ee/index.php/Hacking:Dev_Meeting_28_Feb_2011&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Some of the decided actions in the meeting:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;schumaml and LightningIsMyName fix wgo?&lt;/b&gt;&lt;br /&gt;wgo is a shortcut for the GIMP main website - we need it to have auto-updates again&lt;/li&gt;&lt;li&gt;&lt;b&gt;Alexia and mitch take care of redirecting wiki.gimp.org&lt;/b&gt;&lt;br /&gt;We need to make the domain point back at a working wiki, the original one died of spam and Alexia Death has a new working one &lt;a href="http://gimp-wiki.who.ee/index.php/"&gt;here&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Enselic makes a draft of a GIMP roadmap and sends to gimp-developer&lt;/b&gt;&lt;br /&gt;Let's get some priorities!&lt;/li&gt;&lt;li&gt;&lt;b&gt;everybody subscribe to bug mail and TRIAGE BUGS&lt;/b&gt;&lt;br /&gt;We get toooooo many bug reports, we need to start filtering them&lt;/li&gt;&lt;li&gt;&lt;b&gt;mitch, make a development release soon&lt;/b&gt;&lt;br /&gt;Yes - that's right! GIMP 2.7.2! Now we just need to define soon :P&lt;/li&gt;&lt;li&gt;&lt;b&gt;LightningIsMyName takes care of next meeting&lt;/b&gt;&lt;br /&gt;Hehe. I'll do that with pleasure :)&lt;/li&gt;&lt;li&gt;&lt;b&gt;setting pages on the wiki to discuss changes in different topics&lt;/b&gt;&lt;br /&gt;Too many changes are done solo and may not be agreed upon by everyone - this is because of lack of places to show plans&lt;/li&gt;&lt;li&gt;&lt;b&gt;LightningIsMyName gets a list of projects on the wiki by tomorrow, developers review the ideas by email or by commenting on the wiki. Saturday (March 5th, 2011) is hard dead line for finalizing the project list!&lt;/b&gt;We want to get to GSoC, so we must have a list of projects ASAP! I'm going to work on this and try to get this done tomorrow night&lt;/li&gt;&lt;li&gt;&lt;b&gt;all devs PM/Email LightningIsMyName username and email&lt;/b&gt;&lt;br /&gt;Yeah, so if you are a GIMP dev and you don't have an account for the wiki yet, tell me!&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;b&gt;Next meeting:&lt;/b&gt; March 14 2011 10:00 PM CET (GMT+1)&lt;br /&gt;&lt;br /&gt;If you want to influence GIMP development, and/or contribute, come and attend the next meeting. Just note that the agenda will be decided by email several days ahead, on the developer mailing list - so submit your ideas there. You can also jump to irc://irc.gimp.org/#gimp and people will help you there if you want to help the GIMP project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-1175945646704752938?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/1175945646704752938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2011/03/first-gimp-developer-meeting-success.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/1175945646704752938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/1175945646704752938'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2011/03/first-gimp-developer-meeting-success.html' title='First GIMP Developer Meeting - A success!'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-3021045750563325572</id><published>2011-02-28T11:48:00.000+02:00</published><updated>2011-02-28T11:48:02.895+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='developer'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='meeting'/><title type='text'>GIMP Developer Meeting</title><content type='html'>Today (February 28th, 2011), at &lt;a href="http://www.timeanddate.com/worldclock/fixedtime.html?month=2&amp;amp;day=28&amp;amp;year=2011&amp;amp;hour=22&amp;amp;min=0&amp;amp;sec=0&amp;amp;p1=48"&gt;10pm CET&lt;/a&gt; a meeting of GIMP developers is scheduled on the GIMP developer IRC.&lt;br /&gt;&lt;br /&gt;Agenda:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;GSoC 2011 - ORG Application deadline is in 11 days!&lt;/li&gt;&lt;li&gt;Bug fixing priorities&lt;/li&gt;&lt;li&gt;Future development?&lt;/li&gt;&lt;li&gt;Make an official wiki working again (i.e. make wiki.gimp.org pointing at it)! Can be done either by making http://gimp-wiki.who.ee/ the official wiki, or potentially using some other available servers (will be discussed in depth on the meeting)&lt;/li&gt;&lt;li&gt;Make a roadmap on the official wiki&lt;/li&gt;&lt;li&gt;Try and decide on clear release policy for beta builds - I personally would like to see more recent beta releases, and the last one was&amp;nbsp;7 months ago!&lt;/li&gt;&lt;li&gt;Anything else? =)&lt;/li&gt;&lt;/ul&gt;If you want to discuss GIMP's future, GSoC this year, and just listen, please come. We will meet on irc://irc.gimp.org/#gimp (Users without IRC client can connect using &lt;a href="http://mibbit.com/?channel=%23gimp&amp;amp;server=irc.gimp.org"&gt;this link&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Edit:&lt;/b&gt; The wrong time was displayed - it's february 28th, not the 27th&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-3021045750563325572?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/3021045750563325572/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2011/02/gimp-developer-meeting.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/3021045750563325572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/3021045750563325572'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2011/02/gimp-developer-meeting.html' title='GIMP Developer Meeting'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-541034923718085359</id><published>2011-02-26T15:28:00.001+02:00</published><updated>2011-02-26T15:28:26.847+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='robot'/><category scheme='http://www.blogger.com/atom/ns#' term='antivirus'/><category scheme='http://www.blogger.com/atom/ns#' term='error'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>My name is Antivirus. I hate Robots.</title><content type='html'>&lt;p&gt;I have a confession to make - I’m using an antivirus on my Windows 7 computer. This word may seem unfamiliar to some Linux users who claim they don’t need it, and to some Windows users who claim that these stuff are viruses themselves. It never did any trouble, and it did save me several times, but today it was just an annoyance.&lt;/p&gt; &lt;p&gt;I was programming a game for the course I took in Computer Graphics. When I ran it, it exited before the first line of code and I got the following series of warnings:&lt;/p&gt; &lt;table style="text-align: center; margin-left: auto; margin-right: auto" class="tr-caption-container" cellspacing="0" cellpadding="0" align="center"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td style="text-align: center"&gt;&lt;a style="margin-left: auto; margin-right: auto" href="https://lh6.googleusercontent.com/-7IkZjBe4_T4/TWj512Ma5fI/AAAAAAAAAT8/BYOMy6GgSwk/s1600/VirusName.png" imageanchor="1"&gt;&lt;img border="0" src="https://lh6.googleusercontent.com/-7IkZjBe4_T4/TWj512Ma5fI/AAAAAAAAAT8/BYOMy6GgSwk/s1600/VirusName.png" l6="true"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="text-align: center" class="tr-caption"&gt;The error messages&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;My first cynical thought was “Great! I programmed a virus!”. My brother’s reaction was “Wow – your code sucks so much that an antivirus recognized it as dangerous”. So, I rebuilt the executable (after the antivirus kindly removed it for me :P) and then I tried to scan it. The result was “No threats found”. I got the result for all the libraries and files used by my program.&lt;/p&gt; &lt;p&gt;After scanning lead to a dead end, I tried to comment out my code and remain with a simple hello world program (which still loads the same DLL’s) – and I still got the error message.&lt;/p&gt; &lt;p&gt;So then I tried to google for help about this error in my antivirus and I found out that it’s generated by a dynamic protection mechanism, which unlike traditional antiviruses, does not check the signature of my files.&lt;/p&gt; &lt;p&gt;So, what on earth was going on? An “Hello World” program which does nothing was causing a problem because of it’s dynamic behavior, while other programs which used the same libraries were OK? That does not make any sense.&lt;/p&gt; &lt;p&gt;Took me 30 minutes to figure this out:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The theme of the game was robots. Since it was the Visual Studio version, the logical name for the executable was VSrobots.exe.  &lt;li&gt;The word robot is often used for describing certain types of viruses and malware.  &lt;li&gt;The only difference between this program and others which used the library, was it’s name.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;So, I renamed the executable “HelloWorld.exe” and a miracle happened – it ran perfectly without any warnings from the antivirus.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt; Don’t name your executable files after things which may sound like viruses. Otherwise ****** Antivirus will block them :P&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;font size="-1"&gt;Note: I didn’t mention the name of the antivirus, to save some troubles that may raise because of it (mainly flame wars and other similar stuff regarding which antivirus is better – I have seen many wars like this in the web). Therefore, please refrain from posting the name of the antivirus in the comments, even if you recognize these dialog boxes.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-541034923718085359?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/541034923718085359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2011/02/my-name-is-antivirus-i-hate-robots.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/541034923718085359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/541034923718085359'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2011/02/my-name-is-antivirus-i-hate-robots.html' title='My name is Antivirus. I hate Robots.'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh6.googleusercontent.com/-7IkZjBe4_T4/TWj512Ma5fI/AAAAAAAAAT8/BYOMy6GgSwk/s72-c/VirusName.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-4292077049319782163</id><published>2011-02-04T18:34:00.003+02:00</published><updated>2011-08-30T17:57:19.742+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open-source'/><category scheme='http://www.blogger.com/atom/ns#' term='blender'/><title type='text'>It’s Open-Source, Live with it!</title><content type='html'>Today, I saw something concerning, something which I think that I should share with you. Since &lt;a href="http://www.gimp.org/"&gt;GIMP’s call for help and developers&lt;/a&gt;, there was a small &lt;a href="http://blenderartists.org/forum/showthread.php?t=206760"&gt;thread in the Blender Artists Forum&lt;/a&gt; that tried to raise support for GIMP, and make people aware of the lack of developers. While some replies were great to hear, and made me feel good as a GIMP developer, some simply pissed me off. Another event which amazed me, was to hear the reactions of some ungrateful people to &lt;strike&gt;&lt;a href="http://farsthary.wordpress.com/2011/01/21/bombastic-news/"&gt;farsthary’s job offer from 3D Coat&lt;/a&gt;&lt;/strike&gt; (link is broken, he removed the post). I have to say that I’m a great fan of Blender, GIMP and Inkscape, and these are some of the most amazing projects that prove the ability of a community to build something together. But &lt;strong&gt;community is a double-edged sword&lt;/strong&gt; – it can sometimes destroy things that took years to build.&lt;br&gt;&lt;a href="http://lightningismyname.blogspot.com/2011/02/its-open-source-live-with-it.html#more"&gt;Read more »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-4292077049319782163?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/4292077049319782163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2011/02/its-open-source-live-with-it.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/4292077049319782163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/4292077049319782163'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2011/02/its-open-source-live-with-it.html' title='It’s Open-Source, Live with it!'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-5338749031799837475</id><published>2011-01-30T04:35:00.002+02:00</published><updated>2011-01-30T18:18:02.782+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='beta'/><category scheme='http://www.blogger.com/atom/ns#' term='compile'/><title type='text'>Compiling (Pre-Packaged) GIMP on Windows!</title><content type='html'>Finally, after all the promises, I'm proud to announce that &lt;strong&gt;I finished the Guide for compililng (a pre-packaged version) GIMP on windows!&lt;/strong&gt; The technique is using MSYS and MinGW, and without Cygwin - which means it's a native windows build!&lt;br /&gt;&lt;br /&gt;&lt;em&gt;What does it mean Pre-Packaged?&lt;/em&gt; It means a source package that you download from the website, and not the latest one from the version control system (Git in GIMP's case). Pre-Packeged version are not exactly the same you get from Git, and they passed an additional step that makes the compilation a bit easier. The additional steps for compiling the Git versions will be posted (hopefully) later this week.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;On which version was this tested?&lt;/em&gt; On GIMP 2.7.1&lt;br /&gt;&lt;br /&gt;The guide can be found &lt;a href="http://lightningismyname.blogspot.com/p/compiling-gimp.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;b&gt;Update&lt;/b&gt; - fixed a small mistake which caused some stuff to be extracted to the wrong place.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-5338749031799837475?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/5338749031799837475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2011/01/compiling-pre-packaged-gimp-on-windows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/5338749031799837475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/5338749031799837475'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2011/01/compiling-pre-packaged-gimp-on-windows.html' title='Compiling (Pre-Packaged) GIMP on Windows!'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-5127945863253435614</id><published>2011-01-19T12:14:00.000+02:00</published><updated>2011-01-19T12:14:02.604+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vector'/><category scheme='http://www.blogger.com/atom/ns#' term='3d'/><category scheme='http://www.blogger.com/atom/ns#' term='raytracing'/><category scheme='http://www.blogger.com/atom/ns#' term='bug'/><category scheme='http://www.blogger.com/atom/ns#' term='equation'/><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>Lessons learned from Writing a RayTracer</title><content type='html'>As I promised in my post about finishing my ray-tracer, I'm publishing the math equations I used in order to save some time for other people, when doing the intersection calculations.&lt;br /&gt;&lt;br /&gt;You can find the document here: &lt;a href="https://docs.google.com/leaf?id=0B1xpjddklxdBZTlmMGU5MWQtMDg1Yy00ZTg1LWEyMGEtOGE1NGE0ODVhNTNi&amp;amp;sort=name&amp;amp;layout=list&amp;amp;num=50"&gt;The 3D Equation Sheet&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And here is a list of ridiculously annoying bugs, that I encountered during writing the ray-tracer. Although some of these seem really trivial, I'll list them in hope that they will save you some time when you write a ray-tracer. Even though these seem trivial, I know that some of them are bugs that other teams also had.&lt;br /&gt;&lt;br /&gt;Common&amp;nbsp;Bugs:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;When you shoot a ray from the eye and find an intersection, make sure the item is actually in front of the eye and not behind it!&lt;/li&gt;&lt;li&gt;When the ray from the eye intersects with a point, and you shoot light at the point, make sure the light is on the same side of the surface as your eye - so that you won't see light on the other side on opaque surfaces!&lt;/li&gt;&lt;li&gt;When calculating the intersection with a cylinder, which has a limited length - if the first intersection is&amp;nbsp;"too far" from the origin of the cylinder, the second intersection may actually be in range! So check both...&lt;/li&gt;&lt;li&gt;Rays of light should be shot from the eye of the camera, and not from the image plane&amp;nbsp;of the camera! (It matters when checking if an object is behind us or not)&lt;/li&gt;&lt;li&gt;When building the plane where x=6, the equation is x-6=0 and not x+6=0. Trivial, but not noticing this missing minus wasted an entire day for me…&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-5127945863253435614?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/5127945863253435614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2011/01/lessons-learned-from-writing-raytracer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/5127945863253435614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/5127945863253435614'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2011/01/lessons-learned-from-writing-raytracer.html' title='Lessons learned from Writing a RayTracer'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-739864786864305032</id><published>2011-01-17T23:26:00.005+02:00</published><updated>2011-01-17T23:43:52.630+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visualize'/><category scheme='http://www.blogger.com/atom/ns#' term='algorithm'/><category scheme='http://www.blogger.com/atom/ns#' term='graph'/><category scheme='http://www.blogger.com/atom/ns#' term='StructureGraphic'/><title type='text'>[StructureGraphic] Drawing DAG's – Part 2</title><content type='html'>&lt;p&gt;As I promised yesterday in &lt;a href="http://lightningismyname.blogspot.com/2011/01/structuregraphic-drawing-dag-part-1.html"&gt;my first post about drawing DAG's&lt;/a&gt;, today I’ll describe a big part of the “nice-looking” graph layout algorithm. It’s very simple and it’s described in the following video:&lt;/p&gt; &lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/N0rWr8c1CeY?fs=1&amp;amp;hl=iw_IL"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/N0rWr8c1CeY?fs=1&amp;amp;hl=iw_IL" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;If you are reading this blog from a feed, click the link to the real post to see the video&lt;p&gt;Corrections:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;at 9:46 I said the result with iterating by the topological sorting would be uglier - I meant prettier...&lt;/li&gt; &lt;li&gt;I somehow switched the image of the best result from the graph… Here is the &lt;a href="http://lh4.ggpht.com/_zq7QrjMjH0Y/TTSxNLAf-jI/AAAAAAAAAT0/X7nyu13rgZM/GraphReal.png"&gt;Correct Image Result&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-739864786864305032?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/739864786864305032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2011/01/structuregraphic-drawing-dag-part-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/739864786864305032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/739864786864305032'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2011/01/structuregraphic-drawing-dag-part-2.html' title='[StructureGraphic] Drawing DAG&amp;#39;s – Part 2'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-7641515848302565328</id><published>2011-01-17T02:00:00.003+02:00</published><updated>2011-01-17T23:28:40.554+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visualize'/><category scheme='http://www.blogger.com/atom/ns#' term='algorithm'/><category scheme='http://www.blogger.com/atom/ns#' term='graph'/><category scheme='http://www.blogger.com/atom/ns#' term='StructureGraphic'/><title type='text'>[StructureGraphic] Drawing DAG's – Part 1</title><content type='html'>&lt;p&gt;As I promised, it’s time to take &lt;a href="http://lightningismyname.blogspot.com/2011/01/structuregraphic-is-now-released.html"&gt;StructureGraphic&lt;/a&gt; to the next level – drawing DAG’s. I have spent several hours today on formalizing what makes people think a graph layout is aesthetical, and how to make an algorithm that can draw a graph in such a way. You can see some quick sketches from the process below:&lt;/p&gt;&lt;table style="text-align: center; margin-left: auto; margin-right: auto" class="tr-caption-container" cellspacing="0" cellpadding="0" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center"&gt;&lt;a style="margin-left: auto; margin-right: auto" href="http://3.bp.blogspot.com/_zq7QrjMjH0Y/TTN7ecCQ7gI/AAAAAAAAATk/-fa1aMefd4E/s1600/GraphLayout.png" imageanchor="1"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_zq7QrjMjH0Y/TTN7ecCQ7gI/AAAAAAAAATk/-fa1aMefd4E/s400/GraphLayout.png" width="400" height="312" n4="true"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="text-align: center" class="tr-caption"&gt;&lt;strong&gt;Quick:&lt;/strong&gt; Just display connections, somehow&lt;br&gt;&lt;strong&gt;Better:&lt;/strong&gt; Since it&amp;#39;s a DAG, make all edges point down and try to&lt;br&gt;reduce the amount of edges that cross one another&lt;br&gt;&lt;strong&gt;Best:&lt;/strong&gt; Align vertices to make it look better&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;a href="http://lightningismyname.blogspot.com/2011/01/structuregraphic-drawing-dag-part-1.html#more"&gt;Read more »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-7641515848302565328?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/7641515848302565328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2011/01/structuregraphic-drawing-dag-part-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/7641515848302565328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/7641515848302565328'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2011/01/structuregraphic-drawing-dag-part-1.html' title='[StructureGraphic] Drawing DAG&apos;s – Part 1'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_zq7QrjMjH0Y/TTN7ecCQ7gI/AAAAAAAAATk/-fa1aMefd4E/s72-c/GraphLayout.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-1158268761491076896</id><published>2011-01-14T18:14:00.001+02:00</published><updated>2011-01-15T17:26:07.940+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='2.7'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='compile'/><title type='text'>A very complete guide about compiling GIMP (Linux)</title><content type='html'>I have just published a very very detailed guide about compiling GIMP from source, with explanations of what does each step mean (instead of just giving commands for people to follow like dummies). You can find it &lt;a href="http://lightningismyname.blogspot.com/p/compiling-gimp.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Corrections/Suggestions/Comments will be happily accepted!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update (15 Jan, 2011):&lt;/strong&gt; Added instructions about updating your build&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-1158268761491076896?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/1158268761491076896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2011/01/very-complete-guide-about-compiling.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/1158268761491076896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/1158268761491076896'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2011/01/very-complete-guide-about-compiling.html' title='A very complete guide about compiling GIMP (Linux)'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-760558406640765683</id><published>2011-01-07T00:26:00.003+02:00</published><updated>2011-01-07T00:29:25.669+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open-source'/><category scheme='http://www.blogger.com/atom/ns#' term='visualize'/><category scheme='http://www.blogger.com/atom/ns#' term='draw'/><category scheme='http://www.blogger.com/atom/ns#' term='my'/><category scheme='http://www.blogger.com/atom/ns#' term='graph'/><category scheme='http://www.blogger.com/atom/ns#' term='StructureGraphic'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><title type='text'>StructureGraphic is now released!</title><content type='html'>After a short betta period, in which I sent the library only to few people for testing, I'm&amp;nbsp; now releasing the first public release of StructureGraphic! Students in the computer lab at my university are actually using this to debug their assignments in the data structures course - This makes me feel some pride :D&lt;br /&gt;&lt;br /&gt;To those who haven't read the &lt;a href="http://lightningismyname.blogspot.com/2010/12/announcing-project-libstructuregraphic.html"&gt;previous post about StructureGraphic&lt;/a&gt;, it's a library for visualizing data structures in java. Mainly, but not only, for debugging purposes.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_zq7QrjMjH0Y/TREE0fVf4WI/AAAAAAAAASk/qJ1BtjFtO7k/s1600/RBTree_And_BinomialHeap.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="200" n4="true" src="http://3.bp.blogspot.com/_zq7QrjMjH0Y/TREE0fVf4WI/AAAAAAAAASk/qJ1BtjFtO7k/s400/RBTree_And_BinomialHeap.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Visualizations of a Binomial Heap (top) and a Red Black Tree (bottom)&lt;br /&gt;Click to view fullsize&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;ul&gt;&lt;li&gt;The project homepage:&lt;br /&gt;&lt;a href="http://code.google.com/p/structure-graphic/"&gt;http://code.google.com/p/structure-graphic/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Downloads (Library and Manual):&lt;br /&gt;&lt;a href="http://code.google.com/p/structure-graphic/downloads/list"&gt;http://code.google.com/p/structure-graphic/downloads/list&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Source Code (It's Open-Source!):&lt;br /&gt;&lt;a href="http://code.google.com/p/structure-graphic/source/checkout"&gt;http://code.google.com/p/structure-graphic/source/checkout&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Ohloh page:&lt;br /&gt;&lt;a href="https://www.ohloh.net/p/structure-graphic/"&gt;https://www.ohloh.net/p/structure-graphic/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Feel free to dig into the source code and use the functions which are not yet documented. I'll complete the documentation of all the core functions later. Also, I'll try to make sure that any change in the library will be backwards compatiable - at least for the functions described in the official manual.&lt;br /&gt;&lt;br /&gt;The library is currently licensed under GPLv3. If there are any projects which wish to use it, and have problems with that license, they can contact me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-760558406640765683?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/760558406640765683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2011/01/structuregraphic-is-now-released.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/760558406640765683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/760558406640765683'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2011/01/structuregraphic-is-now-released.html' title='StructureGraphic is now released!'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_zq7QrjMjH0Y/TREE0fVf4WI/AAAAAAAAASk/qJ1BtjFtO7k/s72-c/RBTree_And_BinomialHeap.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-8394894065132358104</id><published>2010-12-29T00:37:00.000+02:00</published><updated>2010-12-29T00:37:46.732+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3d'/><category scheme='http://www.blogger.com/atom/ns#' term='raytracing'/><category scheme='http://www.blogger.com/atom/ns#' term='optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>Finished my Raytracer!</title><content type='html'>&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_zq7QrjMjH0Y/TRpeg2tTg-I/AAAAAAAAASw/wtd2zjxgRmc/s1600/Snowy.txt_source.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="210" n4="true" src="http://2.bp.blogspot.com/_zq7QrjMjH0Y/TRpeg2tTg-I/AAAAAAAAASw/wtd2zjxgRmc/s320/Snowy.txt_source.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Snowy Night&lt;br /&gt;15K faces, includes reflection and&amp;nbsp;phong normal interpolation&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Above you can see the splash screen for my raytracer! Just handed it in, and overall I'm proud of myself (many thanks to my partner, the guru behind most of the lighting!). The code is very optmized (as much optimized as I can get without starting to write unreadable code).&lt;br /&gt;&lt;br /&gt;Overall, I would summarize this assignment as something which I learned&amp;nbsp;from - not only about graphics, but mainly about, how to optimize code (changing several lines for example made everything 3 times faster), how to debug properly and about writing larger scale programs (4000 lines is not gigantic, but it's bigger than anything I dealt with in the past, in which I knew what every line does).&lt;br /&gt;&lt;br /&gt;The interesting part was writing the Octal Tree, aka Octree (Blender users should know what this is!). This was my first attempt at developing a high-performance data structure on my own, without any reference (there are many on google, but I used none).&amp;nbsp;On the way I developed several optimization tricks&amp;nbsp;(to make the tree less deep, to reduce the penalty of empty areas, and to overcome some other non-optimal meshes). &lt;br /&gt;&lt;br /&gt;I really enjoyed most of this assignment (except for the part in which some of the reference renders had mistakes in them - wasting 6 hours because they have a mistake is NOT fun...) and developing most of the &lt;strong&gt;fast&lt;/strong&gt; calculations for the geometry (not for the lighting) was fun.&lt;br /&gt;&lt;br /&gt;The document describing the math which I used will be released later this week (as a starting point for people who want to write ray tracers), along with a list of annoying and potentially common bugs when writing a raytracer. Also an update&amp;nbsp;about &lt;a href="http://lightningismyname.blogspot.com/2010/12/announcing-project-libstructuregraphic.html"&gt;StructureGraphic&lt;/a&gt; - still waiting for the answer from the proffessor about hosting it the university. If he won't answer soon, I'll host it externally (any suggestions for code hosting sites or&amp;nbsp;tips for choosing between github, launchpad, etc. ?). BTW, The next project in the course is writing a simple 3D game engine in OpenGL, and then writing a game with it :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-8394894065132358104?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/8394894065132358104/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2010/12/finished-my-raytracer.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/8394894065132358104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/8394894065132358104'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2010/12/finished-my-raytracer.html' title='Finished my Raytracer!'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_zq7QrjMjH0Y/TRpeg2tTg-I/AAAAAAAAASw/wtd2zjxgRmc/s72-c/Snowy.txt_source.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-8457386078452407630</id><published>2010-12-21T22:05:00.002+02:00</published><updated>2010-12-21T22:41:16.497+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gegl'/><category scheme='http://www.blogger.com/atom/ns#' term='open-source'/><category scheme='http://www.blogger.com/atom/ns#' term='visualize'/><category scheme='http://www.blogger.com/atom/ns#' term='draw'/><category scheme='http://www.blogger.com/atom/ns#' term='my'/><category scheme='http://www.blogger.com/atom/ns#' term='graph'/><category scheme='http://www.blogger.com/atom/ns#' term='StructureGraphic'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><title type='text'>Announcing - Project LibStructureGraphic</title><content type='html'>Note: This post is targeted mainly at programmers or people interested in visualization of data&lt;br /&gt;&lt;br /&gt;As programmers, we often write very complex data structures. The hard part about maintaining complex data structures, is tracing bugs - since let's face it, in many places it's not practical to find which node out of several hundreds is deffected.&lt;br /&gt;&lt;br /&gt;That's why I started a new project, called LibStructureGraphic. It's a library in Java, for visualizing data structures while making minimal or even no changes to their code. And since a&amp;nbsp;picture is worth &lt;nobr&gt;&lt;a href="http://en.wikipedia.org/wiki/Ackermann_function"&gt;Ackermann&lt;/a&gt;(4,3)&lt;/nobr&gt; words (This is a programmers joke), here is an example:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_zq7QrjMjH0Y/TREE0fVf4WI/AAAAAAAAASk/qJ1BtjFtO7k/s1600/RBTree_And_BinomialHeap.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="200" n4="true" src="http://3.bp.blogspot.com/_zq7QrjMjH0Y/TREE0fVf4WI/AAAAAAAAASk/qJ1BtjFtO7k/s400/RBTree_And_BinomialHeap.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Visualizations of a Binomial Heap (top) and a Red Black Tree (bottom)&lt;br /&gt;Click to view fullsize&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;The idea is that having a visualization of the graph should help the programmer see more data at once, and speed up the times spent on finding bugs. I personally used&amp;nbsp;custom code for drawing some data structures (for debugging) during my data structure course, and this was the source of this project. &lt;strong&gt;The visualization saved me hours of debugging!&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The library requires a data structure to have the following properties in order to be visualized:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;For now (will change in the future), the data structure must be representable as a Tree, which means it's composed of nodes where each node has exactly 1 parent and zero or more children.&lt;br /&gt;&lt;strong&gt;Support for Directed-Acyclic-Graphs (DAGs) will be added in one of the next versions, and support for cyclic graphs is planned for the future&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Each node of the data structure should be represented by an object, which either implements a given interface (for finding the "children", "value" and "color" of the node), or has annotations on the fields that should be drawn. Ideally, the annotations are the preferred way since they mean you don't need to implement any custom functions; The interface is there only for nodes in which it's not possible.&lt;br /&gt;The nodes don't have to be of the same type - each node can be a completly different type of object!&lt;/li&gt;&lt;/ol&gt;The library will be released soon -&amp;nbsp;I'm waiting only to see if one of the professors&amp;nbsp;of my university will be willing to host it on its servers as an official project or not (Since this could be very useful in at least 3 mandatory courses). Non-Java versions (python, C#, C++, and potentially C with GObject) are not currently planned, but if enough people will want it, I will consider it ;)&lt;br /&gt;&lt;br /&gt;And, the GIMP connection to this project (you didn't really expect me to write a post without mentioning GIMP, didn't you?) is that I'm working on a node-editor for GEGL. I knew I needed to implement a graph layout algorithm for it, and since I'm prototyping everything in Java, I thought of making a library from it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-8457386078452407630?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/8457386078452407630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2010/12/announcing-project-libstructuregraphic.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/8457386078452407630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/8457386078452407630'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2010/12/announcing-project-libstructuregraphic.html' title='Announcing - Project LibStructureGraphic'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_zq7QrjMjH0Y/TREE0fVf4WI/AAAAAAAAASk/qJ1BtjFtO7k/s72-c/RBTree_And_BinomialHeap.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-6037301359384800891</id><published>2010-12-15T02:05:00.005+02:00</published><updated>2010-12-16T02:06:04.529+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='3d'/><category scheme='http://www.blogger.com/atom/ns#' term='raytracing'/><category scheme='http://www.blogger.com/atom/ns#' term='vala'/><category scheme='http://www.blogger.com/atom/ns#' term='programming language'/><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>Writing a Raytracer, and some other random thoughts</title><content type='html'>I always wanted to write a raytracer, and theoretically I knew enough math and programming to do it for a long time. Yet, I didn't write one before - this is because I thought it would be a gigantic project. Well, I'm gald to tell you that at least a basic ray tracer is not too big!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_zq7QrjMjH0Y/TQf8AmKfzlI/AAAAAAAAASg/_fgJe3muocE/s1600/Beach.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="176" n4="true" src="http://2.bp.blogspot.com/_zq7QrjMjH0Y/TQf8AmKfzlI/AAAAAAAAASg/_fgJe3muocE/s400/Beach.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The picture above is from a half-done ray tracer which I'm implementing during a course in computer graphics (which I'm taking now). I have documented the math that I needed, along with annoying bugs that I had (and I'm sure that at least some of these are common bugs).&lt;br /&gt;&lt;br /&gt;When I finish this project in the following weeks, I intend to publish these documents. Currently I have:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A&amp;nbsp;list of things which can cause annoying bugs, which are related to how ray tracers should work.&lt;/li&gt;&lt;li&gt;A&amp;nbsp;document&amp;nbsp;&lt;strong&gt;explaining&lt;/strong&gt; many common 3D calculations (instead of taking these for granted, like we did in class).&lt;/li&gt;&lt;/ul&gt;I may publish more documentation about writing a ray tracer &lt;a href="http://2.bp.blogspot.com/_zq7QrjMjH0Y/TQf8AmKfzlI/AAAAAAAAASg/_fgJe3muocE/s1600/Beach.png" imageanchor="1" style="clear: right; cssfloat: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/a&gt;when I'm done - but this is just quick update about what I'm currently working on.&lt;br /&gt;&lt;br /&gt;During writing the raytracer, I saw the influence of choosing the right programming language. We started with C++ and after we had memory leak that we failed to trace (even with valgrind and friends) we migrated to java (in which you have to work very hard to leak memory) - since it was the begining and converting the code was quicker than fixing the leak.&lt;br /&gt;&lt;br /&gt;The debate about programming languages made me wonder - when GIMP 2.8 is finally out (and I'll start working on&amp;nbsp;gimp again in the next weeks - I had too many things to do lately), and the writing of GIMP 3.0 starts, should we keep using C?&lt;br /&gt;&lt;br /&gt;C is OK, as long as you know what you are doing, unlike C++ in which you can still make things crash even if you *think* you know what you are doing. I would really like to see GIMP in a higher level programming language, but it seems as if Java and C# are out of the question (patents, political/idiological reasons, ...). About a month ago, someone introduced me to &lt;a href="http://live.gnome.org/Vala"&gt;Vala&lt;/a&gt;&amp;nbsp;- a new OOP programming language, which works very nicely with the GNOME libraries, and it's translated to C code so that it works on most platforms.&lt;br /&gt;&lt;br /&gt;I wonder if it's possible to convert the code gradually to Vala - and have the C code integrate with the converted Vala code. It is theoretically possible (I think, since Vala translates into C), I just wonder if it's practical, and what would other developers think about this idea.&lt;br /&gt;&lt;br /&gt;Also, is Vala mature enough? And more importantly, Is Vala known enough? I did find several projects that use it, but when I tried to check how many people know it (asked fellow students in&amp;nbsp;the university labs - sounds like the right place to ask) most people said they never heard about it.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Edit:&lt;/b&gt; See the comments below for a discussion for/against languages such as javascript/python/perl&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-6037301359384800891?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/6037301359384800891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2010/12/writing-raytracer-and-some-other-random.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/6037301359384800891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/6037301359384800891'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2010/12/writing-raytracer-and-some-other-random.html' title='Writing a Raytracer, and some other random thoughts'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_zq7QrjMjH0Y/TQf8AmKfzlI/AAAAAAAAASg/_fgJe3muocE/s72-c/Beach.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-1769402523290928218</id><published>2010-11-06T13:11:00.000+02:00</published><updated>2010-11-06T13:11:23.859+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='gegl'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='whirl and pinch'/><category scheme='http://www.blogger.com/atom/ns#' term='operation'/><title type='text'>New GEGL operation!</title><content type='html'>Hello,&lt;br /&gt;&lt;br /&gt;As I mentioned, I started working on some gegl operations, and I'm glad to announnce my first official gegl operation - whirl and pinch! This operation is a port of the known gimp plugin to gegl (since eventually every gimp plugin will have to be ported).&lt;br /&gt;&lt;br /&gt;How to install it (linux users):&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Copy the file operations/workshop/whirl-pinch.c (from inside gegl's source tree) into ~/.local/gegl-0.1/plug-ins/&lt;/li&gt;&lt;li&gt;Make sure your enviroment contains gegl's build dependancies&lt;/li&gt;&lt;li&gt;Type 'make' inside ~/.local/gegl-0.1/plug-ins/&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Now, you will be able to access the operation inside gimp (using the "GEGL Operation" tool) and get a live on-canvas preview of it!&lt;br /&gt;&lt;br /&gt; &lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_zq7QrjMjH0Y/TNU2ZHnbvaI/AAAAAAAAASY/s-c9Y2BNNg0/s1600/WhirlPinchGEGL.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" alt="Whirl and pinch gegl op!" title="A preview of the whirl and pinch gegl op!" src="http://3.bp.blogspot.com/_zq7QrjMjH0Y/TNU2ZHnbvaI/AAAAAAAAASY/s-c9Y2BNNg0/s320/WhirlPinchGEGL.png" width="237" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;"Whirl and Pinch" live on canvas!&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;BTW - last night I closed 6 gimp bugs :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-1769402523290928218?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/1769402523290928218/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2010/11/new-gegl-operation.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/1769402523290928218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/1769402523290928218'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2010/11/new-gegl-operation.html' title='New GEGL operation!'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_zq7QrjMjH0Y/TNU2ZHnbvaI/AAAAAAAAASY/s-c9Y2BNNg0/s72-c/WhirlPinchGEGL.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-7080049466047617299</id><published>2010-10-21T00:47:00.005+02:00</published><updated>2011-02-06T14:49:47.479+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gegl'/><category scheme='http://www.blogger.com/atom/ns#' term='NAN'/><category scheme='http://www.blogger.com/atom/ns#' term='problem'/><category scheme='http://www.blogger.com/atom/ns#' term='gcc'/><category scheme='http://www.blogger.com/atom/ns#' term='error'/><category scheme='http://www.blogger.com/atom/ns#' term='compile'/><title type='text'>Fixing errors with NAN (C const) and GCC</title><content type='html'>Today, I was compiling &lt;a href="http://www.gegl.org/"&gt;GEGL&lt;/a&gt; on a computer other than my regular one, and I got this wonderful error:&lt;br&gt;&lt;pre&gt;exp-combine.c: In function 'gegl_expcombine_new_exposure':&lt;br&gt;exp-combine.c:149: error: 'NAN' undeclared (first use in this function)&lt;br&gt;exp-combine.c:149: error: (Each undeclared identifier is reported only once&lt;br&gt;exp-combine.c:149: error: for each function it appears in.)&lt;/pre&gt;The error happens only on certain machines with some versions of gcc, and I it may happen in the most unexpected times...&lt;br&gt;So, I thought I'd share the solution for this problem with you since I had it in several more projects which use the NAN constant. Basically, NAN is a constant for a floating point value, which represents value that is Not A Number (not to be confused with the value which represents infinity). This value is usually (see note at the end) returned when dividing zero by zero, and therefore it can be added to gcc's definitions by adding the following argument to the command line:&lt;br&gt;&lt;pre&gt;-DNAN="(0.0/0.0)"&lt;/pre&gt;This is equivalent to adding the following line in C&lt;br&gt;&lt;pre&gt;#define NAN (0.0/0.0)&lt;/pre&gt;Now, there is only a little problem - what if we are not running GCC ourselves? What if a makefile or some other utility does this? Well, with most configure scripts (These scripts prepare the build environment and generate the makefiles) you can simply set the &lt;span style="font-family: 'Courier New', courier, monospace"&gt;CFLAGS&lt;/span&gt; environment variable (before running the configure script) to fix this - in bash syntax this would be:&lt;br&gt;&lt;pre&gt;export CFLAGS="-DNAN=\"(0.0/0.0)\""&lt;/pre&gt;This solved my problems :)&lt;br&gt;Reference - &lt;a href="http://old.nabble.com/Where-is-NAN-Defined--td15398150.html"&gt;http://old.nabble.com/Where-is-NAN-Defined--td15398150.html&lt;/a&gt;, &lt;a href="http://linuxreviews.org/howtos/compiling/"&gt;http://linuxreviews.org/howtos/compiling/&lt;/a&gt;&lt;br&gt;As the original email list say, NAN is defined on some platforms and it's undefined on others, and our definition may not always work. From my experience, in the few cases were NAN wasn't defined, the fix presented here was enough.&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; I’d recommend checking the &lt;a href="#c409359889812889844"&gt;first comment&lt;/a&gt; below, from &lt;a href="http://www.blogger.com/profile/04746978727874491823"&gt;Martin Nordholts&lt;/a&gt; – he seems to offer another legitimate (and possibly more elegant) solution by telling GCC to use the gnu99 C standard.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-7080049466047617299?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/7080049466047617299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2010/10/fixing-errors-with-nan-c-const-and-gcc.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/7080049466047617299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/7080049466047617299'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2010/10/fixing-errors-with-nan-c-const-and-gcc.html' title='Fixing errors with NAN (C const) and GCC'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-2731957681490516106</id><published>2010-10-11T04:09:00.009+02:00</published><updated>2011-01-07T01:14:58.107+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Maverick Meerkat'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='technical'/><category scheme='http://www.blogger.com/atom/ns#' term='upgrade'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='guide'/><category scheme='http://www.blogger.com/atom/ns#' term='Maverick'/><category scheme='http://www.blogger.com/atom/ns#' term='10.10'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='10.04'/><title type='text'>Guide - Upgrading Ubuntu 10.04 to 10.10</title><content type='html'>This post describes the not-so-smooth update from Ubuntu 10.04 to 10.10. The &amp;quot;One Click Upgrade&amp;quot; did not really work here :P Took me several hours to get this right, and I used several backups to restore my system after bad attempts. Hopefully I&amp;#39;ll save you some time and effort on how to do this =)&lt;br&gt;&lt;br&gt;&lt;b&gt;If the usual upgrade works for you, follow it - the steps here were done because the regular upgrade didn&amp;#39;t work (slow internet connection, and some more problems).&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Info:&lt;/b&gt; I&amp;#39;m running 32-bit Ubuntu, inside Virtualbox (a VM) under Windows XP SP3 host.&lt;br&gt;&lt;a href="http://lightningismyname.blogspot.com/2010/10/upgrading-ubuntu-1004-to-1010.html#more"&gt;Read more »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-2731957681490516106?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/2731957681490516106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2010/10/upgrading-ubuntu-1004-to-1010.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/2731957681490516106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/2731957681490516106'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2010/10/upgrading-ubuntu-1004-to-1010.html' title='Guide - Upgrading Ubuntu 10.04 to 10.10'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-4412575956080326149</id><published>2010-09-02T01:36:00.000+03:00</published><updated>2010-09-02T01:36:25.211+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='text'/><category scheme='http://www.blogger.com/atom/ns#' term='multi-color'/><title type='text'>Update - Multicolored text is now supported in GIMP</title><content type='html'>Thanks to Michael Natterer (mitch) who had some time to do some cleaning to my patch, and integrate his patch to allow true rendering of color for text (instead of rendering an alpha mask) &lt;b&gt;GIMP now supports multicolored text&lt;/b&gt; :D&lt;br /&gt;&lt;br /&gt;Go test it from the latest source and report bugs if you find some ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-4412575956080326149?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/4412575956080326149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2010/09/update-multicolored-text-is-now.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/4412575956080326149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/4412575956080326149'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2010/09/update-multicolored-text-is-now.html' title='Update - Multicolored text is now supported in GIMP'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-5775764075961604841</id><published>2010-08-30T23:37:00.005+03:00</published><updated>2010-10-11T04:15:52.639+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='tip'/><category scheme='http://www.blogger.com/atom/ns#' term='user'/><category scheme='http://www.blogger.com/atom/ns#' term='technique'/><category scheme='http://www.blogger.com/atom/ns#' term='bug'/><category scheme='http://www.blogger.com/atom/ns#' term='report'/><title type='text'>Some thoughts on hunting bugs (Software in General)</title><content type='html'>I don&amp;#39;t tend to complain too much, but it was annoying as hell to track down this bug, so I though I&amp;#39;ll share some of the joy with you =) &lt;b&gt;This post is mainly for software &lt;u&gt;users&lt;/u&gt;&lt;/b&gt; (not GIMP-specific) as it should give you an insight on how to track the exact cause of a bug, and so &lt;b&gt;make better reports and make it easier for the developers to fix the bug =)&lt;/b&gt;&lt;br&gt;&lt;br&gt;Developers may also enjoy this post - thinking about this bug and how I tracked it, it is in fact a very funny bug :D&lt;br&gt;&lt;br&gt;&lt;a href="http://lightningismyname.blogspot.com/2010/08/some-thoughts-on-hunting-bugs-software.html#more"&gt;Read more »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-5775764075961604841?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/5775764075961604841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2010/08/some-thoughts-on-hunting-bugs-software.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/5775764075961604841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/5775764075961604841'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2010/08/some-thoughts-on-hunting-bugs-software.html' title='Some thoughts on hunting bugs (Software in General)'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-4918989114686507408</id><published>2010-08-28T00:34:00.006+03:00</published><updated>2010-08-28T01:28:53.852+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='export'/><category scheme='http://www.blogger.com/atom/ns#' term='pdf'/><category scheme='http://www.blogger.com/atom/ns#' term='official'/><title type='text'>GIMP can now export PDF's!</title><content type='html'>Hello!&lt;br /&gt;&lt;br /&gt;After some work, I'm proud to say that &lt;b&gt;GIMP can now export PDF's&lt;/b&gt; using my new cairo-based pdf export plugin!&lt;br /&gt;Go check it out - it's in the main source repository in the master branch :D&lt;br /&gt;&lt;br /&gt;Comments and feedback are more than welcome - you have until 2.8 to affect how this plugin will work and which features it will have. Currently, it has:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Support for multiple pages using multiple images using File-&gt;Create-&gt;Multiple-Paged PDF...&lt;/li&gt;&lt;li&gt;Support for &lt;b&gt;exporting text as text!!&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Support for resolutions&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;And it has the following optimizaiton options:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Replace rectangles of a single color with a vector shape. This can &lt;u&gt;dramatically&lt;/u&gt; decrease the file size&lt;/b&gt; (think of all the single-colored background layers that are now saved as vector instead as bitmap)&lt;/li&gt;&lt;li&gt;Remove the alpha channel of layers where it's unused, to decrease the file size&lt;/li&gt;&lt;li&gt;Discard layers which are not visible or are100% transparent&lt;/li&gt;&lt;li&gt;Can either apply layer masks (to decrease the file size) or keep them (better quality pdf, bigger file size)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Happy Gimping!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Edit:&lt;/b&gt; Updated the post with details on the plugin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-4918989114686507408?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/4918989114686507408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2010/08/gimp-can-now-export-pdfs.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/4918989114686507408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/4918989114686507408'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2010/08/gimp-can-now-export-pdfs.html' title='GIMP can now export PDF&apos;s!'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-116239012176975340</id><published>2010-08-11T16:49:00.001+03:00</published><updated>2010-08-11T19:17:16.939+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='misc'/><title type='text'>That's it! No more exams!</title><content type='html'>Finally, I finished all the big university exams :D&lt;br /&gt;This means I can now start to work on GIMP much much more time. As I said in my &lt;a href="http://lightningismyname.blogspot.com/2010/08/some-updates-feedback-needed.html"&gt;previous post&lt;/a&gt;, &lt;b&gt;We need some feedback from the GIMP community =)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;These two months until the next semester will also give me some more time to put into music and photography - two things whwich I haven't dedicated enough time to lately...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-116239012176975340?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/116239012176975340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2010/08/thats-it-no-more-exams.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/116239012176975340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/116239012176975340'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2010/08/thats-it-no-more-exams.html' title='That&apos;s it! No more exams!'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-5794480946356544326</id><published>2010-08-10T21:32:00.002+03:00</published><updated>2010-08-10T22:07:52.961+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='usability'/><category scheme='http://www.blogger.com/atom/ns#' term='text'/><category scheme='http://www.blogger.com/atom/ns#' term='angular'/><category scheme='http://www.blogger.com/atom/ns#' term='pdf'/><category scheme='http://www.blogger.com/atom/ns#' term='guide'/><category scheme='http://www.blogger.com/atom/ns#' term='multi-color'/><title type='text'>Some updates + Feedback Needed</title><content type='html'>As I said in my previous post, I'm a bit inactive due to the tests which I had in university. After finishing Logics for Computer Science, tomorrow I have my last test - the dreaded Calculus 2...&lt;br /&gt;&lt;br /&gt;So starting tomorrow noon (it's night here right now), I'm back on full time GIMP coding! Here is what I'm up to, and reasons for some delays:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Multicolored Text Layers&lt;/b&gt;&lt;br /&gt;On their way - no real reason for a delay, I just need to fix some (hopefully) easy bugs :-)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Where is the PDF plugin which you promised?&lt;/b&gt;&lt;br /&gt;A new API is being introduced into GIMP - an api for accessing layers, channels, masks and paths - all as GimpItem objects. I want this api to be finished before I'm done, so I'll write the code once.&lt;br /&gt;Also, it's currently impossible for plugins to access the layers inside layer groups - instead they get one layer which is a merged version of all the group. This means that text as text will be ruined if it's inside a group, so I'll wait a while to see if there is any chance it will be fixed before I continue.&lt;br /&gt;Finally,it's probably better to finish implementing the multicolored text patch, so I'll be able to test the pdf plugin when it's already integrated =)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Angular Guides - Feedback Needed&lt;/b&gt;&lt;br /&gt;Before you get excited, don't. I'm checking the option of adding support for guides with arbitrary angles inside GIMP (instead of only horizontal and vertical like now). I'm in doubt this is going to happen soon - I had a day to play with the code a bit, but nothing more.&lt;br /&gt;Someone (mitch if I remember right) suggested to implement the new guides system as paths; You can currently snap to the active path as if it was a guide (View-&amp;gt;Snap to active Path) - that's a less commonly known feature. Anyway, Implementing it this way will possibly allow us to add things like isometric/polar grids and other snapping shape we can imagine. So even if this sounds harder, it's worth a check.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Here is where I need your feedback on:&lt;/u&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;What kinds/shapes of guides/grids would you like to see in GIMP?&lt;/li&gt;&lt;li&gt;Do we need guide groups (for enabling/disabling many guides at once)?&lt;/li&gt;&lt;li&gt;Other guide related requests?&lt;/li&gt;&lt;/ul&gt;I don't promise anything yet, but if I'll know what I'm aiming for before I begin, it might help  :-)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Usability of GIMP's menus&lt;/b&gt;&lt;b&gt; - Feedback Needed&lt;/b&gt;&lt;br /&gt;Finally, there have been a discussion on the usability of the GIMP menus. There were discussions about adding searchboxes to search GIMP's menus (since these can get cluttered if having many plugins). &lt;br /&gt;&lt;br /&gt;&lt;u&gt;Here is where I need your feedback on:&lt;/u&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Would you like to be able to categorize your plugins? Or maybe tag them and browse by tags?&lt;/li&gt;&lt;li&gt;Do you need to be able to edit the categorization of an existing plugin (if such categorization exists)?&lt;/li&gt;&lt;li&gt;How would you like to search for a plugins/built-in functions? What should appear next to the description of each action/plugin?&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I'll raise some of the suggestions on the discussions in the mailing list or the developer's IRC. &lt;b&gt;We need your feedback!&lt;/b&gt; If we want to make GIMP better for the users, we better hear them =)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-5794480946356544326?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/5794480946356544326/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2010/08/some-updates-feedback-needed.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/5794480946356544326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/5794480946356544326'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2010/08/some-updates-feedback-needed.html' title='Some updates + Feedback Needed'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-7321583216341158594</id><published>2010-08-02T15:58:00.003+03:00</published><updated>2010-08-02T16:02:15.686+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='tip'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='round'/><category scheme='http://www.blogger.com/atom/ns#' term='selection'/><title type='text'>[Quick-Tip][GIMP] Rounding any selection</title><content type='html'>One thing I was asked how to do several times, in GIMP, is how to round a selection which is not rectangular. For example, if you have start shaped selection and you want to round it's corners - how do you do this?&lt;br /&gt;&lt;br /&gt;Today I'm going to show you a quick and dirty way to do this:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Load the selection that you wish to round. Save it to a channel so that you will be able to undo what we are going to do.&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_zq7QrjMjH0Y/TFa8ohAu3MI/AAAAAAAAARE/4ZXGQ-gYGkY/s1600/round-sel-step0.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_zq7QrjMjH0Y/TFa8ohAu3MI/AAAAAAAAARE/4ZXGQ-gYGkY/s1600/round-sel-step0.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Step 1: Load the selection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;li&gt;Shrink the selection by the radius you want to round it (i.e. if you want to round your selection by 10px, shrink it by 10px).  &lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_zq7QrjMjH0Y/TFa8pdZ-PFI/AAAAAAAAARI/zHkzY8tW3T0/s1600/round-sel-step1.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_zq7QrjMjH0Y/TFa8pdZ-PFI/AAAAAAAAARI/zHkzY8tW3T0/s1600/round-sel-step1.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Step 2: Shrink the selection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;li&gt;Create a new layer. Now stroke the selection with round caps/joins and set the stroke width to double the radius of the rounding (Since I shrunk the selection by 10px, I'll stroke it by 20px). &lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_zq7QrjMjH0Y/TFa8qS3nlsI/AAAAAAAAARM/DapbGnhDt88/s1600/round-sel-step2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_zq7QrjMjH0Y/TFa8qS3nlsI/AAAAAAAAARM/DapbGnhDt88/s1600/round-sel-step2.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Step 3: Stroke the selection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_zq7QrjMjH0Y/TFa8r6ig6PI/AAAAAAAAARQ/H_BUFkkTXrE/s1600/round-sel-step2-dialog.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/_zq7QrjMjH0Y/TFa8r6ig6PI/AAAAAAAAARQ/H_BUFkkTXrE/s320/round-sel-step2-dialog.png" width="216" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Note the settings of the&lt;br /&gt;"Cap/Join Style"&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;li&gt;Fill the selection (on the same layer you stroked the selection). &lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_zq7QrjMjH0Y/TFa8sbufu_I/AAAAAAAAARU/pT0iUm5rHiU/s1600/round-sel-step3.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_zq7QrjMjH0Y/TFa8sbufu_I/AAAAAAAAARU/pT0iUm5rHiU/s1600/round-sel-step3.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Step 4: Fill the selection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_zq7QrjMjH0Y/TFa8uRARxhI/AAAAAAAAARY/mQVcd0-XVtY/s1600/round-sel-step4.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_zq7QrjMjH0Y/TFa8uRARxhI/AAAAAAAAARY/mQVcd0-XVtY/s1600/round-sel-step4.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;This is how your layer&lt;br /&gt;should look (without the&lt;br /&gt;selection)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;li&gt;Now, transfer the alpha of the selected layer to the selection (aka "Alpha to Selection") and delete this temporary layer. &lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_zq7QrjMjH0Y/TFa8votCgWI/AAAAAAAAARc/lxiXgpOswWg/s1600/round-sel-step5.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_zq7QrjMjH0Y/TFa8votCgWI/AAAAAAAAARc/lxiXgpOswWg/s1600/round-sel-step5.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Step 5: Transfer the alpha&lt;br /&gt;of the layer to the selection&lt;br /&gt;and get rid of the layer&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;/ol&gt;That's all - A very neat result, even if the technique is a bit ugly :P&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Tip:&lt;/b&gt; If you want a smoother result (some of you may notice small jags on the resulting selection) try the following instead of step 3:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Convert the selection to a path (aka "Selection to Path").&lt;/li&gt;&lt;li&gt;Deselect the image.&lt;/li&gt;&lt;li&gt;Stroke the path (with the same settings as above).&lt;/li&gt;&lt;li&gt;Make a selection from the path and delete the path.&lt;/li&gt;&lt;/ol&gt;Does anyone want a script to automate this? If so, leave a comment and I'll write one =)&lt;br /&gt;&lt;ol&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-7321583216341158594?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/7321583216341158594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2010/08/quick-tipgimp-rounding-any-selection.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/7321583216341158594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/7321583216341158594'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2010/08/quick-tipgimp-rounding-any-selection.html' title='[Quick-Tip][GIMP] Rounding any selection'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_zq7QrjMjH0Y/TFa8ohAu3MI/AAAAAAAAARE/4ZXGQ-gYGkY/s72-c/round-sel-step0.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-7167869420465695135</id><published>2010-07-27T00:31:00.004+03:00</published><updated>2010-07-27T13:29:52.995+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='bug'/><category scheme='http://www.blogger.com/atom/ns#' term='report'/><category scheme='http://www.blogger.com/atom/ns#' term='bugfix'/><title type='text'>Help Us Help You! A short guide on reporting (GIMP) bugs</title><content type='html'>Hello,&lt;br /&gt;&lt;br /&gt;After a recent increase in the amount of bugs which are reported on the &lt;a href="https://bugzilla.gnome.org/browse.cgi?product=GIMP"&gt;GIMP bugzilla&lt;/a&gt;, I thought it might be a good idea to give some helpful tips about reporting bugs in GIMP (and in general in most open-source programs) - these will help us the developers to help you:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;In case of broken functionality, please try to:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;See if you can reproduce the problem. If you can't reproduce it maybe it's not a bug.&lt;br /&gt;Try different scenarios to reproduce the bug (i.e. try reproducing it with different images or with similar settings of the tools/plugins/etc.)&lt;/li&gt;&lt;li&gt;List the exact steps which are needed to reproduce the bug. If we don't have the steps, we won't be able to see the bug ourselves.&lt;/li&gt;&lt;li&gt;Tell us the exact version of GIMP (you can find it in the Help-&amp;gt;About menu) &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;In cases when GIMP or one of it's plugins crashes, we'll need more technical details about your system (in addition to the details about broken functionality):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The name of the operating system you are using, and it's version (for example "Windows XP service pack 3"/"Ubuntu Linux 10.04")&lt;/li&gt;&lt;li&gt;For advanced users: try to provide a stack trace. To do this, launch GIMP from the command line, with the flag -&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;-stack-trace-mode=yes&lt;/span&gt;. Now when GIMP crashes, you'll see a question in the terminal asking you if you want to print a stack trace. Print it and attach it to your bug report.&lt;/li&gt;&lt;li&gt;For regular users: Launch GIMP from the command line (if you know how to), and if any error is shown when GIMP crashes, attach it to your bug report.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Enhancement requests are not bugs.&lt;br /&gt;If you have an enhancement request you can post it on any of the following places:&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;GIMP Developer mailing list: (see &lt;a href="https://lists.xcf.berkeley.edu/mailman/listinfo/gimp-developer/"&gt;this page&lt;/a&gt; for more details)&lt;/li&gt;&lt;li&gt;GIMP Developer &lt;abbr title="Internet Relay Chat"&gt;IRC&lt;/abbr&gt; channel: &lt;a href="irc://irc.gimp.org/#gimp"&gt;irc://irc.gimp.org/#gimp&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://gimp-brainstorm.blogspot.com/"&gt;GIMP User-Interface Brainstorm blog&lt;/a&gt; (For enhancements/suggestions for the user interface only and not for general enhancements)&lt;/li&gt;&lt;/ul&gt;Enhancement requests can be filed as bugs, but only after they  were approved as a feature that should be included in GIMP. To get  feedback on your enhancement request, use the developer mailing list or the developer IRC.&lt;/ul&gt;&lt;br /&gt;Finally and most important of all: &lt;b&gt;Check if the bug was already reported&lt;/b&gt;. Unless you are using a development release, it's very likely that the bug you encountered was already reported by someone else.&lt;br /&gt;You can search for existing bug reports using the search form on the &lt;a href="https://bugzilla.gnome.org/browse.cgi?product=GIMP"&gt;bugzilla&lt;/a&gt; page of GIMP. Try entering some key word related to your bug and see if it was already reported.&lt;br /&gt;&lt;br /&gt;For more information about submitting bug reports to GIMP, see the &lt;a href="http://www.gimp.org/bugs/"&gt;GIMP bugs page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For your convenience, here is a list of commonly reported bugs of the last month:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://bugzilla.gnome.org/show_bug.cgi?id=623563"&gt;&lt;b&gt;Bug&amp;nbsp;623563&lt;/b&gt;&lt;/a&gt; -&lt;span id="summary_alias_container"&gt;        &lt;span id="short_desc_nonedit_display"&gt;Text tool crashes Gimp&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://bugzilla.gnome.org/show_bug.cgi?id=622608"&gt;&lt;b&gt;Bug&amp;nbsp;622608&lt;/b&gt;&lt;/a&gt; -&lt;span id="summary_alias_container"&gt;        &lt;span id="short_desc_nonedit_display"&gt;GIMP crashes when clicking any scroll bar from combo boxes&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://bugzilla.gnome.org/show_bug.cgi?id=606247"&gt;&lt;b&gt;Bug&amp;nbsp;606247&lt;/b&gt;&lt;/a&gt; -&lt;span id="summary_alias_container"&gt;        &lt;span id="short_desc_nonedit_display"&gt;Crash using rectangular select tool with fixed aspect ratio on Windows XP&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://bugzilla.gnome.org/show_bug.cgi?id=624089"&gt;&lt;b&gt;Bug&amp;nbsp;624089&lt;/b&gt;&lt;/a&gt; -&lt;span id="summary_alias_container"&gt;        &lt;span id="short_desc_nonedit_display"&gt;Copy-paste doesn't work&lt;/span&gt;      (GIMP 2.6.10 - Resolved and fixed)&lt;/span&gt;&lt;span id="summary_alias_container"&gt;&lt;span id="short_desc_nonedit_display"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span id="summary_alias_container"&gt;&lt;span id="short_desc_nonedit_display"&gt;&lt;/span&gt;      &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Thanks for reporting bugs and thanks for taking the time to read this post - it will help us help you! =)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Edit 13:27 IDT (GMT+2) 27.07.2010:&lt;/b&gt;&lt;br /&gt;To make it clearer (as it was pointed out by peter sikking): The GIMP UI brainstorm blog is only for enhancement requests for the UI - i.e. ways to make the user interface better. It's not for general enhancement requests.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-7167869420465695135?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/7167869420465695135/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2010/07/help-us-help-you-short-guide-on.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/7167869420465695135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/7167869420465695135'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2010/07/help-us-help-you-short-guide-on.html' title='Help Us Help You! A short guide on reporting (GIMP) bugs'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-5301287778327445720</id><published>2010-07-19T22:40:00.000+03:00</published><updated>2010-07-19T22:40:18.740+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='tool'/><category scheme='http://www.blogger.com/atom/ns#' term='suggestion'/><category scheme='http://www.blogger.com/atom/ns#' term='ui'/><category scheme='http://www.blogger.com/atom/ns#' term='gradient'/><title type='text'>GIMP suggestion - Improved Gradient Tool</title><content type='html'>A quick suggetion for GIMP's Gradient Tool (Maybe I'll have time to implement it sometime :P):&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_zq7QrjMjH0Y/TESoB4ol3sI/AAAAAAAAARA/DOstCAfidlw/s1600/C:%5Cfakepath%5CGradient_Suggestion.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="400" src="http://1.bp.blogspot.com/_zq7QrjMjH0Y/TESoB4ol3sI/AAAAAAAAARA/DOstCAfidlw/s400/C:%5Cfakepath%5CGradient_Suggestion.png" width="186" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;A quick UI Mockup&lt;br /&gt;Click to view in fullsize&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Basically there are two things I always wanted to do with the gradient tool:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Shift a gradient so that it's end wraps to it's beginning (See illustration)&lt;/li&gt;&lt;li&gt;Colorize a gradient using an external color - This can be used for all the glossy/metalic gradients; Simply create one grayscale gradient and apply the right color each time.&lt;br /&gt;Alternatively, instead of colorizing a gradient, add an option to rotate it's Hue - this might be even more powerful since this will support even more user cases.&lt;/li&gt;&lt;/ol&gt;Notes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&amp;nbsp;The first suggestion can not be accomplished currently in any trivial way, except for creating a new shifted gradient (yuck!).&amp;nbsp;&lt;/li&gt;&lt;li&gt;The UI for the second suggestion needs some work - Where would we display the updated gradient? Directly on the usual preview area or in a separate view?&lt;/li&gt;&lt;li&gt;The second suggestion doesn't bring any new capabilities - it can be currently done by using the gradient tool and then using some color tool. But, the one step approach is far more easier.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-5301287778327445720?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/5301287778327445720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2010/07/gimp-suggestion-improved-gradient-tool.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/5301287778327445720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/5301287778327445720'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2010/07/gimp-suggestion-improved-gradient-tool.html' title='GIMP suggestion - Improved Gradient Tool'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_zq7QrjMjH0Y/TESoB4ol3sI/AAAAAAAAARA/DOstCAfidlw/s72-c/C:%5Cfakepath%5CGradient_Suggestion.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-9203390742545197685</id><published>2010-07-12T23:39:00.004+03:00</published><updated>2010-07-13T00:14:51.128+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='text'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='multi-color'/><title type='text'>Progress - Multicolored text layers in GIMP</title><content type='html'>Hello again,&lt;br /&gt;&lt;br /&gt;Before I vanish to study to some more unexpected tests here is a small update on multi-colored text layers. mitch (Michael Natterer) has fixed up a patch, which now allows the text core to render multicolored text! Until now, text in GIMP was rendered as an alpha mask for a color layer which prevented my patch from being any good. The original reason for this, was to avoid having to handle images with different color modes (indexed/whatever) by rendering only the shape as a mask.&lt;br /&gt;&lt;br /&gt;So, I tried my patch again today. It works, if you want gray text :D I have some issues with the conversions, but the patch basically works.&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_zq7QrjMjH0Y/TDt88_RYkjI/AAAAAAAAAQY/H98Lj359kpY/multicolored-text-alpha.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="271" src="http://3.bp.blogspot.com/_zq7QrjMjH0Y/TDt88_RYkjI/AAAAAAAAAQY/H98Lj359kpY/multicolored-text-alpha.png" width="527" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;I did say it basically works - even if it's not the color you expected :D&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;For those of your who want to try this out, here is the bug report &lt;a href="https://bugzilla.gnome.org/show_bug.cgi?id=620674"&gt;Bug 620674  - Adding support for multi-colored text layer&lt;/a&gt;. There are two patches attached - one patch by me which adds the functionality in the gui/core for specifying several colors in one layer, and the other patch (by mitch) which enables rendering of the text-layout itself instead of using it as a mask on a color layer.&lt;br /&gt;Download both patches to the directory with the source of GIMP, and run the following commands in bash:&lt;br /&gt;&lt;pre class="brush: bash;"&gt;cd GIMP_SOURCE_DIRECTORY # replace with the actual path&lt;br /&gt;patch -p1 &amp;lt; MITCH_PATCH # replace with the actual path to the patch file&lt;br /&gt;patch -p1 &amp;lt; MY_PATCH # replace with the actual path to the patch file&lt;/pre&gt;Now re-compile GIMP and enjoy =)&lt;br /&gt;The color selection yields the wrong colors (bright shades of gray) but it works.&lt;br /&gt;&lt;br /&gt;I'll be back next week hopefully, but it may take a bit more time (Big exams...)&lt;br /&gt;&lt;br /&gt;p.s.&lt;br /&gt;I see that a very big fraction of the readers of this blog are from Russia - so спасибо! (For English speakers, that's thanks in Russian)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-9203390742545197685?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/9203390742545197685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2010/07/progress-multicolored-text-layers-in.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/9203390742545197685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/9203390742545197685'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2010/07/progress-multicolored-text-layers-in.html' title='Progress - Multicolored text layers in GIMP'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_zq7QrjMjH0Y/TDt88_RYkjI/AAAAAAAAAQY/H98Lj359kpY/s72-c/multicolored-text-alpha.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-2899704866395947336</id><published>2010-07-11T18:04:00.004+03:00</published><updated>2010-07-11T23:59:11.087+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='gegl'/><category scheme='http://www.blogger.com/atom/ns#' term='multicore'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='multithreading'/><category scheme='http://www.blogger.com/atom/ns#' term='operation'/><title type='text'>Multithreading in GIMP, Learning to write GEGL operations</title><content type='html'>As some of you have seen, GIMP is being ported to a new graph-based image core, called &lt;a href="http://gegl.org/"&gt;GEGL&lt;/a&gt;. Those of you who have experimented with GIMP 2.6.X and later, have  possibly found the GEGL tool (Under the tools menu) which allows you to see on-canvas preview of some operations such as blur, perlin noise (which some of you know as clouds), and more.&lt;br /&gt;&lt;br /&gt;Thanks to the very generous help of Øyvind Kolås (aka pippin), I have started to write a GEGL operation for GIMP. Too practice I decided to write a Pixelize operation (not too complex, but also works on a neighborhood of pixels and not on a single pixel).&lt;br /&gt;This is the first time which I implement an image processing algorithm which is not based on samplings for distortion (like the waves filter), and although I know the theory for a lot of time, it still has some bugs with wrong indexes :P&lt;br /&gt;&lt;br /&gt;When I finish this, I'm going to post it here along with a log of my chat with pippin on the IRC (on irc://irc.gimp.org/#gegl) to clear out some of the common questions about GEGL. Hopefully I'll be able to post a mini-guide (or more correctly, what I have learned, since I still have a lot to learn to write a full GEGL guide) to introduce other people to writing GEGL operations.&lt;br /&gt;&lt;br /&gt;The discussion originally started because I was disappointed that libgimp (the library for interactions between plugins and GIMP) is not thread-safe, meaning that you can't have two threads modifying the same drawable concurrently (unless of course you want to "Create &lt;strike&gt;Modern&lt;/strike&gt; Random Art" as someone called it). And it's &lt;strike&gt;impossible&lt;/strike&gt; not practical to fix it (due to the amount of time it would take).&lt;br /&gt;&lt;br /&gt;Apparently, GEGL is multi-threaded (more on this later, in my next post) and it usually works (but sometimes the threads reach a dead-lock, a situation in which both threads are blocking one another from progress since they are waiting for shared resources/memory). It still requires a bit of fixing (Cheer up for pippin! He needs some more motivation to fix this! ;-) )&lt;br /&gt;&lt;br /&gt;So, for those of you who want to try "bleeding edge" and unstable GEGL, set the environment variable &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;GEGL_THREADS&lt;/span&gt; to 2 (or whatever amount of threads you want GEGL to use) and expect up to 200% speedup (in ideal world. Practically some parts of the code which are executed sequentially, added to the limitation of the memory access speed, both will cause it to run slower depending on the operation and your system) with GEGL (or 0% if you reach a deadlock).&lt;br /&gt;&lt;b&gt;Be warned:&lt;/b&gt; this is supposed to be buggy. Please do not report bugs with this, unless you strictly know what you are doing.&lt;br /&gt;&lt;br /&gt;Edit: Made the post more correct about the possible speedup. 200% speedup is a naive optimistic view, which is ain't true (and I forgot to mention this)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-2899704866395947336?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/2899704866395947336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2010/07/learning-to-write-gegl-operations.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/2899704866395947336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/2899704866395947336'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2010/07/learning-to-write-gegl-operations.html' title='Multithreading in GIMP, Learning to write GEGL operations'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-8054141042472308778</id><published>2010-07-09T03:14:00.000+03:00</published><updated>2010-07-09T03:14:51.989+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='2.6.10'/><category scheme='http://www.blogger.com/atom/ns#' term='release'/><category scheme='http://www.blogger.com/atom/ns#' term='bugfix'/><title type='text'>GIMP 2.6.10 [bugfix] is out</title><content type='html'>GIMP 2.6.10 is out and it's a bugfix release. The time between this release and the previous one was a bit short because of an annoying bug that was discovered...&lt;br /&gt;&lt;pre class="brush: text"&gt;Overview of Changes from GIMP 2.6.9 to GIMP 2.6.10&lt;br /&gt;==================================================&lt;br /&gt;&lt;br /&gt;* Bugs fixed:&lt;br /&gt;&lt;br /&gt; 613328 - TGA files saved with incorrect header yOrigin data&lt;br /&gt; 623290 - Save As... does not save Windows Bitmap as default in dialog&lt;br /&gt; 621363 - CMYK decompose broken&lt;br /&gt; 595170 - brush - color from gradient works wrong in greyscale&lt;br /&gt; 613838 - Error in gimp-hue-saturation PDB call&lt;br /&gt; 622608 - GIMP crashes when clicking any scroll bar from combo boxes&lt;br /&gt; 565459 - newly opened images are put into the background&lt;br /&gt;&lt;br /&gt;* Updated translations:&lt;br /&gt;&lt;br /&gt; German (de)&lt;br /&gt; Italian (it)&lt;br /&gt; Romanian (ro)&lt;br /&gt; Portuguese (pt)&lt;/pre&gt;So, what are you waiting for? and grab the update ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-8054141042472308778?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/8054141042472308778/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2010/07/gimp-2610-bugfix-is-out.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/8054141042472308778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/8054141042472308778'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2010/07/gimp-2610-bugfix-is-out.html' title='GIMP 2.6.10 [bugfix] is out'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-3903944798202529819</id><published>2010-07-08T10:03:00.002+03:00</published><updated>2010-07-08T19:09:34.103+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='multicore'/><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='gsoc-2010'/><category scheme='http://www.blogger.com/atom/ns#' term='pdf'/><category scheme='http://www.blogger.com/atom/ns#' term='cage-transform'/><title type='text'>Updates</title><content type='html'>I'm back - Finished all the university tests finally!&lt;br /&gt;Some updates:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I got myself a working windows computer again on which I can test the compilation of GIMP - and this time it much faster (last time it was a computer with a disk access throught the network and the connection speed made the compilation 24 hours long...). I'll try to get this fixed as quickly as possible (and the IT at the university are trying to find me an even better windows computer).&lt;/li&gt;&lt;li&gt;I missed the 2.7.1 release with my PDF plugin - I had too many tests...&lt;/li&gt;&lt;li&gt;Decided to be a bit artistic - I submitted the new icon for the cage transform tool - &lt;a href="http://git.gnome.org/browse/gimp/plain/themes/Default/images/tools/stock-tool-cage-22.png?h=soc-2010-cage&amp;amp;id=cb797aa697d45de00c258d524120d6dfc1134411"&gt;you can take a look at it here&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;After finishing my course in Multicore Programming, I decided to try to do something practical with it. I'll be experimenting with multicore plugins for GIMP over the next week and I'll see what's possible (if any).&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-3903944798202529819?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/3903944798202529819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2010/07/updates.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/3903944798202529819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/3903944798202529819'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2010/07/updates.html' title='Updates'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-5005638950424023650</id><published>2010-06-24T21:10:00.000+03:00</published><updated>2010-06-24T21:10:00.634+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='release'/><category scheme='http://www.blogger.com/atom/ns#' term='update'/><category scheme='http://www.blogger.com/atom/ns#' term='hebrew'/><category scheme='http://www.blogger.com/atom/ns#' term='translation'/><category scheme='http://www.blogger.com/atom/ns#' term='2.6.9'/><title type='text'>GIMP 2.6.9 + Hebrew Translation Update</title><content type='html'>Hello everybody =)&lt;br /&gt;&lt;br /&gt;For those who haven't seen yet - &lt;b&gt;GIMP 2.6.9 is out&lt;/b&gt;!&lt;br /&gt;Go &lt;a href="http://gimp.org/downloads/"&gt;get it&lt;/a&gt;! The release notes are &lt;a href="http://developer.gimp.org/NEWS-2.6"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Also, I commited my first Hebrew translation update. About 1/6 of GIMP's main gui is translated.&lt;br /&gt;Want to help translating? Have comments about the translation? Comment here (or leave a bug report if it's a translation bug).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-5005638950424023650?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/5005638950424023650/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2010/06/gimp-269-hebrew-translation-update.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/5005638950424023650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/5005638950424023650'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2010/06/gimp-269-hebrew-translation-update.html' title='GIMP 2.6.9 + Hebrew Translation Update'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-1180984852187009458</id><published>2010-06-20T22:08:00.002+03:00</published><updated>2010-06-20T23:24:34.008+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='pdf'/><category scheme='http://www.blogger.com/atom/ns#' term='i18n'/><category scheme='http://www.blogger.com/atom/ns#' term='hebrew'/><title type='text'>Gimp Updates: Multi-Colored Text, PDF Export, Hebrew Translation and more...</title><content type='html'>Here are some quick updates from the last several days:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;First announcement: &lt;b&gt;GIMP is currently being translated to &lt;u&gt;Hebrew&lt;/u&gt;!&lt;/b&gt;&lt;br /&gt;As a Hebrew speaker, I was very disappointed from the state of the Hebrew translation of GIMP. So, I decided to start and translate it, and I already fixed several bugs to make the translation to Hebrew easier.&lt;br /&gt;The translation is going on well, and I'll start updating the main git repository with the translations soon.&lt;/li&gt;&lt;li&gt;I have some progress on the PDF export from GIMP. Hopefully it will be committed this week - all the blocking issues were resolved and basically all I need to do is to connect the GUI.&lt;/li&gt;&lt;li&gt;I did try to implement multicolored text support in GIMP (several colors in the same layer) and it failed for the most annoying reason - text in gimp was rendered as an alpha mask for a color layer.&lt;br /&gt;Mitch fixed it recently, so this means that I'll be able to retry my patch somewhere soon.&lt;/li&gt;&lt;/ul&gt;And finally, I have to say that I'm quitting (at least for now) the attempt to save single window mode layout in GIMP. It's not so practical right now, since the object which hold the data (GimpDockWindow in swm and GimpColumn in mwm) are being destroyed when switching between modes.&lt;br /&gt;After discussing it with Martin, I understood fixing this is not trivial, so I'm not going to do it anywhere soon...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-1180984852187009458?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/1180984852187009458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2010/06/gimp-updates-multi-colored-text-pdf.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/1180984852187009458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/1180984852187009458'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2010/06/gimp-updates-multi-colored-text-pdf.html' title='Gimp Updates: Multi-Colored Text, PDF Export, Hebrew Translation and more...'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-3685952349203659876</id><published>2010-06-18T14:06:00.002+03:00</published><updated>2010-06-18T17:26:03.934+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='photography'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='update'/><title type='text'>Updates and Flies</title><content type='html'>First of all, before I forget, many thanks to Alexandre Prokoudine who added this blog to &lt;a href="http://www.graphicsplanet.org/"&gt;GraphicsPlanet&lt;/a&gt;. Go check this site - it lists blogs of many open source projects and their developers.&lt;br /&gt;&lt;br /&gt;There is more progess on the single window mode - saving it partially works now (or more correctly, loading it works). The post about the single window mode is updated as I make progress in that direction.&lt;br /&gt;&lt;br /&gt;The blog is now printer friendly, at least for firefox users - please notify me if you see anything which doesn't look well in printing.&lt;br /&gt;&lt;br /&gt;And finally, this blog is also about art and photography. Here is a picture I took today, which I like (click to go to the page with the fullsize view)&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://www.deviantart.com/deviation/168082750/" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://lh5.ggpht.com/_zq7QrjMjH0Y/TBuBtCDRPlI/AAAAAAAAAO8/GsDS4AZvxiU/s320/IMG_2292_Cropeed_Marked.jpg" width="212" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="http://www.deviantart.com/deviation/168082750/"&gt;2fly&lt;/a&gt; by ~&lt;a class="u" href="http://lightningismyname.deviantart.com/"&gt;LightningIsMyName&lt;/a&gt; on &lt;a href="http://www.deviantart.com/"&gt;deviant&lt;/a&gt;&lt;a href="http://www.deviantart.com/"&gt;ART&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-3685952349203659876?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/3685952349203659876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2010/06/updates-and-flies.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/3685952349203659876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/3685952349203659876'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2010/06/updates-and-flies.html' title='Updates and Flies'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_zq7QrjMjH0Y/TBuBtCDRPlI/AAAAAAAAAO8/GsDS4AZvxiU/s72-c/IMG_2292_Cropeed_Marked.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-3589797593774483720</id><published>2010-06-17T11:50:00.000+03:00</published><updated>2010-06-17T11:50:35.610+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='documentation'/><category scheme='http://www.blogger.com/atom/ns#' term='script-fu'/><category scheme='http://www.blogger.com/atom/ns#' term='script'/><title type='text'>Script of the week - Creating HTML documentation for the GIMP PDB</title><content type='html'>Someone asked on IRC for this, so here it is: &lt;a href="http://www.pasteall.org/13829/scheme" style="color: blue; outline-color: -moz-use-text-color; outline-style: none; outline-width: medium;" target="_blank" title="http://www.pasteall.org/13829/scheme (new window)"&gt;http://www.pasteall.org/13829/scheme&lt;/a&gt;&lt;br /&gt;This script generates HTML documentation from all the GIMP PDB.&lt;br /&gt;&lt;br /&gt;To use it, simply call &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;(db-to-html-file FILE)&lt;/span&gt; in the script-fu console (replace FILE with the path for the file you want to create).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-3589797593774483720?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/3589797593774483720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2010/06/script-of-week-creating-html.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/3589797593774483720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/3589797593774483720'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2010/06/script-of-week-creating-html.html' title='Script of the week - Creating HTML documentation for the GIMP PDB'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-6710643794066754641</id><published>2010-06-16T00:50:00.011+03:00</published><updated>2010-06-18T12:30:01.422+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='single-window'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>Progress - Saving Single Window Mode settings in GIMP</title><content type='html'>Two days ago, I promised to try and work on the single window mode in GIMP. Well, I have worked on it, and I know basically know what needs to be done.&lt;br /&gt;&lt;br /&gt;Note: This post is mainly for people interested in the GIMP's source. For others, just take my word that there is some progress =)&lt;br /&gt;&lt;br /&gt;So, how is single window mode implemented in GIMP?&lt;br /&gt;The heirarchy is the following:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_zq7QrjMjH0Y/TBjKEHTNDlI/AAAAAAAAAOs/qHI3QlgWrfw/s1600/docks.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="259" src="http://4.bp.blogspot.com/_zq7QrjMjH0Y/TBjKEHTNDlI/AAAAAAAAAOs/qHI3QlgWrfw/s320/docks.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;The heirarchy of the user interface containers inside GIMP&lt;br /&gt;GimpDockable's inside GimpDockbook's inside GimpDock's &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;"&gt;GimpDock&lt;/span&gt; - which is very similar to a GtkVBox&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;|-- GimpDockbook&lt;/span&gt; - this is a small area which allows tabbing of several GimpDockable's&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New',Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; |--GimpDockable&lt;/span&gt; - This holds the actual content and user interface elements&lt;br /&gt;&lt;br /&gt;Single window mode, introduced two new containers - left and right. In each of these 2 new containers, we can store several GimpDock's in a row (see the image from my previous post, to see how this looks).&lt;br /&gt;&lt;br /&gt;Here is a typical part of the sessionrc file, a file in GIMP which holds your session preferences:&lt;br /&gt;&lt;pre class="brush: text"&gt;(session-info "toplevel"&lt;br /&gt;    (factory-entry "gimp-dock-window")&lt;br /&gt;    (position 0 25)&lt;br /&gt;    (size 200 523)&lt;br /&gt;    (open-on-exit)&lt;br /&gt;    (aux-info&lt;br /&gt;        (show-image-menu "false")&lt;br /&gt;        (follow-active-image "true"))&lt;br /&gt;    (gimp-dock&lt;br /&gt;        (book&lt;br /&gt;            (current-page 0)&lt;br /&gt;            (dockable "gimp-layer-list"&lt;br /&gt;                (tab-style icon)&lt;br /&gt;                (preview-size 32))&lt;br /&gt;            (dockable "gimp-channel-list"&lt;br /&gt;                (tab-style icon)&lt;br /&gt;                (preview-size 32)))&lt;br /&gt;        (book&lt;br /&gt;            (position 236)&lt;br /&gt;            (current-page 0)&lt;br /&gt;            (dockable "gimp-color-editor"&lt;br /&gt;                (tab-style preview)&lt;br /&gt;                (aux-info&lt;br /&gt;                    (current-page "GimpColorSelect")))&lt;br /&gt;            (dockable "gimp-brush-grid"&lt;br /&gt;                (tab-style preview))&lt;br /&gt;            (dockable "gimp-pattern-grid"&lt;br /&gt;                (tab-style preview)))))&lt;/pre&gt;So, here is a short analysis of what's going on:&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;(session-info "toplevel"...)&lt;/span&gt; - means we are talking about a top-level window&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;(factory-entry "gimp-dock-window")&lt;/span&gt; - means we are talking on a dock window (other windows are also saved, for example the location of the save dialog)&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;(current-page 0)&lt;/span&gt; - means that the current open tab is the first one&lt;br /&gt;The rest is pretty self explanatory...&lt;br /&gt;&lt;br /&gt;So, how am I supposed to implement saving a single window mode?&lt;br /&gt;"Simply", add two parameters directly after &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;(factory-entry "gimp-dock-window")&lt;/span&gt;. This entries are single-window-mode-position which can be one of "left", "right" and "floating" (since you can still have floating docks in single window mode). And, for docks which have one of either "left" or "right" value, I'll have to add a "dock-index" property which indicates their index in that side (left/right).&lt;br /&gt;&lt;br /&gt;Here is the bad part - I'll need to add these configuration properties to the docks themselves, and to the configuration file. Then, I'll also have to support parsing these parameters when activating single window mode. This is going to be long, and annoying but it also has a bright side - I know how to do this =)&lt;br /&gt;&lt;br /&gt;And with this somehow optimistic summary of what needs to be done - I'll go to sleep (I should really find times to update this blog during the day instead of writing at midnight :P).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Edited - Jun 16, 3:59 AM:&lt;/b&gt;&lt;br /&gt;1. fixed a wrong class name inside the image of the gui&lt;br /&gt;2. Got thumbs up about this way of implementation from martin (aka enselic) - the guru behind the single window mode.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Edited - Jun 18, 12:22 PM:&lt;/b&gt;&lt;br /&gt;Loading the settings of single window mode works! BUT, saving them doesn't :-( The problem is that if we are currently in single window mode, dock windows are not saved at all (even the fact that they exist is not saved).&lt;br /&gt;I believe they (the dock windows) are being destroyed during the switch to single window mode, after the dockables inside them were attached to the "uber" image window (that's how it's called in the code, I haven't chosen uber myself).&lt;br /&gt;If I'm true, this will also explain why when I quit after switching to single window mode, the settings that were loaded for single window mode, are lost (since they were associated with the dock windows and these were destroyed).&lt;br /&gt;There is no easy way out of this - I am starting to understand why mitch said this problem is so evil...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-6710643794066754641?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/6710643794066754641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2010/06/progress-saving-single-window-mode.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/6710643794066754641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/6710643794066754641'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2010/06/progress-saving-single-window-mode.html' title='Progress - Saving Single Window Mode settings in GIMP'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_zq7QrjMjH0Y/TBjKEHTNDlI/AAAAAAAAAOs/qHI3QlgWrfw/s72-c/docks.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-883688063022879743</id><published>2010-06-13T04:18:00.000+03:00</published><updated>2010-06-13T16:24:27.523+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='single-window'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>Single window mode - wonderful for the user, horrible for the developer</title><content type='html'>Some of you may have seen the single window mode introduced in 2.7. It's wonderful to use (no need to suffer anymore from the huge amount of floating docks!). You can dock all the dialogs on the sides and customize the location and size of every one of them. All, inside the main window!&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_zq7QrjMjH0Y/TBQu5kZdPJI/AAAAAAAAAOc/9gNclxR06co/s1600/single-window-screenshot.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_zq7QrjMjH0Y/TBQu5kZdPJI/AAAAAAAAAOc/9gNclxR06co/s320/single-window-screenshot.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;New features in this screenshot are layer groups, resource tagging, on-canvas text editing and on canvas dialogs, single window mode and paint-dynamics dialog (you can configure each dynamics settings in more way than you can imagine :D)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;But, here is the catch - you can't save this layout! Every time you start Gimp, you will have to go to Windows-&amp;gt;Single-Window Mode to enable this, and the location of the docks won't be saved. In other words, you have to rearrange the window layout every time, when using single window mode. &lt;br /&gt;And to make it worse, when trying to fix this mitch warned me:&lt;br /&gt;&lt;blockquote&gt;you actually picked the most evil current problem ;-)&lt;/blockquote&gt;Having to set your layout again every time IS VERY ANNOYING.&amp;nbsp; I'll try to fix this, but after looking at it I'm sure it's not going to be easy. Oh well, someone has to do this =) Starting this at the middle of the night (an hour ago) wasn't so smart - I'll go to sleep and do this (or at least try to) sometime during this week...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-883688063022879743?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/883688063022879743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2010/06/single-window-mode-wonderful-for-user.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/883688063022879743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/883688063022879743'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2010/06/single-window-mode-wonderful-for-user.html' title='Single window mode - wonderful for the user, horrible for the developer'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_zq7QrjMjH0Y/TBQu5kZdPJI/AAAAAAAAAOc/9gNclxR06co/s72-c/single-window-screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-6559920565574503505</id><published>2010-06-12T21:31:00.000+03:00</published><updated>2010-06-12T21:31:06.833+03:00</updated><title type='text'>Made my first commit to GIMP - and haven't ruined anything :D</title><content type='html'>I just made my first commit to the GIMP git repository, and luckily I haven't ruined anything (it's pretty easy to ruin things with git).&lt;br /&gt;&lt;br /&gt;Many thanks to Michael Natterer (aka Mitch) for helping me with this, and generally with helping me with diving into the GIMP internals.&lt;br /&gt;If you are reading this - I owe you so many thanks ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-6559920565574503505?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/6559920565574503505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2010/06/made-my-first-commit-to-gimp-and-havent.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/6559920565574503505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/6559920565574503505'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2010/06/made-my-first-commit-to-gimp-and-havent.html' title='Made my first commit to GIMP - and haven&apos;t ruined anything :D'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-4616252860949289347</id><published>2010-06-11T21:05:00.001+03:00</published><updated>2010-06-11T21:05:44.115+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>Got my Git Commit Acces!</title><content type='html'>I got my commit acces to gnome git! :D&lt;br /&gt;This means a lot to me =)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-4616252860949289347?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/4616252860949289347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2010/06/got-my-git-commit-acces.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/4616252860949289347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/4616252860949289347'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2010/06/got-my-git-commit-acces.html' title='Got my Git Commit Acces!'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-8382050118399100175</id><published>2010-06-10T22:32:00.002+03:00</published><updated>2010-07-11T18:10:10.296+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='website'/><category scheme='http://www.blogger.com/atom/ns#' term='update'/><category scheme='http://www.blogger.com/atom/ns#' term='compile'/><title type='text'>GIMP is alive, even if it doesn't look so</title><content type='html'>Recently, there was a mail to the gimp mailing list, that suggested&amp;nbsp;selling some gimp&amp;nbsp;stuff in&amp;nbsp;an online shop in the gimp website (gimp stickers, mugs, T-shirts, etc.). I like the eidea, but this isn't what I came to discuss todau. Here are 2 quotes from the responses that the suggestion got:&lt;br /&gt;&lt;br /&gt;On Wed, Jun 9, 2010 at 8:27 PM, Alexandre Prokoudine wrote:&lt;br /&gt;&lt;blockquote&gt;One of the things discussed at LGM was moving all project's domain and subdomains to a single dedicated server. We have a person willing to do the migration and a person to create a new website.&lt;/blockquote&gt;On Wed, Jun 9, 2010 at 8:50 PM, Michael Schumacher wrote:&lt;br /&gt;&lt;blockquote&gt;We're currently unable to update the website (if you have a look at the index page, even the release announcements aren't up to date).&lt;br /&gt;&lt;br /&gt;Until this is resolved, we won't be able to add, edit or remove anything to, on or from &lt;a href="http://www.gimp.org/"&gt;http://www.gimp.org/&lt;/a&gt;.&lt;/blockquote&gt;Some of you are probably going to respond like this: "WTF?! You have a website and you can't update it?!". My response was also something of that style. As developers of open source projects, we don't need the main website to know it's alive. However, the gimp user community probably think that this project is dead (6+ months without a single update of the site, not even about a call for students for Google Summer of Code!).&lt;br /&gt;&lt;br /&gt;So, after some discussions yesterday, in a thread that I started (and you can see the conversation &lt;a href="http://archives.free.net.ph/thread/20100610.044224.ef89dbce.en.html"&gt;here&lt;/a&gt;) several things happened:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The maintainer of the server was contacted - the site is going to be fixed soon (Thanks to Alexia Death that started working on it recently, even before this mailing session). Although the actual length of "soon" may vary, it's on the TODO list.&lt;/li&gt;&lt;li&gt;The idea of some sort of developer blogs was raised, and several people volunteered to update them (including me). We'll have to see how does updating the site goes, and maybe we will create these blog(s).&lt;/li&gt;&lt;li&gt;There was a recent discussion about weekly/daily builds.&amp;nbsp;These builds will serve us by allowing other people to find bugs, and it will serve the community by showing them the latest developments (and that the&amp;nbsp;gimp project is still alive). It wasn't decided yet if there will be such builds - some developers object (since&amp;nbsp;this can generate many useless bug reports if people who don't understand&amp;nbsp;gimp will try the betta)&amp;nbsp;and some support this (since people are already using such builds, so let's make it controlled so we get reports from builds in controlled enviroments).&lt;/li&gt;&lt;li&gt;New builds will hopefully be released soon:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A new stable version release 2.6.X&amp;nbsp;with some more bugfixes&amp;nbsp;&lt;/li&gt;&lt;li&gt;&amp;nbsp;A new unstable build, 2.7.X to replace the old one. This will allow users to see the new features and report bugs so we can fix them. Hopefully, there will be more frequent unstable builds.&lt;/li&gt;&lt;/ul&gt;Again, keep in mind that the definition of soon is very flexible...   &lt;/li&gt;&lt;li&gt;I'm going to post an offical guide on compiling gimp on windows, on the main gimp developer website. This will probably help the people out there who want to try the latest versions, but are using windows (like me) where it's almost impossible to compile gimp :P&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;And now for some personal updates:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Still waiting for my commit acces to the gimp git - I applied a week ago.&lt;/li&gt;&lt;li&gt;The PDF export plugin, which I'm working on, will take a bit more time due to the exam period from the unversity.&lt;/li&gt;&lt;/ul&gt;That's all for today =)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-8382050118399100175?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/8382050118399100175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2010/06/gimp-is-alive-even-if-it-doesnt-look-so.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/8382050118399100175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/8382050118399100175'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2010/06/gimp-is-alive-even-if-it-doesnt-look-so.html' title='GIMP is alive, even if it doesn&apos;t look so'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-3983698513926454706</id><published>2010-06-06T00:21:00.001+03:00</published><updated>2010-06-06T00:21:51.694+03:00</updated><title type='text'></title><content type='html'>&lt;pre class="brush: java"&gt;public class Test&lt;br /&gt;{&lt;br /&gt;    public static void main (String[] args)&lt;br /&gt;    {&lt;br /&gt;        System.out.println ("Hello World");&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-3983698513926454706?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/3983698513926454706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2010/06/public-class-test-public-static-void.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/3983698513926454706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/3983698513926454706'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2010/06/public-class-test-public-static-void.html' title=''/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-4267161089149799871</id><published>2010-06-02T23:58:00.000+03:00</published><updated>2010-06-03T00:22:34.848+03:00</updated><title type='text'>Site updated!</title><content type='html'>Finally - a template which I like&amp;nbsp;=)&amp;nbsp;(customized one of the predefined templates) &lt;br /&gt;&lt;br /&gt;Some updates:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Had a talk with Peter Sikking today (aka guiguru at gimp IRC) about the UI of the pdf plugin (I'm writing a PDF export plugin for GIMP). Expect to see it in GIMP's trunk(!) later this week.&lt;/li&gt;&lt;li&gt;I'm working on a translation of GIMP to hebrew - this will take some time but I hope to find some users for it&lt;/li&gt;&lt;li&gt;I'll have this blog posts available both in hebrew and in english, when I start posting tutorials&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-4267161089149799871?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/4267161089149799871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2010/06/site-updated.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/4267161089149799871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/4267161089149799871'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2010/06/site-updated.html' title='Site updated!'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-3055315525101806015</id><published>2010-04-06T03:07:00.000+03:00</published><updated>2010-04-06T03:07:14.668+03:00</updated><title type='text'>Hello World</title><content type='html'>Hopefully this will be my new website =)&lt;br /&gt;I'm a student for computer science at &lt;a href="http://www.tau.ac.il/"&gt;Tel-Aviv University&lt;/a&gt;&amp;nbsp;and my interests are&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Computer Graphics&lt;/li&gt;&lt;li&gt;Digital Art&lt;/li&gt;&lt;li&gt;Photography&lt;/li&gt;&lt;li&gt;Music&lt;/li&gt;&lt;li&gt;Programming&lt;/li&gt;&lt;/ul&gt;I try to contribute to the open source project &lt;a href="http://www.gimp.org/"&gt;GIMP&lt;/a&gt;, an advanced image-manipiulation and image authoring program.&amp;nbsp;(some see it simply as&amp;nbsp;a free alternative to photoshop)&lt;br /&gt;&lt;br /&gt;Hope this time I'll keep the site maintained :P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-3055315525101806015?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/3055315525101806015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2010/04/hello-world.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/3055315525101806015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/3055315525101806015'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2010/04/hello-world.html' title='Hello World'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-5833543042185368600</id><published>2008-06-25T14:48:00.003+03:00</published><updated>2011-03-25T18:46:05.587+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GIMP Tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='color'/><category scheme='http://www.blogger.com/atom/ns#' term='gif'/><category scheme='http://www.blogger.com/atom/ns#' term='indexed'/><category scheme='http://www.blogger.com/atom/ns#' term='dithering'/><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='layers'/><category scheme='http://www.blogger.com/atom/ns#' term='png'/><category scheme='http://www.blogger.com/atom/ns#' term='jpg'/><category scheme='http://www.blogger.com/atom/ns#' term='file'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='dither'/><category scheme='http://www.blogger.com/atom/ns#' term='grayscale'/><category scheme='http://www.blogger.com/atom/ns#' term='size'/><title type='text'>Squeezing your Filesize (KB) - Tutorial</title><content type='html'>There are lots of cases where you want to squeeze a picture&amp;#39;s filesize. Sometimes a small picture can be 250+ KB while a bigger picture can be only 10KB. This is because of the different filetypes.Today I&amp;#39;m going to teach you, how to choose the optimal filetype for your picture.Although this tutorial uses GIMP (all the instructions about plugins and menus are for GIMP), this should help users of other programs that have basic understanding of their program.&lt;a href="http://lightningismyname.blogspot.com/2008/06/squeezing-your-filesize-kb-tutorial_25.html#more"&gt;Read more »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-5833543042185368600?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/5833543042185368600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2008/06/squeezing-your-filesize-kb-tutorial_25.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/5833543042185368600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/5833543042185368600'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2008/06/squeezing-your-filesize-kb-tutorial_25.html' title='Squeezing your Filesize (KB) - Tutorial'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6878515242136045523.post-8599531179881426771</id><published>2008-06-15T15:36:00.005+03:00</published><updated>2010-08-02T21:37:52.580+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gimp'/><category scheme='http://www.blogger.com/atom/ns#' term='vector'/><category scheme='http://www.blogger.com/atom/ns#' term='tool'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='stroke'/><category scheme='http://www.blogger.com/atom/ns#' term='drawing'/><category scheme='http://www.blogger.com/atom/ns#' term='bezier'/><category scheme='http://www.blogger.com/atom/ns#' term='path'/><title type='text'>GIMP Path Tool (aka Pentool) Tutorial</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_zq7QrjMjH0Y/TDbykYjsj_I/AAAAAAAAAPs/0xOctw5rsjs/s1600/icon-big.png" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" rw="true" src="http://1.bp.blogspot.com/_zq7QrjMjH0Y/TDbykYjsj_I/AAAAAAAAAPs/0xOctw5rsjs/s1600/icon-big.png"&gt;&lt;/a&gt;&lt;/div&gt;In this tutorial, you will learn the Path Tool (aka Pentool) in GIMP. The Path Tool is used to create complex shapes and curves. Many people don&amp;#39;t use it since it&amp;#39;s too complicated, However today I&amp;#39;m going to show you that it&amp;#39;s not.&lt;br&gt;Note: This tutorial was transfered from my old website, and it&amp;#39;s now updated with more information&lt;br&gt;&lt;a href="http://lightningismyname.blogspot.com/2008/06/gimp-path-tool-aka-pentool-tutorial_15.html#more"&gt;Read more »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6878515242136045523-8599531179881426771?l=lightningismyname.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lightningismyname.blogspot.com/feeds/8599531179881426771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lightningismyname.blogspot.com/2008/06/gimp-path-tool-aka-pentool-tutorial_15.html#comment-form' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/8599531179881426771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6878515242136045523/posts/default/8599531179881426771'/><link rel='alternate' type='text/html' href='http://lightningismyname.blogspot.com/2008/06/gimp-path-tool-aka-pentool-tutorial_15.html' title='GIMP Path Tool (aka Pentool) Tutorial'/><author><name>LightningIsMyName</name><uri>http://www.blogger.com/profile/12478732800540872551</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_zq7QrjMjH0Y/TDbykYjsj_I/AAAAAAAAAPs/0xOctw5rsjs/s72-c/icon-big.png' height='72' width='72'/><thr:total>17</thr:total></entry></feed>
