Bernhard Millauer2021-11-11T21:25:06+01:00https://root-project.orgBernhard MillauerMy experience as an interviewer2014-07-29T13:54:00+02:00https://root-project.org/2014/07/29/work/experience-as-interviewer<p>Recently I did a lot of interviews for my developer team and I thought a summary might helps interviewers and/or candidates alike.</p>
<h3 id="1-calm-down-we-are-all-just-humans">1. Calm down, we are all just humans</h3>
<p><strong>Interviewer</strong></p>
<ul>
<li>The candidate will be nervous because it’s a not-so-common situation for him/her. Just because you interviewed a lot people already you can’t expect that everyone is doing well in that situation.</li>
<li>Candidates usually have some sort of doubt about their person and/or their skills. Try to talk with them or even make some jokes before the interview to break the ice; that way you can satisfy their need to get accepted as a person and they can focus on their skills during the interview.</li>
</ul>
<p><strong>Candidate</strong></p>
<ul>
<li>Don’t stress yourself to much. You’re gonna talk with people that are just like you and me.</li>
<li>If you’re lucky you will talk with your future colleagues and they want to see someone who they would love to work with.</li>
<li>Just be yourself and don’t freak out. Keep your hands calm and your voice steady and smooth.</li>
</ul>
<h3 id="2-you-can-not-bore-them-more-than-they-are-already">2. You can not bore them more than they are already</h3>
<p><strong>Interviewer</strong></p>
<ul>
<li>I know it’s the n’th person you see in this week / month but please, show respect; everyone deserves it.</li>
<li>If you need to draw a picture to keep you busy during the introduction, please do it in a way you don’t disturb anyone else’s attention.</li>
</ul>
<p><strong>Candidate</strong></p>
<ul>
<li>You have to stick out somehow. I don’t say you should act like a moron, I say you should shine with your behavior and knowledge.</li>
<li>Show you’re well educated and that your mother / father did a good job raising you up.</li>
<li>Respond to the questions you get asked with fully informative answers.</li>
</ul>
<h3 id="3-what-is-that-all-about">3. What is that all about?</h3>
<p><strong>Interviewer</strong></p>
<ul>
<li>Do a good introduction to the job. Don’t stop just because you think you waste time on this! It’s important to make your point and show off what this position is all about.</li>
<li>What’s the daily schedule, why does your product exists, why should / must people work with it and show off your excitement about it.</li>
<li>Explain why quality matters, how your team communicates and what educational experience you can offer.</li>
</ul>
<p><strong>Candidate</strong></p>
<ul>
<li>If it’s not clear to you what you gonna work, ask for it! It’s the first contact with your new workplace and you should know at the end of the interview if you want to talk to them ever again.</li>
<li>The interview is essentially a business talk: what can you offer them (expertise, good team player, etc) vs. what they can offer you (good team, learning, salary, etc.)</li>
<li>Be honest to yourself. If you don’t like it, don’t accept the position. You gonna regret it every day.</li>
</ul>
<h3 id="4-know-your-stuff">4. Know your stuff</h3>
<p><strong>Interviewer</strong></p>
<ul>
<li>Pay attention how much you have to ask for information. How communicative is that guy? Does he fit into the current team? Try to imagine how difficult / pleasant it would be to work with him/her on a daily base.</li>
<li>You can spot a real talent if the candidate does his job in his/her spare time just because he/she loves it.</li>
</ul>
<p><strong>Candidate</strong></p>
<ul>
<li>It’s important that you show what you know. No one likes to pull everything out of your nose.</li>
<li>Talk about your work experience, what you have learned and what challenges you had to face.</li>
<li>Maybe tell it as a story! People like to get entertained, an interview is no exception to that. Imagine you would see your interview on TV, would you switch the channel?</li>
<li>Be honest and tell if you don’t know something or need more learning in an area. You will look like a moron if you guess the right answer bore your oponent(s).</li>
</ul>
<h3 id="5-dont-spam-with-information">5. Don’t spam with information</h3>
<p><strong>Interviewer</strong></p>
<ul>
<li>Pay attention if someone just talks about stuff he read / watched or if he really knows his stuff. There are so called <a href="/assets/knowledge_vs_experience.jpg">“Information Tourists”</a> which read a lot but never or seldom experiment with the stuff they learned.</li>
</ul>
<p><strong>Candidate</strong></p>
<ul>
<li>Please don’t throw abbreviations at the wall and hope it draws a picture. It’s ok to use a few and explain what they mean but please keep in mind that the interviewer is interested to hear how you work with the technologies, not how much abbreviations you suck up in the past years.</li>
</ul>
How to run ungit on Cloud92014-07-09T12:55:00+02:00https://root-project.org/2014/07/09/work/ungit-on-cloud9<h2 id="prerequisites">Prerequisites</h2>
<ul>
<li>An account on <a href="https://c9.io/">Cloud9</a> (supports GitHub accounts)</li>
<li>A VM on <a href="https://c9.io/">Cloud9</a></li>
<li>node.js on the VM</li>
<li>A git repository</li>
<li>Watching the <a href="http://youtu.be/hkBVAi3oKvo">intro video</a> of <a href="https://github.com/FredrikNoren/ungit">ungit</a></li>
</ul>
<h2 id="installation">Installation</h2>
<ol>
<li>Open your terminal</li>
<li>Run <code class="language-plaintext highlighter-rouge">npm install -g ungit</code></li>
<li>Run <code class="language-plaintext highlighter-rouge">ungit --urlBase http://$IP --port $PORT</code>
<ul>
<li><code class="language-plaintext highlighter-rouge">$IP</code> is mapped to <code class="language-plaintext highlighter-rouge">0.0.0.0</code></li>
<li><code class="language-plaintext highlighter-rouge">$PORT</code> is mapped to <code class="language-plaintext highlighter-rouge">8080</code></li>
</ul>
</li>
<li>Open your browser and navigate to <code class="language-plaintext highlighter-rouge">https://<vm-name>-c9-<username>.c9.io/</code>
<ul>
<li>you can get the values from the ide-url which looks like <code class="language-plaintext highlighter-rouge">https://ide.c9.io/<username>/<vm-name></code></li>
</ul>
</li>
<li>Enter the path to your repository, starting with <code class="language-plaintext highlighter-rouge">/home/ubuntu/</code></li>
<li>Alternatively you can open the direct link <code class="language-plaintext highlighter-rouge">https://<vm-name>-c9-<username>.c9.io/#/repository?path=/home/ubuntu/<path></code></li>
<li>Have fun with <a href="https://github.com/FredrikNoren/ungit">ungit</a>!
<ul>
<li>ungit have <a href="https://github.com/FredrikNoren/ungit/blob/master/source/config.js">a lot of options</a> that might be handy, i.e. <a href="https://code.google.com/p/gerrit/">gerrit</a> support</li>
</ul>
</li>
</ol>
<h2 id="known-issues">Known Issues</h2>
<p><a href="https://c9.io/">Cloud9</a> only have a single port that is exposed to the internet which is internally set to 8080. For some reason it’s not possible to expose multiple services at once which means you have to stop any other web application before you can launch ungit.</p>
I just did it2014-06-30T16:51:00+02:00https://root-project.org/2014/06/30/work/i-just-did-it<p><strong>Usually I’m very keen to prepare myself for a project</strong>
I create a project document in my Google Docs with a well thought name, a few lines of introduction and the description about the technical stack like language(s), hosting and package I plan to use. Then I create a GitHub repository and start coding, at least that what I aim for; but instead I get distracted by all the details I was thinking of in the first place and read/try them out instead doing what I should focus on.</p>
<p><strong>But this time it was different</strong>
I didn’t created a project document, I didn’t evaluated the pros and cons about every single package and I didn’t used a source control at all.
I just opened the terminal and my text editor of my choice and started coding. Yes I did mistakes and yes one or two times I would like to have a source control to recover my mistakes, but I knew that committing source in this early stage would block my creativity because every step would have to feel like a “feature”.</p>
<p>Now, after I finished my <a href="http://en.wikipedia.org/wiki/Minimum_viable_product">MVP</a> I committed my source code and can start thinking in features I like to add. I guess only you have at least “something” (<a href="http://en.wikipedia.org/wiki/Minimum_viable_product">MVP</a>) you can start enhancing it instead doing premature optimizations to “nothing”.</p>
<p>Here is my <a href="http://en.wikipedia.org/wiki/Minimum_viable_product">MVP</a> called <a href="https://yournal.meteor.com/">yournal</a> (<a href="https://github.com/SeriousM/yournal">GitHub</a>), a personal journal without all the unnecessary wrinkles others have.
I still have some plans to enhance it a bit but in the end that’s what it should be.</p>
<p><strong>Meteor</strong>
<a href="https://www.meteor.com/">Meteor.js</a> was a great help realizing my idea. It helps me focusing on the application instead on the framework. This might sounds wrong because meteor <em>is</em> a framework but once you setup the routing the only thing you have to code is html (template) and javascript (event handling).</p>
<p><strong>TL;DR;</strong>
Don’t prematurely optimize your ideas, build at least a <a href="http://en.wikipedia.org/wiki/Minimum_viable_product">MVP</a> to see if it works out as expected.</p>
Code Review Expectations2014-05-21T19:22:00+02:00https://root-project.org/2014/05/21/work/code-review-expectations<p>When I ask for a code review I sometimes ask myself if I took too long to build this piece of software and if the reviewer will suspect my work capability.
I’m a very critical person so I expect just the best quality of my work and thus from others.</p>
<p>With that in mind I sometimes ask myself why others need an unreasonable amount of time until they are review-ready.
I think the problem is that I forget, that the presented <em>result</em> is not the <em>path</em> it took to complete it.
It needs some time to figure out how to solve a problem, learn a technique to perform a certain task or rebuild the whole thing because the first version didn’t worked out.</p>
<p>People that don’t value an ugly painting have the same problem. Sure, they don’t look nice and maybe don’t suit the personal style, but the painting represents not only the final state, it represents also the path until it was done.
And we shouldn’t forget the artist itself. No one is like the other and that’s true for teir skills as well.
Some are fast but sloppy, some are slow but genius and others are <em>da Vinci</em>’s.</p>
<p>So next time you get or give a code review, don’t judge the piece of software depending on the lines of code, the time it took to build or even worse the person who wrote it. Judge it as it is as honest as possible.</p>
Abandoning 3D2013-10-22T13:01:00+02:00https://root-project.org/2013/10/22/work/blender3d/abandoning-3d<p>Working with 3D was always a dream of me so I started using it back in 2011.
Since then I had great experience while discovering 3D, Blender3D and the Community around it.
I watched Tutorials from <a href="http://cgcookie.com/blender/">BlenderCookie.com</a> and listened to the great voice of <a href="http://www.blenderguru.com/">Blender Guru’s Andrew Price</a> (<a href="https://en.wiktionary.org/wiki/g'day">G’Day</a>).
I learned a lot about 3D but also about myself.</p>
<p><em>I learned that I can do whatever I want if I really want to and I can achieve great things.</em></p>
<p>But now the time passed by and I lost the focus on 3D.
First, time’s not cheap, especially when you have a family.
Second, there was no real project to work on beside of myself education project.</p>
<p>Thanks to the <a href="http://blenderartists.org/forum/">Blender Community</a>, thanks to <a href="http://cgcookie.com/blender/">Blender Cookie</a>, <a href="http://www.blenderguru.com/">Blender Guru</a> and <a href="http://www.blendernerd.com/">Blender Nerd</a> for the really good stuff you provided.</p>
<p>I will now focus on all other stuff that is going on in my life like Web Development with <a href="http://www.asp.net/">asp.net</a>, <a href="http://meteor.com/">meteor.com</a> and everything else that catches my curiosity.</p>
<p>Cheers</p>
Moving the Blog again2013-10-22T00:46:00+02:00https://root-project.org/2013/10/22/other/moving-the-blog-again<p>Today I moved the Blog again. This time from <a href="http://dreamhost.com">Dreamhost.com</a> to <a href="http://github.com">GitHub.com</a>.</p>
<p>Why? Well, three years ago I thought I will need a space to host my applications and projects but
the world evolved and cloud computing got cheaper as well as project hostings like <a href="http://heroku.com">Heroku.com</a>.</p>
<p>And last but not least the cool offer from GitHub to host the blog on their servers <a href="http://pages.github.com/">for free</a>.</p>
<p>Thanks to Dreamhost to be such a nice host for years.</p>
NITROUS.IO Box with Cloud9 IDE Editor2013-09-23T00:42:00+02:00https://root-project.org/2013/09/23/work/dotnet/nitrous-io-box-with-cloud9-ide-editor<p><img src="/assets/nitrousio-logo.png" alt="" /><br />
<a href="https://www.nitrous.io/"><strong>Nitrous.IO</strong></a> is a wonderful way to develop software in the cloud and I’m a participant from the first minute. The platform is still in BETA and lacks with a good code editor.</p>
<p><img src="/assets/logo_cloud9.png" alt="" /><br />
<a href="https://c9.io/"><strong>Cloud9 IDE</strong></a> exists since 2010 and offers cloud development as well as the Cloud9 IDE itself as <a href="https://github.com/ajaxorg/cloud9">open source</a> on GitHub.</p>
<p>I love the Nitrous.IO and the Cloud9 IDE so I thought it would be cool to combine them to a unbeatable beast. I presume you created an account on both platforms to follow this Guide:</p>
<ol>
<li>Create a new <strong>NodeJS</strong> Box on Nitrous.IO<br />
<img src="/assets/nitro-step1.png" alt="nitro-step1" /></li>
<li>Note the information about the new box<br />
<img src="/assets/nitro-step2.png" alt="nitro-step2" /></li>
<li>Add a new <strong>SSH</strong> Workspace on Cloud9<br />
In my case the current version of node is v0.10.11 and is located in the Node Version Manager directory <code class="language-plaintext highlighter-rouge">/home/action/.nvm/v0.10.11/bin/node</code>.
<img src="/assets/nitro-step3.png" alt="nitro-step3" /></li>
<li>Copy the SSH Key shown in the Cloud9 window</li>
<li>Create a new file on the Nitrous.IO under <code class="language-plaintext highlighter-rouge">~/.ssh/authorized_keys</code> and paste the copied SSH Key as it is into the file. Save the file.<br />
<img src="/assets/nitro-step4.png" alt="nitro-step4" /></li>
<li>You can now connect to the Nitrous.IO box via the Cloud9 IDE.</li>
</ol>
<p>Enjoy C9 IDE code completion running on Nitrous.IO box (in this case a default <a href="http://www.meteor.com/">Meteor</a> project)<br />
<img src="/assets/nitro-step5.png" alt="nitro-step5" /></p>
<p><strong>Cheers!</strong></p>
Git: Using repositories/branches for source separation2013-04-09T15:07:00+02:00https://root-project.org/2013/04/09/work/dotnet/git-using-repositoriesbranches-for-source-separation<p><img src="/assets/git_header.png" alt="Git Logo" /></p>
<p><a href="http://git-scm.com/">Git</a> is a wonderful and easy way to manage your source code of any kind of project and using <a href="http://github.com/">GitHub</a> as the central is a smart move. Especially when you developing a web project it is always good to have a <a href="http://en.wikipedia.org/wiki/Staging_site">staging site</a> where you can see the latest stage of the development in a production-like environment.</p>
<p>But what if your company wants you to separate the source code into development, staging and production stages? You can use branches even completely separated repositories to achieve that.</p>
<p>In my current project I’ve set up this branching system with a single repository:</p>
<ul>
<li>master</li>
<li>protected/development</li>
<li>protected/staging</li>
<li>protected/production</li>
<li>[…] all other branches from my team</li>
</ul>
<p><em>Note: the prefix <code class="language-plaintext highlighter-rouge">protected/</code> is a valid prefix for branch names</em></p>
<p>The workflow is:</p>
<ul>
<li>everything that is in <code class="language-plaintext highlighter-rouge">master</code> will be pushed periodically to <code class="language-plaintext highlighter-rouge">protected/development</code></li>
<li>as soon as changes in <code class="language-plaintext highlighter-rouge">protected/development</code> are detected, the development site will be deployed</li>
<li>every morning the latest source from <code class="language-plaintext highlighter-rouge">protected/development</code> will be pushed to <code class="language-plaintext highlighter-rouge">protected/staging</code> and the staging deployment site is started</li>
<li>once we are happy with the state of the staging site, we decide to manually start the deployment of the production site by pushing the source from <code class="language-plaintext highlighter-rouge">protected/staging</code> to <code class="language-plaintext highlighter-rouge">protected/production</code></li>
<li>using the <code class="language-plaintext highlighter-rouge">protected/*</code> branches directly by the team members is not allowed</li>
</ul>
<p>We are using <a href="http://www.jetbrains.com/teamcity/">JetBrains Teamcity</a> to manage and execute these steps automatically. One of these steps is a shell script to synchronize the git branches.</p>
<p>[gist id=5344861 file=sync_repos_1branch.sh]</p>
<p>you can call this script as following: <code class="language-plaintext highlighter-rouge">./sync_repos.sh [path_to_work_in] [ssh/http-origin] [ssh/http-destination] [origin-branch] [destination-branch]</code></p>
<p>example: <code class="language-plaintext highlighter-rouge">./sync_repos.sh ~/repos/dev git@github.com:user/project.git git@github.com:user/project.git protected/development protected/staging</code></p>
<p><em>Note: The <code class="language-plaintext highlighter-rouge">path_to_work_in</code> is necessary to create a bare repository as working base</em></p>
<p><em>Bonus:</em> <a href="https://gist.github.com/SeriousM/5344861#file-sync_repos_full-bat">here is a script</a> that makes a backup of you whole repository including the tags.</p>
<p>Have fun setting up your own branching system!</p>
Why you shouldn't use Entity Framework with Transactions2013-01-16T19:49:00+01:00https://root-project.org/2013/01/16/work/dotnet/why-you-shouldnt-use-entity-framework-with-transactions<h2 id="entityframework">EntityFramework</h2>
<p>This is a .net ORM Mapper Framework from Microsoft to help you talking with your Database in an object oriented manner. <a href="https://en.wikipedia.org/wiki/Entity_framework">Wikipedia</a></p>
<h2 id="database-transaction">Database Transaction</h2>
<p>A database transaction, by definition, must be atomic, consistent, isolated and durable. Database practitioners often refer to these properties of database transactions using the acronym <a href="https://en.wikipedia.org/wiki/ACID">ACID</a>. Transactions in a database environment have two main purposes:</p>
<ol>
<li>To provide reliable units of work that allow correct recovery from failures and keep a database consistent even in cases of system failure, when execution stops (completely or partially) and many operations upon a database remain uncompleted, with unclear status.</li>
<li>To provide isolation between programs accessing a database concurrently. If this isolation is not provided, the program’s outcome are possibly erroneous. <a href="https://en.wikipedia.org/wiki/Database_transaction">Wikipedia</a></li>
</ol>
<h2 id="net-transactions">.NET Transactions</h2>
<p>A .NET Transaction can be used in different ways by different frameworks to support transactions. The .NET Transaction itself is not connected with the database by any means. <a href="http://msdn.microsoft.com/en-us/library/system.transactions.transaction.aspx">MSDN</a></p>
<h2 id="net-transactions-and-the-entityframework">.NET Transactions and the EntityFramework</h2>
<p>If you are using the Entity Framework during an opened TransactionScope, EntityFramework will open a new Transaction right with the next command that will be sent to the Database (<a href="https://en.wikipedia.org/wiki/Create,_read,_update_and_delete">CRUD</a> Operation).</p>
<p>Consider this code block:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>using (var transaction = new System.Transactions.TransactionScope())
{
// DBC = Database Command
// create the database context
var database = new DatabaseContext();
// search for the user with id #1
// DBC: BEGIN TRANSACTION
// DBC: select * from [User] where Id = 1
var userA = database.Users.Find(1);
// DBC: select * from [User] where Id = 2
var userB = database.Users.Find(2);
userA.Name = "Admin";
// DBC: update User set Name = "Admin" where Id = 1
database.SaveChanges();
userB.Age = 28;
// DBC: update User set Age = 28 where Id = 2
database.SaveChanges();
// DBC: COMMIT TRANSACTION
transaction.Complete();
}
</code></pre></div></div>
<p>The <code class="language-plaintext highlighter-rouge">database.SaveChanges()</code> call sends your changes to the database and executes them but they are not really persisted because you are in the database transaction scope. <code class="language-plaintext highlighter-rouge">transaction.Complete()</code> actually finishes the database transaction and your data is saved.</p>
<p>That behavior is actually cool and very useful, right?</p>
<p><strong>NO. Absolutely not. full stop.</strong></p>
<h2 id="why-not-using-net-transactions-along-with-entityframework">Why not using .NET Transactions along with EntityFramework</h2>
<p>The default isolation mode is <a href="https://en.wikipedia.org/wiki/Isolation_%28database_systems%29#Read_committed"><code class="language-plaintext highlighter-rouge">read committed</code></a> and fits perfectly to 99% of your needs, eg. reading data. When you want to save the changes you made to the database (Create, Update, Delete), EntityFramework is smart enough to create a transaction without your notice behind the scenes to wrap the changes. You can be sure that everything will be saved or every change will be discarded (<a href="https://en.wikipedia.org/wiki/Atomicity_(database_systems)#Atomicity_(database_systems)">Atomicity</a>).</p>
<p>By using transactions in EntityFramework, you change that behavior and force every <a href="https://en.wikipedia.org/wiki/Create,_read,_update_and_delete">CRUD</a> operation during a transaction scope to be executed in <a href="https://en.wikipedia.org/wiki/Isolation_(database_systems)#Serializable"><code class="language-plaintext highlighter-rouge">serializable</code></a> isolation mode which is the highest and most blocking type. No process will be able to access the tables you have touched (even reading from it) during your transaction. That can lead to <a href="https://en.wikipedia.org/wiki/Deadlock">Deadlocks</a> pretty fast and you want to avoid them at all costs!</p>
<p>That’s how the code looks like without the explicit usage of transactions:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>// DBC = Database Command
// create the database context
var database = new DatabaseContext();
// search for the user with id #1
// DBC: select * from [User] where Id = 1
var userA = database.Users.Find(1);
// DBC: select * from [User] where Id = 2
var userB = database.Users.Find(2);
userA.Name = "Admin";
userB.Age = 28;
// DBC: BEGIN TRANSACTION
// DBC: update User set Name = "Admin" where Id = 1
// DBC: update User set Age = 28 where Id = 2
// DBC: COMMIT TRANSACTION
database.SaveChanges();
</code></pre></div></div>
<p><strong><em>Rule of Thumb: Save only once per task and don’t use transactions.</em></strong></p>
<p>Edit: One thread should have access to one instance of DbContext which works best in web applications where every request acts as one thread. In windows applications every command or task should have one DbContext which is not shared. If you share the DbContext between threads you might run into issues like having reads sneaked into a foreign transaction.</p>
Free Open Source Sotware2012-10-04T13:30:00+02:00https://root-project.org/2012/10/04/other/free-open-source-sotware<p>Recently I watched <a href="https://www.youtube.com/watch?v=pPULcjeYEqQ">A tour through open source creative tools</a> from <a href="http://blog.linuxgrrl.com/">Máirín Duffy Strode</a>, Sr. Interaction Designer from Red Hat Inc. and I thought is is a good idea to put this list of GREAT software onto this blog. Enjoy!</p>
<h3 id="drawing">Drawing</h3>
<p><a href="http://www.gimp.org/">GIMP</a>
<a href="http://mypaint.intilinux.com/">MyPaint</a>
<a href="http://krita.org/">Kitara</a>
<a href="http://inkscape.org/">InkScape</a></p>
<h3 id="photographie--imaging">Photographie / Imaging</h3>
<p><a href="http://www.darktable.org/">Darktable</a> Raw Image Editor
<a href="http://www.blackfiveimaging.co.uk/index.php?article=02Software%2F05CMYKTool">CMYKTool</a> Rich Converter for CMYK from/to RGB</p>
<h3 id="office">Office</h3>
<p><a href="http://xournal.sourceforge.net/">Xournal</a>
<a href="http://www.calligra.org/">Calligra Suite</a> BrainDump, Flow (Diagram / Flowcharts), Karbon (Vector Graphics), Kexi (Visual Database Creator), Krita (Sketching, Painting), Plan (Project Management), Stages (Presentations), Sheets (Calculation, Spreadsheet), Words (Writing)
<a href="http://www.scribus.net/canvas/Scribus">Scribus</a> Desktop Publishing like InDesign</p>
<h3 id="audio">Audio</h3>
<p><a href="http://audacity.sourceforge.net/">Audacity</a> Rich Music Editor
<a href="http://www.hydrogen-music.org/">Hydrogen</a> Advanced Drum Machine
<a href="http://www.mixxx.org/">MIXXX</a> Free DJ Software</p>
<h3 id="3d--animation--movies">3D / Animation / Movies</h3>
<p><a href="http://www.blender.org/">Blender 3D</a> 3D Modeling, Rigging, Animation, Raytrace Rendering, Physics and Particles, Game Engine, UV Editing, Movie editing, Raw Footage tracking, Image Compositing and many many more
<a href="http://www.synfig.org/">Synfig Studio</a>
<a href="http://www.kdenlive.org/">Kdenlive</a> Video Editor</p>
<h3 id="gnome-specials">GNOME Specials</h3>
<p><a href="http://projects.gnome.org/gnome-color-manager/">Gnome Color Manager</a>
<a href="http://gnomefiles.org/content/show.php/Wacom+Control+Panel?content=104309">Wacom Control Panel</a></p>
<h3 id="sharing-service">Sharing Service</h3>
<p><a href="http://sparkleshare.org/">Sparkleshare</a> Uses GIT under the hood and can be self hosted.</p>
Wire Ape Wallpaper2012-08-13T17:33:00+02:00https://root-project.org/2012/08/13/work/blender3d/wire-ape-wallpaper<p>Hi there, just created a Wallpaper, dedicated to the lovely Blender Ape Suzanne.</p>
<p>Hope you like it!</p>
<p><a href="/assets/WireRendering_1920x1200_bl.jpg"><img src="/assets/WireRendering_1920x1200_bl-1024x640.jpg" alt="WireRendering" /></a></p>
WPF Localization Extension v2.1.02012-07-26T12:52:00+02:00https://root-project.org/2012/07/26/projects/wpflocalizeextension/wpf-localization-extension-v2-1-0<p><img src="/assets/WPFLocalizeExtensionLogo.png (WPFLocalizeExtensionLogo)" alt="" /></p>
<p>The new version arrives and I have some highlights to point out:</p>
<ul>
<li>First of all: ITS FREE (and will stay free)</li>
<li>Obtain stable results in
<ul>
<li>WPF applications using .NET 3.5 and higher</li>
<li><strong>New</strong>: Silverlight 5.0 applications</li>
</ul>
</li>
<li><strong>New</strong>: Localization source/provider can be changed freely at arbitrary nodes
<ul>
<li>Use the Provider property in LocalizeDictionary to change the provider for the particular sub tree</li>
<li>Use the DefaultProvider property to set the provider for the whole application</li>
<li>Built-in RESX provider for resource file lookup (Default) – <strong>fully backward compatible to older versions of this extension</strong></li>
<li>Interface for custom providers</li>
<li>Notification about provider changes and errors</li>
<li>Get the list of all available cultures from a provider – or just take the bindable merged list from LocalizeDictionary</li>
<li>CSV provider project in the Tests folder as an example for custom providers</li>
</ul>
</li>
<li>Supports binding-like write style like “Text = {lex:LocText ResAssembly:ResFile:ResKey}”
<ul>
<li>Define a default assembly and / or resource file to reduce the key to ResAssembly::ResKey, ResFile:ResKey or even ResKey</li>
<li>If no key is specified, the Name and Property Name of the target are used (e.g. MyButton_Content)</li>
<li>Default assembly, dictionary and culture can be changed dynamically</li>
<li>Default assembly and dictionary inherit along the visual tree and can be redefined at each node</li>
</ul>
</li>
<li>It is available at designtime (MS Expression Blend 3.0 & 4.0, MS VisualStudio 2008 & 2010
<ul>
<li>not for dynamic loaded assemblies which only can be found at runtime and as long the resource (.resx) is built at designtime</li>
<li>Even for Silverlight!</li>
<li>No extra preview application needed</li>
<li>Offers a DesignValue Property to support custom values during design mode</li>
</ul>
</li>
<li>Full support of various application scenarios
<ul>
<li>Works with normal dependency properties</li>
<li>Works with normal properties (e.g. Ribbon)</li>
<li>Works with control/data templates</li>
</ul>
</li>
<li>Various culture setup features
<ul>
<li>Works with the .resx-fallback mechanism (e.g. en-us -> en -> invariant culture)</li>
<li>Supports culture forcing (e.g. “this object has to be in english all the time”)</li>
<li>Buffering allows fast switching of the language at runtime</li>
<li>Offers a design language for visual testing at designtime</li>
<li>Offers a “SpecificCulture” to use as IFormatProvider (e.g. (123.20).ToString(LocalizeDictionary.SpecificCulture) = “123.20″ or “123,20″)</li>
<li>Does not alter the culture on Thread.CurrentCulture or Thread.CurrentUICulture (can be changed easily)</li>
</ul>
</li>
<li>Code behind features:
<ul>
<li>Can be used in code behind to bind localized values to dynamic generated controls</li>
<li>Implements INotifyPropertyChanged for advanced use</li>
<li>Offers some functionality to check and get resource values in code behind (e.g. ResolveLocalizedValue)</li>
</ul>
</li>
<li>Easy to use
<ul>
<li>Can be used with any resource file (.resx) accross all assemblies (also the dynamic loaded one at runtime)</li>
<li>Does not need any initializing process (like “call xyz to register a special localize dictionary”)</li>
<li>Can localize any type of data type, as long a TypeConverter exists for it</li>
</ul>
</li>
<li>Example extensions included for
<ul>
<li>Formating e.g. “this is the ‘{0}’ value” (not bindable at the moment)</li>
<li>Prefix and suffix values (currently with LocText extension)</li>
<li>Upper and lower Text</li>
</ul>
</li>
<li>Last, but not least
<ul>
<li>Does not create any memory leaks</li>
<li>Leaves the UID property untouched</li>
<li>Does not need an additional build task</li>
<li>Is in use in various productive systems</li>
</ul>
</li>
</ul>
<p><a href="http://www.ukma.de/">Uwe Mayer</a> was so kind to create a short <a href="http://www.youtube.com/watch?v=a4s3qAzerMI">Workflow Video</a> about how it works:</p>
<iframe width="560" height="315" src="//www.youtube.com/embed/a4s3qAzerMI" frameborder="0" allowfullscreen=""></iframe>
Unique Ball Wallpaper2012-04-30T16:37:00+02:00https://root-project.org/2012/04/30/work/blender3d/unique-ball-wallpaper<p>Hi there,
I’ve created a wallpaper in a couple of hours playing around with particles and cycles and that was the outcomming:
<a href="/assets/Balls-Wallpaper-Cycles-1920x1200.png"><img src="/assets/Balls-Wallpaper-Cycles-1920x1200-1024x640.png" alt="Balls-Wallpaper-Cycles" /></a></p>
<p>I used particles, cycles, glowing materials and the compositor.</p>
<p>how do you like it?</p>
WCF & WebAPI JSON Dictionary2012-04-04T13:59:00+02:00https://root-project.org/2012/04/04/work/dotnet/wcf-webapi-json-dictionary<p>Imagine you want to serialize a <code class="language-plaintext highlighter-rouge">Dictionary<string, string></code> for wcf json output.<br />
The JSON output would look like this:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[
{
Key: "key1",
Value: "value1"
},
{
Key: "key2",
Value: "value2"
}
]
</code></pre></div></div>
<p>But you want a correct JSON dictionary format:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>{
"key1": "value1",
"key2": "value2"
}
</code></pre></div></div>
<p>What happens here? Serializing a dictionary is the same as you would serialize a list of objects.</p>
<p>This means that this:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Dictionary<string, object> dic = new Dictionary<string, object>();
dic.Add("key1", "value1");
dic.Add("key2", "value2");
</code></pre></div></div>
<p>… is the same as this:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>public class KeyValue
{
public string Key { get; set; }
public string Value { get; set; }
[...]
}
public class Dictionary
{
public List<KeyValue> Values { get; set; }
[...]
}
</code></pre></div></div>
<p>The serializer takes every item from Dictionary.Values and writes the KeyValue object into the output.<br />
This behaviour is not bad or wrong but it is unsuitable for a JSON dictionary output.</p>
<p>What we want is a “Key: Value” output like this:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>{
"key1": "value1",
"key2": "value2"
}
</code></pre></div></div>
<p>What you need to do is implementing a Dictionary-like object that inherits from ISerializable.</p>
<p>Here is the implementation of it:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>/// <summary>
/// This key value collection is used to serialize a dictionary into json format and back.
/// </summary>
[Serializable]
public sealed class KeyValueCollection : ISerializable
{
/// <summary>
/// Holds the internal dictionary.
/// </summary>
private readonly Dictionary<string, string> _dictionary;
/// <summary>
/// Initializes a new instance of the <see cref="KeyValueCollection"/> class.
/// </summary>
public KeyValueCollection()
{
this._dictionary = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase);
}
/// <summary>
/// Initializes a new instance of the <see cref="KeyValueCollection"/> class.
/// </summary>
///
public KeyValueCollection(Dictionary<string, string> dictionary)
{
this._dictionary = new Dictionary<string, string>(dictionary, StringComparer.InvariantCultureIgnoreCase);
}
/// <summary>
/// Initializes a new instance of the <see cref="KeyValueCollection"/> class.
/// </summary>
///
///
protected KeyValueCollection(SerializationInfo info, StreamingContext context) : this()
{
foreach (var entry in info)
{
this._dictionary.Add(entry.Name, entry.Value.ToString());
}
}
/// <summary>
/// Gets or sets the <see cref="System.String"/> with the specified key.
/// </summary>
public string this[string key]
{
get
{
return !this._dictionary.ContainsKey(key) ? null : this._dictionary[key];
}
set
{
this._dictionary[key] = value;
}
}
/// <summary>
/// Gets the internal dictionary as copy.
/// </summary>
/// <returns>The internal dictionary as copy.</returns>
public Dictionary<string, string> GetDictionary()
{
return new Dictionary<string, string>(this._dictionary);
}
/// <summary>
/// Populates a SerializationInfo with the data needed to serialize the target object.
/// </summary>
///
///
/// <exception cref="T:System.Security.SecurityException">The caller does not have the required permission.</exception>
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
{
foreach (string key in this._dictionary.Keys)
{
info.AddValue(key, this._dictionary[key], typeof(string));
}
}
/// <summary>
/// Adds the item with the specified key.
/// </summary>
///
///
public void Add(string key, string value)
{
this[key] = value;
}
}
</code></pre></div></div>
<p>Notes:</p>
<ul>
<li>
<p>As you might have seen that i use <code class="language-plaintext highlighter-rouge">Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase);</code>
The <code class="language-plaintext highlighter-rouge">StringComparer.InvariantCultureIgnoreCase</code> argument helps me to treat all the keys case insensitive.</p>
</li>
<li>
<p>If you want to work on the directory directly (query) use the method <code class="language-plaintext highlighter-rouge">GetDictionary()</code>.</p>
</li>
</ul>
<p>Sources:
<a href="http://blog.masonchu.com/2012/03/wcf-webapi-dictionary-json.html">http://blog.masonchu.com/2012/03/wcf-webapi-dictionary-json.html</a>
<a href="https://stackoverflow.com">https://stackoverflow.com</a></p>
Automated Web Deployment with MSBuild and MSDeploy2011-10-13T18:17:00+02:00https://root-project.org/2011/10/13/work/dotnet/automated-web-deployment-with-msbuild-and-msdeploy<p>If you are looking for an automated web deployment process you will inevitably come to MSBuild.
There are many tutorials out <a href="http://www.troyhunt.com/2010/11/you-deploying-it-wrong-teamcity_11.html">there</a> how to set up a command line call for MSBuild but you wont find a documentation how to publish a generated package with MSDeploy.</p>
<p>But this is especially needed is you want to use “-setParam” for a tokenized (transformed) web.config file and wont / can’t change the SetParameter.xml!
(The names of the parameters for -setParam can be found in the SetParameter.xml file in the same directory as the Package.zip. They are also act as default values if not set in the command line call. )</p>
<p>So I wrote this quick tutorial how to get command line call for MSDeploy.
(Please consider that the paths you will later use are absolute / relative to the working directory.)</p>
<p><strong>Step 1: Get the publish ready with MSBuild</strong></p>
<p>Before we will get some further results please get your deployment call working.</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>msbuild.exe
SomeWebProject.csproj
/P:Configuration=Release
/P:DeployOnBuild=True
/P:DeployTarget=MSDeployPublish
/P:MsDeployServiceUrl=https://TargetServer/MsDeploy.axd
/P:AllowUntrustedCertificate=True
/P:MSDeployPublishMethod=WMSvc
/P:CreatePackageOnPublish=True
/P:UserName=Username
/P:Password=Password
/P:DeployIisAppPath=TargetWebSite/TargetWebApp
</code></pre></div></div>
<ul>
<li>Configuration: This is the configuration you will use eg. Debug, Release or a custom one</li>
<li>AllowUntrustedCertificate: You will need this if you do not have a valid certificate on the server</li>
<li>DeployIisAppPath: The name of the target website eg. “Default Web Site/MyWebApp”</li>
<li>TargetWebSite/TargetWebApp: Please consider the different usages below!</li>
</ul>
<p><strong>Step 2: Get the command line for MSDeploy</strong></p>
<p>Append the parameter <code class="language-plaintext highlighter-rouge">/P:UseMsdeployExe=True</code> to the <code class="language-plaintext highlighter-rouge">msbuild.exe</code> call. If you do so, you will see the call in the console like this:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>MSDeployPublish:
Start Web Deploy Publish the Application/package to https:/TargetServer/MsDeploy.axd?site=TargetWebSite...
Running msdeploy.exe.
msdeploy.exe -source:package='C:\SomeWebProject\obj\Release\Package\SomeWebProject.zip' -dest:auto,ComputerName='https://TargetServer:8172/MsDeploy.axd?site=TargetWebSite',UserName='Username',Password='Password',IncludeAcls='False',AuthType='Basic' -verb:sync -disableLink:AppPoolExtension -disableLink:ContentExtension -disableLink:CertificateExtension -allowUntrusted -retryAttempts=2
</code></pre></div></div>
<p>Gotcha! This is the important MSDeploy command line call.</p>
<p><strong>Step 3: Get the two things together</strong></p>
<p>now we can split the automatic deployment of MSBuild into 1. create only the package with MSBuild and 2. only deploy with MSDeploy.</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>msbuild.exe
SomeWebProject.csproj
/P:Configuration=Release
/P:DeployOnBuild=True
/P:CreatePackageOnPublish=True
msdeploy.exe
-source:package='C:\SomeWebProject\obj\Release\Package\SomeWebProject.zip'
-dest:auto,ComputerName='https://TargetServer:8172/MsDeploy.axd?site=TargetWebSite',UserName='Username',Password='Password',IncludeAcls='False',AuthType='Basic'
-verb:sync
-disableLink:AppPoolExtension
-disableLink:ContentExtension
-disableLink:CertificateExtension
-allowUntrusted
-retryAttempts=2
-setParam:'IIS Web Application Name'='TargetWebSite/TargetWebApp'
</code></pre></div></div>
<p><strong><em>Have a nice day.</em></strong></p>
Sunrise Mood Logo2011-09-18T20:13:00+02:00https://root-project.org/2011/09/18/work/blender3d/sunrise-mood-logo<p>As i saw the advertisement from Pro7 for the “Comedy Dienstag” i want to reproduce this effect:</p>
<p><a href="/assets/pro7_comedy_dienstag.jpg"><img src="/assets/pro7_comedy_dienstag.jpg" alt="pro7_comedy_dienstag" /></a></p>
<p>This is my interpretation:</p>
<p><a href="/assets/YEAH_1280x720.jpg"><img src="/assets/YEAH_1280x720-1024x576.jpg" alt="YEAH_1280x720-1024x576" /></a></p>
<p>The colors and the strong reflection is my personal taste.
The .blend file can be downloaded <a href="/assets/red_shiny.blend">HERE</a>.</p>
Sculpt-Brush Tips2011-08-20T10:05:00+02:00https://root-project.org/2011/08/20/work/blender3d/sculpt-brush-tips<p>With Blender 2.59 we got a very new and stable version to play with.
While exploring the new features i found two new functions!</p>
<p><strong>First - Import brush textures from a dictionary / single brush textures</strong> (without add-on!).
After adding, you will have all your brush textures you choose in the selection box.
<a href="/assets/Screenshot-2011-08-20_07.36.33.png"><img src="/assets/Screenshot-2011-08-20_07.36.33.png" alt="Screenshot-2011-08-20_07-36-33" /></a>
You can find many nice brush textures at <a href="http://www.pixologic.com/zbrush/downloadcenter/alpha/">Pixologic ZBrush Download Central</a>. (The .psd files can be converted to .png files with free converters.)</p>
<p><strong>Second: Brush Overlay</strong>
This shows you where your brush would take influence on the mesh.
<a href="/assets/Screenshot-2011-08-20_07.37.59.png"><img src="/assets/Screenshot-2011-08-20_07.37.59.png" alt="Screenshot-2011-08-20_07-37-59" /></a>
And also tiling / rotating (angle) of the brush is supported!
<a href="/assets/Screenshot-2011-08-20_07.38.47.png"><img src="/assets/Screenshot-2011-08-20_07.38.47.png" alt="Screenshot-2011-08-20_07-38-47" /></a></p>
<p>I hope you will find this information useful!
Happy blending :)</p>
2D Tracking with RotoBezier2011-07-08T00:35:00+02:00https://root-project.org/2011/07/08/work/blender3d/360-2d-tracking-with-rotobezier<iframe src="//player.vimeo.com/video/25910107" width="500" height="281" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe>
<p><strong>This was entirely done with Blender 3D.</strong></p>
<p>Addons:</p>
<ul>
<li>2D Tracking (Tomato Branch)</li>
<li>RotoBezier</li>
<li>The free Footage comes from <a href="http://hollywoodcamerawork.us">hollywoodcamerawork.us</a></li>
</ul>
<p>The whole process lasts ~4 hours:
(30 min 2d tracking, 15 min compositing, the remaining time: first time ever roto scoping^^)
for the first time i think i was realy fast :)</p>
<p>i can provide the .blend file if someone want it.</p>
360° Camera2011-06-08T02:59:00+02:00https://root-project.org/2011/06/08/work/blender3d/360-camera<p>I was looking for a 360 camera attachment and found one, but it is very expensive to ship outside from the US, so i decide to create my own… in blender :)</p>
<p><a href="/assets/360-Camera.png"><img src="/assets/360-Camera.png" alt="Camera-360" /></a></p>
<p>The .blend file can be downloaded <a href="/assets/360_Camera.blend">here</a>.</p>
Hanging Objects Effect2011-05-20T20:08:00+02:00https://root-project.org/2011/05/20/work/blender3d/hanging-objects-effect<p><img src="/assets/chadreau_small-200x300.jpg (chadreau_small)" alt="" /></p>
<h2 id="do-you-want-to-archive-an-effect-like-this-you-found-the-solution">Do you want to archive an effect like this? You found the solution.</h2>
<p><em>You can follow the full guide or skip the optional steps.</em></p>
<p><strong>1)</strong> <em>Open a new Scene, delete the default Cube and add Suzanne (Monkey).</em></p>
<p><img src="/assets/hanging_objects_step01.png (hanging_objects_step01)" alt="" /></p>
<p><strong>2)</strong> <em>Look through your Camera [NUM0] and rotate the Mesh as you want (tap [RKEY] twice for Trackball rotation).</em>
<img src="/assets/hanging_objects_step02.png (hanging_objects_step02)" alt="" /></p>
<p><strong>3)</strong> <em>Apply the rotation with [CTRL]%2B[AKEY]. This is needed for the direction of the Threads.</em>
<img src="/assets/hanging_objects_step03.png (hanging_objects_step03)" alt="" /></p>
<p><strong>4 opt)</strong> <em>Add a Subdivision Surface Modifier (Level 2) to the Mesh and apply it because we need the additional Vertices count.</em>
<img src="/assets/hanging_objects_step04.png (hanging_objects_step04)" alt="" /></p>
<p><strong>5 opt)</strong> <em>Go into Edit Mode with [TAB], switch to Orthographic View with [NUM5] and to Top View with [NUM7].</em>
<img src="/assets/hanging_objects_step05.png (hanging_objects_step05)" alt="" /></p>
<p><strong>6 opt)</strong> <em>Now select some random Vertices you can see from above (Top View) with the right mouse button and the [SHIFT] key.</em>
<img src="/assets/hanging_objects_step06.png (hanging_objects_step06)" alt="" /></p>
<p><strong>7 opt)</strong> <em>Switch to the Object Data in the properties panel, create a new Vertex Group with the plus sign and assign the selection to the Group. Leave the Edit Mode with [TAB].</em>
<img src="/assets/hanging_objects_step07.png (hanging_objects_step07)" alt="" /></p>
<p><strong>8)</strong> <em>Now change to the Particles in the Properties Panel. Create a Particle System with the plus sign and change the type to Hair.</em>
<img src="/assets/hanging_objects_step08.png (hanging_objects_step08)" alt="" /></p>
<p><strong>9)</strong> <em>Tick the Advanced Options Check-box. Now set the amount to about 20 (depends on the selected Vertices), Emit from to Verts (Vertices) and set the velocity parameters (Normal to zero, Z to 1). If you rotate your Viewport now, you will see that the Hairs stands upwards now.</em>
<img src="/assets/hanging_objects_step09.png (hanging_objects_step09)" alt="" /></p>
<p><strong>10 opt)</strong> <em>Now scroll all the way down to Vertex Groups and expand the Panel. Chose the Group (selected Vertices) for Density. Now we have control where the Hairs are coming from.</em>
<img src="/assets/hanging_objects_step10.png (hanging_objects_step10)" alt="" /></p>
<p><strong>11)</strong> <em>Change to the Materials in the Properties Panel and create a new Material. You can leave the Settings as they are.</em>
<img src="/assets/hanging_objects_step11.png (hanging_objects_step11)" alt="" /></p>
<p><strong>12)</strong> <em>Change to the Textures in the Properties Panel and create a new Texture. You can chose the Texture Type Magic for an instant colorized result or chose an Image.</em>
<img src="/assets/hanging_objects_step12.png (hanging_objects_step12)" alt="" />
<img src="/assets/hanging_objects_step13.png (hanging_objects_step13)" alt="" />
_ You can now render with [F12] and you will see a hanging Monkey face._</p>
<p><em>The reason why this works is because the Hairs take over the color from the Material as long as the Material index is set to the Objects Material.</em></p>
<p><img src="/assets/hanging_objects_step14.png (hanging_objects_step14)" alt="" /></p>
<p><strong>And that’s my render result:</strong></p>
<p><img src="/assets/hanging-objects-300x168.jpg (hanging objects)" alt="" /></p>
<p>Happy blending :D</p>
360° Panorama Rendering2011-05-18T14:40:00+02:00https://root-project.org/2011/05/18/work/blender3d/360-panorama-rendering<p>I was searching for a way to create a panorama shot but just found some wired information’s about PartX properties.
Then i came to a <a href="http://blenderartists.org/forum/showthread.php?205466-Blender-2.5-Panorama-render">post</a> where it was described how it works with blender 2.5.</p>
<p>But now i have more accurate settings for a better render this way.</p>
<p>The setup is now fairly easy:</p>
<ul>
<li>place the camera with horizontal alignment between the objects</li>
<li>set the focal length to 5.050mm</li>
<li>enable the panorama option</li>
</ul>
<p><a href="/assets/Screenshot-2011-08-20_08.17.21.png"><img src="/assets/Screenshot-2011-08-20_08.17.21.png" alt="Screenshot-2011-08-20_08-17-21" /></a></p>
<p>Next we have to setup the render options:</p>
<ul>
<li>In the performance tab extend the Tiles X and Y to 360 and 180.
(This will increase the render time but reduces the count of artifacts)</li>
</ul>
<p><a href="/assets/Screenshot-2011-08-20_08.11.14.png"><img src="/assets/Screenshot-2011-08-20_08.11.14.png" alt="Screenshot-2011-08-20_08-11-14" /></a></p>
<p>With these settings, you get a result like this:</p>
<p><a href="/assets/panorama_render_result.jpg"><img src="/assets/panorama_render_result.jpg" alt="paonrama_render_result" /></a></p>
<p>Happy blending :)</p>
A dull Car Tire2011-05-02T18:53:00+02:00https://root-project.org/2011/05/02/work/blender3d/a-dull-car-tire<p>I’ve done a new render, a car tire. I know, this is dull but i have to :)</p>
<p><a href="/assets/car-tire-1024x576.jpg"><img src="/assets/car-tire-1024x576.jpg" alt="car-tire-thumb" /></a>
please critique it, i have to know the truth</p>
Export Blender Models to Shapeways2011-04-06T15:02:00+02:00https://root-project.org/2011/04/06/work/blender3d/export-blender-models-to-shapeways<p>Here is the way how i get my model compatible for <a href="http://www.shapeways.com/">ShapeWays</a>.
Please check the FAQ and other pages on <a href="http://www.shapeways.com/">ShapeWays</a> if you have questions that are not fit into this todo. here is the list:</p>
<ul>
<li>create your 3d model</li>
<li>convert all curves to meshes and apply all modifiers</li>
<li>join all parts of the model together into a single mesh</li>
<li>check that the model do not have any floating parts if you do not want them</li>
<li>check the model for “non manifold” parts (edit mode - deselect all -> select -> non manifold) => <a href="http://www.shapeways.com/video/fixing-non-manifold-meshes">tutorial</a></li>
<li>
<ul>
<li>unwrap the model</li>
</ul>
</li>
<li>
<ul>
<li>put the texture on the same directory level as the blend file</li>
</ul>
</li>
<li>
<ul>
<li>set the texture to the model</li>
</ul>
</li>
<li>enable units under scene -> units in Blender</li>
<li>set the dimensions of your model with the help of the units (eg. 12cm)</li>
<li>IMPORTANT: apply the scale to the model (ctrl-a -> scale)</li>
<li>export to collada (*.dae)</li>
<li>open the exported model with <a href="http://meshlab.sourceforge.net/">MeshLab</a> (free)</li>
<li>save the model without any modifications as VRML (*.wrl) file</li>
<li>pack the VRML file and the texture (same directory level!) into a zip file and upload it to <a href="http://www.shapeways.com/">ShapeWays</a></li>
<li>
<ul>
<li>-or- upload only the VRML file to <a href="http://www.shapeways.com/">ShapeWays</a></li>
</ul>
</li>
<li>check your email inbox for error / success messages</li>
</ul>
<p>* <em>= for colored print</em></p>
<p><strong>i hope i could help!</strong></p>
Determine ClickOnce UpdateUri / Install Address2011-04-06T15:02:00+02:00https://root-project.org/2011/04/06/work/dotnet/determine-clickonce-updateuri-install-address<p>Its hard to find Informations about the place where the UpdateUri is saved on a windows machine.
The only information i was found is where the binaries of a ClickOnce application is stored.</p>
<p>This whould be:
<code class="language-plaintext highlighter-rouge">C:\Users\UserName\AppData\Local\Apps\2.0\</code> (Vista)
<code class="language-plaintext highlighter-rouge">C:\Documents and Settings\UserName\Local Settings\Apps\2.0\</code> (XP)</p>
<p>The UpdateUri of a particular application can be found in the registry:</p>
<p><code class="language-plaintext highlighter-rouge">HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\[APP-ID]\UrlUpdateInfo</code></p>
<p>The key will contain a string like this:
http://somedomain.com/ApplicationName/ApplicationName.application</p>
<p>If this address is called in the browser (InternetExplorer or Firefox with AddOn), the application starts to install.</p>
<p>If you change the <code class="language-plaintext highlighter-rouge">ApplicationName.application</code> to <code class="language-plaintext highlighter-rouge">publish.htm</code>, a install page will be displayed.</p>
Binding to an anonymous type2011-03-31T18:48:00+02:00https://root-project.org/2011/03/31/work/wpf/binding-to-an-anonymous-type<p>Try to imagine that you have a list of complex classes and you just want to display just a bunch of properties.</p>
<p>For example:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Person.Firstname,
Person.Lastname,
Person.Address.District.Name,
Person.Cars[0].Brand,
Person.Cars[1].Brand
</code></pre></div></div>
<p>I was playing around with ValueConverter and found out, that i can return an anonymous type out of the converter and bind it to a textblock’s content.</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is Persons)
{
var persons = (Persons)value;
var query =
from person in persons
let firstname = person.Firstname
let lastname = person.Lastname
let districtname = person.Address.District.Name
let car1 = person.Cars[0].Brand
let car2 = person.Cars[1].Brand
select new
{
Firstname = firstname,
Lastname = lastname,
Districtname = districtname,
Car1 = car1,
Car2 = car2
};
return query;
}
return value;
}
</code></pre></div></div>
<p>Updating the values as you maybe guess don’t work, but if you dont want to write complex bindings you can use this technique to archive the result.</p>
PinArt2011-03-07T11:21:00+01:00https://root-project.org/2011/03/07/work/blender3d/pinart<p>Well, this is it!</p>
<p>It was a bit tricky because i do not want to look at tutorials to do this PinArt toy and thus it makes me some headache.</p>
<p>It can be animated over time and the frame itself with all associated objects (frame, glass, pins, …) can be rotated in every direction without pain.</p>
<p>If someone want to see a tutorial about this, i will create one!
Just write a comment and i will look what i can do for you guys.</p>
<p><a href="/assets/pinart_front.png"><img src="/assets/pinart_front-150x150.png" alt="" /></a>
<a href="/assets/pinart_back.png"><img src="/assets/pinart_back-150x150.png" alt="" /></a></p>
<p>Just a hint:
It use a plane with the vertices as particle start point and a displacement modifier.</p>
<p>Here is the <a href="/assets/pin_art_single.zip">.blend</a> file for free use.</p>
Feather Explosion2011-02-28T11:06:00+01:00https://root-project.org/2011/02/28/work/blender3d/feather-explosion<h1 id="my-first-render">My first render</h1>
<p><a href="/assets/final_1280x1024.png"><img src="/assets/final_1280x1024-300x240.png" alt="" /></a></p>
<p><em>how you like it?</em></p>
Changed the WebHoster: DREAMHOST.com2011-02-26T21:02:00+01:00https://root-project.org/2011/02/26/other/changed-the-webhoster-dreamhost-com<p>Hey,</p>
<p>i’ve stopped using webhostforasp.net because they are slow, has a bad and old customer panel and no extras like subdomains and so on AND, they have a slooow connection.</p>
<p>dreamhost is a nice hoster, good support (so far) and the impression is a good one!</p>
<p>so go forth dreamhost and be the good guys!</p>
NeutralResourcesLanguageAttribute is Evil for ResourceFiles2010-11-24T15:08:00+01:00https://root-project.org/2010/11/24/projects/wpflocalizeextension/neutralresourceslanguageattribute-is-evil<p>Imagine this:
Two Resource files named <code class="language-plaintext highlighter-rouge">Strings.resx</code> and <code class="language-plaintext highlighter-rouge">Strings.de.resx</code>.
The first (neutral) contains english content, the second german content.</p>
<p>If you ask youself over and over again why the f**k the ResourceManager returns the neutral language even you use the specified language <code class="language-plaintext highlighter-rouge">de</code>, look into your AssemblyInfo.cs file.</p>
<p>If there is a <code class="language-plaintext highlighter-rouge">[assembly: NeutralResourcesLanguage("de")]</code>, the ResourceManager from this Assembly thinks you want to get the neutral language if you ask for <code class="language-plaintext highlighter-rouge">de</code> explicit.</p>
<p>This attribute is used to overrule the neutral settings to a specific one.</p>
<p>Deleting this from your <code class="language-plaintext highlighter-rouge">AssemblyInfo.cs</code> can help you realy much in this case.</p>
EveCert - The new EveMon2010-11-23T13:51:00+01:00https://root-project.org/2010/11/23/games/eve-online/evecert-the-new-evemon<p>Hello everyone, i am the Beta tester for EveCert, developed by Arthur Canal with RubyOnRails.
Release is in almost three weeks and it will be a gorgeous tool for every eve online player!</p>
<p>Stay tuned!</p>
EveOn.MTA: EVE Online Market Trade Analyzer2010-08-10T18:34:00+02:00https://root-project.org/2010/08/10/games/eve-online/eveon-mta-eve-online-market-trade-analyzer<p>After some hard work, i managed to create a MsSql based Eve Online Market Trade Analyzer.</p>
<p>EveOn.MTA is using the data export of eve-central.com (plus eve-metrics.com), the local market log export and later the eve cache macho objects as data source for analysis.</p>
<p>It will be used to get profitable trade routes, depending on the market log exports.</p>
<p>The data collector is ready and holds at the moment over 2.3m active market orders.</p>
<p>Unfortunately, there is no GUI at the moment, but it will be IGB-able.</p>
<p>I have plans to provide the service for free, but the users has to do an application for use (need before greed).
(because if everyone can use the tool, there is no advantage for particular users)</p>
<p>I’m very excited about this project and i hope, i can do some ISK with it.</p>
Crash Course in HLSL2010-06-17T10:55:00+02:00https://root-project.org/2010/06/17/work/xna/crash-course-in-hlsl<p>Can be found at: <a href="http://www.catalinzima.com/?page_id=575" title="http://www.catalinzima.com/?page_id=575">http://www.catalinzima.com/?page_id=575</a></p>
<p>What does HLSL stand for? Why was it created? How does an HLSL effect file look like? What can you do with HLSL? What do <code class="language-plaintext highlighter-rouge">float4×4</code>, <code class="language-plaintext highlighter-rouge">TEXCOORD0</code> or <code class="language-plaintext highlighter-rouge">compile ps_3_0</code> mean?
The answer to the first question is simple: HLSL means High Level Shader Language. This answer by itself might raise a few questions.
The answers for these and a few other questions will be found in this article. You will first learn about the history of HLSL and why it came to existence.
After that, you will see the basic structure of an HLSL effect file, and learn about the different elements of the language.
Finally, after looking over the language’s basics, you will see the template effect file that XNA gives to us.</p>
Microsoft XNA Game Studio 3.0 Unleashed2010-06-07T16:28:00+02:00https://root-project.org/2010/06/07/work/xna/microsoft-xna-game-studio-3-0-unleashed<p><img src="/assets/xna-book.jpg" alt="" /></p>
<p>#Microsoft XNA Game Studio 3.0 Unleashed</p>
<p>This book is really good, it describes every code line and is perfect for every one who want to start with game development!
Also, 3D Math is not sooo required, because XNA offers many helper functions to avoid this problem of missing knowledge. (like calculating martix with transformation and so on)</p>