<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Zenhaven.org &#187; FLVmeta</title>
	<atom:link href="http://www.zenhaven.org/blog/category/software/flvmeta/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.zenhaven.org/blog</link>
	<description>Marc's blog</description>
	<lastBuildDate>Tue, 13 Sep 2011 10:21:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Goodbye Subversion</title>
		<link>http://www.zenhaven.org/blog/2011/09/12/goodbye-subversion/</link>
		<comments>http://www.zenhaven.org/blog/2011/09/12/goodbye-subversion/#comments</comments>
		<pubDate>Mon, 12 Sep 2011 14:09:44 +0000</pubDate>
		<dc:creator>marc</dc:creator>
				<category><![CDATA[FLVmeta]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://www.zenhaven.org/blog/?p=40</guid>
		<description><![CDATA[I have been using SVN for years, basically since 2004, when I got really fed up with CVS, which was used at my work back then. What seduced me in SVN was the ability to easily configure it as an Apache module, coupled with our central LDAP authentication, and SSL encryption, and its ability to track [...]]]></description>
			<content:encoded><![CDATA[<p>I have been using <a title="Subversion @ Apache.org" href="http://subversion.apache.org/">SVN</a> for years, basically since 2004, when I got really fed up with CVS, which was used at my work back then. What seduced me in SVN was the ability to easily configure it as an Apache module, coupled with our central LDAP authentication, and SSL encryption, and its ability to track file renames/moves.<br />
I also enjoy its wide platform compatibility, as well as its excellent windows companion tool : <a title="TortoiseSVN homepage" href="http://tortoisesvn.net/">TortoiseSVN</a>, which works wonders compared to the horrible WinCVS.<br />
It took me a little bit of time to fully understand the benefit of atomic commit numbers, as opposed to file versions in CVS, as well as the directory structure used to simulate branches and tags (seems like implemented as an afterthought, doesn&#8217;t it ?).</p>
<p>Then came the <a title="DCVS" href="http://en.wikipedia.org/wiki/Distributed_Concurrent_Versions_System">DCVS</a>.<span id="more-40"></span></p>
<h2>Early discovery</h2>
<p>I first learned about <a title="Mercurial" href="http://mercurial.selenic.com/">Mercurial</a>. I was impressed by its great merging and branches abilities, more than the whole &#8220;distributed&#8221; concept, however I found it a bit tricky to install and make it work in Windows, especially with TortoiseHg, which was definitly not yet as good as its older brother, TortoiseSVN. So I didn&#8217;t look further, and stuck with SVN for the time being.</p>
<h2>A few years later</h2>
<p>I&#8217;m now working in an environment where rapid website release cycles mean that a lot of developments/commits make it directly to production, the production environment being directly based on the current trunk, probably a wrong approach, but most developers in the team don&#8217;t care about branches.<br />
This means that if someone is working on a feature that hasn&#8217;t been completed and spans several commits on the trunk, any urgent bugfix will cause these features to go online, and inevitably cause bugs on the production website.</p>
<p>The obvious solution to this problem is feature branches, branches that only live for as long as the feature is not complete, and get reintegrated into the trunk when functional and tested.<br />
However, in SVN, every branch is server-side, which means that the central repository might become really encumbered with trash in the /branches directory, unless each developer deletes such a branch when done with it. Guess what ? In practice, a lot of orphean branches remain, and noone cares about deleting them.<br />
Of course, this has an interest because SVN also works as a code backup platform, so at the end of the day, each developer should put his code on the well-protected server, instead of keeping it on their potentially dead-the-next-day desktop computer.<br />
Also consider the fact that developers can work from home as well as from the office, and potentially need their code from anywhere.</p>
<p>SVN has also another flow, it&#8217;s really getting slow when working on large codebase, especially with binary files like images, quite common in websites.<br />
This is caused by the fact that everything happens between the client and the server, even getting file or repository-wide history. Trying to work out a problematic trail of changes is basically impossible if the internet connection is down for some reason.</p>
<h2>Here comes a new challenger</h2>
<p>That&#8217;s why I got very interested when I tried Git, which I had been following since its introduction by Linus Torvald, after the famous issue with Bitkeeper.<br />
Git&#8217;s Windows support has evolved quite a bit since the early days, and I must say that TortoiseGit (a TortoiseSVN clone) has become a quite good piece of software, allowing people to more easily bypass the initial steep learning curve of the many many git commands and options, by using a simple yet potent and familiar UI.</p>
<p>Git solves practically every issue I have encountered so far, especially about branches. Feature branches are a core part of Git&#8217;s workflow, and they&#8217;re freaking fast.<br />
It also makes working locally very practical, as apart from the initial cloning, and eventual pull/pushes, everything is done on the client side.<br />
And at least branches and tags are properly implemented without feeling &#8220;half-baked&#8221;.</p>
<p>Now you might certainly ask me: &#8220;how can it be used in a server-is-the-backup environment if all is done in a distributed way ?<br />
Very simply of course. As long as a developer has access to a machine via SSH and that has git installed, saving your work is just a matter of creating a bare repository in your account, and add it locally as a remote into which you can push and pull at will, without ever needing to communicate with the &#8220;central&#8221; repository.</p>
<h2>Goodbye, really ?</h2>
<p>At work, no, we&#8217;re not quite ready for the switch yet, but it will come, eventually.</p>
<p>I&#8217;m talking about <a href="http://www.flvmeta.com/">flvmeta</a>, instead.</p>
<p>When I decided to host flvmeta publicly back in 2007, I decided to choose Google Code project hosting, because of its simplicity, and its support of SVN. It&#8217;s been a good choice, and has worked flawlessly since then, with an active community, bug reports, and a now established codebase (says <a href="http://www.ohloh.net/p/flvmeta/factoids/9445076">ohloh.net</a>).</p>
<p>These days, I&#8217;m working on the trunk, to complete the 1.1 release of the software. It&#8217;s much more advanced than the 1.0.x branch, and given its good stability, I encourage people to use it instead, even though some planned features are still being developed.<br />
So there&#8217;s no format release yet, and people are encouraged to use the latest trunk revision.</p>
<p>This approach gives me, the main developer, a moral obligation: the trunk must <strong>NOT</strong> be broken. I&#8217;ve been very tempted to use feature branches to work around that issue, and so I created a repository at Github based on a conversion from the flvmeta SVN.<br />
I must admit that I like Github a lot, and so I decided to maintain both the SVN and Git repository in parallel, opting not to use git-svn facilities, just to compare Git to SVN for daily tasks.</p>
<p>After a while I&#8217;ve started to wonder about closing the google code project in favour to Github entirely, because this double-repository thing is just an annoyance, and using feature branches in the Git version adds the risk to desync it from the SVN repository, which could confuse users.</p>
<p>And then, yes, they did it, <a href="http://google-opensource.blogspot.com/2011/07/announcing-git-support-for-google-code.html">Google added support for Git in Google Code</a> ! So I uploaded my local flvmeta repository to Google Code, converted the Wiki SVN to Git, and that&#8217;s all there was to it. Now Github and Google Code are both mirrors for my local repository, and keeping them in sync is just a matter of pushing correctly.</p>
<h2>Last words</h2>
<p>I&#8217;m now a happy gitter, I will not come back to SVN for flvmeta. I just need to fix a few things in the build scripts, because I relied on SVN revision numbers to tag the executables during compilation, if just to make support easier by having people telling me the exact revision of the program they&#8217;re using.<br />
It will just be a matter of using git hashes instead, there&#8217;s a handy command that I can use for that: <code>git rev-parse --short HEAD</code>, or even <code>git describe --always</code>.</p>
<p>The only thing that I don&#8217;t like with Google&#8217;s support of Git is that they decided to stick to the most used and abused protocol ever, HTTP, instead of ssh: or git:, therefore forcing me to enter my password for every interaction with their servers, since TortoiseGit won&#8217;t let me save authentification data.<br />
I really prefer how Github handles authentication, by using cryptographic key pairs, that can be revoked individually, so if a developer machine is ever compromised, risks can be mitigated.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zenhaven.org/blog/2011/09/12/goodbye-subversion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FLVmeta news</title>
		<link>http://www.zenhaven.org/blog/2010/04/14/flvmeta-news/</link>
		<comments>http://www.zenhaven.org/blog/2010/04/14/flvmeta-news/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 10:16:57 +0000</pubDate>
		<dc:creator>marc</dc:creator>
				<category><![CDATA[FLVmeta]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.zenhaven.org/blog/?p=17</guid>
		<description><![CDATA[After a few months of development, FLVmeta 1.1 is nearing completion. Snapshots can be downloaded on the Google Code project page at: http://code.google.com/p/flvmeta/downloads/list A lot of new features have been added, here is an exhaustive list: Added proper command line handling and help. Added the possibility to overwrite the input file when the output file [...]]]></description>
			<content:encoded><![CDATA[<p>After a few months of development, FLVmeta 1.1 is nearing completion.</p>
<p>Snapshots can be downloaded on the Google Code project page at: <a href="http://code.google.com/p/flvmeta/downloads/list">http://code.google.com/p/flvmeta/downloads/list</a></p>
<p><span id="more-17"></span>A lot of new features have been added, here is an exhaustive list:</p>
<div id="_mcePaste">
<ul>
<li>Added proper command line handling and help.</li>
<li>Added the possibility to overwrite the input file when the output file is not specified or when both files are physically the same.</li>
<li> Added support for CMake builds in addition to autotools. It is now the official way to build flvmeta on Windows.</li>
<li>Added metadata and full file dumping, integrating former flvdump functionality into flvmeta.</li>
<li>Added support for XML, YAML, and JSON formats for dumping.</li>
<li>Added XML schemas describing the various formats used by flvmeta.</li>
<li>Added a file checking feature (currently unimplemented).</li>
<li>Added the possibility to print output file metadata after a successful update using one of the supported formats.</li>
<li>Added a feature to insert custom metadata strings while updating.</li>
<li>Added an option to disable insertion of the onLastSecond event.</li>
<li>Added an option to preserve existing metadata tags if possible.</li>
<li>Added an option to fix invalid tags while updating (this is a highly experimental feature, should be used with caution)</li>
<li>Added an option to ignore invalid tags as much as possible instead of exiting at the first error detected.</li>
<li>Added an option to reset the file timestamps in order to correctly start at zero, for example if the file has been incorrectly split by buggy tools.</li>
<li>Added an option to display informative messages while processing (not quite exhaustive for the moment)</li>
</ul>
</div>
<p>A few things are still missing for the next stable release, for example some proper user documentation, now that a complete set of command line options are available, as well as the implementation of the check command.</p>
<p>Everyone is welcome to test the software and report bugs on the <a href="http://code.google.com/p/flvmeta/issues/list">issue tracker</a>.</p>
<p>I&#8217;m also still pondering the benefits of using gettext in order to fully internationalize the output of the program. On one hand, there are many people who don&#8217;t speak english, and adding the potential to reach a wider audience is tempting. It is also a must-have in order to be featured in distros like Debian.</p>
<p>On the other hand, I still have issues with building flvmeta with gettext enabled. First of all the cmake/windows combination would be kind of experimental at best, and using autotools, I still need to fully understand which files must and must not be added to the repository.<br /> There&#8217;s also the question of performance, since flvmeta is mostly used as an automated tool for update purpose. Dynamically loading strings in that setting is kind of pointless since speed and memory can be affected and there&#8217;s noone to ever read those messages anyways.</p>
<p>After version 1.1, which is transitional in the sense that it really represents the maturation of flvmeta into a real CLI tool, a 1.2 version will be in development.</p>
<p>Features expected for 1.2 include:</p>
<div>
<ul>
<li>insertion of custom data tags, notably cuepoints, from XML files</li>
<li>extraction of individual audio and video streams</li>
<li>creation of a GUI tool wrapping flvmeta&#8217;s functionalities, and adding a bit more, like batch processing, and integration with various file managers (Nautilus, Windows Explorer ?)</li>
<li>eventually a streaming mode, to create some sort of &#8220;real time&#8221; playback of FLV files to devices or sockets, which could really be interesting in conjunction with a HTTP server, to better control bandwidth usage when using the now widespread &#8220;pseudo-streaming&#8221; of FLV files</li>
</ul>
</div>
<p>To add a quick follow-up to my previous post, I might add that&#8230; no, FLV is not quite dead yet, since H.264 streams in FLV containers are working quite well in the Flash Player, and major sites have adopted that combination.<br />I think we also might even expect support for On2 VP8 in FLV files before the end of the year. If Google really open-sources its code, alternative flash implementations will certainly jump the wagon before maybe even Adobe.<br />Of course, due to Adobe being a major On2 licensee, as well as thanks to the rather good relationship between them and Google, the official Flash Player might support this codec fast enough for it to become a viable alternative to the increasingly controversial H.264.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zenhaven.org/blog/2010/04/14/flvmeta-news/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

