<?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-1254328298726568959</id><updated>2012-01-13T04:04:42.234+02:00</updated><category term='ruby'/><category term='flash'/><category term='live'/><category term='cache'/><category term='apple'/><category term='shader'/><category term='decorator'/><category term='ipad'/><category term='mock'/><category term='adobe'/><category term='osx'/><category term='bios'/><category term='asset management'/><category term='sqlite3'/><category term='cms'/><category term='python'/><category term='maya'/><category term='windows'/><category term='mel'/><category term='laptop'/><category term='database'/><category term='TaskJuggler'/><category term='linux'/><category term='hdx'/><category term='mocker'/><category term='houdini'/><category term='hibernate'/><category term='18'/><category term='wingIDE'/><category term='photography'/><category term='macbook pro'/><category term='sqlalchemy'/><category term='pro'/><category term='property'/><category term='cd'/><category term='version'/><category term='compile'/><category term='idiom'/><category term='lightroom'/><category term='android'/><category term='pyqt'/><category term='VEX'/><category term='function decorator'/><category term='production asset management'/><category term='bibble'/><category term='version control'/><category term='qt'/><category term='ubuntu'/><category term='project'/><category term='suspend'/><category term='hp'/><category term='svn'/><title type='text'>Ozgur's Blog</title><subtitle type='html'>notes of a TD</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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>33</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1254328298726568959.post-1767811279232411622</id><published>2011-12-02T00:01:00.002+02:00</published><updated>2011-12-02T10:58:45.420+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='idiom'/><category scheme='http://www.blogger.com/atom/ns#' term='sqlite3'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='sqlalchemy'/><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>Autoload in SQLAlchemy</title><content type='html'>A quick tip,&lt;br /&gt;&lt;br /&gt;If you want your data models to autoload their contents as you create them, you can use the following idiom:&lt;br /&gt;&lt;br /&gt;I generally use three python modules in my database related (thus using SQLAlchemy) applications, one for the declarative Base (declarative.py), one for the database url, session, query and engine (db.py) and a last one for the models (models.py).&lt;br /&gt;&lt;br /&gt;In the declarative.py:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: python" style="overflow: auto; width: 100%;"&gt;from sqlalchemy.ext.declarative import declarative_base&lt;br /&gt;Base = declarative_base()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In the db.py:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: python" style="overflow: auto; width: 100%;"&gt;from declarative import Base&lt;br /&gt;engine = None&lt;br /&gt;session = None&lt;br /&gt;query = None&lt;br /&gt;metadata = Base.metadata&lt;br /&gt;database_url = None&lt;br /&gt;&lt;br /&gt;def setup(url="sqlite:///:memory:"):&lt;br /&gt;    global engine&lt;br /&gt;    global session&lt;br /&gt;    global query&lt;br /&gt;    global metadata&lt;br /&gt;    global database_url&lt;br /&gt;    &lt;br /&gt;    # to let my models to register them selfs &lt;br /&gt;    # and fill the Base.metadata&lt;br /&gt;    import models&lt;br /&gt;    &lt;br /&gt;    database_url = url&lt;br /&gt;    &lt;br /&gt;    engine = sqlalchemy.create_engine(database_url, echo=False)&lt;br /&gt;    &lt;br /&gt;    # create the tables&lt;br /&gt;    metadata.create_all(engine)&lt;br /&gt;    &lt;br /&gt;    # create the Session class&lt;br /&gt;    Session = sqlalchemy.orm.sessionmaker(bind=engine)&lt;br /&gt;    &lt;br /&gt;    # create and save session object to session&lt;br /&gt;    session = Session()&lt;br /&gt;    query = session.query&lt;br /&gt;    &lt;br /&gt;    return session&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Setting up the database becomes &lt;i&gt;db.setup()&lt;/i&gt;, easy enough.&lt;br /&gt;&lt;br /&gt;In the model.py:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: python" style="overflow: auto; width: 100%;"&gt;import db&lt;br /&gt;from declarative import Base&lt;br /&gt;&lt;br /&gt;class MyClass(Base):&lt;br /&gt;    __tablename__ = "MyClasses"&lt;br /&gt;    id = Column(Integer, primary_key=True)&lt;br /&gt;    name = Column(String(256), unique=True, nullable=False)&lt;br /&gt;    description = Column(String)&lt;br /&gt;    &lt;br /&gt;    def __new__(cls, name):&lt;br /&gt;        if name:&lt;br /&gt;            # get the instance from the db&lt;br /&gt;            if db.session is None:&lt;br /&gt;                # create the session first&lt;br /&gt;                db.setup()&lt;br /&gt;            &lt;br /&gt;            obj_db = db.query(MyClass).\&lt;br /&gt;                         filter_by(name=name).first()&lt;br /&gt;        &lt;br /&gt;            if obj_db is not None:&lt;br /&gt;                # return the database instance&lt;br /&gt;            &lt;br /&gt;                # skip the __init__&lt;br /&gt;                obj_db.__skip_init__ = None&lt;br /&gt;                &lt;br /&gt;                return obj_db&lt;br /&gt;        &lt;br /&gt;        # if we are here,&lt;br /&gt;        # it means that there is no instance&lt;br /&gt;        # in the database with the given name&lt;br /&gt;        # so just create one normally&lt;br /&gt;        # And SQLAlchemy queries will use this part&lt;br /&gt;        return super(MyClass, cls).__new__(cls, name)&lt;br /&gt;    &lt;br /&gt;    def __init__(self, name):&lt;br /&gt;        # do not initialize if it is created from the DB&lt;br /&gt;        if hasattr(self, "__skip_init__"):&lt;br /&gt;            return&lt;br /&gt;        &lt;br /&gt;        self.name = name&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In the above example the &lt;i&gt;__init__&lt;/i&gt; method is unnecessarily included to show how to skip the &lt;i&gt;__init__&lt;/i&gt; when there is an instance retrieved from the database.&lt;br /&gt;&lt;br /&gt;The key in the above example is the usage of &lt;i&gt;__new__&lt;/i&gt; and using the &lt;i&gt;super&lt;/i&gt; to hand the class creation to &lt;i&gt;Type&lt;/i&gt; as shown above, this will trigger &lt;i&gt;__init__&lt;/i&gt;. We can not just &lt;i&gt;return&lt;/i&gt; because the class will not be initialized and we should skip the &lt;i&gt;__init__&lt;/i&gt; for instances returned from the database.&lt;br /&gt;&lt;br /&gt;So by using this idiom, you should be able to restore an instance without querying it:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: python" style="overflow: auto; width: 100%;"&gt;from model import MyClass&lt;br /&gt;import db&lt;br /&gt;&lt;br /&gt;db.setup()&lt;br /&gt;&lt;br /&gt;myC1 = MyClass(name="Test")&lt;br /&gt;myC1.description = "To show the instance retrieved correctly"&lt;br /&gt;db.session.add(myC1)&lt;br /&gt;db.session.commit()&lt;br /&gt;&lt;br /&gt;myC2 = MyClass(name="Test")&lt;br /&gt;print myC2.description&lt;br /&gt;# this should print:&lt;br /&gt;#     To show the instance retrieved correctly&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Thats all, easy and smooth...&lt;br /&gt;&lt;br /&gt;Edit: Now I need to note that SQLAlchemy also uses &lt;i&gt;__new__&lt;/i&gt; to create new instances, but we prevent it doing another query again inside &lt;i&gt;__new__&lt;/i&gt; by checking the &lt;i&gt;name&lt;/i&gt; argument, which is not used by SQLAlchemy when restoring from database.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-1767811279232411622?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/1767811279232411622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=1767811279232411622' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/1767811279232411622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/1767811279232411622'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2011/12/autoload-in-sqlalchemy.html' title='Autoload in SQLAlchemy'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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-1254328298726568959.post-7135223690953947782</id><published>2011-11-06T20:54:00.011+02:00</published><updated>2011-11-06T22:50:23.416+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='ipad'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>My first iDevice</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Last week, I recieved an iPad as a gift from my boss (I should not talk  about what kind of nasty things that I had to do to get this gift ;) ), anyway now I've officially entered to the world of Apple.&lt;br /&gt;&lt;br /&gt;First impression, I've liked it a lot. I was always talking about how much a tablet is useless for me because I have a smartphone and a laptop, but it seems that after getting it you start to find a lot of use for it.&lt;br /&gt;&lt;br /&gt;Now I'm reading all my emails and news feeds (and writing this post) on iPad and I'm planning to sign up for magazines like 3D World (as I see there is no digital version of Cinefex for now).&lt;br /&gt;&lt;br /&gt;I'm lucky because they didn't make fun about me that much at work, cause, as an Android fun and phone owner (SGS 2) even though I was always talking about how much I hate about Apple's money oriented policies, I always stated that as a tablet iPad is better than any android tablet (except the &lt;a href="http://www.engadget.com/2011/08/19/advent-vega-gets-unofficial-gpu-accelerated-android-3-2-port-v/"&gt;Advent Vega&lt;/a&gt;) and recommended iPad to anyone asking what to buy.&lt;br /&gt;&lt;br /&gt;The only thing that I'm missing is the lack of Android grade sharing. In Android, the sharing functionality is something more universal than it is in iOS. For example, when you install an app that allows you to share something, it is automatically listed in the sharing targets. Like &lt;a href="http://www.stumbleupon.com/"&gt;StumbleUpon&lt;/a&gt;, it is listed in any application that wants to share something. But in iOS, as I see, it is not working like that, the app needs to be programmed in that way to be able to use StumbleUpon as a sharing target. For now it is a big minus for iOS.&lt;br /&gt;&lt;br /&gt;On the other hand, Eventhough it doesn't have dual core A5 CPU and the powerfull PowerVR SGX 543 &lt;span class="Apple-style-span"  style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.296875); -webkit-composition-fill-color: rgba(175, 192, 227, 0.230469); -webkit-composition-frame- color:rgba(77, 128, 180, 0.230469);"&gt;GPU of iPad 2, &lt;/span&gt;&lt;span class="Apple-style-span"  style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.292969); -webkit-composition-fill-color: rgba(175, 192, 227, 0.230469); -webkit-composition-frame-color:rgba(77, 128, 180, 0.230469);"&gt;I've liked the smoothness of the interface.&lt;/span&gt;&lt;/div&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;br /&gt;I definetely liked the battery life. I was able to use it for two days continously without recharging it. I am still amazed how long the battery stays in %100 even while watching video on the internet.&lt;br /&gt;&lt;br /&gt;I very much liked the consistent style of iOS apps which is another nice feature that Android apps are missing.&lt;/div&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;I liked iPad...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-7135223690953947782?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/7135223690953947782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=7135223690953947782' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/7135223690953947782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/7135223690953947782'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2011/11/last-week-i-recieved-ipad-as-gift-from.html' title='My first iDevice'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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-1254328298726568959.post-2890844480080025344</id><published>2011-11-01T02:17:00.001+02:00</published><updated>2011-11-06T14:26:46.795+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='macbook pro'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Planning to switch to a Macbook Pro and OSX</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;I'm still using my &lt;b&gt;&lt;a href="http://www.hp.com/united-states/products/hdx18t.html"&gt;HP HDX 18&lt;/a&gt;&lt;/b&gt; notebook, it is 3 years old now. And last year I bought a &lt;b&gt;&lt;a href="http://www.apple.com/macbookpro/"&gt;Macbook Pro 13&lt;/a&gt;&lt;/b&gt; for my wife, ever since that time I felt pure envy. So I decided to buy a &lt;b&gt;Macbook Pro 17&lt;/b&gt; to myself when the &lt;b&gt;Pre-2012&lt;/b&gt; versions become available. &lt;br /&gt;&lt;br /&gt;Because I hate using two operating systems at the same time (aka dual boot) I need to decide which operating system I should use, Ubuntu or OSX. So I thought listing what I like and hate will help to choose one.&lt;br /&gt;&lt;br /&gt;What I like about MBP and OSX:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The &lt;b&gt;build quality&lt;/b&gt; of Macbooks are incredible.&lt;/li&gt;&lt;li&gt;Multi-touch trackpad is awesome. After using my wifes macbook pro a couple of minutes and switch back to mine, I still tend to keep scrolling with two fingers (very intuitive), which is obviously not working.&lt;/li&gt;&lt;li&gt;OSX has better support to MBP hardware (arguable)&lt;/li&gt;&lt;li&gt;You can get more juice out of your &lt;b&gt;battery&lt;/b&gt; (even with &lt;b&gt;powertop&lt;/b&gt; and custom hacks under linux you get around &lt;a href="http://mac.linux.be/content/improve-battery-life-macbook-ubuntu"&gt;6 hours&lt;/a&gt; where as you get &lt;a href="http://www.apple.com/macbookpro/features.html#battery"&gt;7-10 hours&lt;/a&gt; in OSX)&lt;/li&gt;&lt;li&gt;&lt;b&gt;Wake up&lt;/b&gt; and &lt;b&gt;sleep&lt;/b&gt; are incredible, still can not believe how fast it sleeps and wakes up (inevitable)&lt;/li&gt;&lt;li&gt;Native &lt;b&gt;gamma adjustment&lt;/b&gt; tool is incredible, still can not get correct gamma response under linux with the only tool for me is nvidia control panel (need more r&amp;amp;d on this subject)&lt;/li&gt;&lt;li&gt;All &lt;a href="http://www.adobe.com/"&gt;&lt;b&gt;Adobe&lt;/b&gt;&lt;/a&gt; programs (Photoshop and Lightroom mostly) are working natively (but I need to state that I hate Adobe), using alternatives like &lt;a href="http://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CCwQFjAA&amp;amp;url=http%3A%2F%2Fwww.gimp.org%2F&amp;amp;ei=Oy6vTvvpAsvEtAb3p-Vp&amp;amp;usg=AFQjCNHSDGuHdZTSGB1PiMFTSSn1zSDRCw&amp;amp;sig2=4FSstekU3v7ZbUi0sukp4Q"&gt;&lt;b&gt;Gimp&lt;/b&gt;&lt;/a&gt; sometimes doesn't satisfy your needs as &lt;b&gt;CMYK&lt;/b&gt; files can not be read in Gimp and trying to give a chance to Wine will leave you with no pressure sensitivity under PS CS 5, CS3 works fine though and for &lt;a href="http://www.bibblelabs.com/"&gt;Bibble&lt;/a&gt;, eventough their creative photo retouching tools are absolutely better than Lightroom (I think it is because Lightroom doesn't want to step into Photoshop's shoes) I'm still not liking the vibrance tool in bibble (it is more or less like saturation where it should not change the skin colors) and the performance in linux compared to windows is very slow.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.diablo3.com/"&gt;&lt;b&gt;Diablo III&lt;/b&gt;&lt;/a&gt; will work natively under OSX where as under linux the only chance to get this adorable piece of art to work is &lt;a href="http://www.winehq.org/"&gt;Wine&lt;/a&gt;, although wine is very nice and most of the time smooth, running a windows program with wine is not comparable to running it nativeley under OSX (I wouldn't think that I was going to say that I'm liking an os because of a game but it is true I'm very excited about Diablo III)&lt;/li&gt;&lt;li&gt;OSX is based on &lt;a href="http://www.freebsd.org/"&gt;&lt;b&gt;FreeBSD&lt;/b&gt;&lt;/a&gt;, so you will feel at home with the terminal and shell commands&lt;/li&gt;&lt;li&gt;It has the same tools with linux like &lt;a href="http://www.mikerubel.org/computers/rsync_snapshots/"&gt;&lt;b&gt;rsync&lt;/b&gt;&lt;/a&gt; so my backup script will still going to work (o-oh I forgot that OSX doesn't support ext4 and my external backup drive is using &lt;b&gt;EXT4&lt;/b&gt;, so I need to convert it to &lt;b&gt;EXT2 &lt;/b&gt;or &lt;b&gt;HFS&lt;/b&gt; or something else)&lt;/li&gt;&lt;li&gt;&lt;b&gt;space/preview&lt;/b&gt; is working adorably (&lt;b&gt;&lt;a href="https://launchpad.net/gnome-sushi"&gt;Gnome-Sushi&lt;/a&gt;&lt;/b&gt; is not working that flawless)&lt;/li&gt;&lt;li&gt;&lt;b&gt;drag&amp;amp;drop&lt;/b&gt; was not so fun before&lt;/li&gt;&lt;li&gt;The way that the applications are installed and placed on a consistent place (&lt;b&gt;/Applicatons&lt;/b&gt;)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.jetbrains.com/pycharm/"&gt;&lt;b&gt;Pycharm&lt;/b&gt;&lt;/a&gt; and &lt;a href="http://wingware.com/"&gt;&lt;b&gt;WingIDE&lt;/b&gt;&lt;/a&gt; are working in the same way as they are in linux.&lt;/li&gt;&lt;/ul&gt;What I don't like about MBP and OSX:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;No numeric pad, so it seems that I need to get use to it (no deal breaker)&lt;/li&gt;&lt;li&gt;Houdini under OSX doesn't support Qt and PyQt4, at least I couldn't manage to run it, even though I compiled the Qt, Sip and PyQt4 against houdini's python 2.6 (this was the deal breaker for me, when I was trying to finish a project on a Mac Pro and OSX, where in the middle of the night I installed Ubuntu and 30 minutes later of my switch I was working happily under linux with everything working smoothly)&lt;/li&gt;&lt;li&gt;Another for Qt, compiling it for Maya 2012 OSX and then writing a bash script to link all the dylibs to Nuke's Qt libs took like 3-4 days to figure out, where as under linux it is enough to copy the PyQt4 folder and the Sip related files to nukes site-packages folder, and as I mentioned before Qt is not working for Houdini OSX (may be I'm missing something).&lt;/li&gt;&lt;li&gt;No &lt;b&gt;apt_get&lt;/b&gt;, this is a horrible deal breaker, I heard about &lt;a href="http://www.macports.org/"&gt;&lt;b&gt;macports&lt;/b&gt;&lt;/a&gt;, but they say that time to time it will leave you with broken packages where you can't downgrade nor upgrade.&lt;/li&gt;&lt;li&gt;The OSX community is not very technical compared to linux (though there are very successful open source package developers who are using OSX), it becomes very important if you try to build a pipeline over the three operating systems and can not find a solution for something very simple.&lt;/li&gt;&lt;li&gt;&lt;strike&gt;Application based &lt;b&gt;alt+tab&lt;/b&gt; switching still confuses me how do you switch between windows of the same program, expose? (but I've liked the gnome-shell implementation, where you can use the arrow key after alt+tab while holding alt key)&lt;/strike&gt; As Chris has pointed using command+~ (tilde) switches between the windows of the same application and I found that using command+tab and arrow keys shows the preview of the windows of the chosen application, so I think I'm going to be fine when I start using osx, apparently it the lack of information that hardens my experience in osx.&amp;nbsp; &lt;strike&gt;&lt;br /&gt;&lt;/strike&gt;&lt;/li&gt;&lt;li&gt;&lt;strike&gt;May be I'm missing something but why the &lt;b&gt;green plus button&lt;/b&gt; on the tittle bar is &lt;b&gt;not maximizing&lt;/b&gt; the window to the screen sometimes.&lt;/strike&gt; Seems that it is fixed or working as predicted in OSX Lion. &lt;/li&gt;&lt;/ul&gt;On the other hand, there are couple of things annoying me in linux:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;like the &lt;a href="https://bugs.launchpad.net/ubuntu/+source/linux/+bug/365775"&gt;high cpu usage bug&lt;/a&gt; which is still not solved for the last 3 years I was in the linux world&lt;/li&gt;&lt;li&gt;I slowly started to feel tired about always fixing something&lt;/li&gt;&lt;li&gt;It started to feel like it is not complete as a package&lt;/li&gt;&lt;li&gt;Applications are spread out all over the system, you can find things installed under /usr, /usr/local, /usr/local/share, /usr/share, /opt/, /var, /var/local, /var/opt etc.&lt;/li&gt;&lt;li&gt;still can not solve the &lt;b&gt;Samba speed issue&lt;/b&gt;, and &lt;b&gt;NFS&lt;/b&gt; is using &lt;b&gt;UTF-8&lt;/b&gt; in &lt;b&gt;Linux&lt;/b&gt; and &lt;b&gt;ANSI&lt;/b&gt; in &lt;b&gt;Windows,&lt;/b&gt; so having a windows server with NFS, any Turkish characters in the filenames (which means that I need to kill somebody by the way) will leave you with a file name with "?" characters in the best condition. &lt;/li&gt;&lt;li&gt;others mentioned above &lt;/li&gt;&lt;/ul&gt;But I need to state that I'm &lt;b&gt;in love with Ubuntu&lt;/b&gt; and if I finally decide to switch to OSX completely, it is going to be like tearing my heart off, if I will not turn back in 2 weeks.&lt;br /&gt;&lt;br /&gt;But change is good time to time. So it seems like I'm going to give another chance to OSX besides, it was Houdini who made me left OSX before ;)&lt;br /&gt;&lt;br /&gt;&lt;div align="right" style="font-size: xx-small;"&gt;posted from &lt;a href="https://market.android.com/details?id=pl.przemelek.android.blogger"&gt;Bloggeroid&lt;/a&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/1254328298726568959-2890844480080025344?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/2890844480080025344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=2890844480080025344' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/2890844480080025344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/2890844480080025344'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2011/11/planning-to-switch-to-macbook-pro-and.html' title='Planning to switch to a Macbook Pro and OSX'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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-1254328298726568959.post-7702726495477162107</id><published>2011-09-19T00:27:00.001+03:00</published><updated>2011-09-19T00:27:32.455+03:00</updated><title type='text'>Switched to PyCharm</title><content type='html'>I was using &lt;a href="http://wingware.com/"&gt;WingIDE&lt;/a&gt; for the last 2 years and I loved it. It was and it still is a great Python IDE. Recently in the mailing list of WingIDE they were talking about how great &lt;a href="http://www.jetbrains.com/pycharm/"&gt;PyCharm&lt;/a&gt; is and what is missing in WingIDE and where PyCharm fails.&lt;br /&gt;&lt;br /&gt;Anyway I downloaded the trial version of PyCharm and started to use it. At the beginning I hate it. Basically it felt slow and there were couple of other things that I was very much used to use in WingIDE and they were missing in PyCharm (it was my mistake, they were all present but I need to search for them).&lt;br /&gt;&lt;br /&gt;I didn't touch it for 2 weeks and then after what, I don't remember, I've opened it up again and started to read the quick tips. And I found that all the things that made me to switch back to WingIDE was there. And there were a lot more things which are enhanced and working properly in PyCharm and it supports more languages, has tons of options to customize the way it works etc. Somehow I felt that even the program feels slower, I'm coding faster. There are tons of shortcuts for TDD development, you need to watch this &lt;a href="http://www.jetbrains.com/pycharm/demos/quick_overview/pycharm_getting_started.html"&gt;video&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;There is a "Back to &lt;strike&gt;school&lt;/strike&gt; office sale" where you can buy the personal version of PyCharm for $49 instead of $99. Which is very much reasonable when you think that I paid $230 for WingIDE ( $195 Wing IDE 3 + $35 to upgrade to WingIDE 4, but the latest price for WingIDE Pro 4 - Non Commercial is $95 which is in the same margin with PyCharm Personal without the discount.).&lt;br /&gt;&lt;br /&gt;So I bought PyCharm and I'm very happy using it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-7702726495477162107?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/7702726495477162107/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=7702726495477162107' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/7702726495477162107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/7702726495477162107'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2011/09/switched-to-pycharm.html' title='Switched to PyCharm'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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-1254328298726568959.post-3398327063948248757</id><published>2011-04-13T12:30:00.007+03:00</published><updated>2011-11-29T11:19:59.397+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='houdini'/><title type='text'>Houdini BUG: ERROR: Couldn't open "Fuse11.0.658/FUSE_ColorOptions.ui" for reading</title><content type='html'>This is a bug report I've created for Houdini 11.0.658 and it also gives a workaround for the problem. I'm publishing it here cause there is no solution on the web (or at least I couldn't found any).&lt;br /&gt;&lt;br /&gt;Under Mac OSX 10.6.6 setting HOUDINI_PATH environment variable to a path either in ~/.profile or in .MacOSX/environment.plist causes Houdini to crash on startup. The terminal outputs the following error messages:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Stereo1s-Mac-Pro:MacOS stereo1$ echo $HOUDINI_PATH&lt;br /&gt;/Users/Servers/Shared/M/DEV/houdini&lt;br /&gt;Stereo1s-Mac-Pro:MacOS stereo1$ pwd&lt;br /&gt;/Applications/Houdini 11.0.658/Houdini.app/Contents/MacOS&lt;br /&gt;Stereo1s-Mac-Pro:MacOS stereo1$ ./houdini&lt;br /&gt;ERROR: Couldn't open resource file "resources" (No such file or directory)&lt;br /&gt;Can't open dophints.cmd&lt;br /&gt;ERROR: Couldn't open "Fuse11.0.658/FUSE_ColorOptions.ui" for reading: No such file or directory&lt;br /&gt;Color name 'ListEntry1' is missing from the theme.&lt;br /&gt;Color name 'ListEntry2' is missing from the theme.&lt;br /&gt;Couldn't find font Proportional.12 - using default instead&lt;br /&gt;Couldn't find font Proportional.9 - using default instead&lt;br /&gt;Couldn't find font Proportional.9 - using default instead&lt;br /&gt;Couldn't find font Proportional.9 - using default instead&lt;br /&gt;Couldn't find font Proportional.9 - using default instead&lt;br /&gt;Couldn't find font Proportional.9 - using default instead&lt;br /&gt;Couldn't find font Proportional.9 - using default instead&lt;br /&gt;Couldn't find font Proportional.9 - using default instead&lt;br /&gt;(and this last line repeats around 100 times)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;and adding &lt;code&gt;"/Library/Frameworks/Houdini.framework/Versions/11.0.658/Resources/houdini"&lt;/code&gt; to HOUDINI_PATH at least lets houdini to open properly but the interface is not looking the same before (I think it is not loading my personal preferences this time).&lt;br /&gt;&lt;br /&gt;To fix the preferences issue then I have also added &lt;code&gt;"$HOME/Library/Preferences/houdini/11.0:/Users/Shared/houdini/11.0:$HIP/houdini"&lt;/code&gt; to the HOUDINI_PATH and everything works as expected right now.&lt;br /&gt;&lt;br /&gt;So the final HOUDINI_PATH looks like this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;HOUDINI_PATH=/Library/Frameworks/Houdini.framework/Versions/11.0.658/Resources/houdini:$HOME/Library/Preferences/houdini/11.0:/Users/Shared/houdini/11.0:$HIP/houdini:/Users/Shared/Servers/M/DEV/houdini&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;But under Windows setting the HOUDINI_PATH didn't cause any problem like that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-3398327063948248757?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/3398327063948248757/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=3398327063948248757' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/3398327063948248757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/3398327063948248757'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2011/04/houdini-bug-error-couldnt-open.html' title='Houdini BUG: ERROR: Couldn&apos;t open &quot;Fuse11.0.658/FUSE_ColorOptions.ui&quot; for reading'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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-1254328298726568959.post-3308871131570137820</id><published>2011-01-17T00:03:00.006+02:00</published><updated>2011-01-17T00:45:00.887+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hdx'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='18'/><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='laptop'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='cd'/><category scheme='http://www.blogger.com/atom/ns#' term='hp'/><category scheme='http://www.blogger.com/atom/ns#' term='bios'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><category scheme='http://www.blogger.com/atom/ns#' term='live'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='suspend'/><title type='text'>Taking The Pleasure of Suspend/Hibernate on Ubuntu</title><content type='html'>Suspend and Hibernate had always been a problem with my laptop in Ubuntu. I believe I've finally fixed it.&lt;br /&gt;&lt;br /&gt;I first tried to use the s2disk and s2ram tools which are installed with uswsusp (sudo apt-get install uswsusp). It fixed my hibernation but not suspend. I then, tried a couple of tweaks suggested in &lt;a href="http://linux.aldeby.org/howto-ubuntu-linux-on-hp-pavilion-dv2000-dv6000-dv9000-series-laptops.html/7#suspend"&gt;this page&lt;/a&gt;. But it didn't fixed my suspend problem again (though the settings are still present, I think they are helping me anyway).&lt;br /&gt;&lt;br /&gt;Then I downloaded the latest bios+flash utility from HP. But, there was a problem, the utility is written for Windows.&lt;br /&gt;&lt;br /&gt;I tried to search for information about how to flash bios under linux, there is a nice forum page &lt;a href="http://ubuntuforums.org/showthread.php?t=318789"&gt;here&lt;/a&gt;, but I didn't try to use these methods cause I was not sure if my laptops flash utility was going to work under FreeDOS (but in the installation program it say it is working under FreeDOS-XP-2000-Vista-7, thanks to HP not sharing this information).&lt;br /&gt;&lt;br /&gt;Then I found a Windows XP Live CD edition (not sure if it is legal) which nicely worked, and voila I've flashed the latest bios and all my suspend problems went away.&lt;br /&gt;&lt;br /&gt;I'm now taking the pleasure of being able to suspend and resume my laptop without a problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-3308871131570137820?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/3308871131570137820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=3308871131570137820' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/3308871131570137820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/3308871131570137820'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2011/01/taking-pleasure-of-suspendhibernate-on.html' title='Taking The Pleasure of Suspend/Hibernate on Ubuntu'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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-1254328298726568959.post-3596207144598971954</id><published>2010-11-27T15:04:00.004+02:00</published><updated>2010-11-27T15:51:49.874+02:00</updated><title type='text'>Back to Ubuntu :)</title><content type='html'>All right, I'm back to Ubuntu again. I'm so much surprised how much I've missed that little one. After playing with Kubuntu for the last 1.5 year, coming back to Ubuntu feels much better right now. I know that it is very much a personal taste to have one of them but Gnome feels much better, solid and faster after playing with KDE for a long time. Lately Kubuntu started to feel laggish. And previously I was kinda &lt;a href="http://eoyilmaz.blogspot.com/2009/07/switched-from-gnome-to-kde.html"&gt;forced to move to KDE&lt;/a&gt; because of the &lt;a href="http://bugzilla.kernel.org/show_bug.cgi?id=9448"&gt;sticky key problem&lt;/a&gt; I was having under Maya 2009. And with the new Qt interface of Maya 2011 I don't really have anything chaining me to KDE any more.&lt;br /&gt;&lt;br /&gt;So, I consider myself greeted by my Ubuntu fellas.&lt;br /&gt;&lt;br /&gt;And a note about my move, if you want to do the same thing and want to move from Kubuntu to Ubuntu, just insall ubuntu-desktop by using:&lt;br /&gt;&lt;br /&gt;sudo apt-get install ubuntu-desktop&lt;br /&gt;&lt;br /&gt;then if you don't like to have the kde programs you can remove them or there a couple of ways to have kde and gdm together and don't have ones program listed in other ones menu.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-3596207144598971954?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/3596207144598971954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=3596207144598971954' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/3596207144598971954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/3596207144598971954'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2010/11/back-to-ubuntu.html' title='Back to Ubuntu :)'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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-1254328298726568959.post-7197506482673711546</id><published>2010-11-12T23:07:00.030+02:00</published><updated>2010-11-12T23:51:42.871+02:00</updated><title type='text'>Sleeping Princess - Prensesin Uykusu</title><content type='html'>My first movie will be out there in the theatres next weekend. I participated to the movie as being the Visual Effects Supervisor and also the Lead Technical Director.&lt;br /&gt;&lt;br /&gt;I would love to dive in to the technical challenges we've been through, but I will just give some screen shots from the movie this time.&lt;br /&gt;&lt;br /&gt;Just go and watch the movie, it's a good one from the great director Cagan Irmak.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NCk9bv9JsxM/TN2vog34wUI/AAAAAAAABMs/sUTguS_azYw/s1600/ahtapot_v1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://2.bp.blogspot.com/_NCk9bv9JsxM/TN2vog34wUI/AAAAAAAABMs/sUTguS_azYw/s320/ahtapot_v1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538776227289547074" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NCk9bv9JsxM/TN2vy0CQF2I/AAAAAAAABM0/FYp0cCHsk4U/s1600/ahtapot_v2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://3.bp.blogspot.com/_NCk9bv9JsxM/TN2vy0CQF2I/AAAAAAAABM0/FYp0cCHsk4U/s320/ahtapot_v2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538776404231984994" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NCk9bv9JsxM/TN2v85QaRBI/AAAAAAAABM8/MBd43je3LaA/s1600/ahtapot_v3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://1.bp.blogspot.com/_NCk9bv9JsxM/TN2v85QaRBI/AAAAAAAABM8/MBd43je3LaA/s320/ahtapot_v3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538776577432241170" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NCk9bv9JsxM/TN2wDB37VMI/AAAAAAAABNE/fxVhGak_QNE/s1600/ahtapot_v4.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://3.bp.blogspot.com/_NCk9bv9JsxM/TN2wDB37VMI/AAAAAAAABNE/fxVhGak_QNE/s320/ahtapot_v4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538776682824684738" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NCk9bv9JsxM/TN2wSCXYhzI/AAAAAAAABNM/zEXSdIjSvcM/s1600/death_v1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://4.bp.blogspot.com/_NCk9bv9JsxM/TN2wSCXYhzI/AAAAAAAABNM/zEXSdIjSvcM/s320/death_v1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538776940654659378" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NCk9bv9JsxM/TN2wYWFsAHI/AAAAAAAABNU/Psk7lQUwd6Y/s1600/death_v2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://1.bp.blogspot.com/_NCk9bv9JsxM/TN2wYWFsAHI/AAAAAAAABNU/Psk7lQUwd6Y/s320/death_v2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538777049028362354" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NCk9bv9JsxM/TN2wfRNLhtI/AAAAAAAABNc/UUakj_ttis4/s1600/death_v3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://4.bp.blogspot.com/_NCk9bv9JsxM/TN2wfRNLhtI/AAAAAAAABNc/UUakj_ttis4/s320/death_v3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538777167976695506" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NCk9bv9JsxM/TN2wksUQd7I/AAAAAAAABNk/K9m-rJqMj_Y/s1600/death_v4.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://2.bp.blogspot.com/_NCk9bv9JsxM/TN2wksUQd7I/AAAAAAAABNk/K9m-rJqMj_Y/s320/death_v4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538777261153482674" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NCk9bv9JsxM/TN2wrySA6BI/AAAAAAAABNs/vIvp2jmDx4c/s1600/death_v5.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://3.bp.blogspot.com/_NCk9bv9JsxM/TN2wrySA6BI/AAAAAAAABNs/vIvp2jmDx4c/s320/death_v5.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538777383013771282" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NCk9bv9JsxM/TN2wyq0H5gI/AAAAAAAABN0/cB02WVcnEXw/s1600/death_v6.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://1.bp.blogspot.com/_NCk9bv9JsxM/TN2wyq0H5gI/AAAAAAAABN0/cB02WVcnEXw/s320/death_v6.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538777501268436482" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NCk9bv9JsxM/TN2w4eiCQcI/AAAAAAAABN8/CFJXUFJr3Xs/s1600/death_v7.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://3.bp.blogspot.com/_NCk9bv9JsxM/TN2w4eiCQcI/AAAAAAAABN8/CFJXUFJr3Xs/s320/death_v7.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538777601050558914" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NCk9bv9JsxM/TN2w-M3qb2I/AAAAAAAABOE/eo821qhM21M/s1600/death_v8.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://2.bp.blogspot.com/_NCk9bv9JsxM/TN2w-M3qb2I/AAAAAAAABOE/eo821qhM21M/s320/death_v8.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538777699388649314" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NCk9bv9JsxM/TN2xC0s-LtI/AAAAAAAABOM/B6qhj91dWxg/s1600/death_v9.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://1.bp.blogspot.com/_NCk9bv9JsxM/TN2xC0s-LtI/AAAAAAAABOM/B6qhj91dWxg/s320/death_v9.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538777778800701138" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NCk9bv9JsxM/TN2xL1_wJSI/AAAAAAAABOU/sK212B60ytM/s1600/kus_v1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://3.bp.blogspot.com/_NCk9bv9JsxM/TN2xL1_wJSI/AAAAAAAABOU/sK212B60ytM/s320/kus_v1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538777933766731042" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NCk9bv9JsxM/TN2xR24y4-I/AAAAAAAABOc/2vrZjQlCgt4/s1600/kus_v2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://1.bp.blogspot.com/_NCk9bv9JsxM/TN2xR24y4-I/AAAAAAAABOc/2vrZjQlCgt4/s320/kus_v2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538778037085201378" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NCk9bv9JsxM/TN2xXUjy2jI/AAAAAAAABOk/XNTqM0dvAlk/s1600/kus_v3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://3.bp.blogspot.com/_NCk9bv9JsxM/TN2xXUjy2jI/AAAAAAAABOk/XNTqM0dvAlk/s320/kus_v3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538778130949528114" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NCk9bv9JsxM/TN2xdQ_YBuI/AAAAAAAABOs/cSHxzErNI4k/s1600/library_v1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://1.bp.blogspot.com/_NCk9bv9JsxM/TN2xdQ_YBuI/AAAAAAAABOs/cSHxzErNI4k/s320/library_v1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538778233070683874" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NCk9bv9JsxM/TN2xjbiMTcI/AAAAAAAABO0/8uxBoeNS2iY/s1600/library_v2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://1.bp.blogspot.com/_NCk9bv9JsxM/TN2xjbiMTcI/AAAAAAAABO0/8uxBoeNS2iY/s320/library_v2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538778338980285890" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NCk9bv9JsxM/TN2xquYPYJI/AAAAAAAABO8/mCBXIhGfSGM/s1600/library_v3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://1.bp.blogspot.com/_NCk9bv9JsxM/TN2xquYPYJI/AAAAAAAABO8/mCBXIhGfSGM/s320/library_v3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538778464297902226" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NCk9bv9JsxM/TN2xxqqUVdI/AAAAAAAABPE/vPg4HqZ2A_M/s1600/peri_v1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://2.bp.blogspot.com/_NCk9bv9JsxM/TN2xxqqUVdI/AAAAAAAABPE/vPg4HqZ2A_M/s320/peri_v1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538778583559067090" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NCk9bv9JsxM/TN2x4iwCyiI/AAAAAAAABPM/I0LB41peYVI/s1600/peri_v2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://4.bp.blogspot.com/_NCk9bv9JsxM/TN2x4iwCyiI/AAAAAAAABPM/I0LB41peYVI/s320/peri_v2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538778701694683682" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NCk9bv9JsxM/TN2yBKxudKI/AAAAAAAABPU/RtQcOtX4g9I/s1600/peri_v3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://2.bp.blogspot.com/_NCk9bv9JsxM/TN2yBKxudKI/AAAAAAAABPU/RtQcOtX4g9I/s320/peri_v3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538778849878111394" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NCk9bv9JsxM/TN2yRnZLpBI/AAAAAAAABPc/BcXVhdMGw_s/s1600/toon_v1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://1.bp.blogspot.com/_NCk9bv9JsxM/TN2yRnZLpBI/AAAAAAAABPc/BcXVhdMGw_s/s320/toon_v1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538779132437701650" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NCk9bv9JsxM/TN2yYt4gqgI/AAAAAAAABPk/V7QRN8pahf0/s1600/toon_v2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://2.bp.blogspot.com/_NCk9bv9JsxM/TN2yYt4gqgI/AAAAAAAABPk/V7QRN8pahf0/s320/toon_v2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538779254438799874" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NCk9bv9JsxM/TN2yhz9aSDI/AAAAAAAABPs/RoG6WcCq9L4/s1600/toon_v3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://1.bp.blogspot.com/_NCk9bv9JsxM/TN2yhz9aSDI/AAAAAAAABPs/RoG6WcCq9L4/s320/toon_v3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538779410688788530" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NCk9bv9JsxM/TN2yuQdupVI/AAAAAAAABP0/_7Yban17V2c/s1600/toon_v4.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://3.bp.blogspot.com/_NCk9bv9JsxM/TN2yuQdupVI/AAAAAAAABP0/_7Yban17V2c/s320/toon_v4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538779624498963794" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NCk9bv9JsxM/TN2y0eHtHDI/AAAAAAAABP8/0t5sUqQpzBc/s1600/toon_v5.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://2.bp.blogspot.com/_NCk9bv9JsxM/TN2y0eHtHDI/AAAAAAAABP8/0t5sUqQpzBc/s320/toon_v5.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538779731243899954" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NCk9bv9JsxM/TN2y6mGJSXI/AAAAAAAABQE/6uwThD8pgv0/s1600/toon_v6.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://3.bp.blogspot.com/_NCk9bv9JsxM/TN2y6mGJSXI/AAAAAAAABQE/6uwThD8pgv0/s320/toon_v6.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538779836464056690" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NCk9bv9JsxM/TN2zBEz_pAI/AAAAAAAABQM/LgjKnO2GR9o/s1600/toon_v7.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://3.bp.blogspot.com/_NCk9bv9JsxM/TN2zBEz_pAI/AAAAAAAABQM/LgjKnO2GR9o/s320/toon_v7.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538779947788641282" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NCk9bv9JsxM/TN2zJN6-krI/AAAAAAAABQU/PcnOZ1Q34JY/s1600/toon_v8.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://2.bp.blogspot.com/_NCk9bv9JsxM/TN2zJN6-krI/AAAAAAAABQU/PcnOZ1Q34JY/s320/toon_v8.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538780087672804018" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NCk9bv9JsxM/TN2zQARkrqI/AAAAAAAABQc/wLGRbrwD_Bw/s1600/toon_v9.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://4.bp.blogspot.com/_NCk9bv9JsxM/TN2zQARkrqI/AAAAAAAABQc/wLGRbrwD_Bw/s320/toon_v9.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538780204268564130" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NCk9bv9JsxM/TN2zWnxEHLI/AAAAAAAABQk/W9ColoRt-oE/s1600/toon_v10.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://2.bp.blogspot.com/_NCk9bv9JsxM/TN2zWnxEHLI/AAAAAAAABQk/W9ColoRt-oE/s320/toon_v10.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538780317948845234" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NCk9bv9JsxM/TN2ztb53rpI/AAAAAAAABQs/euIwO3nCOHo/s1600/toon_v11.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://4.bp.blogspot.com/_NCk9bv9JsxM/TN2ztb53rpI/AAAAAAAABQs/euIwO3nCOHo/s320/toon_v11.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538780709901545106" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NCk9bv9JsxM/TN2zy0mva7I/AAAAAAAABQ0/ghujarc1b80/s1600/toon_v12.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://2.bp.blogspot.com/_NCk9bv9JsxM/TN2zy0mva7I/AAAAAAAABQ0/ghujarc1b80/s320/toon_v12.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538780802431544242" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NCk9bv9JsxM/TN2z4kPnp_I/AAAAAAAABQ8/aFrXdNP1QlA/s1600/toon_v13.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://1.bp.blogspot.com/_NCk9bv9JsxM/TN2z4kPnp_I/AAAAAAAABQ8/aFrXdNP1QlA/s320/toon_v13.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538780901118814194" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NCk9bv9JsxM/TN2z-35BvfI/AAAAAAAABRE/-QYkSUAsZZ8/s1600/toon_v14.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://4.bp.blogspot.com/_NCk9bv9JsxM/TN2z-35BvfI/AAAAAAAABRE/-QYkSUAsZZ8/s320/toon_v14.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538781009471978994" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NCk9bv9JsxM/TN20fdFz5WI/AAAAAAAABRM/8BiuUnv4w8k/s1600/toon_v15.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://4.bp.blogspot.com/_NCk9bv9JsxM/TN20fdFz5WI/AAAAAAAABRM/8BiuUnv4w8k/s320/toon_v15.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538781569213523298" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NCk9bv9JsxM/TN20puGgSZI/AAAAAAAABRU/pikWM6CwzXw/s1600/toon_v16.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://2.bp.blogspot.com/_NCk9bv9JsxM/TN20puGgSZI/AAAAAAAABRU/pikWM6CwzXw/s320/toon_v16.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538781745578527122" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NCk9bv9JsxM/TN20xIp6DeI/AAAAAAAABRc/F7duJWJxldo/s1600/toon_v17.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://2.bp.blogspot.com/_NCk9bv9JsxM/TN20xIp6DeI/AAAAAAAABRc/F7duJWJxldo/s320/toon_v17.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538781872965422562" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NCk9bv9JsxM/TN202lcwbeI/AAAAAAAABRk/mvKGpkXQ_Yo/s1600/toon_v18.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://2.bp.blogspot.com/_NCk9bv9JsxM/TN202lcwbeI/AAAAAAAABRk/mvKGpkXQ_Yo/s320/toon_v18.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538781966594239970" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NCk9bv9JsxM/TN208iAuvFI/AAAAAAAABRs/Sd6tcjHr8kY/s1600/toon_v19.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://4.bp.blogspot.com/_NCk9bv9JsxM/TN208iAuvFI/AAAAAAAABRs/Sd6tcjHr8kY/s320/toon_v19.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538782068750597202" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NCk9bv9JsxM/TN21CGvn-8I/AAAAAAAABR0/fz-hqxTIZKk/s1600/toon_v20.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 136px;" src="http://3.bp.blogspot.com/_NCk9bv9JsxM/TN21CGvn-8I/AAAAAAAABR0/fz-hqxTIZKk/s320/toon_v20.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5538782164510309314" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-7197506482673711546?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/7197506482673711546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=7197506482673711546' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/7197506482673711546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/7197506482673711546'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2010/11/sleeping-princess-prensesin-uykusu.html' title='Sleeping Princess - Prensesin Uykusu'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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/_NCk9bv9JsxM/TN2vog34wUI/AAAAAAAABMs/sUTguS_azYw/s72-c/ahtapot_v1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1254328298726568959.post-9067029426351968640</id><published>2010-10-19T01:49:00.015+03:00</published><updated>2010-10-20T16:00:35.093+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mock'/><category scheme='http://www.blogger.com/atom/ns#' term='mocker'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Code Annoyance - mocker mock Mocker Mock</title><content type='html'>The documentation of the Python Mocker library sucks. The example codes doesn't show the import statements at the beginning of the example, and they use the &lt;code&gt;mocker&lt;/code&gt; (which is also the name of the package) as a variable inside the example, so you get double frustrated.&lt;br /&gt;&lt;br /&gt;here is the example directly taken from the documentation of the library:&lt;br /&gt;&lt;pre class="brush: python" style="overflow: auto; width: 100%;"&gt;&gt;&gt;&gt; mocker = Mocker()&lt;br /&gt;&gt;&gt;&gt; obj = mocker.mock()&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; obj.hello()&lt;br /&gt;&gt;&gt;&gt; mocker.result("Hi!")&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; mocker.replay()&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; obj.hello()&lt;br /&gt;'Hi!'&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; obj.bye()&lt;br /&gt;Traceback (most recent call last):&lt;br /&gt;  ...&lt;br /&gt;mocker.MatchError: [Mocker] Unexpected expression: obj.bye&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; mocker.restore()&lt;br /&gt;&gt;&gt;&gt; mocker.verify()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;the first weird thing is also the first line of the example code:&lt;br /&gt;&lt;pre class="brush: python" style="overflow: auto; width: 100%;"&gt;mocker = Mocker()&lt;/pre&gt;&lt;br /&gt;the second one is also the second line of the example code:&lt;br /&gt;&lt;pre class="brush: python" style="overflow: auto; width: 100%;"&gt;obj = mocker.mock()&lt;/pre&gt;&lt;br /&gt;all right, I can see that because the statement &lt;code&gt;mocker&lt;/code&gt; now corresponds to a &lt;code&gt;Mocker&lt;/code&gt; object the &lt;code&gt;mocker.mock()&lt;/code&gt; should be returning a mock object (did you get my frustration, mocker mock Mocker Mock, wtf!)&lt;br /&gt;&lt;br /&gt;what those guys written this documentation has forgotten should be a line of:&lt;br /&gt;&lt;pre class="brush: python" style="overflow: auto; width: 100%;"&gt;from mocker import *&lt;/pre&gt;&lt;br /&gt;and knowing this really doesn't help me too much, cause I don't code in this way. Really, who is importing everything to the module namespace should be doing something evil.&lt;br /&gt;&lt;br /&gt;and also using the package name as a variable to hold an object which is produced by one of the classes of that package  means you are really shitting in the namespace...&lt;br /&gt; &lt;br /&gt;and I see a lot of this kind of namespace killer statements in package documentations, I think they think that is much clearer, but it is wrong, cause it really breaks the way I construct things in my mind.&lt;br /&gt;&lt;br /&gt;I'm frustrated... or am I missing something...&lt;br /&gt;&lt;br /&gt;EDIT:&lt;br /&gt;As muhuk warned me about contributing an OpenSource package before complaining about its defects I created a bug report explaining my concerns. You can find the bug report here:&lt;br /&gt;https://bugs.launchpad.net/mocker/+bug/663821&lt;br /&gt;&lt;br /&gt;I need to thank to muhuk&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-9067029426351968640?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/9067029426351968640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=9067029426351968640' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/9067029426351968640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/9067029426351968640'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2010/10/code-annoyance-mocker-mock-mocker-mock.html' title='Code Annoyance - mocker mock Mocker Mock'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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-1254328298726568959.post-6881913225311909245</id><published>2010-10-15T11:19:00.005+03:00</published><updated>2011-12-27T02:24:00.384+02:00</updated><title type='text'>Quick Tip: Setting The Render Image Format in Maya</title><content type='html'>To set the render image format to OpenEXR you need to set both the imageFormat and imfkey in defaultRenderGlobals. Setting the imageFormat to 51 means that you are going to use a custom image format like Tiff Uncompressed (tif), hdr, exr, Zpic, picture, ppm, ps etc.. and than you set the imfkey to whatever format you want, in my case I set it to 'exr'&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: python" style="overflow: auto; width: 100%;"&gt;from pymel import core as pm&lt;br /&gt;dRG = pm.PyNode('defaultRenderGlobals')&lt;br /&gt;dRG.setAttr('imageFormat', 51)&lt;br /&gt;dRG.setAttr('imfkey', 'exr')&lt;/pre&gt;Edit:Also you can set the compression to ZIP ("Zip (1 scanline)" in Nuke terms) by:&lt;pre class="brush: python" style="overflow: auto; width: 100%;"&gt;mrG = pm.PyNode("mentalrayGlobals")&lt;br /&gt;mrG.setAttr("imageCompression", 4)&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/1254328298726568959-6881913225311909245?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/6881913225311909245/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=6881913225311909245' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/6881913225311909245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/6881913225311909245'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2010/10/quick-tip-setting-render-image-format.html' title='Quick Tip: Setting The Render Image Format in Maya'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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-1254328298726568959.post-5335050970275160388</id><published>2010-09-02T12:21:00.014+03:00</published><updated>2011-08-02T01:35:01.030+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VEX'/><category scheme='http://www.blogger.com/atom/ns#' term='shader'/><category scheme='http://www.blogger.com/atom/ns#' term='houdini'/><title type='text'>Round Corners in Houdini</title><content type='html'>It's been a while since my last post, sorry about that...&lt;br /&gt;&lt;br /&gt;I was playing with Houdini for the last 1 year, did a couple of jobs with it. It saved my ass a couple of times and I can say that I completely felt in love with it, and I really felt sorry for the years I spent without Houdini. Anyway, after a while later I decided to try to complete the jobs more and more with Houdini and try to go away from Maya a little bit. I'm not going to enter the valley of the differences of the two programs and how awesome Houdini is etc. but I need to say that it feels awesome.&lt;br /&gt;&lt;br /&gt;Yet, there is another job that I need to finish up (the deadline is tomorrow). The job is about a tire brand etc. Lets cut the chase, the object was not looking good just because they've sent us the production model that they are using to produce the product in the factory, and you now this kind of nurbs models are a little bit too perfect, has sharp edges and a lot of details. In Maya, to break this perfection, I generally use the round corner shader to smooth the sharp edges and it works perfectly. But in Houdini you don't have this kind of already built in shader but you have the powerful VEX.&lt;br /&gt;&lt;br /&gt;I've first searched for it on the web, there was &lt;a href="http://www.fourthwall.ndo.co.uk/HT_Otls.html"&gt;microBevel from Simon Barrick&lt;/a&gt; but it was not working with Houdini 11 (by the way I need to thank Simon, for his fast and friendly responses to my e-mails).&lt;br /&gt;&lt;br /&gt;Then I tried to find a paper about how to smooth edges of geometries in render time. And I found a document about the round corner shader in mental ray from &lt;a href="http://mentalraytips.blogspot.com/"&gt;Hakan Andersson (the famous master zap)&lt;/a&gt;. So it was pretty obvious actually...&lt;br /&gt;&lt;br /&gt;you can download the OTLs here:&lt;br /&gt;&lt;a href="http://www.filesonic.com/file/1572232834"&gt;tangent.otl&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.filesonic.com/file/1572223084"&gt;roundCorners.otl&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here are the results of my round corner OTL with different curving choices:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_NCk9bv9JsxM/TH94CFZrf5I/AAAAAAAABMU/p2Ibx6WpC8c/s1600/roundCorners_curvingTypes.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 90px;" src="http://1.bp.blogspot.com/_NCk9bv9JsxM/TH94CFZrf5I/AAAAAAAABMU/p2Ibx6WpC8c/s320/roundCorners_curvingTypes.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5512256446129733522" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and here, the tire with and without round corner shader:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NCk9bv9JsxM/TH94UHSR6oI/AAAAAAAABMc/p7QtzgSdciI/s1600/roundCorners_compare.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 256px;" src="http://3.bp.blogspot.com/_NCk9bv9JsxM/TH94UHSR6oI/AAAAAAAABMc/p7QtzgSdciI/s320/roundCorners_compare.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5512256755873213058" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-5335050970275160388?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/5335050970275160388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=5335050970275160388' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/5335050970275160388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/5335050970275160388'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2010/09/round-corners-in-houdini.html' title='Round Corners in Houdini'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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/_NCk9bv9JsxM/TH94CFZrf5I/AAAAAAAABMU/p2Ibx6WpC8c/s72-c/roundCorners_curvingTypes.jpg' height='72' width='72'/><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1254328298726568959.post-6572575239016035989</id><published>2010-06-06T01:29:00.003+03:00</published><updated>2010-06-06T02:14:08.457+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='idiom'/><category scheme='http://www.blogger.com/atom/ns#' term='decorator'/><category scheme='http://www.blogger.com/atom/ns#' term='property'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>A new Property idiom in Python</title><content type='html'>There are really smart guys around the world, especially in python world. One of these guys (Sean Ross) suggested this to be used instead of the regular property in python:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: python" style="overflow: auto; width: 100%;"&gt;"""&lt;br /&gt;Rather than defining your get/set/del methods at the class level, as is usually done, e.g.&lt;br /&gt;&lt;br /&gt;class MyClass(object):&lt;br /&gt;    def __init__(self):&lt;br /&gt;        self._foo = "foo"&lt;br /&gt;&lt;br /&gt;    def getfoo(self):&lt;br /&gt;        return self._foo&lt;br /&gt;    def setfoo(self, value):&lt;br /&gt;        self._foo = value&lt;br /&gt;    def delfoo(self):&lt;br /&gt;        del self._foo&lt;br /&gt;    foo = property(getfoo, setfoo, delfoo, "property foo's doc string")&lt;br /&gt;&lt;br /&gt;I would like to suggest the following alternative idiom:&lt;br /&gt;"""&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class MyClass(object):&lt;br /&gt;    def __init__(self):&lt;br /&gt;        self._foo = "foo"&lt;br /&gt;        self._bar = "bar"&lt;br /&gt;&lt;br /&gt;    def foo():&lt;br /&gt;        doc = "property foo's doc string"&lt;br /&gt;        def fget(self):&lt;br /&gt;            return self._foo&lt;br /&gt;        def fset(self, value):&lt;br /&gt;            self._foo = value&lt;br /&gt;        def fdel(self):&lt;br /&gt;            del self._foo&lt;br /&gt;        return locals()  # credit: David Niergarth&lt;br /&gt;    foo = property(**foo())&lt;br /&gt;&lt;br /&gt;    def bar():&lt;br /&gt;        doc = "bar is readonly"&lt;br /&gt;        def fget(self):&lt;br /&gt;            return self._bar&lt;br /&gt;        return locals()    &lt;br /&gt;    bar = property(**bar())&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I've started using these idiom and I'm happy to be able not to bloat my classes with getters and setters...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-6572575239016035989?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/6572575239016035989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=6572575239016035989' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/6572575239016035989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/6572575239016035989'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2010/06/new-property-idiom-in-python.html' title='A new Property idiom in Python'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1254328298726568959.post-5091545677757996081</id><published>2010-03-22T17:02:00.010+02:00</published><updated>2010-03-22T22:42:21.859+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='wingIDE'/><category scheme='http://www.blogger.com/atom/ns#' term='TaskJuggler'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><category scheme='http://www.blogger.com/atom/ns#' term='asset management'/><title type='text'>TaskJuggler</title><content type='html'>I've found the project management software of my life. &lt;a href="http://www.taskjuggler.org/index.php"&gt;TaskJuggler&lt;/a&gt;. How adorable piece of software this is. I strongly recommend TaskJuggler to anyone who needs a strong project management software which is open source and much more powerful than the commercial alternatives.&lt;br /&gt;&lt;br /&gt;Here is a passage from their &lt;a href="http://www.taskjuggler.org/index.php"&gt;web site&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"TaskJuggler is a modern and powerful, Open Source project  management tool. Its new approach to project planing and tracking is  more flexible and superior to the commonly used Gantt chart editing  tools. It has already been successfully used in many projects and  scales easily to projects with hundreds of resources and thousands of  tasks."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To use TaskJuggler, the only thing you need is a text editor and the taskJuggler's scheduler itself. You can start planing a project by writing about the project with the simple script like language of TaskJuggler.&lt;br /&gt;&lt;br /&gt;They also provide a GUI. There are couple of downsides with that GUI though. The code-completion is not deeply aware of the TaskJuggler's language (or maybe I'm missing something). Although, it can complete simple text, it doesn't provide complex completion like an IDE can provide.&lt;br /&gt;&lt;br /&gt;So for example, you can define a task (task1):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;task task1 "Task1"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and create sub tasks (subTask1, subTask2 etc) under this main task:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;task task1 "Task 1" {&lt;br /&gt;&amp;nbsp&amp;nbsp task subTask1 "Sub Task 1"&lt;br /&gt;&amp;nbsp&amp;nbsp task subTask2 "Sub Task 2"&lt;br /&gt;&amp;nbsp&amp;nbsp task subTask3 "Sub Task 3"&lt;br /&gt;&amp;nbsp&amp;nbsp # etc&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;then later in the project definition when you try to reach a sub task by writing "task1." I expect a list of tasks popping-up, but it is not, instead it waits until you enter 3 characters then it offers you a list of words starting with those letters, which are not always children of the original task. So you need to find the name by parsing the code by your-self, which is very annoying for even medium sized project files which spans over couple of hundreds of lines.&lt;br /&gt;&lt;br /&gt;On the other hand, TaskJuggler designed for shell use, the gui is added later.&lt;br /&gt;&lt;br /&gt;Another thing that makes me scratch my head is the new version under development, TaskJuggler 3. The down side (imho) of the new version is, it is developed under Ruby as a Ruby Gem. Which is very very nice for Ruby people. But I wished to have it with Python. If I had it under Python I could use it in my asset management system, to let my tool to have powerful management capabilities. And I can't imagine how fun will it be to use TakJuggler as a Python package under &lt;a href="http://www.wingware.com/"&gt;WingIDE&lt;/a&gt;. (See Edit 1)&lt;br /&gt;&lt;br /&gt;On the other hand, its flexibility on every stage of project management is superior to other software's. I specially liked the part that you can define alternatives to resources with a lot of options which allows you precisely and efficiently allocate a resource.&lt;br /&gt;&lt;br /&gt;You can use TaskJuggler as a project tracking tool too. You can refine an ongoing project till the delivery date etc.&lt;br /&gt;&lt;br /&gt;Finally, I need to say that I loved that software and it was the tool I'm searching for the last 2 years. Thumbs up TJ people&lt;br /&gt;&lt;br /&gt;Edit 1: On &lt;a href="http://www.taskjuggler.org/contrib.php"&gt;this page&lt;/a&gt; you can find a Python front-end of TaskJuggler. It is written for an old version of Python (2.3 I think). It seems, it needs to be updated.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-5091545677757996081?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/5091545677757996081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=5091545677757996081' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/5091545677757996081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/5091545677757996081'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2010/03/taskjuggler.html' title='TaskJuggler'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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-1254328298726568959.post-3849420584829405342</id><published>2010-03-01T23:28:00.009+02:00</published><updated>2010-03-02T21:18:08.553+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='photography'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='lightroom'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='bibble'/><category scheme='http://www.blogger.com/atom/ns#' term='adobe'/><category scheme='http://www.blogger.com/atom/ns#' term='pro'/><title type='text'>Bye bye Windows 7 RC and Lightroom, Welcome Kubuntu and Bibble 5 Pro</title><content type='html'>You know it was getting closer... After March 1st (today), Windows 7 RC was not going to work any more... So I decided to cut my arm holding Windows 7 tightly... I've deleted the 3 NTFS partitions on my second hdd and created a fresh ext3 partition. Copied all my files back to the new partition, and edited the /etc/fstab to make it mounted on boot etc. I'm pure now...&lt;br /&gt;&lt;br /&gt;I was using Windows just to edit my photos with &lt;a href="http://www.adobe.com/products/photoshoplightroom/?promoid=DJGSN_P_US_FP2_LR_MN&amp;amp;tt=P_US_FP2_LR_MN"&gt;Lightroom&lt;/a&gt;. It was evident that I need something else that works under Linux. I first tried to use &lt;a href="http://www.winehq.org/"&gt;Wine&lt;/a&gt; with no chance, at least for the last 8 months there was no version of Wine able to run Lightroom properly.&lt;br /&gt;&lt;br /&gt;Recently, I came across with one software that works natively and perfectly under Linux, and even works faster than Lightroom (at least they say so, and indeed I felt the difference), the name of the magic was &lt;a href="http://bibblelabs.com/"&gt;Bibble 5 Pro&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So, I've installed the trial version and tested it with my photos. It was working very nice, but definitely I need to get used to the interface, though it quite resembles the Lightroom interface, and I need to find a nice raw preset for my camera (Nikon D300 by the way). Bibble 5 has settings like "Product, Product Reduced, ..., Portrait, Portrait Reduced etc.", what I found is that Portrait preset is very close to my taste. Eventhough, I fell a little color cast on the photos. I don't know, I think I need to get used to it.&lt;br /&gt;&lt;br /&gt;And my final words goes to Adobe. I don't understand them. Some how they create the programs which takes hefty amount of peoples attention, but, though they support another Unix platform like MaxOSX, they really resist hard to support Fedora/Debian Linux. It really hard to understand that, isn't that the same money we pay. So what is the matter. The best protest for myself is to stay away from Adobe and use alternatives as much as possible.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-3849420584829405342?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/3849420584829405342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=3849420584829405342' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/3849420584829405342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/3849420584829405342'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2010/03/bye-bye-windows-7-rc-and-lightroom.html' title='Bye bye Windows 7 RC and Lightroom, Welcome Kubuntu and Bibble 5 Pro'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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-1254328298726568959.post-5355724311858159538</id><published>2009-12-31T01:22:00.014+02:00</published><updated>2010-01-04T17:31:50.714+02:00</updated><title type='text'>Project and AssetManager</title><content type='html'>Followers of this blog should remember &lt;a href="http://eoyilmaz.blogspot.com/2009/06/production-asset-management-prodam.html"&gt;me talking about the production asset management system back in june this year&lt;/a&gt;. Since then I tried to find a nice way to handle the files in our studio. I looked the on-the-shelf tools like AlienBrain, Shotgun etc. But I wanted to have a system which is structurally not that much complex, and as open as it gets so I could instantly add new features to it. And I think, I was attracted by the idea of being the writer of an asset manager system. So I decided to write of my own system.&lt;br /&gt;&lt;br /&gt;Those days we were using a simple MEL script to let Maya to decide where to save the file by looking a template folder structure stored in the file server. With some limitations, this little script was doing its job very well.&lt;br /&gt;&lt;br /&gt;In my first attempts to an Asset Management system, I had a lot of ideas about what an asset manager should do and a little bit of idea about what it shouldn't do. I tried to gather those ideas to form a system, but I couldn't manage it. Somehow I couldn't do the thing. I drew graphical charts, schemas explaining the data flow, the program flow and the general structure and I started coding of the Asset class in Python. But again somehow I couldn't manage to have something meaningful. So I let it go.&lt;br /&gt;&lt;br /&gt;Because, I couldn't do anything about coding of the asset manager, I decided to rewrite the ProjectCreator tool by using Python. It was originally written in C#. We were using this tool to create empty projects, with a predefined folder structure and with definite number of shots in some specific folders and to add new shots folders inside that project structure. The tool was written very badly around the interface code by myself. And because of the design, we were not able to change the project structure independently for one project to another. So I decided to have a proper object oriented system. Which also lets me to script the regular things like adding folders to all of the projects and sequences at once.&lt;br /&gt;&lt;br /&gt;I've started coding of the classes those I'll going to need, like the Database, Project and the Sequence classes. They were doing some basic things. But, the Sequence class was especially special for me, because, some how I saw the way to the asset manager in it. While coding the Sequence class, it is connected it self to the Asset class I had written before. So the basic problem was solved. I had all my basic structures to form a very little living asset manager system.&lt;br /&gt;&lt;br /&gt;At the beginning, it was just saving the files to proper folders with proper names (same thing with the previous MEL based system). I had to code an interface for it to let the artist to use it. I decided to use &lt;a href="http://www.riverbankcomputing.co.uk/software/pyqt/intro"&gt;PyQt&lt;/a&gt;. We instantly switched to the new system.&lt;br /&gt;&lt;br /&gt;In time, the system evolved to a python module and I named the system as AssetManager with peace of mind. The system is evolving very quickly. It is already doing things like, finding all the assets those a user did for a specific sequence or shot, tracks the file versions in a very simple but solid manner (by saving every version with a different version number :) and not letting the user to save over an old version), keeping track of the referenced asset, and updates the references automatically, tracks shot data like shot timings, shot descriptions etc.. The best part of the system is, it is working under any platform that Python is supported. It means, it works under Maya, Nuke and Houdini. And I'm trying to find a way to add it to Photoshop (probably I'm going to write some Java code for it). And while adding all of those features, I always tried to keep the generality of the code.&lt;br /&gt;&lt;br /&gt;By having a working system like that, now it is much easier to think about the new features that the system needs. So, I can see the next two steps in front of me.&lt;br /&gt;&lt;br /&gt;All the artist are very happy to be able to use a system like that, and they are keen to see new features coming constantly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-5355724311858159538?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/5355724311858159538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=5355724311858159538' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/5355724311858159538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/5355724311858159538'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2009/12/project-and-assetmanager.html' title='Project and AssetManager'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1254328298726568959.post-4157860228401375716</id><published>2009-12-12T00:39:00.005+02:00</published><updated>2010-04-03T17:44:19.940+03:00</updated><title type='text'>Famous Maya Render Layer Bug</title><content type='html'>I bet you encountered that bug before, like all the others maya players around. I'm talking about the render layer bug, you now, you switch to some other layer and got some messages saying that maya couldn't create a connection to a shading engines foo attribute at index [-1], yeeahh :) this one I'm talking about... So here is the &lt;a href="http://mayastation.typepad.com/maya-station/2009/12/connection-errors-when-switching-render-layers.html"&gt;solution&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The bad thing about it is, they just didn't fix the real problem, it is a workaround...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-4157860228401375716?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/4157860228401375716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=4157860228401375716' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/4157860228401375716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/4157860228401375716'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2009/12/famous-maya-render-layer-bug.html' title='Famous Maya Render Layer Bug'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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-1254328298726568959.post-6258152639894888451</id><published>2009-10-10T12:52:00.007+03:00</published><updated>2010-06-06T01:53:19.024+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='function decorator'/><category scheme='http://www.blogger.com/atom/ns#' term='cache'/><title type='text'>Python Function Decorators 3: Input Based Caching</title><content type='html'>Below you can find an input based cache system implemented as a Python function decorator:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: python"&gt;########################################################################&lt;br /&gt;class InputBasedCachedMethod(object):&lt;br /&gt;    """caches the result of a class method inside the instance based on the input&lt;br /&gt;    """&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    #----------------------------------------------------------------------&lt;br /&gt;    def __init__(self, method):&lt;br /&gt;        # record the unbound-method and the name&lt;br /&gt;        #print "running __init__ in InputBasedCachedMethod"&lt;br /&gt;        &lt;br /&gt;        self._method = method&lt;br /&gt;        self._name = method.__name__&lt;br /&gt;        self._obj = None&lt;br /&gt;        &lt;br /&gt;        &lt;br /&gt;        &lt;br /&gt;    #----------------------------------------------------------------------&lt;br /&gt;    def __get__(self, inst, cls):&lt;br /&gt;        """use __get__ just to get the instance object&lt;br /&gt;        """&lt;br /&gt;        #print "running __get__ in InputBasedCachedMethod"&lt;br /&gt;        &lt;br /&gt;        self._obj = inst&lt;br /&gt;        if not hasattr( self._obj, self._name + "._outputData" ):&lt;br /&gt;            #print "creating the data"&lt;br /&gt;            setattr ( self._obj, self._name + "._outputData", list() )&lt;br /&gt;            setattr ( self._obj, self._name + "._inputData", list() )&lt;br /&gt;            #print "finished creating data"&lt;br /&gt;            &lt;br /&gt;        return self&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    #----------------------------------------------------------------------&lt;br /&gt;    def __call__(self, *args, **keys):&lt;br /&gt;        """for now it uses only one argument&lt;br /&gt;        """&lt;br /&gt;        #print "running __call__ in InputBasedCachedMethod"&lt;br /&gt;        &lt;br /&gt;        outputData = getattr( self._obj, self._name + "._outputData" )&lt;br /&gt;        inputData = getattr( self._obj, self._name + "._inputData" )&lt;br /&gt;        &lt;br /&gt;        # combine args and keys&lt;br /&gt;        argsKeysCombined = list()&lt;br /&gt;        argsKeysCombined.append( args )&lt;br /&gt;        argsKeysCombined.append( keys )&lt;br /&gt;        &lt;br /&gt;        if (not argsKeysCombined in inputData) or outputData == None:&lt;br /&gt;            #print "calculating new data"&lt;br /&gt;            data = self._method(self._obj, *args, **keys)&lt;br /&gt;            inputData.append( argsKeysCombined )&lt;br /&gt;            outputData.append( data )&lt;br /&gt;            setattr( self._obj, self._name + "._inputdata", inputData )&lt;br /&gt;            setattr( self._obj, self._name + "._outputData", outputData )&lt;br /&gt;            &lt;br /&gt;            return data&lt;br /&gt;        else:&lt;br /&gt;            #print "returning cached data"&lt;br /&gt;            return outputData[ inputData.index( argsKeysCombined ) ]&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    #----------------------------------------------------------------------&lt;br /&gt;    def __repr__(self):&lt;br /&gt;        """Return the function's repr&lt;br /&gt;        """&lt;br /&gt;        #print "running __repr_ in InputBasedCachedMethod"&lt;br /&gt;        objectsRepr = str(self._obj)&lt;br /&gt;        objectsName = objectsRepr.split(' ')[0].split('.')[-1]&lt;br /&gt;        cachedObjectsRepr = '&lt;cached bound method ' + objectsName + '.' + self._name + ' of ' + objectsRepr + '&gt;'&lt;br /&gt;        return cachedObjectsRepr&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Edit 1: Edited the cache class, now it supports both arguments and keyword arguments, and I didn't delete the lines that has print commands, so you can uncomment the lines to see which one of the methods runs when&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-6258152639894888451?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/6258152639894888451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=6258152639894888451' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/6258152639894888451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/6258152639894888451'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2009/10/inpu-based-caching-with-function.html' title='Python Function Decorators 3: Input Based Caching'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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-1254328298726568959.post-8508036296928602536</id><published>2009-09-26T12:21:00.023+03:00</published><updated>2010-05-23T22:56:52.182+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='qt'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='compile'/><category scheme='http://www.blogger.com/atom/ns#' term='pyqt'/><title type='text'>How to Compile PyQt4 for Python 2.6 AMD64 (64 bit) on Windows x64</title><content type='html'>&lt;a href="http://www.ozgurfx.com/downloads/PyQt-Py2.5-gpl-4.5.4-1_amd64.exe"&gt;PyQt 4.5.4 for Python 2.5 amd64&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.ozgurfx.com/downloads/PyQt-Py2.6-gpl-4.5.4-1_amd64.exe"&gt;PyQt 4.5.4 for Python 2.6 amd64&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Recently I've written an interface for the first time with PyQt4 in Linux for one of our pipeline related scripts. It was working very well under Linux, until I decided to check how it is going to look under Windows x64.&lt;br /&gt;&lt;br /&gt;Well, it didn't take too long for me to recognize that there is no PyQt4 for Python 2.5 amd64. So I decided to compile my own. By the way you will see that I started for Python 2.5 but compiled for Python 2.6, it is just because, in a panic mode I've installed Maya 2010 to see if the package I found for &lt;a href="http://code.google.com/p/pyqt4-win64-binaries/downloads/list"&gt;PyQt4 for Python 2.6 amd64 for Windows x64&lt;/a&gt; will work under. But no it wasn't ( actually it was, but I didn't know that I should add the path that contains the Qt DLLs to environment path ). So I dived in to compiling PyQt4 for Python2.6 amd64 for Windows x64.&lt;br /&gt;&lt;br /&gt;Here you can find the How-To of that compilation...&lt;br /&gt;&lt;br /&gt;You need these packages and programs:&lt;br /&gt;&lt;br /&gt;MS Visual Studio 2008&lt;br /&gt;&lt;a href="http://www.python.org/download"&gt;Python 2.6 amd64&lt;/a&gt;&lt;br /&gt;&lt;a href="http://qt.nokia.com/downloads"&gt;Qt 4.5.2 SDK for Windows&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.riverbankcomputing.co.uk/software/sip/download"&gt;Sip 4.8.2 Source&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.riverbankcomputing.co.uk/software/pyqt/download"&gt;PyQt4 4.5.4 Source&lt;/a&gt;&lt;br /&gt;&lt;a href="http://nsis.sourceforge.net/Download"&gt;Nullsoft scriptable install system&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lets start:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Install Python 2.6.2 amd64:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;install it to C:\Python2.6&lt;/li&gt;&lt;li&gt;if you have already installed it somewhere else, in the rest of this "how-to" use that path instead of C:\Python26&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;compile sip:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;download sip-4.8.2.zip&lt;/li&gt;&lt;li&gt;unzip sip-4.8.2.zip to C:\sip-4.8.2&lt;/li&gt;&lt;li&gt;open up the Visual Studio 2008 x64 Win64 Command Prompt from start menu/programs/etc.&lt;/li&gt;&lt;li&gt;run the commands below&lt;/li&gt;&lt;li&gt;cd C:\sip-4.8.2&lt;/li&gt;&lt;li&gt;C:\Python26\python configure.py -p win32-msvc2008&lt;/li&gt;&lt;li&gt;nmake&lt;/li&gt;&lt;li&gt;nmake install&lt;/li&gt;&lt;li&gt;open the python interpreter and check the module by using:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;from sip import *&lt;br /&gt;print SIP_VERSION_STR&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;if it doesn't give any error messages about a DLL or something, it is installed correctly&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;compile Qt4:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;download Qt SDK for Windows&lt;/li&gt;&lt;li&gt;install it to C:\Qt\4.5.2 not to 2009.03&lt;/li&gt;&lt;li&gt;delete the two tmp files: (they were causing problems in the middle of the compile process, very annoying to start again)&lt;br /&gt;C:\Qt\4.5.2\qt\src\3rdparty\webkit\WebCore\tmp\moc\{debug,release}_shared/mocinclude.tmp)&lt;/li&gt;&lt;li&gt;open up the Visual Studio 2008 x64 Win64 Command Prompt&lt;/li&gt;&lt;li&gt;run the commands below&lt;/li&gt;&lt;li&gt;cd C:\Qt\4.5.2\qt&lt;/li&gt;&lt;li&gt;set QTDIR=C:\Qt\4.5.2\qt&lt;/li&gt;&lt;li&gt;set PATH=%PATH%;C:\Qt\4.5.2\bin&lt;/li&gt;&lt;li&gt;configure -opensource -platform win32-msvc2008&lt;/li&gt;&lt;li&gt;enter "y" for the question&lt;/li&gt;&lt;li&gt;nmake ( and go to have a lunch or dinner, seriously, it took 3 hours in my computer, it will be around on yours too )&lt;/li&gt;&lt;li&gt;nmake install&lt;/li&gt;&lt;li&gt;congratulations you have built Qt4 x64 for Windows x64&lt;br /&gt;(NOTE 1: you can create a batch file that runs the 'configure' then the 'nmake' and then the 'nmake install' commands, but when you run this batch file wait for 1 seconds to the question in configure step then leave :) )&lt;br /&gt;(NOTE 2: because we didn't specified a -prefix option in configure, it will compile it over the source directories )&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;compile PyQt4:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;download PyQt4 4.5.4 Source&lt;/li&gt;&lt;li&gt;unzip the PyQt4 source to C:\PyQt-win-gpl-4.5.4&lt;/li&gt;&lt;li&gt;open Visual Studio 2008 x64 Win64 Command Prompt&lt;/li&gt;&lt;li&gt;run the commands below&lt;/li&gt;&lt;li&gt;set QTDIR=C:\Qt\4.5.2\qt&lt;/li&gt;&lt;li&gt;set Path=%PATH%;C:\Qt\4.5.2\qt\bin\&lt;/li&gt;&lt;li&gt;cd C:\PyQt-win-gpl-4.5.4&lt;/li&gt;&lt;li&gt;C:\Python26\python configure.py -w&lt;/li&gt;&lt;li&gt;enter "yes" to the question&lt;/li&gt;&lt;li&gt;nmake ( again it takes some time )&lt;/li&gt;&lt;li&gt;nmake install&lt;/li&gt;&lt;li&gt;now you should be able to use PyQt4, but if there is an error message saying:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;Python 2.6.2 (r262:71605, Apr 14 2009, 22:5+:60) [MSC v.1500 64 bit (AMD64)] on win32&lt;br /&gt;Type "help", "copyright", "credits" or license" for more information.&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; from PyQt4 import QtCore&lt;br /&gt;Traceback (most recent call last):&lt;br /&gt;File "&amp;lt;stdin&amp;gt;", line 1, in &amp;lt;module&amp;gt;&lt;br /&gt;ImportError: DLL load failed: The specified module could not be found&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;you need to add the folder that contains Qt DLLs to the environment path variables, by using the Control Panel -&gt; System -&gt; Advanced -&gt; Environment Variables&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Nullsoft installer to make installable binary package:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;download and install Nullsoft installers latest version&lt;/li&gt;&lt;li&gt;right click C:\PyQt-win-gpl-4.5.4\PyQt.nsi and select "Compile NSIS Script"&lt;br /&gt;( unfortunatelly the script gives a lot of errors, you need to copy/paste some files and create folders by your self according to the complains of the compiler )&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;for Python 2.5, compiling PyQt4 for Python 2.5 x64 is quite similar, you just need to use vs2005 and its x64 command prompt compiler with the nearly the same commands, just replace win32-msvc2008's with win32-msvc2005, that's all...&lt;br /&gt;&lt;br /&gt;EDIT 1:&lt;br /&gt;&lt;br /&gt;for Python 2.6 version of PyQt4 you need to install &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=BA9257CA-337F-4B40-8C14-157CFDFFEE4E&amp;displaylang=en"&gt;Microsoft Visual C++ 2008 SP1 Redistributable Package (x64)&lt;/a&gt; also&lt;br /&gt;&lt;br /&gt;for Python 2.5 version of PyQt4 &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=EB4EBE2D-33C0-4A47-9DD4-B9A6D7BD44DA&amp;displaylang=en"&gt;Microsoft Visual C++ 2005 SP1 Redistributable Package (x64)&lt;/a&gt; also&lt;br /&gt;&lt;br /&gt;EDIT 2:&lt;br /&gt;&lt;br /&gt;I've compiled the Python 2.5 amd64 version of PyQt4 for Windows x64... &lt;a href="http://www.ozgurfx.com/downloads/PyQt-Py2.5-gpl-4.5.4-1_amd64.exe"&gt;Download&lt;/a&gt; (the Phonon Multimedia Framework is only supported by python 2.6 an later)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-8508036296928602536?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/8508036296928602536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=8508036296928602536' title='40 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/8508036296928602536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/8508036296928602536'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2009/09/how-to-compile-pyqt4-for-windows-x64.html' title='How to Compile PyQt4 for Python 2.6 AMD64 (64 bit) on Windows x64'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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>40</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1254328298726568959.post-8194890217240303016</id><published>2009-09-24T02:02:00.025+03:00</published><updated>2009-12-22T01:07:32.256+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='function decorator'/><title type='text'>Python Function Decorators 2: Decorating a Class Method</title><content type='html'>I think I need to make things a little bit clearer with the code shown in previous post...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;The Decoration&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Decorating a function enables you to call other code before the original function is called, or you can completely change the functions code. As I've red &lt;a href="http://www.artima.com/weblogs/viewpost.jsp?thread=240808"&gt;somewhere&lt;/a&gt; it is best equated to preprocessor macros or template libraries in C++.&lt;br /&gt;&lt;br /&gt;In my previous post, I've decorated my class methods by adding &lt;code&gt;@CachedMethod&lt;/code&gt; at the definition of the class method. This is one of the two ways of defining decorators. When I do that the Python interpreter decorates the unbound function, which means, it is decorated whenever I've imported the module not when I've created the instance object. This leads us to a little but important difference that can easily be neglected, so be careful to not to miss what you intended to do. I mean, when I've first written the CachedMethod class, it was caching the data in the Class not in the instance object. So every instance of that class was trying to use the same cached data, which in my situation was a wrong behaviour, though it is may desirable in some other cases...&lt;br /&gt;&lt;br /&gt;By decorating my functions with a class (you can decorate them with functions too), I'm practically turning them in to classes. So instead of being a method of a class, they become a class belonging to another class.&lt;br /&gt;&lt;br /&gt;The key to decorate a Class method in a way to be able to reach the instance object is to store the instance object in the &lt;code&gt;__get__&lt;/code&gt; method of the decorator and then use it in the &lt;code&gt;__call__&lt;/code&gt; method.&lt;br /&gt;&lt;br /&gt;The order of execution of the CachedMethod classes methods are like that: when you import your module the functions are decorated, and the &lt;code&gt;__init__&lt;/code&gt; of the CachedMethod runs for all of the class methods you have decorated. Then when you create your object nothing happens, but when you call a decorated method, first the &lt;code&gt;__get__&lt;/code&gt; method runs, than the &lt;code&gt;__call__&lt;/code&gt; method. It is a good practice to add &lt;code&gt;print()&lt;/code&gt; commands to the decorators method to understand what is going on.&lt;br /&gt;&lt;br /&gt;The &lt;code&gt;__get__&lt;/code&gt; method has 3 arguments self, instance and class. Self, as regular, is the CachedMethod instance, instance is the instance of which the decorated function belongs to, and the class is the super that the instance is derived from.&lt;br /&gt;&lt;br /&gt;You can change the settings of the arguments of &lt;code&gt;__call__&lt;/code&gt; method, but I think the best settings&lt;code&gt;&lt;/code&gt; is a couple of &lt;code&gt;*args&lt;/code&gt;, &lt;code&gt;**keys&lt;/code&gt; together (&lt;code&gt; def __call__(self, *args, **keys) &lt;/code&gt;) . So you can get any type of arguments setup passed to your original function and use them in your decorator. Other than this setup you can use the same argument count and order in your original function, but I don't recommend that, because you are restricted to decorate only the methods that has the same types of arguments.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;CachedMethod Explained&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Here are the brief explanation of what is going on in the methods of CachedMethod class.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;__init__&lt;/code&gt; : I store unbound method and the name of the unbound method in class variables, to let my self to call the original function later on.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;__get__&lt;/code&gt; : as far as I know, this is the only place that I can get the instance object. I store the instance object in &lt;code&gt;self._obj&lt;/code&gt; and check if it already has its attributes set up. If not I create the attributes by using &lt;code&gt;setattr&lt;/code&gt; commands&lt;br /&gt;&lt;br /&gt;&lt;code&gt;__call__&lt;/code&gt; : I've all the data I need to have, so I do the caching by calling the original function if the &lt;code&gt;self._data&lt;/code&gt; is empty or the time delta is bigger than the &lt;code&gt;self._maxTimeDelta&lt;/code&gt;, otherwise I return the cached data. To get the data from the instance appropriately I use &lt;code&gt;getattr&lt;/code&gt;, and I evaluate the attribute name on the fly by using &lt;code&gt;self._name + '_data'&lt;/code&gt; for example.&lt;br /&gt;&lt;br /&gt;Thats all... Hope it helps you to understand what is going on.  And if not, there are some nice tutorials &lt;a href="http://www.artima.com/weblogs/viewpost.jsp?thread=240808"&gt;here&lt;/a&gt; and &lt;a href="http://wiki.python.org/moin/PythonDecoratorLibrary"&gt;here&lt;/a&gt; is a nice function decorator library in &lt;a href="http://www.python.org/"&gt;Python.org&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-8194890217240303016?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/8194890217240303016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=8194890217240303016' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/8194890217240303016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/8194890217240303016'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2009/09/python-function-decorators-2-decorating.html' title='Python Function Decorators 2: Decorating a Class Method'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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-1254328298726568959.post-6584159305032419323</id><published>2009-09-17T18:26:00.016+03:00</published><updated>2010-06-06T02:11:56.798+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='function decorator'/><title type='text'>Python Function Decorators: Caching a Class Methods Output</title><content type='html'>I've been writing a class and I've noticed that one of its methods may could create a lot of overhead to our file server when it is used often. And its result was not changing so often. So trying to get all the data over and over again is something I should avoid.&lt;br /&gt;&lt;br /&gt;I've decided to create some kind of caching system to overcome this problem. I've changed the function so it was caching its own result, and it was not trying to get the data over and over again before some definite time is passes. It was working very nice. But later on I've noticed several other functions those had to have this functionality.&lt;br /&gt;&lt;br /&gt;So I've decided to use a decorator that decorates the functions with that ability. Here is the decorator:&lt;br /&gt;&lt;pre class="brush: python" style="overflow: auto; width: 100%;"&gt;#######################################################################&lt;br /&gt;class CachedMethod(object):&lt;br /&gt;    """caches the result of a class method inside the instance&lt;br /&gt;    """&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    #----------------------------------------------------------------------&lt;br /&gt;    def __init__(self, method):&lt;br /&gt;        # record the unbound-method and the name&lt;br /&gt;        #print "running __init__ in CachcedMethod"&lt;br /&gt;        &lt;br /&gt;        if not isinstance( method, property ):&lt;br /&gt;            self._method = method&lt;br /&gt;            self._name = method.__name__&lt;br /&gt;            self._isProperty = False&lt;br /&gt;        else:&lt;br /&gt;            self._method = method.fget&lt;br /&gt;            self._name = method.fget.__name__&lt;br /&gt;            self._isProperty = True&lt;br /&gt;        &lt;br /&gt;        self._obj = None&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    #----------------------------------------------------------------------&lt;br /&gt;    def __get__(self, inst, cls):&lt;br /&gt;        """use __get__ to get the instance object&lt;br /&gt;        and create the attributes&lt;br /&gt;        &lt;br /&gt;        if it is  a property call __call__&lt;br /&gt;        """&lt;br /&gt;        #print "running __get__ in CachcedMethod"&lt;br /&gt;        &lt;br /&gt;        self._obj = inst&lt;br /&gt;        &lt;br /&gt;        if not hasattr( self._obj, self._name + "._data"):&lt;br /&gt;            #print "creating the data"&lt;br /&gt;            setattr ( self._obj, self._name + "._data", None )&lt;br /&gt;            setattr ( self._obj, self._name + "._lastQueryTime", 0 )&lt;br /&gt;            setattr ( self._obj, self._name + "._maxTimeDelta", 60 )&lt;br /&gt;            #print "finished creating data"&lt;br /&gt;        &lt;br /&gt;        if self._isProperty:&lt;br /&gt;            return self.__call__()&lt;br /&gt;        else:&lt;br /&gt;            return self&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    #----------------------------------------------------------------------&lt;br /&gt;    def __call__(self, *args, **kwargs):&lt;br /&gt;        """&lt;br /&gt;        """&lt;br /&gt;        #print "running __call__ in CachedMethod"&lt;br /&gt;        &lt;br /&gt;        delta = time.time() - getattr( self._obj, self._name + "._lastQueryTime" )&lt;br /&gt;        &lt;br /&gt;        if delta &gt; getattr(self._obj, self._name + "._maxTimeDelta") or getattr(self._obj, self._name + "._data" ) == None:&lt;br /&gt;            # call the function and store the result as a cache&lt;br /&gt;            #print "caching the data"&lt;br /&gt;            data = self._method(self._obj, *args, **kwargs )&lt;br /&gt;            setattr( self._obj, self._name + "._data", data )&lt;br /&gt;            &lt;br /&gt;            # zero the time&lt;br /&gt;            lastQueryTime = time.time()&lt;br /&gt;            setattr( self._obj, self._name + "._lastQueryTime", time.time() )&lt;br /&gt;        #else:&lt;br /&gt;            #print "returning the cached data"&lt;br /&gt;        &lt;br /&gt;        return getattr( self._obj, self._name + "._data" )&lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    #----------------------------------------------------------------------&lt;br /&gt;    def __repr__(self):&lt;br /&gt;        """Return the function's representation&lt;br /&gt;        """&lt;br /&gt;        objectsRepr = str(self._obj)&lt;br /&gt;        objectsName = objectsRepr.split(' ')[0].split('.')[-1]&lt;br /&gt;        cachedObjectsRepr = '&lt;cached bound method ' + objectsName + '.' + self._name + ' of ' + objectsRepr + '&gt;'&lt;br /&gt;        return cachedObjectsRepr&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;You can use that anywhere you want, but beware that the caching is time dependent, not input dependent.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-6584159305032419323?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/6584159305032419323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=6584159305032419323' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/6584159305032419323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/6584159305032419323'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2009/09/python-function-decorators-caching.html' title='Python Function Decorators: Caching a Class Methods Output'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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-1254328298726568959.post-8780090588991896515</id><published>2009-08-08T17:01:00.002+03:00</published><updated>2009-08-09T18:01:35.281+03:00</updated><title type='text'>After Siggraph 2009</title><content type='html'>Yesterday was the last day of Siggraph. It was a real mind blowing experience to be a part of it. I was too busy to post something here, but I've got all my notes with me, so I'll arrange them and post something here very soon...&lt;br /&gt;&lt;br /&gt;By the way, I've started developing some tools that I've learned in Siggraph, and expect some others too...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-8780090588991896515?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/8780090588991896515/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=8780090588991896515' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/8780090588991896515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/8780090588991896515'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2009/08/after-siggraph-2009.html' title='After Siggraph 2009'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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-1254328298726568959.post-674038946527171474</id><published>2009-08-02T08:55:00.002+03:00</published><updated>2009-08-02T09:05:53.946+03:00</updated><title type='text'>First Night in New Orleans</title><content type='html'>After 20 hours of journey, I finally got my self in to New Orleans... I will try to blog every interesting detail...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-674038946527171474?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/674038946527171474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=674038946527171474' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/674038946527171474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/674038946527171474'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2009/08/first-night-in-new-orleans.html' title='First Night in New Orleans'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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-1254328298726568959.post-6521922774282885395</id><published>2009-07-23T01:11:00.002+03:00</published><updated>2009-07-23T01:14:43.791+03:00</updated><title type='text'>Siggraph 2009 in New Orleans</title><content type='html'>In the first 10 days of the August, I'll be in New Orleans to attend Siggraph 2009... I'm very excited because it is my first Siggraph...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-6521922774282885395?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/6521922774282885395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=6521922774282885395' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/6521922774282885395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/6521922774282885395'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2009/07/siggraph-2009-in-new-orleans.html' title='Siggraph 2009 in New Orleans'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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-1254328298726568959.post-535213949372687482</id><published>2009-07-08T13:13:00.002+03:00</published><updated>2009-07-08T14:08:07.225+03:00</updated><title type='text'>Switched from Gnome to KDE</title><content type='html'>Yesterday I switched from Gnome to KDE, now Maya works much much much better, even with composite is on (under KDE, opening the hotbox while composite is on doesn't lock the interface as it does in Gnome, I've red that there is a dead lock issue between Maya and Gnome when composite is on), no &lt;a href="http://bugzilla.kernel.org/show_bug.cgi?id=9448"&gt;sticky keyboard bug&lt;/a&gt; under Maya any more and I can adjust the Maya panels so the editors like Attribute editor Hypershade stays on top of the main Maya window until I click to the title bar of the main window... so its cool, its fun again to use Maya under Linux...&lt;br /&gt;&lt;br /&gt;Here is the pros of switching to KDE:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Maya works flawlessly&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Using hotbox doesn't hang the whole desktop process&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Window manager could be adjusted to make the Maya Panels behave as expected&lt;/li&gt;&lt;/ul&gt;Here is the cons ( for me at least ):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A more candy look compared to Gnome ( which may others like )&lt;/li&gt;&lt;li&gt;Need to get used to the different tools like kate instade of gedit, konsole instead of the regular terminal etc.&lt;/li&gt;&lt;li&gt;KDE and Gnome tools lays side by side if you just install KDE to Ubuntu ( which again may doesn't disturb other people )&lt;/li&gt;&lt;li&gt;Finding a tool under the application launcher is more difficult compared to Gnome ( which may I later will get used to )&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;After installing KDE under Ubuntu, I decided to install a fresh version of Kubuntu, to have the default tools those come with KDE version of Ubuntu (Kubuntu again), this was a very very unnecessary decision, because in Linux world having a fresh install could be get by just using the lovely packet manager and removing the unwanted programs/components/tools...&lt;br /&gt;&lt;br /&gt;I wanted to get rid of the extra gnome tools. But now I need to configure all the things from scratch again. I've lost the sound in my laptop (&lt;a href="http://www.shopping.hp.com/webapp/shopping/computer_can_series.do?storeName=computer_store&amp;amp;category=notebooks&amp;amp;a1=Category&amp;amp;v1=Performance+and+entertainment&amp;amp;series_name=HDX18t_series"&gt;HDX-1080&lt;/a&gt;) again, I need to compile 2.6.30 version of the kernel, I think this time I'll wait for the ubuntu version of the kernel to update. I need to install a lot of the programs again, like JEdit, WingIDE, KDevelop etc...&lt;br /&gt;&lt;br /&gt;Hopefully, Maya installed very quickly, with the help of &lt;a href="http://combas3d.com/2009/05/setup-guide-maya-2009-sp1-linux-x64/"&gt;this site&lt;/a&gt;...&lt;br /&gt;&lt;br /&gt;So for now, if nothing bad will happen I suggest to use KDE with Maya...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-535213949372687482?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/535213949372687482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=535213949372687482' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/535213949372687482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/535213949372687482'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2009/07/switched-from-gnome-to-kde.html' title='Switched from Gnome to KDE'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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-1254328298726568959.post-6215447087167099667</id><published>2009-06-29T17:13:00.002+03:00</published><updated>2009-06-29T17:21:26.168+03:00</updated><title type='text'>PoseDeformer for Linux 64 bit</title><content type='html'>I've compiled the excellent &lt;a href="http://www.comet-cartoons.com/melscript.php"&gt;PoseDeformer&lt;/a&gt; plug-in from &lt;a href="http://www.comet-cartoons.com/"&gt;Micheal Commet&lt;/a&gt; for Linux 64 bit. You can &lt;a href="http://www.djx.com.au/blog/downloads/"&gt;download&lt;/a&gt; the plug-in including the Linux 64 bit version from &lt;a href="http://www.djx.com.au/blog/2008/05/26/posedeformer-for-maya2008-x64/"&gt;Djx Blog&lt;/a&gt;...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-6215447087167099667?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/6215447087167099667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=6215447087167099667' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/6215447087167099667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/6215447087167099667'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2009/06/posedeformer-for-linux-64-bit.html' title='PoseDeformer for Linux 64 bit'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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-1254328298726568959.post-5380304604368201909</id><published>2009-06-06T10:32:00.016+03:00</published><updated>2009-09-28T09:07:51.736+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='maya'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='production asset management'/><category scheme='http://www.blogger.com/atom/ns#' term='asset management'/><title type='text'>Production Asset Management (ProdAM) &amp; Shotgun</title><content type='html'>I found that they call Production Asset Management (ProdAM) System to the systems that we need for our animation studio to track the files, collaborate each other and schedule the tasks.&lt;br /&gt;&lt;br /&gt;I've red a lot of books about asset management systems last two months. Most of them were explaining the systems those has been used for the media companies, like systems that works like a librarian for you and find the media (image, video etc.) that has the keywords you've entered, but doesn't essentially track the new versions of it and doesn't have any collaboration or scheduling functionality.&lt;br /&gt;&lt;br /&gt;One of the books was &lt;a href="http://www.amazon.com/Implementing-Digital-Asset-Management-System/dp/0240806654/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1244273702&amp;amp;sr=8-1"&gt;"Implementing a Digital Asset Management System"&lt;/a&gt;. It explains how to choose a right system, and prepare your staff for it. Although, I first thought that it is going to explain how to write one :). What the book offers for an animation studio is simply to use &lt;a href="http://www.alienbrain.com/"&gt;AlienBrain&lt;/a&gt;. There are examples of studios who implemented their own solution, like &lt;a href="http://www.imageworks.com/"&gt;ImageWorks&lt;/a&gt; and their TrackIT system.&lt;br /&gt;&lt;br /&gt;Because AlienBrain is a high cost solution for our studio, I searched for other alternatives. Eventhough, there is not many alternatives on the market, I found &lt;a href="http://www.imageworks.com/"&gt;Shotgun&lt;/a&gt;. Which is still in development, but there are around 20 studios like &lt;a href="http://www.pixar.com/"&gt;Pixar&lt;/a&gt;, &lt;a href="http://www.framestore.com/"&gt;Framestore&lt;/a&gt;, &lt;a href="http://www.rsp.com.au/"&gt;RisingSunPictures&lt;/a&gt;, &lt;a href="http://www.digitaldomain.com/"&gt;Digital Domain&lt;/a&gt; etc. that tried this system and simply loved it. I loved it too. But the cost is not defined yet. So I don't know if we want to spend that money.&lt;br /&gt;&lt;br /&gt;What Shotgun offers is, to supply a platform for Scheduling, Tracking, Collaboration and Implementation. It's very powerful, cause you can track any data you need while completing the project. So you have the eagles eye over your project to see how it is going, where are your files, who is dealing with what and many many other things.&lt;br /&gt;&lt;br /&gt;Shotgun is based on open source projects like, Ruby, Rails, Appache, PostgreSQL etc. and it is a web based application, so it works on any OS. It uses Python as the API language. Go and watch the tour video on their &lt;a href="http://www.shotgunsoftware.com/home"&gt;site&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Shotgun gave a lot of ideas to me and because they are honest enough to show the open source projects that Shotgun is built on, I've got the feeling that I can write a simple version of it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-5380304604368201909?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/5380304604368201909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=5380304604368201909' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/5380304604368201909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/5380304604368201909'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2009/06/production-asset-management-prodam.html' title='Production Asset Management (ProdAM) &amp; Shotgun'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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-1254328298726568959.post-272310977979268912</id><published>2009-03-07T00:28:00.014+02:00</published><updated>2009-06-06T11:36:04.589+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='version'/><category scheme='http://www.blogger.com/atom/ns#' term='maya'/><category scheme='http://www.blogger.com/atom/ns#' term='cms'/><category scheme='http://www.blogger.com/atom/ns#' term='version control'/><category scheme='http://www.blogger.com/atom/ns#' term='mel'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='asset management'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Subversion</title><content type='html'>I started to use SVN to manage my codes.&lt;br /&gt;&lt;br /&gt;I feel very ashamed, because I've heard that there are tools to keep track of the data in coders world, but I didn't know that this applications were that much powerful. So, I'm emberassed because I was developing codes for years and I haven't had any information about SVN, CVS, Git, Perfoce etc.. But I think the problem was, the fact that I'm alone. There is nobody to teach me this stuff. Ok there is the internet, but internet is not pushing information to me, before I ask. Allright, I think I can live with that.&lt;br /&gt;&lt;br /&gt;I just started a code project in &lt;a href="http://code.google.com/"&gt;Google Code&lt;/a&gt; with the name of &lt;a href="http://code.google.com/p/oy-maya-scripts/"&gt;oy-maya-scripts&lt;/a&gt;. From the project page, you can download the latest scripts and plugins I've written.  And because, Google Code supports &lt;a href="http://subversion.tigris.org/"&gt;SVN&lt;/a&gt; repositories and I use &lt;a href="http://tortoisesvn.tigris.org/"&gt;tortoiseSVN&lt;/a&gt; to track my code, it is much more easier to handle the versions between my laptop, my home computer, my workstation at work and the server where the artists are using the scripts. I feel like, I lost some of the weights in my burden. And if you want to contribute you can help developing.&lt;br /&gt;&lt;br /&gt;After creating the project, and with the feel of joy, I started to manage my current scripts. I've deleted lots of them, updated the old codes in some old scripts and organized them in a folder dedicated to my scripts only. I seperated the hacked Maya scripts (the scripts that has been written by the alias/autodesk programmers and which I added my own codes inside them to give new functionalities, like adding your own menu commands to dagMenuProc.mel, or to fix the ridiculous image number expression in checkUseFrameExtension.mel) in another folder. I standardized the format of the heading of the code files etc.. I've even found an old script that I've written 2 years ago, which actually does the same thing I need to code for an upcomming project.&lt;br /&gt;&lt;br /&gt;SVN or these versioning applications are absolutly usefull tools. I'm curious about how I survived this far without them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-272310977979268912?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/272310977979268912/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=272310977979268912' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/272310977979268912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/272310977979268912'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2009/03/subversion.html' title='Subversion'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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-1254328298726568959.post-4950695467958911254</id><published>2009-02-12T10:36:00.001+02:00</published><updated>2009-03-14T16:40:37.207+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='maya'/><category scheme='http://www.blogger.com/atom/ns#' term='mel'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='asset management'/><title type='text'>Brad Friedman's Blog</title><content type='html'>While searching for a way to have the auto-complation in WingIDE I came across &lt;a href="http://fie.us/blog/"&gt;this&lt;/a&gt; wonderfull blog of Brad Friedman. I've red his entry about his asset management system which he calls "GlobalStorage" where at the end of this entry I was almost going to cry in bliss :)&lt;br /&gt;&lt;br /&gt;I was working for an animation studio last year. Which has around 20 artists in total. I was the only Technical Director dealing with everything considered technical. I had a lot of problems with the file structure we were using (actually we didn't have one).&lt;br /&gt;&lt;br /&gt;Even with this little group of artists, the file names and paths gets confused without using a management for the files. So I couldn't find the latest versions, files were named like &lt;code&gt;final_anim.mb&lt;/code&gt; or &lt;code&gt;final_RealFinal_anim.mb&lt;/code&gt;&lt;span style="font-style: italic;"&gt;.&lt;/span&gt; Being the villain and dictating didn't solve anyting.&lt;br /&gt;&lt;br /&gt;I've tried to organize by creating directories with meaningful names for every phase of the job, and I've adjusted the &lt;code&gt;workspace.mel&lt;/code&gt; so maya can understand the structure. Again it didn't solve anything. I needed a little time to write a proper asset management or at least something that manages the files. New jobs were comming constantly, I didn't have time. The pressure was increasing, following the files was getting harder and harder. So I was crushed under that pressure on my shoulders and I resigned from my job last year ( there were other things too).&lt;br /&gt;&lt;br /&gt;When I started working for my current job, I asked them how are they managing their files, they explained that they were using a very simple system for XSI to set the file name and path. They had a little Java script which manages the creation of project folders and adding shots to the lists.&lt;br /&gt;&lt;br /&gt;I've re-written the code from scratch with C# and MEL. I've made the code much more flexible than before. So in Maya when an artists wants to save his/her file, he uses my save as script (oySaveAs). It is a simple form that users must fill the fileds. There are fileds for project name, scene name, shot number, shot type, revision and version numbers, user name initials, so the scripts decides the file name and path. The fields are filled automatically after the first usage. So if you are doing an animation for a job named JEMBEY, for the scene SEVGILILER_GUNU and shot 012, the file path and name becomes :&lt;br /&gt;&lt;br /&gt;M:/JOBS/JEMBEY/MAYA/SEVGILILER_GUNU/ANIMATIONS/SH012/SH012_ANIMATION_r00_v001_oy.mb&lt;br /&gt;&lt;br /&gt;or if you are doing a model of a character named KIZ than the file path and name becames:&lt;br /&gt;&lt;br /&gt;M:/JOBS/JEMBEY/MAYA/SEVGILILER_GUNU/MODELS/KIZ/KIZ_MODEL_r00_v011_oy.mb&lt;br /&gt;&lt;br /&gt;of course, it is not a complete asset management system, or at least it is managing from one side, by just putting the files in a correct place with a correct name.&lt;br /&gt;&lt;br /&gt;Brad's system is something huge really huge when compared to my little tiny scripts. He is using &lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt; as the base system and he has written a lot of code over it with Python to get the nice features of his management system. Go and read his &lt;a href="http://fie.us/blog/2008/03/introducing_globalstorage.html"&gt;entry&lt;/a&gt; about GlobalStorage.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-4950695467958911254?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/4950695467958911254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=4950695467958911254' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/4950695467958911254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/4950695467958911254'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2009/02/brad-friedmans-blog.html' title='Brad Friedman&apos;s Blog'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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-1254328298726568959.post-5888704025493399363</id><published>2009-02-11T13:15:00.002+02:00</published><updated>2009-06-06T11:35:03.906+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='maya'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='wingIDE'/><title type='text'>WingIDE with Maya Python</title><content type='html'>I'm searching a way to have auto-completion in WingIDE for MayaPhytonAPI...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-5888704025493399363?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/5888704025493399363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=5888704025493399363' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/5888704025493399363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/5888704025493399363'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2009/02/wingide-with-maya-python.html' title='WingIDE with Maya Python'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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-1254328298726568959.post-7385457145368940801</id><published>2008-01-19T04:31:00.000+02:00</published><updated>2008-12-23T11:07:35.546+02:00</updated><title type='text'>Blog or not to blog</title><content type='html'>I sent my last blog, 1 year ago, been  so long , infact I have a real notebook which I use as a blogger, writing blogs that only I’ll read is much more easier than writing blogs that will be read by millions of people, maybe thats why I didn’t sent any entries.&lt;br /&gt;&lt;br /&gt;However, the technical discoveries, the results of my tests, new script and plugin ideas that I wrote on this notebook could be very helpful to people who try to learn Maya API and MEL scripting.&lt;br /&gt;&lt;br /&gt;Thereafter, whenever I have time I’ll send new entries to my blog…&lt;br /&gt;&lt;br /&gt;And I’m little bit confused about the language of the blog, I don’t want to write it only in Turkish, and writing it in English beside Turkish would be time consuming, writing it only in English is the best idea I think, however it wouldn’t have any effect on Turkish source count on the net…&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-7385457145368940801?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/7385457145368940801/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=7385457145368940801' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/7385457145368940801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/7385457145368940801'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2008/01/son-blogunmu-1-sene-nce-yollamm-uzun.html' title='Blog or not to blog'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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-1254328298726568959.post-1345203584555488179</id><published>2007-01-08T21:45:00.000+02:00</published><updated>2007-01-08T22:32:08.279+02:00</updated><title type='text'>Rivet (continues)</title><content type='html'>&lt;br/&gt;I finally did what I thought would be the final thing to do: I edited the pointOnMeshInfo.mll and included the calculation of tangentU. Although it uses 2 nodes, it doesn't works faster than Bazhutkin's version, I don't know why. So it is your choice.&lt;br/&gt;&lt;br/&gt;Here you can downlaod the plug-in and mel scripts:&lt;a href="http://www.sendspace.com/file/0m2rrw"&gt;&lt;br/&gt;&lt;br/&gt;rivet_for_Maya7.0.zip&lt;/a&gt;&lt;a href="http://www.sendspace.com/file/0m2rrw"&gt;&lt;br/&gt;&lt;/a&gt;&lt;br/&gt;To make it faster, I have some ideas. The first thing could be done is to eliminate the need of an aimConstraint node by directly calculating the rotational values within the node itself. The second one could be calculating all the rivets' positions and rotations at once within a single node.&lt;br/&gt;&lt;br/&gt;I thing I will give a break to this rivet problem, I'll work on this when we need this on our &lt;a href="http://www.anima.gen.tr"&gt;animation studio&lt;/a&gt;...&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-1345203584555488179?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/1345203584555488179/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=1345203584555488179' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/1345203584555488179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/1345203584555488179'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2007/01/rivet_08.html' title='Rivet (continues)'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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-1254328298726568959.post-8283156380142879859</id><published>2007-01-07T00:03:00.000+02:00</published><updated>2007-01-07T00:04:14.172+02:00</updated><title type='text'>CGIndia</title><content type='html'>visit &lt;a href="http://cgindia.blogspot.com"&gt;cgindia.blogspot.com&lt;/a&gt; daily, I do so... &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-8283156380142879859?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/8283156380142879859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=8283156380142879859' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/8283156380142879859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/8283156380142879859'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2007/01/cgindia.html' title='CGIndia'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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-1254328298726568959.post-2167000564624696323</id><published>2007-01-06T23:13:00.000+02:00</published><updated>2007-01-08T21:56:50.313+02:00</updated><title type='text'>Rivet</title><content type='html'>&lt;span&gt;Allright, now start with some real posts:&lt;br/&gt;&lt;br/&gt;the recent two days I searched for a way to do the rivet thing using a method other than what Michael Bazhutkin used (&lt;a href="http://www.geocities.com/bazhutkin"&gt;www.geocities.com/bazhutkin&lt;/a&gt;). I found a way that use only 3 nodes where Bazhutkin's version use 5 nodes (including aimConstraint node), I wrote the script and it was working very well, but it was 2 times slower than Bazhutkin's version.&lt;br/&gt;&lt;br/&gt;What I did was, I used two pointOnMeshInfo node which gives a position and normal vector, and an aimConstraint node. The first pointOnMeshInfo node calculates the position and normal the second one is just used for to get the position that aimConstraint will try to aim.&lt;br/&gt;&lt;br/&gt;The problem is that if I used 2 pointOnMeshInfo nodes just to see how fast that they calculate, it is 2 times faster than Bazhutkin's, but the locator doesn't rotates of course, if I use 1 pointOnMeshInfo node and one aimConstraint node it is again 2 times faster, but the locator doesn't points the right point of course...&lt;br/&gt;&lt;br/&gt;It gets slower when I try to use three of them. I will try to find a way to use only one pointOnMeshInfo and one aimConstraint nodes.&lt;/span&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1254328298726568959-2167000564624696323?l=eoyilmaz.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eoyilmaz.blogspot.com/feeds/2167000564624696323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1254328298726568959&amp;postID=2167000564624696323' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/2167000564624696323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1254328298726568959/posts/default/2167000564624696323'/><link rel='alternate' type='text/html' href='http://eoyilmaz.blogspot.com/2007/01/rivet.html' title='Rivet'/><author><name>Ozgur</name><uri>http://www.blogger.com/profile/07789950055679595429</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></feed>
