tag:blogger.com,1999:blog-131993952024-03-09T12:48:09.992+01:00knocte :: MonoTemaThose who say it can't be done shouldn't interrupt the ones who are doing it.knoctehttp://www.blogger.com/profile/00267496347097861887noreply@blogger.comBlogger56125tag:blogger.com,1999:blog-13199395.post-13311487913357853552021-12-18T17:50:00.003+01:002021-12-18T17:50:23.289+01:00geewallet 0.4.300.0 released!<p>10th of my 21-day quarantine*! And to celebrate, I'm going to release a new version of <a href="https://gitlab.com/nblockchain/geewallet">geewallet</a>. It's not that I blog about geewallet releases often (or blog at all, lately), but this one is a special one for me. We decided to call it <strong><big>0.4.<u>300</u>.0</big></strong></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhd8A_8w-W6IFlJznYc-F1_RKnBOF0ZiUCWji2H8vkMqX08Y3P82wJv4r22YZL4GCJ6Y9Oj8X2CGxuL_-3NouNGlAbWXtSwT0rk2dz2j0S3XLGJqdzEtkXdaH12PVJmjsjaCpvt/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="576" data-original-width="1024" height="335" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhd8A_8w-W6IFlJznYc-F1_RKnBOF0ZiUCWji2H8vkMqX08Y3P82wJv4r22YZL4GCJ6Y9Oj8X2CGxuL_-3NouNGlAbWXtSwT0rk2dz2j0S3XLGJqdzEtkXdaH12PVJmjsjaCpvt/w596-h335/300.jpeg" width="596" /></a></div><br /><p></p><p>The highlights:</p><p></p><ul style="text-align: left;"><li>We fixed the GTK theme for our <a href="https://snapcraft.io/geewallet">snap</a> package. (Long version of the story: ever since we upgraded our snap generation process to take place in Ubuntu 20.04 instead of Ubuntu 18.04, the theme stopped working so the app was not showing anymore with the default theme of the system, but with the default Gtk theme, which is very <i>plain</i>. Even if you might consider this issue important, we haven't had time to look at it because we've been very busy finishing <a href="https://gitlab.com/nblockchain/geewallet/-/commits/rc/LN-m10/">Lightning support</a>. Sorry.)</li><li>The chart rendering doesn't use SkiaSharp anymore, but good-old Cairo. This fixes some UI glitches that we had in the GTK frontend. (Long version: for this, we didn't just draw the chart using Cairo in our Gtk frontend, we actually wrote an implementation of the Shapes API for the Xamarin.Forms' GTK backend, and we contributed the work upstream: <a href="https://github.com/xamarin/Xamarin.Forms/pull/14235">https://github.com/xamarin/Xamarin.Forms/pull/14235</a> . Hopefully they merge it soon so that we don't need to use our own forked repo/nuget anymore.)</li><li>Fixed a crash when pairing with a cold-storage wallet. (Long version: user might not know that pairing is only allowed against another geewallet instance; low-hanging fruit bugfix which I shouldn't have neglected for so long, I know.)</li><li>Fixed a crash when scanning some QR-codes that contained unknown parameters in the bitcoin URI. (Long version: I was actually in <a href="https://en.wikipedia.org/wiki/El_Salvador">El Salvador</a> and when trying to use a BTM, I found this bug! Apparently some BTMs here add an extraneous "chivo" param in the URI's querystring, in case the wallet being used is the one from the government; not sure why. In this case, geewallet was failing fast instead of ignoring the unexpected <i>intruder</i>.)</li></ul><div>The less important (not user-facing) work:</div><div><ul style="text-align: left;"><li>Our CI now checks that our Android, macOS, and iOS frontends don't break. Previously the only frontends that we built in CI were the Gtk one (Linux) and the Console one (cross-platform, it's just terminal-based).</li><li>We do snap package generation in GitLab now instead of GitHub. This is good because Microsoft keeps changing the Linux VMs being used in the GitHubActions service so we cannot keep up fixing things that just break out of the blue (so, they break independently from what we change in our commits, which is very confusing!). (Long version: we had to use GitHubActions because GitLabCI uses docker under the hood; so given that snapcraft uses systemd, it conflicts with it; now we use a "docker in docker" approach to be able to run in GitLabCI; which also allows us to publish the snap package as an artifact in the GitLabCI pipeline, not just publishing it to the Snap Store; this way, in case you somehow need a previous version in the future you can grab it from there, something that you couldn't just via snap AFAIU).</li></ul></div><div>Limitations:</div><div><ul style="text-align: left;"><li>Even though this wallet supports two ETH currencies (ETH itself, and DAI), we don't recommend their use at the moment because of the high fees and long confirmation waits these days. This is because the wallet waits for an ETH transaction to be mined (to make sure it didn't run out of gas, and if it did, report the problem to the user), but these days this wait is longer than the time-out. The short-term fix for this is either a) assume it will never ran out of gas, since our address is not a contract anyway (so I guess it can never run out of gas, right? feel free to prove me wrong, my ETH knowledge is not top-notch), or b) have some UI indicating that a transaction has been sent but not accepted by the network yet. The long-term fix is to have off-chain (Layer2) technology supported by the wallet, but we don't know which technology we will choose for this, and of course we're giving priority to the first Layer2 technology: Lightning (which is only compatible with BTC and LTC). All this aside, the wallet works well with ETC (an Ethereum-compatible technology). Anyway, this doesn't worry me too much because... what is the ETH blockchain used for these days, mainly? NFTs and DeFi pyramid schemes. In case you didn't get the memo, most of the former (if not all) <a href="https://twitter.com/loishh/status/1470340143970230277">are</a> <a href="https://twitter.com/maxkeiser/status/1468588944661098499">scams</a>, and the latter are all of them mainly based on dubious <a href="https://en.wikipedia.org/wiki/Tether_(cryptocurrency)">centralized</a> <a href="https://www.circle.com/en/usdc">stablecoins</a> (which could suffer fractional reserve and therefore cause bank runs, as <a href="https://twitter.com/SenWarren/status/1470843764843458560">Elizabeth Warren has already warned about</a>).</li><li>Despite this wallet being implemented with .NET (F#), our Windows compatibility story is very poor :'-( We ran into limitations of the Microsoft's AOT technology being used for UWP apps (required by the official process required to publish it in the WindowsStore) in the past. Nowadays apparently you can publish apps in the WindowsStore without these limitations, but we haven't tried again. Maybe by the next time we give it another go, we might have moved to <a href="https://docs.microsoft.com/en-us/dotnet/maui/what-is-maui">MAUI</a> already (which means WinUI instead of UWP under the hood). As always, if this is your cup of tea, we accept MRs!</li></ul><div>BTW on the topic of F#, I augmented my tiny C#-to-F# tutorial to include Python (so Python devs can try how it feels to switch to a more typed approach without the need to be so verbose, thanks to F# type inference!), as both languages have a very similar style (indentation based, no curly braces!). <a href="https://github.com/knocte/2fsharp/blob/master/python2fsharp.md">Check it out</a>.</div></div><div><br /></div><div>* And on the topic of quarantine (which was increased from 14 to 21 days for me just because of the omicron panic) I just wanted to share some rambling that is in my head: if the omicron strain is more infectious but at the same time is less dangerous (I think it was only yesterday that the first death happened because of it, right? at least the first one covered by the media) than the others, then wouldn't this be a good outcome? Or rather, a least worse one. I mean, if this variant gets more prevalent around the pandemic, this coronavirus might actually become just the next flu, right? So: endemic, but with much less mortality rate. I don't know, hopefully something along these lines happens, just sharing some positive perspective! Be safe.</div><div><br /></div><div>NB: if you're looking for this version in Android, please be aware that the validation from Google takes a bit of time, hopefully the update will be available in the Play store in less than 24h.</div><p></p>knoctehttp://www.blogger.com/profile/00267496347097861887noreply@blogger.com0tag:blogger.com,1999:blog-13199395.post-39526079989921018562020-02-08T08:37:00.002+01:002021-12-18T17:33:15.749+01:00Xamarin forks and whatnotsBusy days in <a href="https://knocte.blogspot.com/2020/01/introducing-geewallet.html">geewallet</a> world! I just released version 0.4.2.198 which brings some interesting fixes, but I wanted to talk about the internal work that had to be done for each of them, in case you're interested.<br />
<ul>
<li>In Linux(GTK), cold storage mode when pairing was broken, because the absence of internet connection was not being detected properly. The bug was in a 3rd-party nuget library we were using: <a href="https://www.nuget.org/packages/Xam.Plugin.Connectivity">Xam.Plugin.Connectivity</a>. But we couldn't migrate to <a href="https://github.com/xamarin/Essentials">Xamarin.Essentials</a> for this feature because Xamarin.Essentials lacks support for some platforms that we already supported (not officially, but we know geewallet worked on them even if we haven't released binaries/packages for all of them yet). The solution? We forked Xamarin.Essentials to include support for these platforms (macOS and Linux), fixed the bug in our fork, and published our fork in nuget under the name `DotNetEssentials`. Whenever Xamarin.Essentials starts supporting these platforms, we will stop using our fork.</li>
<li>The clipboard functionality in geewallet depended on another 3rd-party nuget library: <a href="https://www.nuget.org/packages/Xamarin.Plugins.Clipboard">Xamarin.Plugins.Clipboard</a>. The GTK bits of this were actually contributed by me to their github repository as a <a href="https://github.com/stavroskasidis/XamarinClipboardPlugin/pull/7">Pull Request</a> some time ago, so we just <a href="https://github.com/nblockchain/DotNetEssentials/commit/a5bb9b4902b5aeee0d43f0e121694774179cc11b">packaged the same code to include it in our new DotNetEssentials fork</a>. One dependency less to care about!</li>
<li>Xamarin.Forms had a strange <a href="https://github.com/xamarin/Xamarin.Forms/issues/9092">bug</a> that caused some buttons sometimes to not be re-enabled. This bug has been fixed by one of our developers and its fix was included in the new pre-release of Xamarin.Forms 4.5, so we have <a href="https://gitlab.gnome.org/World/geewallet/commit/8ef12c51edfd2b672fccc888a0cb6886fd9be944">upgraded</a> geewallet to use this new version instead of v4.3.</li></ul><div>
PS: Apologies if the previous blogpost or this one shows up in planets again, as it might be a side-effect of updating its links to point to the new git repo!</div>
<div>
<br /></div>
knoctehttp://www.blogger.com/profile/00267496347097861887noreply@blogger.com0tag:blogger.com,1999:blog-13199395.post-56696680282841116222020-01-05T17:31:00.004+01:002021-12-18T17:32:41.673+01:00Introducing geewallet<div class="p1">
Version 0.4.2.187 of <a href="https://gitlab.com/nblockchain/geewallet/-/blob/frontend/ReadMe.md">geewallet</a> has just been published to the <a href="https://snapcraft.io/geewallet">snap store</a>! You can install it by looking for its name in the store or by installing it from the command line with `snap install geewallet`. It features a very simplistic and minimalistic UI/UX. Nothing very fancy, especially because it has a single codebase that targets many (potential) platforms, e.g. you can also find it in the Android App Store.</div>
<div class="p2">
<br /></div>
<div class="p1">
What was my motivation to create geewallet in the first place, around 2 years ago? Well, I was very excited about the “global computing platform” that Ethereum was promising. At the time, I thought it would be like the best replacement of Namecoin: decentralised naming system, but not just focusing on this aspect, but just bringing Turing-completeness so that you can build whatever you want on top of it, not just a key-value store. So then, I got ahold of some ethers to play with the platform. But by then, I didn’t find any wallet that I liked, especially when considering security. Most people were copy+pasting their private keys into a website (!) called MyEtherWallet. Not only this idea was terrifying (since you had to trust not just the security skills of the sysadmin who was in charge of the domain&server, but also that the developers of the software don’t turn rogue…), it was even worse than that, it was worse than using a normal hot wallet. And what I wanted was actually a cold wallet, a wallet that could run in an offline device, to make sure hacking it would be impossible (not faraday-cage-impossible, but reasonably impossible).</div>
<div class="p2">
<br /></div>
<div class="p1">
So there I did it, I created my own wallet.</div>
<div class="p2">
<br /></div>
<div class="p1">
After some weeks, I added bitcoin support on it thanks to the library NBitcoin (good work Nicholas!). After some months, I added a cross-platform UI besides the first archaic command-line frontend. These days it looks like this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://raw.githubusercontent.com/knocte/geewallet/master/img/screenshots/maciosandroid-balances.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="460" data-original-width="800" height="366" src="https://raw.githubusercontent.com/knocte/geewallet/master/img/screenshots/maciosandroid-balances.png" width="640" /></a></div>
<br /></div>
<div class="p2">
<br /></div>
<div class="p1">
What was my motivation to make geewallet a brain wallet? Well, at the time (and maybe nowadays too, before I unveil this project at least), the only decent brain wallet out there that seemed sufficiently secure (against brute force attacks) was WarpWallet, from the Keybase company. If you don’t believe in their approach, they even have placed a bounty in a decently small passphrase (so if you ever think that this kind of wallet would be hacked, you would be certainly safe to think that any cracker would target this bounty first, before thinking of you). The worst of it, again, was that to be able to use it you had again to use a web interface, so you had the double-trust problem again. Now geewallet brings the same WarpWallet seed generation algorithm (backed by unit tests of course) but on a desktop/mobile approach, so that you can own the hardware where the seed is generated. No need to write anymore long seeds of random words in pieces of paper: your mind is the limit! (And of course geewallet will warn the user in case the passphrase is too short and simple: it even detects if all the words belong to the dictionary, to deter low entropy, from the human perspective.)</div>
<div class="p2">
<br /></div>
<div class="p1">
Why did I add support for Litecoin and Ethereum Classic to the wallet? First, let me tell you that bitcoin and ethereum, as technological innovations and network effects, are very difficult to beat. And in fact, I’m not a fan of the proliferation of dubious portrayed awesome new coins/tokens that claim to be as efficient and scalable as these first two. They would need not only to beat the network effect when it comes to users, but also developers (all the best cryptographers are working in Bitcoin and Ethereum technologies). However, Litecoin and Ethereum-Classic are so similar to Bitcoin and Ethereum, respectively, that adding support for them was less than a day’s work. And they are not completely irrelevant: Litecoin may bring zero-knowledge proofs in an upcoming update soon (plus, its fees are lower today, so it’s an alternative cheaper testnet with real value); and Ethereum-Classic has some inherent characteristics that may make it more decentralised than Ethereum in the long run (governance not following any cult of personality, plus it will remain as a Turing-complete platform on top of Proof Of Work, instead of switching to Proof of Stake; to understand why this is important, I recommend you to watch <a href="https://www.pscp.tv/w/1ZkKzAXMMWexv">this video</a>).</div>
<div class="p2">
<br /></div>
<div class="p1">
Another good reason of why I started something like this from scratch is because I wanted to use F# in a real open source project. I had been playing with it for a personal (private) project 2 years before starting this one, so I wanted to show the world that you can build a decent desktop app with simple and not too opinionated/academic functional programming. It reuses all the power of the .NET platform: you get debuggers, you can target mobile devices, you get immutability by default; all three in one, in this decade, at last. (BTW, everything is written in F#, even the build scripts.)</div>
<div class="p2">
<br /></div>
<div class="p1">
What’s the roadmap of geewallet? The most important topics I want to cover shortly are three:</div>
<ul class="ul1">
<li class="li1"><span class="s1"></span>Make it even more user friendly: blockchain addresses are akin to the numeric IP addresses of the early 80s when DNS still didn’t exist. We plan to use either ENS or IPNS or BNS or OpenCAP so that people can identify recipients much more easily.</li>
<li class="li1"><span class="s1"></span>Implement Layer2 technologies: we’re already past the proof of concept phase. We have branches that can open channels. The promise of these technologies is instantaneous transactions (no waits!) and ridiculous (if not free) fees.</li>
<li class="li1"><span class="s1"></span>Switch the GTK Xamarin.Forms driver to work with the new <a href="https://github.com/GtkSharp/GtkSharp">“GtkSharp”</a> binding under the hood, which doesn’t require glue libraries. (I’ve had quite a few nightmares with native dependencies/libs when building the sandboxed snap package!)</li>
</ul>
<div class="p1">
With less priority:</div>
<ul class="ul1">
<li class="li1"><span class="s1"></span>Integrate with some Rust projects: MimbleWimble(Grin) lib, the distributed COMIT project for trustless atomic swaps, or other Layer2-related ones such as rust-lightning.</li>
<li class="li1"><span class="s1"></span>Cryptography work: threshold keys or deniable encryption (think "duress" passwords).</li>
<li class="li1"><span class="s1"></span>NFC support (find recipients without QR codes!).</li>
<li class="li1"><span class="s1"></span>Tizen support (watches!).</li>
<li class="li1"><span class="s1"></span>Acceptance testing via UI Selenium tests (look up the Uno Platform).</li>
</ul>
<div class="p2">
<br /></div>
<div class="p1">
Areas where I would love contributions from the community:</div>
<ul class="ul2">
<li class="li1">Flatpak support: unfortunately I haven’t had time to look at this sandboxing technology, but it shouldn’t be too hard to do, especially considering that there’s already a Mono-based project that supports it: <a href="https://github.com/hbons/org.sparkleshare.SparkleShare">SparkleShare</a>.</li>
<li class="li1">Ubuntu packaging: there’s a patch blocked on some Ubuntu bug that makes the wallet (or any .NET app these days, as it affects the .NET package manager: nuget) not build in Ubuntu 19.10. If this patch is not merged soon, the next LTS of Ubuntu will have this bug :( As far as I understand, what needs to be solved is <a href="https://bugs.launchpad.net/ubuntu/+source/mono/+bug/1520033">this issue</a> so that the latest <a href="https://code.launchpad.net/~usd-import-team/ubuntu/+source/mono/+git/mono/+ref/ubuntu/eoan-proposed">hotfixes</a> are bundled. (BTW I have to thank Timotheus Pokorra, the person in charge to package Mono in Fedora, for his help on this matter so far.)</li>
<li class="li1">GNOME community: I’m in search for a home for this project. I don’t like that it lives in my GitLab username, because it’s not easy to find. One of the reasons I’ve used GitLab is because I love the fact that being open source, many communities are adopting this infrastructure, like Debian and GNOME. That’s why I’ve used as a bug tracker, for merge requests and to run CI jobs. This means that it should be easy to migrate to GNOME’s GitLab, isn’t it? There are unmaintained projects (e.g. <a href="https://gitlab.gnome.org/GNOME/banshee">banshee</a>, which I couldn’t continue maintaining due to changes in life priorities...) already hosted there, so maybe it’s not much to ask if I could host a maintained one? It's probably the first Gtk-based wallet out there.</li>
</ul>
<div class="p2">
<br /></div>
<div class="p1">
And just in case I wasn't clear:</div>
<ul class="ul2">
<li class="li1">Please don’t ask me to add support for your favourite %coin% or <token>.</li>
<li class="li1">If you want to contribute, don’t ask me what to work on, just think of your personal itch you want to scratch and discuss it with me <a href="https://gitlab.gnome.org/World/geewallet/issues/new">filing a GitLab issue</a>. If you’re a C# developer, <a href="https://github.com/knocte/csharp2fsharp">I wrote a quick F# tutorial for you</a>.</li>
<li class="li1">Thanks for reading up until here! It’s my pleasure to write about this project.</li></ul>
<div class="p2">
<br /></div>
<div class="p1">
I'm excited about the world of private-key management. I think we can do much better than what we have today: most people think of hardware wallets to be unhackable or cold storage, but most of them are used via USB or Bluetooth! Which means they are not actually cold storage, so software wallets with offline-support (also called <i>air-gapped</i>) are more secure! I think that eventually these tools will even merge with other ubiquitous tools with which we’re more familiar today: password managers!</div>
<div class="p2">
<br /></div>
<div class="p1">
You can follow the project on <a href="https://twitter.com/geewallet">twitter</a> (yes I promise I will start using this platform to publish updates).<br />
<br />
PS: If you're still not convinced about these technologies or if you didn't understand that PoW video I posted earlier, I recommend you to go back to basics by watching <a href="https://www.youtube.com/watch?v=bBC-nXj3Ng4">this other video produced by a mathematician educator</a> which explains it really well.</div><div class="p1"><br /></div><div class="p1">PS II: Apologies if this blogpost shows up in planets again, as it might be a side-effect of updating it to fix broken links or typos.</div>
<br />knoctehttp://www.blogger.com/profile/00267496347097861887noreply@blogger.com0tag:blogger.com,1999:blog-13199395.post-37647165570663451752019-01-23T08:55:00.002+01:002020-02-08T08:34:41.045+01:00WORA-WNLF<style type="text/css">
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'; min-height: 14.0px}
li.li1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'}
ul.ul1 {list-style-type: hyphen}
</style>
<br />
<div class="p1">
I started my career writing web applications. I had struggles with PHP web-frameworks, javascript libraries, and rendering differences (CSS and non-CSS glitches) across browsers. After leaving that world, I started focusing more on the backend side of things, fleeing from the frontend camp (mainly actually just scared of that abomination that was javascript; because, in my spare time, I still did things with frontends: I hacked on a GTK media player called Banshee and a GTK chat app called Smuxi).</div>
<div class="p2">
<br /></div>
<div class="p1">
So there you had me: a backend dev by day, desktop dev by night. But in the GTK world I had similar struggles as the ones I had as a frontend dev when the browsers wouldn’t behave in the same way. I’m talking about GTK bugs in other non-Linux OSs, i.e. Mac and Windows.</div>
<div class="p2">
<br /></div>
<div class="p1">
See, I wanted to bring a desktop app to the masses, but these problems (and others of different kinds) prevented me to do it. And while all this was happening, another major shift was happening as well: desktop environments were fading while mobile (and not so mobile: tablets!) platforms were rising in usage. This meant yet more platforms that I wished GTK supported. As I’m not a C language expert (nor I wanted to be), I kept googling for the terms “gtk” and “android” or “gtk” and “iOS”, to see if some hacker put something together that I could use. But that day never happened.</div>
<div class="p2">
<br /></div>
<div class="p1">
Plus, I started noticing a trend: big companies with important mobile apps started to stop using HTML5 within their apps in favour of native apps, mainly chasing the “native look & feel”. This meant, clearly, that even if someone cooked a hack that made gtk+ run in Android, it would still feel foreign, and nobody would dare to use it.</div>
<div class="p2">
<br /></div>
<div class="p1">
So I started to become a fan of abstraction layers that were a common denominator of different native toolkits and kept their native look&feel. For example, XWT, the widget toolkit that Mono uses in MonoDevelop to target all 3 toolkits depending on the platform: Cocoa (on macOS), Gtk (on Linux) and WPF (on Windows). Pretty cool hack if you ask me. But using this would contradict my desires of using a toolkit that would already support Android!</div>
<div class="p2">
<br /></div>
<div class="p1">
And there it was Xamarin.Forms, an abstraction layer between iOS, Android and WindowsPhone, but that didn’t support desktops. Plus, at the time, Xamarin was proprietary (and I didn’t want to get out of my open source world). It was a big dilemma.</div>
<div class="p2">
<br /></div>
<div class="p1">
But then, some years passed, and many events happened around Xamarin.Forms:</div>
<ul>
<li>Xamarin (the company) was bought by Microsoft and, at the same time, Xamarin (the product) was open sourced.</li>
<li>Xamarin.Forms is opensource now (TBH not sure if it was proprietary before, or it was always opensource).</li>
<li>Xamarin.Forms started supporting macOS and Windows UWP.</li>
<li>Xamarin.Forms 3.0 included support for GTK and WPF.</li>
</ul>
<div class="p2">
<br /></div>
<div class="p1">
So that was the last straw that made me switch completely all my desktop efforts toward Xamarin.Forms. Not only I can still target Linux+GTK (my favorite platform), I can also make my apps run in mobile platforms, and desktop OSs that most people use. So both my niche and mainstream covered! But this is not the end: Xamarin.Forms has been recently ported to Tizen too! (A Linux-based OS used by Samsung in SmartTVs and watches.)</div>
<div class="p2">
<br /></div>
<div class="p1">
Now let me ask you something. Do you know of any graphical toolkit that allows you to target 6 different platforms with the same codebase? I repeat: Linux(GTK), Windows(UWP/WPF), macOS, iOS, Android, Tizen. The old Java saying is finally here! (but for the frontend side): “write once, run anywhere” (WORA) to which I add “with native look’n’feel” (WORA-WNLF)</div>
<div class="p2">
<br /></div>
<div class="p1">
If you want to know who is the hero that made the GTK driver of Xamarin.Forms, follow @jsuarezruiz which BTW has been recently hired by Microsoft to work on their non-Windows IDE ;-)</div>
<div class="p2">
<br /></div>
<div class="p1">
PS: If you like .NET and GTK, my employer is also hiring! (remote positions might be available too) ping me<span class="Apple-converted-space"> </span></div>
<br />knoctehttp://www.blogger.com/profile/00267496347097861887noreply@blogger.com6tag:blogger.com,1999:blog-13199395.post-18758070074115904132015-03-17T02:56:00.000+01:002015-03-17T02:59:37.921+01:00How do you upgrade your distro? A tale of two workarounds<p>Every classic <i>Linuxer</i> would know why it's very handy to dedicate a separate partition for the /home folder of your tree: you could in theory share it between multiple OSs that you installed in your box (which you choose to run when you start your computer).</p>
<p>Now, I'm guessing that many people reading and nodding to the above, will also know that sharing /home/ is one thing, sharing $HOME (/home/yourUserName) is a completely different beast.</p>
<p>For example: you have a stable distro installed in your box; you decide to install a new version of that distro along the old one, in the same box. You run the new distro with a new account tied to the old /home/yourUserName folder: KABOOM!!! Weird things start happening. Among these:
<ul><li>The newer versions of your desktop or desktop programs don't run properly with the settings saved in your .dotDirectories (they are to blame because they didn't probably have a settings-conversion feature).</li>
<li>The newer versions of your desktop or desktop programs have a buggy settings-conversion feature; because your program does not run properly, or as well as it would have run if it had been ran for the first time with no settings saved at all.</li>
<li>The newer versions of your non-buggy desktop or desktop programs convert your settings to a new format. Then when you go back and run your old distro again, your old-versioned programs stop working because they see settings in a new format which they don't understand. (This is impossible to fix, or very hard.) It's very important that this scenario works, because the migration to the new version of your distro may not be immediate, it may take you some days to figure everything out, and until that happens, you want to still be able to run the stable version of your desktop and desktop programs</li>
<li>Etc.</li>
</ul>
<p>To workaround these problems, I have a strategy: I use a different /home/ sub-directory for each distro installed in my system. For example, for distro X version A.B I use /home/knocteXAB/, for distro Y version C.D I use /home/knocteYCD/. The advantage about this is that you can migrate your settings manually and at your own pace. But then, you may be asking, how to really take advantage of sharing the /home folder when using this technique?</p>
<p>Easy: I keep non-settings data (mainly the non-dotfiles) in a different /home/ folder with no associated account in any of the distros. For example: /home/knocte/ (no version suffix). Then, from each of the suffixed /home/ subfolders, I setup symlinks to this other folder, setting the appropriate permissions. For instance:
<ul><li>/home/knocteXAB/Music -> /home/knocte/Music</li><li>/home/knocteXAB/Documents -> /home/knocte/Documents</li>
<li>/home/knocteYCD/Music -> /home/knocte/Music</li><li>/home/knocteYCD/Documents -> /home/knocte/Documents</li><li>Etc.</li></ul>
You may think that it's an interesting strategy and that I'm done with the blog post, however, when using this strategy you may start finding buggy applications that don't deal very well with symlinked paths.
The one I found which annoyed the most was my favourite Gnome IDE, because it meant I couldn't develop software without problems. I mean, they were not just cosmetic problems, really:
</p>
<ul><li><a href="https://bugzilla.xamarin.com/show_bug.cgi?id=5225">Debugger not stopping on breakpoints</a>.</li><li><a href="https://bugzilla.xamarin.com/show_bug.cgi?id=27097">Builds breaking with obscure error messages.</a></li><li><a href="https://bugzilla.xamarin.com/show_bug.cgi?id=27098">Debugger opening file in the IDE which was already open, duplicating two tabs for the same file.</a></li><li>Etc.</li></ul>
<p>So I had to use a workaround for my workaround: clone all my projects in $HOME instead of /home/knocte/Documents/Code/OpenSource/ (yah, I'm this organized ;) ).</p>
<p>I've been trying to fix these problems for a while, without much time on my hands.</p><p>But the last weeks a magical thing happened: I decided to finally sit down and try to fix the last two remaining, and my patches were all accepted and merged last week! (at least all the ones fixing symlink-related problems), woo!!!</p>
<p>So the lessons to learn here are:</p>
<ul><li>Even the slickest workarounds have problems. Try to fix or report settings-conversion bugs!!</li>
<li>Don't ever quit trying to fix a problem. Some day you'll have the solution and you will realize it was simpler than you thought.</li>
<li><a href="http://man7.org/linux/man-pages/man3/realpath.3.html">realpath</a> is your friend.</li>
<li>MonoDevelop (master branch) is now less buggy and as amazing as (or more than) ever (</PUBLIC_SERVICE_ANNOUNCEMENT>).</li></ul>knoctehttp://www.blogger.com/profile/00267496347097861887noreply@blogger.com1tag:blogger.com,1999:blog-13199395.post-73910442605551406482014-05-20T23:58:00.000+02:002014-05-26T21:45:17.880+02:00Banshee GSoC-2014 projects under Gnome umbrellaHere we are, at the beginning of a great summer!<br />
<br />
This time,
Google has given plenty of slots to the GNOME project, so we could
accept many participants, including 3 brilliant students to work on the
Banshee project. In case they haven't blogged about it, or didn't give
much detail, I'll elaborate a bit about what they will be aiming to do
these months:<br />
<br />
<ul>
<li>Nicholas Little will be working on creating a new extension for
Bluetooth synchronization, and if time permits, refactoring our MTP
support. In regards to the latter, if you have an Android phone you
might have experienced some bugs getting it to work with Banshee lately (our MassStorage synchronization support is great, but the latest versions of Android have been deprecating this mode in favour of MTP, which we never supported very well); we
have been working hard on fixing them, but Nicholas is going to try to
give it that extra push at the end of the summer, which I'm confident he
will do very well (he was the developer who brought Symbian support for
the masses -or rather, for his Nokia N95 ;) -, on Banshee 2.9.0). And
you may be wondering, why do we need Bluetooth sync? Well, we understand
that it's much slower than USB or Wifi, but:</li>
</ul>
<ol>
<li>
USB can work for the first sync, but whenever you update your
library, I never remember to connect my phone again with my cable, or
I'm too lazy to do it. Now imagine that whenever your phone is near your
computer (and of course if you have Banshee running), they could
negotiate together to update the sync without the need of moving a
finger!</li>
<li>Wifi could work also for the use case I just explained, but getting
Wifi to work, compared to Bluetooth, would involve creating an app for
the phone that could talk with Banshee. And we all know what are the
problems associated with that: we would need to be cross-platform for at
least the 3 main mobile platforms out there (well, iOS wouldn't even work neither with this nor with Bluetooth, because there are no public APIs to integrate with the music database of the OS, sigh iTunes...), and that means a lot of
maintenance burden (even if we choose a same-language native platform
like Xamarin), and a user experience that is not so seamless (as it would require the user to install an app first).</li>
</ol>
<ul>
<li>Marcin Kolny, which has convinced us that he will do a great job
given his great patches and the fact that he's already very involved in
opensource (maintainer of C++ bindings to GStreamer if I recall
correctly), will be working on integration with AcoustID. To summarize it
very bluntly, AcoustID is the open-source alternative to Shazam, so thanks
to this, if you have many tracks in your library which didn't get
ripped properly with tags, or you got from some friend which is not very
metadata-driven ;) then you will be able to fix this situation! We will
be likely reusing the MetadataFixer extension that we already have in
Banshee, to not reinvent the UI wheel.</li>
</ul>
<ul>
<li>
Dmitriy Petukhov, a very motivated Russian student, will be
helping us get two extensions in shape, which were developed in the last
GSoC (more details about this in my <a href="http://knocte.blogspot.de/2014/05/gsoc-2013-with-gnome.html">previous
blog post</a>), but were not ready for mainstream yet. The
FanArt.TV extension, which retrieves artist logos and shows them next to
your album icons, needs some caching (we could even violate FanArt.TV
service's ToS if we don't do this) and UI polish (our ListView widget
doesn't play well with differently-sized images, so we need to modify
this custom GTK widget to allow rendering rows with different heights).
The SongKick extension works great, but also needs caching, and it
especially needs GeoLocation to maybe even work autonomously (imagine, you don't even know what SongKick is, and because you installed the
banshee-community-extensions package of your distro, you suddenly get
told that one of your favorite bands is soon playing a gig near your city!).
</li>
</ul>
As you can see, most things are work under-the-hood this year, with little UI work. That's good for me because I'm no design expert. However, there is one area which we could do with some help: the new backgound tasks that will be implemented will need a way to notify the user (i.e. SongKick: when a new gig is discovered; AcoustID: when new/better metadata is found). In this respect, maybe Hylke Bons (our chief designer for the <a href="knocte.blogspot.com/2014/05/belated-gnome-net-hackfest-post.html">last Gnome .NET hackfest</a>) and Garrett LeSage (assistance that Hylke proposed now to avoid getting himself swamped!) will be able to help! (BTW, if you're interested in participating in this year's Gnome .NET hackfest, message <a href="https://twitter.com/gnomeuser">David Nielsen</a>, which started to plan it recently.)<br />
<br />
I'm very happy about starting the mentoring of these projects this
year. And I'm specially jealous about my students... I became mentor of
GSoC myself without being GSoC student first! (Maybe I should switch roles
in the future?)<br />
<br />
Wish them good luck! It was actually just yesterday when GSoC really started! (gotta love mondays)
<p>
<strong>UPDATE</strong>: Fixed embarrassing typo: I meant AcoustID, not OpenID!
</p>knoctehttp://www.blogger.com/profile/00267496347097861887noreply@blogger.com1tag:blogger.com,1999:blog-13199395.post-21292509896493490602014-05-05T12:41:00.001+02:002014-05-21T20:56:30.929+02:00GSoC 2013 with GnomeSo let this be a belated report about previous GSoC! sorry for the delay.<br />
<br />
In summer 2013, Tomasz Maczynski worked on Banshee as a GSoC student, and he did great work! He developed a SongKick extension, and a FanArt.tv one. Both were worked on in the <a href="https://gitorious.org/banshee-community-extensions/">banshee-community-extensions repository</a>. They work very well but there are a few downsides about this work, which we didn't have time to fix:
<br />
<ul>
<li>The FanArt.TV extension depended on some Banshee API that hasn't been added yet to mainline. The patch to add it lived in bugzilla for a while, in a bug about a feature request to have images in the artist list. The reason for not committing the patch even if I had already reviewed it was because I was wary about it, since it allowed FanArt.TV to hook its ArtistList widget, but wouldn't be really extension friendly. What I mean is that if there was other extension that wanted to also attach a different ArtistList, it would conflict with FanArt extension when enabled at the same time. The ideal thing would be to expose this functionality as an extension point, so that if more than one extension attached a new kind of ArtistList widget, the user could switch between the two from the UI when both extensions were enabled. When I mentioned this in the bug, awesome Banshee-extension developer Frank Ziegler jumped in and created the extension interface necessary for this. I've been reviewing the patches in the last days (couldn't do it before because I really wanted to release 2.9.1 and 2.6.2 versions before landing this work) and I'll likely commit them this week.</li>
</ul>
<ul>
<li>The FanART.TV extension uses <a href="https://git.gnome.org/browse/hyena">Hyena</a>'s ListView widget to show images. This is the main widget that Banshee uses for showing the tracks in the main view. It's a great custom widget because it allows very fast rendering of data coming from an SQLite database, but it wasn't optimized for rendering images. The main disadvantage of it is in the case that images have different heights, because the ListView will just allocate a height for each row equal to the tallest of the images used. This means that the widget shown could be a bit ugly if you have many artists in your library and some of them have very differently sized images. Tomasz worked on this a bit, but couldn't finish it because of lack of time (we have a WIP patch). But fortunately this will be fixed this summer!</li>
</ul>
<ul>
<li>Both SongKick and FanArt.TV don't implement caching yet. This is not only important to save bandwidth from the point of view of the client, but also from the point of view of the server! (We could even violate their ToS if we didn't implement this, IIRC.) Fortunately this will be fixed this summer!</li>
</ul>
<ul>
<li>SongKick extension provides several ways to discover gigs: searching by city, by artist, etc. It even suggests you artists extracted from your library that composed songs which you marked with a high rating! But IMO this is not enough, SongKick extension should even be smarter and query ahead of time looking for your favorite artists *and* near your area (doing the latter via GeoLocation). Fortunately this will be fixed this summer! (and we will use Gnome infrastructure for it)</li>
</ul>
<br />
That is all folks! Stay tuned for the next blog post, which will explain the plan for GSoC 2014 (this year I get to mentor three students!).knoctehttp://www.blogger.com/profile/00267496347097861887noreply@blogger.com0tag:blogger.com,1999:blog-13199395.post-26625462718241907512014-05-04T00:18:00.000+02:002014-05-05T16:53:55.708+02:00Belated Gnome .NET Hackfest postOMG, I should feel embarrassed about posting such a belated blog post (yes, the hackfest was more than 6 months ago), but oh well, at least I can say I have enough excuses:<br />
<ul>
<li>I got my house refurbished in the last months, which has been such a long planning endeavour, and a real stressful PITA while it was being done.</li>
<li>Before the above started, and after it was finished, I had to move, so that's 2 moves! (I hate moving)</li>
<li>I've been kind of busy in regards to Gnome-related contributions: we released <a href="http://banshee.fm/2014/02/18/banshee-2-6-2-released/">Banshee 2.6.2</a>, <a href="http://cgit.freedesktop.org/gstreamer/gstreamer-sharp/tree/NEWS">GStreamer-Sharp 0.99.0</a>, <a href="http://banshee.fm/2014/03/18/banshee-2-9-1-released/">Banshee 2.9.1</a>, and a big etcetera (including pre-mentoring for GSoC! more about that in a subsequent post).</li>
</ul>
So this doesn't leave enough room for blogging, which is a necessary but a less appealing task. But I have to say it somewhere: the hackfest that David Nielsen organized was amazing, the best kind I have attended so far, as I came to meet for the first time some awesome hackers such as him, and:<br />
<ul>
<li>Hylke Bons, sparkleshare creator, Red Hat designer.</li>
<li>Mirco Bauer, smuxi creator and debian developer (mono packager).</li>
<li>Jo Shields, debian developer (mono packager), Collabora sysadmin. </li>
<li>Robert Nordan, Pinta contributor.</li>
<li>Jared Jennings, Tomboy contributor.</li>
<li>Stephen Shaw, ex-Novell coworker (build developer), and currently at Xamarin. (Yes, I was Stephen's team-mate when at Novell, but had never met him in person!)</li>
<li>Stefan Hammer, Tomboy contributor and hackfest local-host.</li>
<li>Timo Dörr, Tomboy and Banshee contributor, GSoC student. </li>
<li><a href="http://www.dllimport.eu/">Stephan Sundermann</a>, GSoC student for GStreamerSharp and Bindinator.</li>
</ul>
<br />
(BTW I didn't include the awesome Bertrand Lorentz, fellow
Banshee co-maintainer and GtkSharp gatekeeper, in the list,
because I had already met him before, it wasn't my first time!). <br />
<br />
And it was with the latter Stephan (not Stefan) the one I ended up spending more time with, because we decided to work on the new GStreamerSharp bindings since the 2nd day of the hackfest (the 1st day I mainly worked with Bertrand to release Banshee 2.9.0, our first Gtk3 compatible release, which he already blogged about).<br />
<br />
So what was special about this work?<br />
<ul>
<li>GStreamerSharp 0.10.x releases were not compatible with GStreamer 1.x releases, so this had to be fixed soon. However, much of the architecture of this old version of the bindings used many manually crafted binding code.</li>
<li>Stephan, by using the new Bindinator (a GObjectIntrospection metadata parser that outputs GAPI metadata, that allows generating .NET bindings, created by Andreia Gaita) in his GSoC, created a better foundation for the new bindings.</li>
<li>He targetted GI metadata from GStreamer 1.0 and 1.2 versions (the jump from 0.10 to 1.0 was a big and not easy leap, since lots of APIs were modified and deprecated).</li>
<li>We needed to polish them enough to make Banshee be able to consume them without glitches.</li>
</ul>
"Polish" sounds like easy work, but it wasn't. We fixed lots of crashes, and we contributed fixes to GObject-Introspection metadata upstream. And we proposed big patches for the <a href="https://github.com/mono/gtk-sharp/tree/master/generator">gtk-sharp GAPI generator</a>. And of course we updated our Banshee <a href="https://git.gnome.org/browse/banshee/tree/src/Backends/Banshee.GStreamerSharp">managed playback backend</a> to the new GStreamerSharp API.<br />
<br />
Main kudos should go to him though. I mainly added Banshee expertise, gtk-sharp contributing expertise, and lots of motivation (or at least I thought).<br />
<br />
We had a big success: a Banshee playing audio with GStreamerSharp. Unfortunately video playback was freezing. But some months later after the hackfest we fixed it, and we released first GStreamerSharp 1.0 preview, which we called "<a href="http://cgit.freedesktop.org/gstreamer/gstreamer-sharp/tag/?id=0.99.0">0.99.0</a>", and we released the first Banshee release that depends on this work: <a href="http://banshee.fm/2014/03/18/banshee-2-9-1-released/">2.9.1</a>.<br />
<br />
And it was my first time in Austria (and in Vienna). Overall a great experience, and I need to mention our awesome sponsors:<br />
<br />
<div class="wp-caption alignnone" style="width: 223px;">
<a href="http://www.gnome.org/"><img alt="" height="213" src="https://wiki.gnome.org/Travel/Policy?action=AttachFile&do=get&target=sponsored-badge-simple.png" width="213" /></a><br />
<div class="wp-caption-text">
The GNOME Foundation, providers of the GNOME desktop</div>
</div>
<br />
<div class="wp-caption alignnone" style="width: 530px;">
<a href="http://www.univie.ac.at/en/"><img alt="" class=" " src="http://public.univie.ac.at/fileadmin/user_upload/public/logo/UNI-Logo_RGB_01.jpg" height="142" width="520" /></a><br />
<div class="wp-caption-text">
The University of Vienna and the Institute for Theoretical Chemistry, our venue sponsors</div>
</div>
<div a="" class="wp-caption alignnone" gt="" href="http://www.collabora.com/" style="width: 364px;">
<img alt="" src="http://www.collabora.com/logos/collabora-logo-small.png" height="116" width="354" /></div>
<br />
<div class="wp-caption-text">
Collabora Ltd, Open Source Consulting</div>
<div class="wp-caption alignnone" style="width: 624px;">
<a href="http://www.norkart.no/"><img alt="" class=" " height="220" src="https://dl.dropboxusercontent.com/u/741277/NORKART.jpg" width="614" /></a><br />
<div class="wp-caption-text">
Norkart AS, Norway’s premier supplier of Geographic Information Systems and related consulting<br />
<br />
<div class="wp-caption alignnone" style="width: 211px;">
<a href="http://www.novacoast.com/"><img alt="" height="55" src="https://www.novacoast.com/wp-content/uploads/2011/08/novacoast-logo-trans-200px.png" width="201" /></a><br />
<div class="wp-caption-text">
Novacoast IT, Professional Services and Product Development</div>
</div>
<br />
<a href="http://www.schottenpoint.at/"><img alt="" src="http://homepage.univie.ac.at/s.hammer/files/schottenpoint.jpg" height="97" width="452" /></a></div>
</div>
<div class="wp-caption alignnone" style="width: 462px;">
<div class="wp-caption-text">
Hotel Schottenpoint, our hotel partner</div>
</div>
knoctehttp://www.blogger.com/profile/00267496347097861887noreply@blogger.com0tag:blogger.com,1999:blog-13199395.post-70476429791203473542013-10-28T18:10:00.001+01:002013-11-28T20:35:07.936+01:00Launchpad pull request So you want to do a pull-request to a LaunchPad project?<br />
Stop right there! The content of this blog post has been migrated to <a href="http://stackoverflow.com/questions/20273368/launchpad-pull-request/20273376">this question in stackoverflow</a>. Move on, nothing to see here.knoctehttp://www.blogger.com/profile/00267496347097861887noreply@blogger.com0tag:blogger.com,1999:blog-13199395.post-34052943778257991292013-06-14T11:29:00.000+02:002016-10-03T15:36:43.006+02:00Modernizing blam's autotools (or shaving the yak to move out from GoogleReader...)Before focusing my spare time completely on the GSoC* (as I have mentoring responsibilities this year \o/ ), I wanted to solve a problem that cannot wait after July...<br />
<br />
Yes, I've been victim of Google's cuts too... And I was wondering, where should I move? Feedly? ThingyBob? Well, I shouldn't make the same mistake twice, right?<br />
<br />
Actually, some time ago I was using a desktop app to avoid relying on software that I cannot control (yes, vendor lock-in, the most important thing that open source tries to solve, right?): Thunderbird. But somehow the convenience of a web app (that I can access from any computer) and the hassle of using my mail client for RSS reading made me move to the web.<br />
<br />
I should be able to find a replacement that no company or individual can "take down", and which feels less clunky than Thunderbird for reading RSS. So, enter <a href="https://git.gnome.org/browse/blam">blam</a> (in the future I'll figure out how to sync its state between computers, maybe using SparkleShare?, to achieve that same convenience that a web-app provides), that Gnome app that has strangely managed to not catch my eye until now...<br />
<br />
Well, maybe because if I install it from debian sid and I try to import my very first RSS feed from my GoogleReader list it doesn't work? Well, apparently it is a bug that is already fixed upstream, thanks to Carlos which has modernized the way that the program deals with XML and serialization.<br />
<br />
Then I went ahead and tried to compile master myself... and guess what, the autogen.sh execution fails. Here the yak shaving begins, when I feel like this when trying to fix the autotools stuff:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://i0.kym-cdn.com/photos/images/original/000/234/765/b7e.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="238" src="http://i0.kym-cdn.com/photos/images/original/000/234/765/b7e.jpg" width="320" /></a></div>
<br />
Fortunately, after some tinkering (and some copy&paste from banshee's build scripts), I managed to fix the problem, and also modernized a bit some things (like using the brand new ".ac" extension instead of ".in" for the configure script, or using properly the AC_INIT and AM_AUTOMAKE_INIT macros,...).<br />
<br />
Anyway, the real thing to highlight here is that while I was fixing this stuff and pushing to the repository...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.roflcat.com/images/cats/I_Don_t_Know_What_I_m_Looking_At.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://www.roflcat.com/images/cats/I_Don_t_Know_What_I_m_Looking_At.jpg" width="215" /></a></div>
<br />
... I saw some really good stuff committed by Carlos: <a href="https://git.gnome.org/browse/blam/commit/?id=37d85d36c84ee285ffc2096b1e4fb5207aca1445">using the new .NET 4.5 C# async patterns to get rid of those ugly callbacks</a>! Kudos to him.<br />
<br />
And if you're willing to help more with our autotools housekeeping, please do, I still feel this <a href="https://git.gnome.org/browse/blam/tree/autogen.sh">autogen.sh</a> is way too long and needs some ironing.<br />
<br />
* And if you're wondering what's up with GSoC (aka Google Summer of Code):<br />
<br />
<ul>
<li>I had Nicholas Little lined up to work on Rygel+Banshee integration, but sadly he couldn't apply due to work commitments (hopefully he will still work with me on it in his spare time).</li>
<li>I had Rashid Khan lined up to work on Cydin+Banshee integration, but sadly there were not enough GSoC spots for him :( (fortuntately he told me he still wanted to work on it with me in his spare time).</li>
<li>I had Tomasz Maczyński lined up to work on <b>Banshee integration with more REST APIs</b>, and fortunately he was selected! So expect some nice FanArt.TV and SongKick plugins soon!</li>
</ul>
<br />
<br />knoctehttp://www.blogger.com/profile/00267496347097861887noreply@blogger.com1tag:blogger.com,1999:blog-13199395.post-37614219292679667672012-05-01T21:39:00.005+02:002013-06-24T11:38:22.414+02:00Apple and LastFM can still receive open source loveHere we are in an era in which ad-based services (like LastFM) and closed-products (like Apple ones) are on the rise.<br />
<br />
But contradicting what you may think, open source is still friendly to them.<br />
<br />
If you have an Apple device supported by libgpod* and you're an avid user of LastFM's scrobbling feature, you can today configure Banshee to send all the songs that were played on your device to your LastFM account the next time you connect your device while you have Banshee running.<br />
<br />
Pretty handy, especially if you own a device that doesn't have internet connection these days (something definitely not on the rise). You should thank our new Banshee developer Phil Trimble for doing an awesome job on implementing this <a href="https://bugzilla.gnome.org/show_bug.cgi?id=536389">feature</a> (and on resisting to not sending me to hell when I made the patch reviews...).<br />
<br />
The next version of Banshee, in the 2.5.x series, should include this feature. Until then, hold on to your seats! (or <a href="http://banshee.fm/contribute/write-code/">compile it</a> yourself from <a href="http://git.gnome.org/browse/banshee/tree/">master</a> ;) )<br />
<br />
* Beware: not the last generation ones! you would have to donate to libgpod project if you want those recognised.<br />
<br />
PS: If you're a developer and want to extend this feature to other kind of devices, you should just implement the interface IBatchScrobblerSource in the corresponding Source class of your device. If you want to make it scrobble to a different service than LastFM, just create a Banshee addin (<a href="http://git.gnome.org/browse/banshee/tree/src/Extensions/Banshee.Sample">simple sample here</a>) that subscribes to the ServiceManager.SourceManager.SourceAdded event to then later subscribe to the IBatchScrobbleSource.ReadyToScrobble event from it, to later make the corresponding HttpWebRequests to the scrobbling service.knoctehttp://www.blogger.com/profile/00267496347097861887noreply@blogger.com0tag:blogger.com,1999:blog-13199395.post-3674159897648737832011-05-08T17:09:00.006+02:002014-05-03T18:29:41.012+02:00#gtk#The title of this post is the name of the <a href="irc://irc.gnome.org/#gtk#">GimpNet IRC channel</a> that some people are recently using to talk about the <a href="http://www.mono-project.com/GtkSharp">.NET bindings of gtk+</a>.<br />
<br />
I had never seen this channel with people in it at all in the past. I guess the recent interest comes from the fact that <a href="http://github.com/mono/gtk-sharp">gtk-sharp master</a> is already targeting Gtk+ 3.x API and some people are starting to use it to port things.<br />
<br />
One example is <a href="http://live.gnome.org/Hyena">Hyena</a>, the awesome library that Gnome projects F-Spot, Banshee and PdfMod use (am I missing some other?). I started the port some weeks ago and all I have received is positive feedback, encouragement, and also a lot of help! For example Olivier Dufour (which I guess he will be recently known as one of the superstars that brought DVD support to Banshee -- work finished but still unmerged) who helped with accessibility and warnings, and Mike Kestner (father/maintainer of all these GAPI-based *-sharp bindings) which helped reviewing my patches to the binding and fixing other issues I reported (and of course for making huge efforts, in the first place, to have the bindings ready for the 3.x cycle, with even some GObject-Introspection experimentation, which I guess is still in the early stages and not enabled yet).<br />
<br />
Stay tuned for the progress! (as new contributors have expressed interest in helping out soon). <a href="http://git.gnome.org/browse/hyena/log/?h=gtk3">Branches</a> are being created so you can join the effort if you feel like (<a href="https://bugzilla.gnome.org/buglist.cgi?type0-0-4=substring;short_desc=gtk3;field0-0-0=product;type0-0-1=substring;field0-0-1=component;field0-0-4=longdesc;value0-0-2=gtk3;query_format=advanced;type0-0-3=substring;value0-0-3=gtk3;field0-0-3=status_whiteboard;value0-0-4=gtk3;short_desc_type=allwordssubstr;field0-0-2=short_desc;value0-0-1=gtk3;type0-0-0=substring;value0-0-0=gtk3;product=banshee;product=f-spot;product=hyena;product=pdfmod;type0-0-2=substring">bugs in bugzilla too</a>, to track what's pending).knoctehttp://www.blogger.com/profile/00267496347097861887noreply@blogger.com2tag:blogger.com,1999:blog-13199395.post-88636386048437604612011-04-11T18:50:00.004+02:002011-04-11T19:03:26.769+02:00Calling hackers who care about Android+BansheeIf you care about the neat feature about synchronizing metadata to your device using Banshee, and you have an Android device, you may be interested to hear that I created a patch for it, and it was recently reviewed requesting some changes <a href="https://bugzilla.gnome.org/show_bug.cgi?id=589196">here</a>.<br /><br />Unfortunately my Android phone broke completely (don't ask me the details...) so I cannot work on the patch anymore. Anyone wants to continue the work?<br /><br />If yes, go ahead and ask me anything you want, I'm usually in <a href="irc://irc.gnome.org/banshee">irc://irc.gnome.org/banshee</a> with the "knocte" nickname, or you could also ask the question on the channel if I'm not there, there are usually awesome contributors there that will try to help. If you haven't ever coded for banshee, check the <a href="http://banshee.fm/contribute/write-code/">Contributing</a> page first.<br /><br />BTW, kudos to all the people involved in the Banshee v.2.0 release!knoctehttp://www.blogger.com/profile/00267496347097861887noreply@blogger.com0tag:blogger.com,1999:blog-13199395.post-37446301663638005452011-04-10T23:10:00.004+02:002011-04-11T12:55:56.150+02:00WTF reductionMy first <a href="https://github.com/jagregory/fluent-nhibernate/pull/12">patch</a> to FluentNHibernate was just merged upstream!<br /><br />What it basically does is a bit of what I call WTF reduction: you will no longer get a confusing message like "For property 'Foo' expected 'Bar' of type 'Bar' but got 'Bar' of type 'Bar'" when unit testing your entities' properties.<br /><br />AFAIK the next release will include this, and will be the first one to link to the new version of NHibernate, 3.0, which I've found that works very well.knoctehttp://www.blogger.com/profile/00267496347097861887noreply@blogger.com0tag:blogger.com,1999:blog-13199395.post-29974382588554270962011-03-27T16:49:00.003+02:002011-03-27T16:55:05.430+02:00RT: MEF vs MonoAddinsJust re-posting in my blog an interesting <a href="http://groups.google.com/group/mono-addins/browse_thread/thread/ce31aac5c79414a1#msg_976d08e8e357fe6e">email</a> that was sent to the <a href="http://www.mono-project.com/Mono.Addins">MonoAddins</a> <a href="http://groups.google.com/group/mono-addins">list</a>, comparing these two Addin frameworks:<br /><br />> Can you give a short summary on why you replaced MEF with Mono.Addins?<br /><br /><em>Basically it came down to maturity. Mono.Addins seems far more stable and mature than MEF. The MEF documentation was lacking, inconsistent and out of date in a lot of places. But all that could be worked around, and for the first few internal versions of our app, MEF was servicing us just fine.<br /><br />Then our addins became a bit more complex. We needed to package them up with multiple files, ideally distribute them as an archive, host them online in a plugin exchange, allow them to be discovered and installed easily. Essentially this page covers features in Mono.Addins that made us switch rather than implementing a lot of the same things using MEF ourselves:<br /><br /><a href="http://monoaddins.codeplex.com/wikipage?title=Creating%20and%20Managing%20Add-in%20Packages&referringTitle=Programming%20Guide">http://monoaddins.codeplex.com/wikipage?title=Creating%20and%20Managing%20Add-in%20Packages&referringTitle=Programming%20Guide</a><br /><br />At the time as well MEF had issues on Mono on linux. This might have been a problem with how we were using it, but it just turned out easier to plonk Mono.Addins in instead. Was an easy migration and has a lot more power and features straight out of the box (and it worked on Linux).<br /><br />Your millage may vary, and your needs are probably different. MEF might be an awesome tool for your requirements. It is a little simpler to get up and running and requires less engineering to support it (which was one of the reasons we used it first off).<br /><br />Hope that helps,<br /><br />Michael</em>knoctehttp://www.blogger.com/profile/00267496347097861887noreply@blogger.com1tag:blogger.com,1999:blog-13199395.post-65233534049551694402010-09-08T18:26:00.003+02:002012-08-28T22:35:10.889+02:00Version Tolerant Serialization with Mono<object width="353" height="132"><embed src="http://www.goear.com/files/external.swf?file=3ad587d" type="application/x-shockwave-flash" wmode="transparent" quality="high" width="353" height="132"></embed></object><br />(Zoot Woman - Lonely By Your Syde)<br /><br />During the last months I've kept working {with|on} Mono, but not working for Novell anymore.<br /><br />Today I'm proud to blog about a bit of work I've done <strong>on</strong> Mono towards a better Binary Serialization experience:<br /><ul><li><strong>mono-api-info</strong> command now can output ABI instead of API if you append the flag <strong>--abi</strong>. It has been useful for us in LindenLab while working on binary serialization compatibility between versions (already upstream!, so will be available in Mono v2.8, even with a new man page).<br /><br />If you ever wondered why your .NET code is no longer capable of deserializing some old binary object you had in your servers, instead of fixing the problem in a case-by-case basis, you can now see the whole picture by just diffing the output of mono-api-info --abi from your current and old codebase! A small TODO that I haven't completed yet is to deal with automatic properties (because we still don't use them) so that would be an exercise for the reader!</li><br /><li>Fix for upstream Mono to act as .NET in regards to <a href="http://msdn.microsoft.com/en-us/library/ms229752(VS.80).aspx">Version Tolerant Serialization</a>, a patch to which I have just added a lot more unit tests (soon to be pushed hopefully).<br /><br />You can see the patch of this quite old mono bug <a href="https://bugzilla.novell.com/show_bug.cgi?id=324144">here</a>. Disclaimer: to be honest you will only need the previous --abi tool if you use a Mono version prior this fix, because from my testing VTS in MS.NET works as if every new field had an <a href="http://msdn.microsoft.com/en-us/library/system.runtime.serialization.optionalfieldattribute.aspx">[OptionalField]</a> attached! (At least the BinaryFormatter, the TODO here for the reader is to test the SoapFormatter ;) )</li></ul><br /><br />On a totally unrelated note: kudos to the MonoDevelop team for making such a great releases lately (and fixing the bugs I report so promptly). I've been testing it the last months on Windows and I can say it's a great experience to see your favorite IDE working cross-platform and making you not depend on VS anymore if you need to work on Windows from time to time (I know the Express versions are free, and are great! but they do not support plugins :( ). BTW, I've been lately experimenting with the C language support in this IDE, and have had some problems, but the real culprit seems to lay behind some wierd behaviour of my <strong>gdb</strong> in opensuse. Taking advantage that I'm in opensuse planet, can I do a couple of lazyweb requests?:<br /><br />a) If you're quite familiar with gdb, can you take a look at these 2 bugs in case it rings any bell for you? <a href="https://bugzilla.novell.com/show_bug.cgi?id=588175">BNC#588175</a>, <a href="https://bugzilla.novell.com/show_bug.cgi?id=459274">BNC#459274</a><br /><br />b) Can you try to reproduce those bugs in openSUSE 11.3? (I haven't migrated yet from 11.2 because I fear about the HALlessness of it :) )<br /><br />PS: Wondered why the video on the top? Well, I like the trend that some people have about posting random photos in their blog posts even when they may be completely unrelated, but in my case I love music so I figured this would suit better. Of course I would rather embed a WebM video or, even better, something that can preview a song (without video) in a "normally-lower-quality-than-what-you-can-buy" way, so if you have any hints, those are welcome! I especially mention the latter in this case because the Album version of the song above is much much better (synth pop FTW!).<br /><br /><strong>UPDATE 28-AUG-2012</strong>: Found a video-less alternative to youtube for embedding songs! It is GoEar.knoctehttp://www.blogger.com/profile/00267496347097861887noreply@blogger.com0tag:blogger.com,1999:blog-13199395.post-45263891341763320572010-07-06T16:10:00.002+02:002010-07-06T16:19:05.810+02:00Mono? What?Really sad to read this:<br /><br /><a href="http://www.aaronstannard.com/post/2010/07/03/NET-Culture-Shock-Why-NET-Adoption-Lags-Among-Startups.aspx">.NET Culture Shock: Why .NET Adoption Lags Among Startups</a><br /><br />Especially sad to find that Mono is not mentioned in the article.<br /><br />Especially super sad to find that Mono <strong>is</strong> mentioned in the comments, but in a negative way.<br /><br />Hey Mono community, help me reply all this nonsense.knoctehttp://www.blogger.com/profile/00267496347097861887noreply@blogger.com3tag:blogger.com,1999:blog-13199395.post-29832869788223247182009-06-01T00:47:00.006+02:002009-06-08T16:08:04.787+02:00It's all about synchronizationIt's been a while since I <a href="http://knocte.blogspot.com/2006/06/ifolder-no-tan-bonito-como-lo-pintan.html">first blogged</a> about iFolder. At that time it was a bit unstable and I didn't have a good experience overall with it. Unfortunately the development of new features stopped, but there were a lot of fixes to improve its stability, which made into the version 3.7. Unfortunately again, this version was not released on the open, but now Novell has <a href="">rectified</a> and iFolder is gaining momentum again (especially because it's the only really open source alternative to DropBox or UbuntuOne!).<br /><br />Who could have imagined at that time, that 3 years later I would not only be working for Novell, but also be able to contribute to it at normal work hours! Yes, this is <a href="http://en.wikipedia.org/wiki/ITO">ITO</a>, and our team spent a week hacking on other projects. In my case, I worked with the awesome guys <a href="http://www.decriptor.com/">Stephen Shaw</a> and <a href="http://blog.carrion.ws/">Mario Carrión</a>. We managed to create an iFolder appliance for the server based on openSUSE 11.1, very easy to install thanks to SUSE Studio and to a new OBS repository where we packaged a preview of Mono 2.4.2 and some fixes needed to make it work.<br /><br />We even created some demos! (Sorry for the quality of the sound, we had some problems when recording them)<br /><br /><a href="http://www.mono-a11y.org/videos/ito-2009/iFolder1.ogv">The first one</a>: setting up the appliance.<br /><a href="http://www.mono-a11y.org/videos/ito-2009/iFolder2.ogv">The second one</a>: creating a user and using the Linux iFolder client.<br /><br />Now, the next two videos are intended to show the second part of our work on that innovation week: new features.<br /><br /><a href="http://www.mono-a11y.org/videos/ito-2009/iFolder3.ogv">The third one</a>: automatic/immediate local detection of changes, server side trash can.<br /><a href="http://www.mono-a11y.org/videos/ito-2009/iFolder4.ogv">The fourth one</a>: automatic/immediate remote synchronization of changes.<br /><br />How cool is that? Unfortunately, the patches still need work and cleanup (help welcome!), but I plan to do it soon and/or on next hack week.<br /><br />Before coming back to hacking on iFolder, I wanted to finish some stuff am working on for Banshee, which is also about synchronization! Look at this <a href="http://bugzilla.gnome.org/show_bug.cgi?id=389550">bug</a> for more details. Yes! bidirectional Rating synchronization, not only from Banshee to the iPod but from the iPod to Banshee. The patch is working fine for me, be sure to give it a go and provide some feedback. Thanks!<br /><br />Another thing I have on my TODO list is integrate some old mono-based GPL ed2k library into monsoon, now that it's getting MonoAddins support! (Lately there's been many people <a href="http://knocte.blogspot.com/2005/09/cierran-el-ncleo-del-cliente-p2p.html">asking me</a> for the source code.) And now that I talk about monotorrent, how cool would be to make iFolder work with this awesome library??<br /><br />PS: Hello PlanetSUSE! First post. Hola Planeta GnomeHispano ;)<br /><br /><strong>UPDATE Jun-08-2009</strong>: It seems someone <a href="http://lists.ximian.com/pipermail/mono-list/2009-June/042658.html">wants to resurrect</a> the lphant kernel as well, but using WPF! (WTF?): <a href="http://sourceforge.net/projects/hathi/">http://sourceforge.net/projects/hathi/</a>.knoctehttp://www.blogger.com/profile/00267496347097861887noreply@blogger.com6tag:blogger.com,1999:blog-13199395.post-17012079510638284342009-03-30T23:59:00.001+02:002009-03-31T04:09:44.776+02:00I14Y happensSome years ago, I started to get familiarized with abbreviations like 'l10n', 'i18n' when I started contributing to the translation efforts of Mozilla & Firefox under the <a href="http://www.proyectonave.es/">NAVE Project</a>.<br /><br />Some months later I came to know the new term 'a11y', and I started to see it in a lot of places. By that time, I only associated it with the web development world. Terms like "Unobstrusive JavaScript" were very related to it (and I even created an "AJAXy" library called <a href="http://amuse.berlios.de/">AMUSE</a> for this purpose).<br /><br />Now let's talk about the next one: I14Y. This concept is present when things like this happen: "I can open an (Microsoft's)OpenXML file with some (Novell's) edition of (Sun's)OpenOffice". Or even more weird things: "I can manage my (Apple's)IPod thanks to a (Microsoft's).NET-powered application called (Novell's)Banshee". Or even more awesome ones: "I can use (Sun?'s)Orca screen reader to control my (Microsoft's)Windows.Forms-powered applications in my (Novell's)SUSE Linux Box!".<br /><br />So, yeah, we made <a href="http://www.mono-project.com/Accessibility:_Release_Notes_1.0">it</a>! Along with the awesome releases of <a href="http://www.mono-project.com/news/archive/2009/Mar-30.html">Mono 2.4 and MonoDevelop 2.0</a>.<br /><br />Now, guess what's the word?knoctehttp://www.blogger.com/profile/00267496347097861887noreply@blogger.com1tag:blogger.com,1999:blog-13199395.post-19351825615015687612008-12-26T22:10:00.006+01:002009-02-16T21:36:02.671+01:00On open source software and technical support: the realityI was curious about some discussion threads posted in <a href="http://www.linkedin.com">LinkedIn</a>'s <a href="http://www.linkedin.com/groups?home=&gid=43875&trk=anet_ug_hm">Open Source group</a>. <a href="http://www.linkedin.com/groupAnswers?viewQuestionAndAnswers=&gid=43875&discussionID=805053&goback=%2Eanh_43875">One</a> had the following content:<br /><br /><em><br />Is 2009 The year of "supported open source" Do you agree or disagree ?<br /><br />I have to admit having worked on both sides of the fence the biggest trend we are now experiencing on web related project requirements is the shift to "supported open source technology"...<br /><br />The days of 6 figure plus licence fees are now over "phew" our clients thankfully quote...<br /><br />Old versus New<br /><br />Interwoven / Vignette versus Alfresco / MySource Matrix ?<br />Salesforce versus Sugar CRM ?<br />Documentum / Trim versus Alfresco / Sharepoint Integrated CMS's<br /><br />What are your thoughts fellow CM Professionals ? Don't just take my word for it... http://cmswatch.com/Feature/189<br /></em><br /><br />I read some interesting opinions below, such as this one from Tony Wasserman:<br /><em><br /> To me, the issue here is adoption and use of open source software by companies and governments for activities that are essential to their businesses. One of the key corporate criteria for that type of software acquisition is availability of long-term 24x7 support, including service level agreements for problem resolution. These CIO's and other decision-makers just don't accept the idea that they can post their issues on a forum and that someone will post a reply. They want a toll-free telephone number to call with the assurance that someone knowledgeable will answer and address the issue.<br /><br />For example, while small companies and the technically knowledgeable will download and install the Drupal CMS (and its underlying components), the corporate buyer, by contrast, will go to Acquia, gladly paying for support. As a better example, many of the installations of open source software in corporate environments are being done through consultants and system integrators, such as Wipro, Infosys, Accenture, and IBM.<br /><br />So now the next question is whether the demand for open source software will increase in 2009. For that, I would give a qualified "yes". Startups have been building their companies on open source software for most of this decade, and will continue to do so, but they are not spending a lot of money on support, consulting, and training services. Developers in companies of all sizes have also long used open source software packages and libraries, including Eclipse, NetBeans, JBoss, MySQL, and hundreds of others, again without much money changing hands.<br /><br />For enterprise applications, companies have already made substantial investments in existing proprietary software from Oracle, SAP, Microsoft, and other vendors, so it is hard for them to justify replacing it. The enterprise opportunities for open source come with new applications, and with growing companies that need these applications.<br /><br />So I think that there will be growing revenue in 2009 for the system integrators providing open source support and services, as well as some money for the vendors of commercialized open source products, such as Zenoss, Groundwork, and other infrastructure packages. I think that the growth for the application packages is probably a little further out, though I would make an exception for OpenOffice.org , which has already seen a lot of acceptance.<br /></em><br /><br />Or this one from Glenn A. Curry:<br /><br /><em><br />Tony brings up an interesting issue. That of access to tech support. But our experience has been that the tech support available from commercial software manufacturers is in many cases worse than nonexistent. Not all have 24x7. And even if there is someone that answers the phone, there typically is little value in talking to them.<br /><br />In trying to resolve software issues for our customers, we are most often given answers like "just keep reinstalling it till it works". Or they want security settings reduced because their interface is sloppy. Or they just flat give bad answers. The extremely poor level of phone support so often found is incredible. The battle required to move up the chain to someone that actually has a clue is frustrating and costly to the customer as they have to pay for our time while on the phone.<br /><br />e.g. we spent days dealing with Sage on a Peachtree upgrade. Their solution (besides the before mentioned "just keep reinstalling it, that usually makes it work eventually") was to run as administrator all the time to get around a security problem. Eventually we found the problem and solved it with some port mapping. It was a common problem based on discussions on techie sites. AFAWK it is still a problem for them. We sure are not going to tell them how to fix THEIR bad software design for free. And noe one there had a clue.<br /><br />And I won't even begin to list the massive Microsoft tech support nightmares.<br /><br />Just because a company claims 24x7 tech support, does not mean it has an actual usable value.<br /></em><br /><br />So, without trying to be devil's attorney, I gave my opinion:<br /><br /><em><br />I think Tony and Glenn raise good points about support, but I would like to arise a third point, that maybe contrasts with them. The issue is not about support itself, but about what does "support" mean in open source software:<br /><br />1) Yes, in open source, there's no monopoly about technical support, and this is always a good thing, except for the cases in which it can be seen wrongly as bad quality, because:<br /> a) It may happen that there's no company behind an open source project, just one or some developers, and it's a bit awkward to ask them for support if they're not professionally gathered in some way. Besides, if the developer base is so small, it's going to be difficult to find another company which gives you support if they don't know much about the product.<br /> b) It may happen that the developer-base is spread around many companies (for example: OpenOffice, the Linux kernel), so the company that needs support is normally confused as to which one is the best one to request support. This is awkward to a company which normally considers a product to come from "just one company".<br /><br />2) Propietary software may mean a monopoly in regards to technical support but, let's face it: many incompetent people working inside companies just prefer some provider to blame if something goes wrong: "we're stuck in this issue because Oracle (or put you're favorite propietary software company here) technical support sucks", and it's not their fault anymore. If they had chosen an open source software solution, they may be accused of:<br /> a) Not choosing the best provider for technical support.<br /> b) Not fixing the issue themselves, since, if you have the code, it's just a matter of time to solve it, right?<br /><br />Well, just trying to be realistic. Of course I advocate open source (I work on it on a daily basis), but just wanted to give some clues about why it's not getting the success it should have.<br /></em><br /><br />In general, the (2) point and (2a) in particular, is very similar to the reason why still incompetent but huge companies survive on the market: I've heard many cases of people just buying Oracle or Accenture because they're the most expensive. If all goes wrong, it's impossible they would be accused of selecting the wrong provider if they selected the most expensive one, right?<br /><br /><strong>UPDATE 16-FEB-2008</strong>: Even though the above given problems about choosing open source solutions, here's a nice guide to try to overcome them: <a href="http://www.freesoftwaremagazine.com/articles/convince_management/">Convincing Management To Approve Free Software</a>.knoctehttp://www.blogger.com/profile/00267496347097861887noreply@blogger.com0tag:blogger.com,1999:blog-13199395.post-44394024291792376812008-09-07T22:22:00.000+02:002008-09-08T02:38:41.424+02:00HackweeksI'm going to give a brief summary of what I've done in the past weeks (and specially previous week (last one in August), sponsored by Novell as <strong>The Hackweek</strong> - a form of ITO, in which you can hack at working hours and not only spare time!<br /><br />I was not so lucky as most of my teammates, who spent the week on the wonderful offices (as they say) of Novell Utah. Maybe if I was in the states already... but well, I had recently an interview in the US Embassy which was the last step of my visa process, so I hope that at least I can make it for the Gnome Boston Summit!<br /><br />So, firstly I thought of dedicating my week to <a href="http://idea.opensuse.org/content/ideas/party-extension-for-banshee-youtubeflash-streaming-mixed-with-current-music-in-the-user-s-library">this task</a> that I submitted to the ideas website, but in the end realized it would be a ton of work to complete without help, and nobody joined me so I decided to learn to use <a href="http://en.opensuse.org/Build_Service">OpenSuseBuildService</a> in order to <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=369200">package Bugzilla</a>, <a href="http://www.bugzilla.org/">a pretty complex server side software</a>.<br /><br />Fortunately, I've learnt a lot this week, especially thanks to all the people in <a href="irc://irc.freenode.net/#openSUSE-buildservice">irc://irc.freenode.net/#openSUSE-buildservice</a> (above all, darix) and some people from <a href="http://www.mono-project.com/Accessibility:_Team">my team</a> (<a href="http://gnuray.blogspot.com/">Ray Wang</a> and <a href="http://www.decriptor.com/">Stephen Shaw</a>). I could also contact the author of the RPM file for Fedora (who was formerly working for Red Hat), and he's willing to help on joining efforts, as OBS is cross-distribution.<br /><br />Unfortunately, packaging is a complex task and I didn't finish the package. The <a href="http://lists.opensuse.org/opensuse-buildservice/2008-08/#00204">documentation is a bit incomplete</a> and having past experience in packaging is a plus that I didn't have. It's awesome that inside our <a href="http://www.mono-project.com/Accessibility:_Team">UIA Team</a> we have exclusive resources dedicate to this, because it would be impossible to do from just the developer side.<br /><br />One of the difficulties I found is finding packages I needed. I could find some of them (BTW, using <a href="http://packages.opensuse-community.org/">Webpin</a> is cool for searching on SUSE software repositories, including <a href="http://packman.links2linux.org/">Packman</a>; except for the fact that doesn't enhance one-click-install) but not all so then I'll have to help on providing packages for some CPAN Perl modules, contributing to the <a href="https://build.opensuse.org/project/show?project=devel:languages:perl">devel:languages:perl</a> official repo.<br /><br />On the way of learning OBS, I also filed bugs and feature requests (not only to OBS, but also to Banshee! as I have been using it a lot lately at the same time I hack and I even cooked some small patches):<br /><br />OBS:<br /><a href="https://bugzilla.novell.com/show_bug.cgi?id=420004">Usability issues in project creation page</a><br /><a href="https://bugzilla.novell.com/show_bug.cgi?id=420031">Link to "My projects" fails if no home:login project has been created yet</a><br /><a href="https://bugzilla.novell.com/show_bug.cgi?id=420035">New option for uploading the tarball</a><br /><a href="https://bugzilla.novell.com/show_bug.cgi?id=420840">ChangeLogs parsing is too strict: lines beginning with tab are not recognized, only one date format is accepted</a><br /><a href="https://bugzilla.novell.com/show_bug.cgi?id=421707">OBS should not allow to create a package named "packageand"</a><br /><a href="https://bugzilla.novell.com/show_bug.cgi?id=421709">The spec parser should detect the use of a miscplaced packageand(_:_) keyword</a><br /><br />Banshee:<br /><a href="http://bugzilla.gnome.org/show_bug.cgi?id=546234">No such file or directory errors while importing</a><br /><a href="http://bugzilla.gnome.org/show_bug.cgi?id=549414">Cannot empty some ID3 tag fields</a><br /><a href="http://bugzilla.gnome.org/show_bug.cgi?id=550238">Importing songs without album metadata breaks artist navigation on the iPod</a><br /><a href="http://bugzilla.gnome.org/show_bug.cgi?id=528493">Banshee inserts deduced fictional text on metadata</a><br /><a href="http://bugzilla.gnome.org/show_bug.cgi?id=533218">Should try to locate correct album (and download its cover) in case no album is supplied on metadata</a><br /><br /><br />The patches are quite simple so I hope they get committed soon! Clearly Banshee devs and contributors are doing an amazing work, I'm specially amazed by the <a href="http://jeffreystedfast.blogspot.com/2008/08/banshee-now-playing-animations.html">Moonlight effects</a>, the <a href="http://gburt.blogspot.com/2008/08/muinshee.html">Muinshee</a> front-end and the effort that it seems is being dedicated to bring <a href="http://bugzilla.gnome.org/show_bug.cgi?id=385965">Library Sync & Refresh</a> for 1.4. I wish them all the best success.<br /><br />So let's get back to packaging. Firstly I thought I had found some limitations in OBS or rpm systems because the lack of proper "dual dependency" support. In the past when I installed Bugzilla manually (and updated it to newer versions) I found it a bit hard to do it, specially to deal with DB creation and upgrade. I wanted to make this process easier for the potential rpm user, but without limiting the choice of the DB engine used (as now Bugzilla supports MySQL, PostgreSQL, and Oracle, although the latter was not on my scope). It turns out that it's really hard to apply virtual-provides rules for these cases, as we should stablish more sub-dependencies depending on the db engine you choose, such as perl-DBD-mysql or perl-DBD-Pg, and because it would cause inconsistent situations in case someone in the future replaces his DB-engine with the alternative one (as in theory it should work at the dependencies-level without warning). For references, you may be interested in reading <a href="http://lists.opensuse.org/opensuse-buildservice/2008-09/#00005">the whole thread about it in the BuildService mailing-list</a>, whose last message includes a possible hack to workaround these problems using patterns (although I don't like to use patterns for solving something like this).<br /><br />Even discarding the dream about solving this at a package level, it's difficult to solve it at an app level that wouldn't involve reading manuals. My idea was to modify Bugzilla upstream in order to avoid running manually a local script for its initialization, and replace it with a nice web front-end (even if it's only allowed to be run locally). That would cause problems because normally the webserver user doesn't have enough permissions to create files and the database tables and initial data (I'm sure there's always a solution that also doesn't expose security problems, but it's hard to find it as it's noticed in <a href="">this thread in bugzilla devel newsgroup</a>; so, help is truly welcome).<br /><br />Maybe the easier and fastest solution is a mixture of both worlds, that is, having a web front-end that asks you the initial configuration, and the form submission process just writes it in a local XML and tells the admin to open a console and run a script as root to finish the process. But even with this solution I guess we should need something to detect at runtime (which should be cross distribution) if some package is installed (which also checks the version). I guess there's already some of that capabilities used in the bugzilla's script checksetup.pl, so I would reuse them. However, in case it finds a problem, there's no way for the application to request installation of a package directly to your OS (but I've attended to a PackageKit conference in last Guadec in which I heard something about this possibility in the future!).knoctehttp://www.blogger.com/profile/00267496347097861887noreply@blogger.com1tag:blogger.com,1999:blog-13199395.post-55030286680996207222008-07-08T15:48:00.000+02:002008-07-08T14:36:28.736+02:00Subversion 1.5.0 highlights and some MD hackingSubversion 1.5.0 has been recently released (June the 19th) and I'm surprised with the tons of great stuff it brings. Some highlights:<br /><em><br /><ul><li>A common problem in older versions of Subversion was the way in which svn update handled incoming copies and moves.<br />Consider this scenario: <strong>Harry runs svn move foo bar; svn commit, and meanwhile Sally makes local changes to 'foo', and then runs svn update.</strong> In earlier versions of Subversion, the server would send down a completely new file 'bar', and unversion the file 'foo' (if it had no uncommitted changes, Subversion would remove it entirely.) From Sally's point of view, her changes seem to be lost; the newly added 'bar' file has the older content, and the file 'foo' has been taken out of version control.<br />In Subversion 1.5, the client and server both attempt to be smarter about this. The server doesn't send a whole new file during the update, but rather instructions to copy something that likely already exists in the working copy. So Sally's 'foo' file is copied to 'bar' (with local edits intact!).<br /></li><li>Merge tracking means Subversion keeps track of what changes have been merged where. This reduces the overhead involved in maintaining branches, and gives users a way to inquire what changes are merged — or are available to be merged — on different lines of development.<br />Example (one of the improvements in place): Merging changes from (say) trunk to a branch no longer requires that you specify the revision range. Instead, each time you want to sync up with trunk, you can just do:<br /><pre><br /> $ cd BRANCH_WORKING_COPY<br /> $ svn merge URL_TO_TRUNK<br /></pre><br />Subversion will figure out what changes from URL_TO_TRUNK have not yet been merged and pull in just those changes. When it's time to merge the branch back to trunk, do this:<br /><pre><br /> $ cd TRUNK_WORKING_COPY<br /> $ svn merge --reintegrate URL_TO_BRANCH<br /></pre><br /></li><li>Sparse checkouts (via new --depth option): Many users have very large trees of which they only want to checkout certain parts. In previous versions of Subversion, checkout -N was not really up to this task. Subversion 1.5 introduces the --depth option to the checkout, and other subcommands.<br /></li><li>Conflict resolution is now done interactively by the command-line client for the update/switch/merge subcommands.<br /></li><li>Relative URLs and @peg revisions for svn:externals.</li></ul><br /></em><br /><br />Don't you think this is AMAZING? This means we almost got full/real MOVE support and that merging is taking the best ideas from DVCS systems (yes, we lack yet local commits).<br /><br />To get up to speed with DVCS features I would also add <a href="http://svn.haxx.se/users/archive-2008-07/0056.shtml">pending commits feature</a> although there are concerns and people seem to prefer it to be implemented upstream in bug tracking tools.<br /><br />Well, I guess you already may have noticed I don't like current DVCS tools (at least the most popular), by a different set of (a little bit subjective, I know) set of reasons:<br /><br />- Git: it's implemented in an unmanaged language (yeah SVN too, but at least the latter is cross-platform!).<br />- Bazar & Mercurial: they're implemented in a "too-managed" language (yeah sorry I dislike dynamically typed languages very much, especially for big developments that need to have a long life; yeah, refactorings are a pain with these ones, although I don't know the test coverage they may have...).<br /><br />Maybe <a href="http://code.google.com/soc/2008/mono/appinfo.html?csaid=E6D8A717A88A7632">Git#</a> (<a href="http://code.google.com/soc/2008/mono/about.html">Mono SoC2008</a>) is the answer? (I don't know the progress of this project.)<br /><br />I was discussing about this yesterday with <a href="http://jprosevear.org/">JP</a>, and when I talked to him about this SVN 1.5.0 he said "too late!". Ermmm, what?, Gnome hasn't switched to DVCS yet so, why too late? Maybe because it's imminent? I don't know. Sincerely, there is much contradiction about how people approach migrations... Today I've been attending for almost an hour a meeting about Gnome Mobile, and one thing that was arised is the lack of flexibility and ease of use of the Gtk+ toolkit, as opposed to other toolkits. People were concerned about it and wanted to fix it, and nobody wanted to give up pushing Gtk+ just because it's old. Then, why doing this for Subversion? Subversion is very mature, and their devs have demonstrated to be worried about its lack of flexibility wrt the new distributed ways of work, so they are fixing it, they are *supporting* us. And however at Guadec here it seems everybody wants to push for the migration (but only taking care of doing the correct decision, i.e., select the 1 from the 3 we all know, but why not considering just to update to new SVN and wait a bit more to see where we go?<br /><br />Well, now that I'm talking about Subversion, I'm going to talk you about a couple of features I worked on recently (and committed today), as my first ITO day, in the Subversion Addin of MonoDevelop: <a href="https://bugzilla.novell.com/show_bug.cgi?id=394434">revert to revision, and revert changes from a revision</a>. The mandatory screenshot (you get to this dialog when requesting the Log inside the Version Control contextual menu):<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF7QivXFh7HpOxYWTrSgdFl43knfT0uZ-8eg_mIjXpcAnXe8qEqf11nEuVZ7uPHpGFLj24ZMZuVHox3-ijiczfcWnNsFvaNL7_Bl-CY2XWJPqlsMhYt8Ys5V9M_pkMoiX43m3l/s1600-h/Revert%5BTo%5DRevision.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF7QivXFh7HpOxYWTrSgdFl43knfT0uZ-8eg_mIjXpcAnXe8qEqf11nEuVZ7uPHpGFLj24ZMZuVHox3-ijiczfcWnNsFvaNL7_Bl-CY2XWJPqlsMhYt8Ys5V9M_pkMoiX43m3l/s400/Revert%5BTo%5DRevision.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5220591720376198530" /></a><br />This reduces the need of having a console open when coding with the MonoDevelop IDE, which is a thing that many developers request.<br /><br />Another feature I completed is the new pattern for searching in many files inside MonoDevelop: <a href="https://bugzilla.novell.com/show_bug.cgi?id=323396">Current project</a> (previously we only had "Whole solution", "Directories" and "Open files"):<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidcPKC11-8C_rRhKRWpy4RR5agaONiFiqC3fqjZ3Uhw4l2lFC6Yn217HNA0UPgELFCFx5ln8c9zVDv9UfRH7has0h68z_4GcrVfcVkKQKiaPjtgKAVxlqiYxxGxgciXTh4rZIe/s1600-h/CurrentProject.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidcPKC11-8C_rRhKRWpy4RR5agaONiFiqC3fqjZ3Uhw4l2lFC6Yn217HNA0UPgELFCFx5ln8c9zVDv9UfRH7has0h68z_4GcrVfcVkKQKiaPjtgKAVxlqiYxxGxgciXTh4rZIe/s400/CurrentProject.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5220594065349726530" /></a><br />Enjoy them! (Currently on SVN.)knoctehttp://www.blogger.com/profile/00267496347097861887noreply@blogger.com4tag:blogger.com,1999:blog-13199395.post-37084580781710971102008-06-10T17:38:00.004+02:002008-06-10T21:11:26.159+02:00WTFHow can I clear the list of elements of a Gtk.ComboBox??? It doesn't seem to be a way, but maybe if I'm able to get the number of elements... After an hour searching, when I was going to give up, I just found <a href="http://mail.gnome.org/archives/nautilus-list/2005-November/msg00075.html">this</a>:<br /><br /><code><br /> combo_box =<br /> GTK_COMBO_BOX (NAUTILUS_NAVIGATION_WINDOW (window)->view_as_combo_box);<br /> /* Clear the contents of ComboBox in a wacky way because there<br /> * is no function to clear all items and also no function to obtain<br /> * the number of items in a combobox.<br /> */<br /> model = gtk_combo_box_get_model (combo_box);<br /> g_return_if_fail (GTK_IS_LIST_STORE (model));<br /> store = GTK_LIST_STORE (model);<br /> gtk_list_store_clear (store);<br /></code><br /><br />Clearly, we need some improvements in Gtk+ API. I'd bet it's much easier with <a href="http://www.mono-project.com/MWF">MWF</a> unfortunately. At least, the developer that coded this was kind enough to file a <a href="http://bugzilla.gnome.org/show_bug.cgi?id=324899">bug</a>, which BTW is 3 years old and, of course, still not fixed.knoctehttp://www.blogger.com/profile/00267496347097861887noreply@blogger.com3tag:blogger.com,1999:blog-13199395.post-6282348872105103102008-05-10T23:59:00.007+02:002013-02-18T14:07:07.165+01:00A new community devolopment model?<!--img src="http://superalumnos.net/files/images/chequeAdsense.preview.jpg" /--><br />
<img src="http://ajaxwidgets.com/Default.aspx?imgId=7b818ff2-6fb8-4cd8-8a85-fc08238d4418" /><br />
<h4 id="ANewCommunityDevModel-long">
Long story</h4>
(Go to the <a href="http://www.blogger.com/blogger.g?blogID=13199395#ANewCommunityDevModel-short">short story</a> if you're too lazy to read a lot.)<br />
<br />
Some time ago I <a href="http://knocte.blogspot.com/2006/09/el-software-libre-ms-comercial-que.html">wrote</a> about the usual confusion between the terms "commercial" and "propietary". FLOSS <strong>is</strong> commercial software because it's not only driven by the generosity of some developers with their spare time. A FLOSS developer can be paid by a software company, either by being employed (the most common case currently) or either by a consultancy/bounty basis. And there are still even <a href="http://www.db4o.com/about/productinformation/whitepapers/db4o%20Whitepaper%20-%20db4objects%20and%20the%20Dual%20Licensing%20Model.pdf">open source companies which still indirectly refer to FLOSS as non-commercial</a> when they compare both most popular development models nowadays by saying "open source VS commercial software".<br />
<br />
And why the bounty system is not so popular? Well, because:<br />
1) It's very project-driven: bounties are usually published in means very related to the project. This can be considered an advantage because only motivated/interested developers will apply, but sometimes the project is too small, too recent or not very popular, or with a lot of similar projects around.<br />
2) There's no strong system to manage the bounty in respect to requirements, secure payment, trust system between parts, etc.<br />
3) Many people don't advocate for it (or they advocate for a bounty system that works as a task exchange without money intervention: <em>I fix this for you if you fix this for me</em>) because, we know, one of the reasons of the excellence of free software is because developers love what they do without rewards. (But IMHO one of the big downsides is also because there are also important tasks in a project that nobody likes to do. Besides, I think people tend to spend less spare time on free software as their age grows.)<br />
<br />
An exception to the 1st item could be <a href="http://www.bountycounty.org/">bountycounty.org</a>: a site that tries to announce bounties from free software projects. However, it seems to be an initiative that hasn't got much audience (the last bounty is 2 years old), either because the people that offer bounties forget to notify to this system, or, maybe because in the end the bounty development model doesn't work in FLOSS?<br />
<br />
Well, I don't think this is the case, because there's a bounty system that is succeeding, and which is also an exception to the (2) item of the above list: Google Summer of Code.<br />
<br />
However, GSoC has the following disadvantages to be "complete" for this matter:<br />
a) Only students can apply.<br />
b) All projects happen in the same time-frame and have the same duration (a summer).<br />
c) All bounties are the same for each developer.<br />
d) A concrete company controls all the process (because, it's true, they put the money).<br />
<br />
But we need something similar to GSoC (similar in the "It Works" aspect) and that saves these problems and is not a mere "announcement" site like BountyCounty.org.<br />
<br />
Some initiatives have appeared that tried to solve these situation: BountySource.com and SourceForge.net marketplace. The common problem to both is that they try to solve it by attracting the developers to host their projects, so this causes big and mature projects not to apply (because they have currently good hosting solutions, or are self-hosted, like Mozilla projects for instance).<br />
<br />
One of the ideas is to implement a bounty system in our bug tracking system software, like <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=124096">Bugzilla</a>. If I had time and liked Perl more, I would try to contribute something for it. Maybe we're in the chicken-egg problem here: we need a bounty system for that task.<br />
<br />
Surprisingly, there's already a general purpose web-based service for this task: <a href="http://www.rentacoder.com/">RentACoder.com</a>. But I haven't seen any free software projects using it, because it seems very focused on propietary developments.<br />
<br />
And then <strong>it happened</strong>: Some weeks ago a new FLOSS-oriented service was born: <a href="http://www.fossfactory.org/">FOSS Factory</a>. I wanted to start using it by publishing some mini-bounties (which hopefully would grow if other people are interested, similarly to voting systems in Bug Tracking software), but I got disappointed when even the project creation had a cost. But yesterday I received this e-mail:<br />
<br />
<em><br />Andres G. Aragoneses,<br /><br />Thanks so much for your interest in FOSS Factory! As one of our early adopters, I wanted to keep you in the loop on two very important developments.<br /><br />First, in response to user feedback, we've removed all costs for creating FOSS Factory projects! Instead, we now charge a 5% transaction fee on payouts. This aligns our interests with yours by ensuring that we will only make money if your projects succeed. It also enables developers to post their own projects without having to spend money.<br /><br />Second, we recently released our website source code under a FOSS license. You can now download the code from http://www.fossfactory.org/get-source.php. Our primary reason for doing this was so that we could take advantage of our own system to help improve the site. In case you're interested, we've already posted a few bounties for improvements that we haven't had time to implement ourselves: http://www.fossfactory.org/project.php?p=p30&tab=subprojects. Please feel free to participate.<br /><br />If you have any questions or concerns, please either reply to this message, or email me directly at jjgignac {at} fossfactory {dot} org. Your feedback is very important to us!<br /><br />Sincerely,<br /><br />John-Paul Gignac<br />President and Founder<br />FOSS Factory Inc.</em><br />
<br />
Unfortunately, there's a 5% transaction charge for each bounty, but hey, we need to support their service! Also, the software is PHP based, so I won't likely spend time on improving it (you know, I already fled from PHP and Perl some years ago ;) ).<br />
<br />
But I like the initiative and I'll start to publish the bugs/features I consider interesting to have, but have no time/interest to hack on. Here are the first ones (take in account that, if every voter of the bug payed 10$, the bounty would be enough attractive for a developer I guess, because they are not very complicated):<br />
<br />
- Thunderbird/Seamonkey feature <strong><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=11048">Auto-watch threads you've posted to</a> (21 votes)</strong><br />
- Thunderbird/Seamonkey regression <strong><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=11048">Allow edit of unsent message (Unsent folder messages should open to a compose window when double click)</a> (26 votes)</strong><br />
- Bugzilla's feature (or fix for highly confusing workflow for newcomers) <strong><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=11368">Move all bug activity onto main bug screen</a> (17 votes)</strong><br />
- Banshee's feature (currently handled by an outdated addin AFAIK) <strong><a href="http://bugzilla.gnome.org/show_bug.cgi?id=361210">Banshee needs a way to cleanup (remove stale tracks)</a> (reporter+4CC; no voting system in BGO)</strong><br />
- Banshee's feature (patch proposed but I guess someone should make it apply to trunk) <strong><a href="http://bugzilla.gnome.org/show_bug.cgi?id=421376">[Patch] Automatically scan music folders for new songs</a> (reporter+6CC; no voting system in BGO)</strong><br />
- Gnome's bug (someone wrote a patch but not sure if it will finally make it for 2.24...) <strong><a href="http://bugzilla.gnome.org/show_bug.cgi?id=47893">The ``Replace File'' dialog should display the two file sizes, times, etc.</a> (reporter+23CC; no voting system in BGO)</strong><br />
- Monsoon's crazy feature (maybe implies the creation of a new Gtk widget) <a href="https://bugzilla.novell.com/show_bug.cgi?id=378750"><strong>When the option "Minimize to notification area on close" is not enabled, we should have a new widget on the title bar for that action</strong></a> (just me)<br />
- Real fix for Mono's issue (because we already have a workaround) <a href="https://bugzilla.novell.com/show_bug.cgi?id=375987"><strong>System.Windows.Forms dependency on GTK makes code to crash if it uses ATK# and GTK_MODULES contains 'atk-bridge'</strong></a><br />
<br />
The last of the issues affected <a href="http://www.mono-project.com/Accessibility">our project</a> until we found a workaround overriding environment variables. If we reach our milestones properly and nobody has fixed it at that time, we could have a try! Now we still have <a href="http://www.mono-project.com/Accessibility:_Mapping_UIA_to_ATK">tons of work</a> which Calvin and the team have perfectly outlined. Unfortunately I haven't helped in this doc effort because I was busy debugging the issues I mentioned in my last post, which turned out to be an invalid bug (but at least gave me an idea for a <a href="http://nestor.babuine.net/?p=36">Gendarme Rule</a>) and a GAPI parser bug that Mike fixed) and because on thursday afternoon I was affected by <a href="http://automorphic.blogspot.com/2008/03/fevers-and-hacking-go-together-like.html"> some small rock ;)</a> and probably was the cause of me trying to debug something I didn't correctly updated on Friday (and maybe because of our dumb deployment methodology that <a href="http://mkestner.blogspot.com/">Mike</a> has already blamed). Well, I'll talk about this in a later entry...<br />
<br />
<h4 id="ANewCommunityDevModel-short">
Short story</h4>
Maybe this day will be remembered in the Free Software community as the day in which a first software draft is presented in order to fill some <a href="http://nat.org/2005/january/#bountysystem">awesome ideas from devs like Nat Friedman</a> about a general-purpose bounty system:<br />
<h3>
<a href="http://www.fossfactory.org/">FOSS Factory</a></h3>
<br />
Especially interesing is their <a href="http://www.fossfactory.org/why.php">reasonings</a> for its creation.<br />
<br />
<strong>Update 12-AUG-2009</strong>: Another interesting service I found (while reading the comments of <a href="http://tieguy.org/blog/2009/08/12/state-of-the-art-for-bounties/">this blog entry</a>) is <a href="http://www.cofundos.org/">COfundOS.org</a><br />
<br />
<strong>Update 10-MAY-2010</strong>: Wow, it seems that a new project was born, which is getting a lot of press and support, to fund projects (but any kind of projects, not only software). It's called Kickstart and it's key feature is that people can pledge for a project but if it doesn't reach the amount required, the people are never charged. I wonder if there should be an option to have projects not have a deadline (more suitable to bugs in bugzillas ;) ). And after reading the <a href="http://www.kickstarter.com/help/faq">FAQ</a> I still cannot figure out how they judge if a project was successfull...<br />
<br />
<strong>Update 16-SEP-2010</strong>: Over the last months I've been still thinking about all this and wondering why the FossFactory project didn't really see much adoption. Other initiatives such as Kickstart have had some success (for example the Diaspora is an example of a software project that just released something thanks to this kind of funding) but it doesn't fit very well to how small unit-of-progress would be rewarded (i.e. small bugs in bug tracking systems as opposed to whole projects) so I guess there's still some hope in micro-payment systems for this.<br />
<br />
And indeed there is. It turns out that I joined some months ago a new company that has an internal system to reward in this way (all is explained <a href="http://en.wikipedia.org/wiki/Linden_Lab#Corporate_Culture">here</a> -- the Love Machine), and even our CEO went away some months to develop this sole idea as <a href="http://www.lovemachineinc.com/">a separate company</a>. Now, the way he decided to pursue it is very interesting: develop a workflow system of little rewards that companies can adopt with their employees (or with their "contractors", because with this workflow they actually don't need to have fixed salaries... --which may be good or bad, and is subject for another discussion).<br />
<br />
I don't know much about the success of that project actually. But what I know now is that a new service around the same idea was recently born is really having a lot of adoption, because it's actually not a product that can be deployed in a company, but just a product that is deployed by a company which hosts the service, and then <strong>anyone</strong> can send or receive micro-payments about <strong>anything</strong> so it's not a service from a company to a company but from a company to an end-user. And the real good idea behind this is that their micro-payment system makes them be the intermediary between you and the grant-receivers you want to donate to, every month. You don't ever need again to pay N subscriptions to donate to N causes/organizations you like, you just subscribe to them, and then every month (actually everyday) you decide where your money goes too.<br />
<br />
Didn't I explain it correctly? Well, go to see the video which is more than a thousand words and more than a million images: <a href="http://flattr.com/">FLATTR</a>. <br />
<br />
<b>Update 18-FEB-2013</b>: Lots of initiatives popping up now in regards to this, so just a simple update to list some of them:<br />
<br />
<ul>
<li><a href="http://bountysource.com/">BountySource.com</a></li>
<li><a href="http://freedomsponsors.org/">FreedomSponsors.org</a></li>
<li><a href="http://gittip.com/">GitTip.com</a></li>
</ul>
knoctehttp://www.blogger.com/profile/00267496347097861887noreply@blogger.com4tag:blogger.com,1999:blog-13199395.post-83674669449882229252008-04-09T11:46:00.001+02:002008-04-09T12:39:48.340+02:00Mono news FROM/FOR the Spanish side[<a href="#MonoNewsFromFor-en">English version below</a>]<br /><br /><strong>DESDE</strong>: Me enorgullece comunicar que finalmente el <a href="http://planeta.mono-hispano.org/">Planeta Mono-Hispano</a> ha resucitado! Felicitaciones a toda la gente involucrada en que esto saliera adelante.<br /><br /><strong>PARA</strong>: Si estás terminando tu carrera de Ingeniería Superior en Informática en la <a href="http://www.fi.upm.es/">UPM</a> (donde yo la hice también), conozco una profesora que está buscando un alumno para hacer un <a href="http://es.wikipedia.org/wiki/Proyecto_fin_de_carrera">PFC</a> en el que tendrá que usar <strong>Silverlight/Moonlight</strong>, así que si estás interesado, ponte en contacto conmigo!<br /><br />--<br /><br /><h4 id="MonoNewsFromFor-en">[English version]</h4><br /><strong>FROM</strong>: I'm glad to tell that finally the <a href="http://planeta.mono-hispano.org/">Mono-Hispano Planet</a> has resurrected! Congratulations to all the guys involved in making this happen.<br /><br /><strong>FOR</strong>: If you are finishing your <a href="http://en.wikipedia.org/wiki/Engineer%27s_degree">engineer's degree</a> in Computer Science at the <a href="http://www.fi.upm.es/">UPM university</a> (where I did in the past), I know a teacher that is looking for a student to do his <a href="http://es.wikipedia.org/wiki/Proyecto_fin_de_carrera">PFC</a> (how do you guys call this en English?) using <strong>Silverlight/Moonlight</strong>, so if you're interested, contact me!knoctehttp://www.blogger.com/profile/00267496347097861887noreply@blogger.com2