tag:blogger.com,1999:blog-63142152028599275492024-03-04T21:07:40.469-08:00Celso Providelo (cprov)Anonymoushttp://www.blogger.com/profile/06859558841565963420noreply@blogger.comBlogger22125tag:blogger.com,1999:blog-6314215202859927549.post-10779697463542261482017-06-02T06:56:00.000-07:002017-06-02T09:22:38.765-07:00Good snapcrafters use plugins; great snapcrafters stealWhen I am snapping a new piece of software I usually find myself <i>googling</i> for similar <span style="font-family: "courier new" , "courier" , monospace;">snapcraft.yaml</span>. This is somewhat embarrassing and looks like I don't know what I am doing.<br />
<br />
Well, that's very often precisely the case. There are <b>amazing</b> applications out there, but they require some complex plumbing to work nicely, ask Debian maintainers ...<br />
<br />
There is a <a href="https://snapcraft.io/" target="_blank">vast and welcoming documentation</a> for creating a snapcraft project from scratch, a large collection of <a href="https://snapcraft.io/docs/build-snaps/plugins" target="_blank">plugins</a> and a <a href="https://tutorials.ubuntu.com/tutorial/build-a-nodejs-service#3" target="_blank">precise method</a> for reaching strict confinement. It's much easier than it use to be.<br />
<br />
However, sometimes it's difficult to figure out even basic command invocation bits ... Or perhaps it's just curiosity and willing to learn from someone else experience (wow! Plenty of euphemisms for laziness. Why bother after that post title ?)<br />
<br />
One can always find, download, unpack and inspect snaps that you think have solved problems similar than yours:<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">$ snap find cassandra</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">Name Version Developer Notes Summary</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">cassandra 3.7 ev - Cassandra distributed database</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">$ snap download cassandra</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">Fetching snap "cassandra"</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">Fetching assertions for "cassandra"</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">$ ls -lh cassandra_66.*</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">-rw-rw-r-- 1 cprov cprov 5.5K Jun 2 10:05 cassandra_66.assert</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">-rw-r--r-- 1 cprov cprov 66M Jun 2 10:05 cassandra_66.snap</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">$ unsquashfs -n cassandra_66.snap meta/snap.yaml</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">...</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">$ cat squashfs-root/meta/snap.yaml</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">apps:</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> cassandra:</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> command: command-cassandra.wrapper</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> daemon: forking</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> plugs:</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> - network</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> - network-bind</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> - mount-observe</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">...</span><br />
<br />
But this it's not particularly efficient or pleasant to download 66+ MB just for checking a 1K YAML file.<br />
<br />
It is lot easier to ask the Snap Store:<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">$ curl -s -H 'X-Ubuntu-Series: 16' 'https://search.apps.ubuntu.com/api/v1/snaps/details/cassandra?fields=snap_yaml_raw' | jq '.snap_yaml_raw' -r</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">apps:</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> cassandra:</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> command: command-cassandra.wrapper</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> daemon: forking</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> plugs:</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> - network</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> - network-bind</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> - mount-observe</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">...</span><br />
<div>
<br /></div>
Anonymoushttp://www.blogger.com/profile/06859558841565963420noreply@blogger.com0tag:blogger.com,1999:blog-6314215202859927549.post-90034055888115184622015-02-13T17:21:00.001-08:002015-02-13T23:56:39.764-08:00MicroXchg 2015 BerlinTL;DR - Great location, well organized, relevant topics and speakers. Microservices concept opportunistically takes advantage of unprecedented computing power and availability for addressing old and well-known architecture problems (decoupling, fault-tolerance and adaptability).<br>
<br>
Okay, you are interested. Let's go to the (very <i>opinionated</i>) details ...<br>
<br>
The vast majority of the audience was local (German) and, not to my surprise, my old and once functional german vocabulary failed me very badly. Fortunately, it was very easy to follow the english track of presentations and I suspect the relevant parts of the german talks were revisited (many times) on the talks I was. Kudos to the <a href="http://microxchg.io/">microXchg 2015</a> team for the event organization and I hope we can meet again next year.<br>
<br>
It started with an interesting talk from <a href="https://twitter.com/boicy">James Lewis</a> sharing experiences with microservice adoption in a some of his consultancy costumers. It was interesting to see that what convinces CTOs (and CEOs) about microservices is the financial impact of not being able to keep their software evolving with their business, not specifically the direct changing-cost itself. As the time pass, monoliths become harder and harder to fix, adapt, improve and even maintaining. So, the hope to avoid exactly the same scenario very soon is what drives people to try something different in software development, i.e., the cost & risks to maintain the current system and the lost business opportunities are high enough to encourage a change.<br>
<br>
Often the transition to microservices involves organizational changes, initiatives to decentralize decisions, more cohesive business models, agile methodologies, continuous delivery and small development teams. Which makes microservices more like a consequence of those changes than a methodology or technique per se. This could be interpreted as a manifestation of <a href="http://en.wikipedia.org/wiki/Conway%27s_law">Conway's law</a>, where a system resembles its target organization and vice-versa.<br>
<br>
It's very likely that the complete transition from a traditional legacy system (think banking, insurance, e-commerce, etc) will take much longer than you first expect or maybe doesn't even complete in a timely period (let's say 2 or 3 years). In order to sustain the long changing period (financially and politically) it has to show quick results, so has to start small, solve isolated problems, this way we can simultaneously build trust among stakeholders and confidence on the teams applying the concept.<br>
<br>
Very nice opening, I might say.<br>
<br>
The following talk, from Richard Rodger was about the importance of relevant metrics in a microservice environment and how to achieve effective visibility modelling and monitoring system invariants (by combining functional metrics like: # of checkout / # of invoices in e-commerce, anything different than ratio 1 means something is wrong).<br>
<br>
<a href="https://twitter.com/crichardson">Chris Richardson</a>, described the concept of Event-Driven (micro) services, where the design focus is reacting to system events (user actions) and persisting status changes. Continuous delivering with Docker was firstly mentioned and become a pervasive subject on the subsequent talks. Interesting, really, but got very biased with Scala and Spring-Boot (IMHO).<br>
<br>
Actually, I was already prepared to a storm of java, scala, clojure, among other crack-of-the-day languages, at the end, microservices seems to accommodate niche (obviously not talking about the omnipresent and enterprise <i>lingua franca</i> java) language/framework diversity very nicely. "There is always one best tool for each job", a non-hammer mantra.<br>
<br>
Anyway, there were plenty talks that required heavy java-buzzword filtering, not because they were not relevant, but mainly because I am ignorant about the subject. Absolutely no offence meant to the speakers. And I must recognize that many daily-used python chunks were heavily java-inspired (logging comes to mind).<br>
<br>
<a href="https://twitter.com/fgeorge52">Fred George</a> presented microservices challenges and how empowering developer teams in respect to their corresponding products translates to higher velocity (faster results == smaller costs). Microservices becomes one of the means to achieve "development anarchy", giving to developers complete control and responsibility about their software.<br>
<br>
A panel session closed the day, unasked questions and new answers, more docker, microservices experiences, etc ...<br>
<br>
Second day started with <a href="https://twitter.com/stilkov">Stefan Tilkov</a> presenting Self-Contained-Systems (SCS) approach to microservices, with great insights about keeping entity as simple as possible (but not simpler), avoiding unnecessary complexity developing and integrating services and mainly focus on clear and stable APIs/User-Interfaces (complete ui-logic-data services)<br>
<br>
<a href="https://twitter.com/adrianco">Adrian Cockcroft</a> presented the state of the art in microservices, obviously illustrated with his breakthrough experiences in <a href="https://www.netflix.com/">Netflix</a> but also other success stories like <a href="http://tech.gilt.com/">GILT</a> and <a href="http://www.walmartlabs.com/">WalmartLabs</a>, and the new problems emerged from heterogeneous and highly dynamic systems. Additionally he showed a real example of developer empowerment for deciding when and what to release and its counter-side which is getting PagerDuty notification when his software behaves badly in production; i.e. with power comes responsibility and also an immense peer-pressure to get and keep products running in the best possible way.<br>
<br>
<a href="https://twitter.com/samnewman">Sam Newman</a>, followed with a talk about microservices essentials and the importance of having well isolated, automated and instrumented (functional metrics, aggregated logs, etc) units to be able to analyze and react to unpredictable scenarios happening in production. The ability to deploy microservices individually is key to success and drives many other degrees of development freedom (technology-agnostic, higher development speed, lower maintenance cost, etc) also leads to decentralized data management, while requires additional automation for deployment and self-healing (<i>circuit-breakers</i>)<br>
<br>
The conference ended with a very good (one of the best IMO) talk from <a href="https://twitter.com/chadfowler">Chad Fowler</a> describing the transition from the Monolitic Ruby+RDBMS <a href="https://www.wunderlist.com/">Wunderlist</a> 2 to the microservices-based current system. It was very interesting to know the real experience (and pain) related to maintaining a system in terminal-state, because it's still the company core business, while creating a new one. There are ways to benefit both sides of this equation, not repeating the same errors while solving each isolated problem.<br>
<br>
Chad described how hard was selling the "rewrite" to stakeholders and it was only possible because it was the only viable alternative to the company and stakeholder investments. Really critical scenario when you think about the personal impact on everyone involved, increasing even more the pressure for success of the new approach (not always the best adoption scenario) and adding to a lots of skepticism about performance and stability of the new system. The action taken by the development team to address generalized concerns was to expose the new system to a series of catastrophic scenarios (high load, broken pieces of infrastructure, etc) as much as possible. This way many problems were discovered, analyzed and solved very early causing much less impact (and costs).<br>
<br>
Another interesting fact was that the initial microservice-based system was also entirely written in Ruby, what developer were very familiar with, the "rewrite" was entirely about a new architecture. Later on, analyzing requirements of each component, other languages and frameworks were experimented on each individual service and only the successful (and convenient at time) ones were replaced. As mentioned above, the search for "the best tool for the job", in fact, never ends, there will be always a new optimized language out there that could solve one of your specific problems in a better way (mostly commonly faster). <br>
<br>
That was it ...<br>
<br>
I really enjoyed the talks, the design is indeed more important than the technologies used to implement them. Having each unit autonomous and small means that replacing any of them whenever they are not ideal anymore will be always cheap.<br>
<br>
There seems to be a lot of innovative, concrete and honest efforts surrounding the microservices concept to move it way beyond the <b>early 21th century empty-buzzworlds hall</b> and actually help software designers to strive in this whole new (and wild) world, where speed is getting increasingly more important than anything else.<br>
<br>Anonymoushttp://www.blogger.com/profile/06859558841565963420noreply@blogger.com0tag:blogger.com,1999:blog-6314215202859927549.post-3128227723903718692009-07-20T05:16:00.000-07:002009-07-20T06:11:34.432-07:00Launchpad API for PPAs - part 3Continuing with <a href="https://help.launchpad.net/API">Launchpad API</a> for PPA, let's illustrate how to copy specific sources from one archive to another.<br /><br />An authenticated user may copy sources (including their binaries or not) <span style="font-weight: bold;">from</span> any public archive <span style="font-weight: bold;">to</span> any PPA he has permission to upload using <a href="https://edge.launchpad.net/+apidoc/#archive-syncSource">syncSource</a><br /><br />One practical example is backporting recent SRUs to LTS series using your PPAs. Let say, we want the <a href="https://edge.launchpad.net/ubuntu/+source/libvirt/0.6.1-0ubuntu5.1">latest libvirt version</a> available for testing in your Hardy instance.<br /><br />{{{<br /> ubuntu = lp.distributions['ubuntu']<br /> primary, partner = ubuntu.archives<br /> ppa = lp.me.getPPAByName(name='ppa')<br /> ppa.syncSource(<br /> source_name='libvirt', version='0.6.1-0ubuntu5.1',<br /> from_archive=primary, include_binaries=False,<br /> to_series='hardy', to_pocket='Release')<br />}}}<br /><br /><span style="font-style: italic;">libvirt - 0.6.1-0ubuntu5.1</span> will be rebuilt in your PPA for hardy and if everything is compatible in few minutes you will be able to use and share it with other users.Anonymoushttp://www.blogger.com/profile/06859558841565963420noreply@blogger.com0tag:blogger.com,1999:blog-6314215202859927549.post-9629477056978151542009-06-30T19:05:00.000-07:002009-06-30T19:18:28.694-07:00Behavior-driven testing (BDT) support in pythonToday <a href="https://edge.launchpad.net/%7Esidnei">Sidnei</a> called my attention to <a href="http://www.pyccuracy.org/overview.html">Pyccuracy</a> and <a href="http://behaviour-driven.org/"><span style="font-style: italic;">Behavior-driven Testing</span></a><br /><br />I decided to give it a try.<br /><br />Started by repackaging the unofficial ubuntu packages I found in <a href="http://deb.gabrielfalcao.com/unstable/">http://deb.gabrielfalcao.com/unstable/</a> in my PPA (basically, for fun).<br /><br /><a href="https://edge.launchpad.net/%7Ecprov/+archive/sandbox">https://edge.launchpad.net/~cprov/+archive/sandbox</a><br /><br />There you can find <span style="font-weight: bold;">python-pyccuracy</span> and its dependencies (<span style="font-weight: bold;">python-pyoc</span> and <span style="font-weight: bold;">python-selenium</span>).<br /><br />Install <span style="font-weight: bold;">python-pyccurancy</span>.<br /><br />{{{<br />$ sudo apt-get install python-pyccuracy<br />}}}<br /><br />Install the <a href="http://seleniumhq.org/projects/remote-control/">Selenium RC</a>, if you don't have it yet, and run the server.<br /><br />{{{<br />$ wget http://release.seleniumhq.org/selenium-remote-control/1.0.1/selenium-remote-control-1.0.1-dist.zip<br />$ unzip selenium-remote-control-1.0.1-dist.zip<br />$ java -jar selenium-remote-control-1.0.1/selenium-server-1.0.1/selenium-server.jar<br />}}}<br /><br />Then you can use <span style="font-style: italic;">pyccuracy_console</span> to run its own test suite which uses BDT.<br /><br />{{{<br />$ pyccuracy_console -d /usr/share/pyccuracy/tests/acceptance/action_tests/ -p "*en-us.acc"<br />}}}<br /><br />To be continued ...Anonymoushttp://www.blogger.com/profile/06859558841565963420noreply@blogger.com0tag:blogger.com,1999:blog-6314215202859927549.post-39451604135969496152009-06-14T07:27:00.000-07:002009-06-14T08:03:52.002-07:00PPA support on `software-properties`Based on the discussion we had at UDS, <a href="https://edge.launchpad.net/%7Emvo">Michael Vogt</a>, <a href="https://edge.launchpad.net/%7Elifeless">Robert Collins</a> and <a href="https://edge.launchpad.net/%7Ecprov">I</a> came up with a easier and non-evil way of installing <a href="https://edge.launchpad.net/ubuntu/+ppas">Launchpad PPA</a> in <a href="http://www.ubuntu.com/">Ubuntu</a> systems.<p>The approach is very simple:</p><p><span style="font-weight: bold;">detect</span> PPA installation and <span style="font-weight: bold;">automatically</span> fetch the corresponding <span style="font-style: italic;">signing key</span>, so the package inventory can be reloaded successfully at the end of the process.</p><p>No magic, the same look and feel ubuntu users are used to, and at the end, the job is done with no risks.<br /></p><p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd5UMQz9D0DIts9l5pgyHs_43gmwAhc5FdOV0LZ8eXcb7_FafEnT1YRz6s7lEyvMr985wSe-qPr8iC_fYLdLIcBO7CysN2X1h8t2I9KaaeB1Ica9hZSlb9r7I_du-UDf8gjtx20NUEdmbg/s1600-h/Menu.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 301px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd5UMQz9D0DIts9l5pgyHs_43gmwAhc5FdOV0LZ8eXcb7_FafEnT1YRz6s7lEyvMr985wSe-qPr8iC_fYLdLIcBO7CysN2X1h8t2I9KaaeB1Ica9hZSlb9r7I_du-UDf8gjtx20NUEdmbg/s320/Menu.png" alt="" id="BLOGGER_PHOTO_ID_5347192761711505874" border="0" /></a></p><p>PPAs <span style="font-weight: bold;">are</span> <span style="font-style: italic;">Third-party Softwares</span><br /></p><p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIJb5zWrjzujCKhL439y0xt71hfzPWwlzaRmZO5JyoK1RudT_duzq876RCdNQZNatO_IC3XtOVnG3LTqmzGfVePVpEC-uT-4kinOgmiUBf4nahe-gboZZmr5EFyWaCEZRyVJsIoX_heV8j/s1600-h/Third-Party-Sotware.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 314px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIJb5zWrjzujCKhL439y0xt71hfzPWwlzaRmZO5JyoK1RudT_duzq876RCdNQZNatO_IC3XtOVnG3LTqmzGfVePVpEC-uT-4kinOgmiUBf4nahe-gboZZmr5EFyWaCEZRyVJsIoX_heV8j/s320/Third-Party-Sotware.png" alt="" id="BLOGGER_PHOTO_ID_5347193190207076114" border="0" /></a></p><p>In this example, we will use <a href="https://edge.launchpad.net/%7Eubuntu-mozilla-daily/+archive/ppa">Ubuntu Mozilla Daily PPA</a>, so you can add:</p>The repository deb line listed on the PPA page:<span style="font-style: italic;"><br /><br /></span><div style="text-align: center;"><span style="font-size:100%;"><span style="font-style: italic;">deb </span><a style="font-style: italic;" href="http://ppa.launchpad.net/ubuntu-mozilla-daily/ppa/ubuntu">http://ppa.launchpad.net/ubuntu-mozilla-daily/ppa/ubuntu</a><span style="font-style: italic;"> </span><span style="font-style: italic;" id="series-deb">jaunty</span><span style="font-style: italic;"> main</span></span><br /></div><br />Or simply use the supported shortcut for PPAs:<br /><br /><div style="text-align: center;"><span style="font-style: italic;">ppa:ubuntu-mozilla-daily/ppa</span><br /></div> <br /><p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9I_C0Mt_bZ4VYWOfuLaaTYKpDJw-dLKamaNLd45KZCU-QBRHVWnbPuNSLLnmS7hTMor9s39LcDt7aBCr9jVOlx3CfbbSEe8OkCHffl_UlMbqkphbOeTt2pM-nLFczw4TP3B_xAj9G2yeb/s1600-h/SP-PPA.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 182px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9I_C0Mt_bZ4VYWOfuLaaTYKpDJw-dLKamaNLd45KZCU-QBRHVWnbPuNSLLnmS7hTMor9s39LcDt7aBCr9jVOlx3CfbbSEe8OkCHffl_UlMbqkphbOeTt2pM-nLFczw4TP3B_xAj9G2yeb/s320/SP-PPA.png" alt="" id="BLOGGER_PHOTO_ID_5347193419393793618" border="0" /></a></p><p>Click on <span style="font-style: italic;">Add Source</span> and that's it, PPA and signing key enabled.<br /></p><p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2c5w9PwEMvFxfzGkNWAmH6qaRABJhL8AIb_v6Hdy7tKst3rmcvx2g3UUgEBhGVNzrRwho0HaDbuMHbjn5-yADIn-sjsWM7p2Jir4K7cv-bil770Jmr0DFVLvm-X17sIAUKoWjeXw969m7/s1600-h/SP-new-PPA.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 314px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2c5w9PwEMvFxfzGkNWAmH6qaRABJhL8AIb_v6Hdy7tKst3rmcvx2g3UUgEBhGVNzrRwho0HaDbuMHbjn5-yADIn-sjsWM7p2Jir4K7cv-bil770Jmr0DFVLvm-X17sIAUKoWjeXw969m7/s320/SP-new-PPA.png" alt="" id="BLOGGER_PHOTO_ID_5347193490867082002" border="0" /></a></p><p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEga_xb3GPnImv93KQ_o6xL7rg5R7_cskkm6MM33qlwB_7vGl2bGSm5L3VBoiunbnijxeZTworq-sbCWqGX3n9oBejBUvKLt1mYWzwTiokLXor3ItKwZvdfUaJhWDXPm9XKISZaPSy0MFIpG/s1600-h/SP-new-key.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 314px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEga_xb3GPnImv93KQ_o6xL7rg5R7_cskkm6MM33qlwB_7vGl2bGSm5L3VBoiunbnijxeZTworq-sbCWqGX3n9oBejBUvKLt1mYWzwTiokLXor3ItKwZvdfUaJhWDXPm9XKISZaPSy0MFIpG/s320/SP-new-key.png" alt="" id="BLOGGER_PHOTO_ID_5347193569753950338" border="0" /></a></p><p>(right now the <span style="font-style: italic;">Authentication</span> tab does not reload automatically, you have to click <span style="font-style: italic;">Restore Defaults</span> to see the new key. I'm working on a fix).</p><p>A testing version of the package is available in my <a href="https://edge.launchpad.net/%7Ecprov/+archive/experimental">Experimental PPA</a> (expand the source package row and install the deb file directly with gdebi, then you are safe to test the application on the same PPA)<br /></p><p><br /></p>Anonymoushttp://www.blogger.com/profile/06859558841565963420noreply@blogger.com1tag:blogger.com,1999:blog-6314215202859927549.post-10588929880161765762009-06-08T07:10:00.001-07:002009-06-08T07:10:16.907-07:00Your firewall does not like keyserver.ubuntu.com ...
<p><em>... or any other non-80 service on the web</em></p> <p>No problem, if you can access a server which is not submitted to the same access restrictions here is one solution.</p> <p>First make the service hostname to resolve as <strong><em>localhost</em></strong> in your system editing <em>/etc/hosts </em>so its first line looks like:</p> <p>{{{</p> <p>127.0.0.1 localhost keyserver.ubuntu.com</p> <p>}}}</p> <p>That done, you can setup an secure ad-hoc tunnel with <strong>SSH</strong> in a terminal.</p> <p>{{{</p> <p>ssh <username>@<server> -L 11371:keyserver.ubuntu.com:11371 -N</p> <p>}}}</p> <p>You can put that in a script and run it for you session <strong>OR</strong> if you like GUI apps, try installing <a href="apt://gstm" title="Install GSTM">gstm</a> (<a href="http://www.ubuntugeek.com/manage-ssh-tunnels-with-gnome-ssh-tunnel-manager.html" title="GSTM article" target="_blank">read more</a>).</p> <p> </p> <p> </p> <p> </p> <p> </p><p style="font-size: 10px;"> <a href="http://posterous.com">Posted via web</a> from <a href="http://cprov.posterous.com/your-firewall-does-not-like-keyserverubuntuco">cprov's posterous</a> </p> Anonymoushttp://www.blogger.com/profile/06859558841565963420noreply@blogger.com1tag:blogger.com,1999:blog-6314215202859927549.post-31004140491480696132009-04-15T21:03:00.001-07:002009-04-15T21:03:00.841-07:00Launchpad API for PPAs - part 2<br /><p>Continuing with <a href="https://help.launchpad.net/API" mce_href="https://help.launchpad.net/API">Launchpad APIs</a> for PPAs, let's illustrate how to find sources within a PPA. </p> <p>Sources can be found, basically, by name, version, distroseries and status by calling <a href="https://edge.launchpad.net/+apidoc/#archive-getPublishedSources" mce_href="https://edge.launchpad.net/+apidoc/#archive-getPublishedSources">getPublishedSources</a> on a target archive.</p> <blockquote> <pre> >>> def test_source_lookup(lp):<br /> ... ppa = lp.people['ubuntu-mozilla-daily'].archive<br /> ... ubuntu = lp.distributions['ubuntu']<br /> ... jaunty = ubuntu.getSeries(name_or_version='jaunty')<br /> ... last_firefox = ppa.getPublishedSources(<br /> ... source_name='firefox-3.5', status='Published', distro_series=jaunty,<br /> ... exact_match=True)[0]<br /> ... print last_firefox.displayname<br /> </pre> </blockquote> <p>When it run, the output is:</p> <blockquote> <p>firefox-3.5 3.5~b4~hg20090415r24712+nobinonly-0ubuntu1~umd1 in jaunty</p> </blockquote> <p>Play with the arguments, also instead of fetching the first item (most recent one) from the collection you may iterate over it.</p><p style="font-size: 10px;"> <a href="http://posterous.com">Posted via web</a> from <a href="http://cprov.posterous.com/launchpad-api-for-ppas-part-2">cprov's posterous</a> </p> Anonymoushttp://www.blogger.com/profile/06859558841565963420noreply@blogger.com0tag:blogger.com,1999:blog-6314215202859927549.post-83453763974158791682009-03-25T19:26:00.001-07:002009-03-25T19:26:42.175-07:00
Launchpad API for PPAs <br /><p>I've received few complains about how hard it is to extract information from the <a href="https://edge.launchpad.net/+apidoc/">Launchpad API documentation</a> for managing <a href="https://edge.launchpad.net/ubuntu/+ppas">PPAs</a>.</p> <p>I will start a series of post with useful actions for PPA users and owner.</p> <p>Start by reading the <a href="https://help.launchpad.net/API">Launchpad API help page</a> and familirize yourself with it. For experiments, I usually use a <em>setup</em> script and jump into a interactive python section.</p> <pre>$ python -i lpapi_setup.py<br />>>> launchpad<br /><launchpadlib.launchpad.Launchpad object at 0x13eb0d0><br /><br />Now, we can find out what's my <strong>PPA signing-key fingerprint</strong>:<br /><br />>>> ppa = launchpad.people['cprov'].archive<br />>>> print ppa.displayname<br />PPA for Celso Providelo<br />>>> print ppa.signing_key_fingerprint<br />DCAC43EE807ADF67495AD95809C5BECB0DC0F66C<br /><br />to be continued ...<br /></pre><p style="font-size: 10px;"> <a href="http://posterous.com">Posted via web</a> from <a href="http://cprov.posterous.com/launchpad-api-for-ppas">cprov's posterous</a> </p> Anonymoushttp://www.blogger.com/profile/06859558841565963420noreply@blogger.com0tag:blogger.com,1999:blog-6314215202859927549.post-18692190000207556342009-03-25T17:55:00.001-07:002009-03-25T17:55:36.321-07:00
How cool is that ? <br /><p>I guess I will have to use it a little bit more before saying ...</p><p style="font-size: 10px;"> <a href="http://posterous.com">Posted via web</a> from <a href="http://cprov.posterous.com/how-cool-is-that">cprov's posterous</a> </p> Anonymoushttp://www.blogger.com/profile/06859558841565963420noreply@blogger.com0tag:blogger.com,1999:blog-6314215202859927549.post-44588522866396464042008-09-04T21:15:00.000-07:002008-09-04T21:43:14.517-07:00Ubuntu Developer Week<span style="font-style: italic;">(Yes, I know the event is almost gone ... what can I do ? I'm always late)</span><br /><br />During this <a href="https://wiki.ubuntu.com/UbuntuDeveloperWeek">Ubuntu Developer Week</a> I had other two opportunities to talk more about<a href="https://launchpad.net/soyuz"> Soyuz</a> and the beloved<a href="https://launchpad.net/ubuntu/+ppas"> PPAs</a>.<br /><br /><strong><a href="https://wiki.ubuntu.com/MeetingLogs/devweek0809/Soyuz">"Soyuz and all that Jazz</a>" </strong>and "<span style="font-weight: bold;"></span><strong></strong><strong><a href="https://wiki.ubuntu.com/MeetingLogs/devweek0809/PPAIntro">Introduction to PPAs</a></strong>" sessions were very exciting, a lot of interest was manifested by the audience.<br /><br />I could clearly notice that they were avidly looking for ways to be more productive by making collaboration an intrinsic characteristic of their workflows.<br /><br />IMO, that's exactly where <a href="https://launchpad.net">Launchpad</a> stands up compared with other systems, allowing an almost <span style="font-style: italic;">flat learning-curve</span> for users with any level of expertise<span style="font-weight: bold;">. </span>A really smooth and intuitive path<span style="font-weight: bold;"> from the fix to the anyone</span> <span style="font-weight: bold;">in need of it</span>, and also the other way around, <span style="font-weight: bold;">from the issue to anyone who can fix it.<br /></span><strong><span style="font-weight: bold;"><span style="font-style: italic;"><span style="font-style: italic;"><span style="font-style: italic;"><br /></span></span></span></span><span style="font-weight: normal;">I have to say that, as a launchpad developer, I'm really <span style="font-weight: bold;">proud</span> to be part of all this!</span><span style="font-weight: bold;"><span style="font-style: italic;"><span style="font-style: italic;"><span style="font-style: italic;"><br /></span></span></span></span><br /><br /><br /></strong>Anonymoushttp://www.blogger.com/profile/06859558841565963420noreply@blogger.com0tag:blogger.com,1999:blog-6314215202859927549.post-3385720242656451042008-09-02T18:13:00.000-07:002008-09-02T18:17:15.626-07:00PyconBrasil 2008 - see you there!<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://pyconbrasil.com.br/"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBJL3_-R1vsDo3JYHbDR0E01LUCD3vuBVUbyjIYAaE-f9aC7Y8X2UhiialDkSIspChSi0X_l3FWROLQWro6qYh1P2go8jlRUQuWSoshP2sVlk2LnqYIxjbv2M7sfnj52sxzrJ5NDIdMdrP/s320/pycon_banner.gif" alt="" id="BLOGGER_PHOTO_ID_5241597479088160850" border="0" /></a>Anonymoushttp://www.blogger.com/profile/06859558841565963420noreply@blogger.com0tag:blogger.com,1999:blog-6314215202859927549.post-20971584944668920912008-08-21T00:10:00.000-07:002008-08-21T20:18:20.939-07:00Sun SPOTAnother very interesting product/idea coming from <a href="http://www.sun.com/">Sun</a> in direction to the 'Internet of things' (wireless sensor networks), the <a href="http://www.sunspotworld.com/">SunSPOTs</a><br /><br />However, IMHO, it can't go any further than <span style="font-style: italic;">'another shiny geek gadget' </span>costing more than US$ 900 (it's curious how people don't get surprised by this price when they realize it's a Sun product)Anonymoushttp://www.blogger.com/profile/06859558841565963420noreply@blogger.com0tag:blogger.com,1999:blog-6314215202859927549.post-85967970210580901042008-08-11T13:49:00.000-07:002008-08-11T13:58:56.582-07:00DebConf8Before start posting my notes about <a href="http://debconf8.debconf.org/">DebConf8</a> I would like to say that it has been a great time.<br /><br />The conference was amazingly well organized, kudos to the debian-ar team.<br /><br /> <a href="http://en.wikipedia.org/wiki/Mar_del_Plata">Mar del Plata</a> is a very pleasant city which leads to a very good impression of Argentine (my first time here).<br /><br />I've attended very interesting presentations already, stay tunned ...Anonymoushttp://www.blogger.com/profile/06859558841565963420noreply@blogger.com0tag:blogger.com,1999:blog-6314215202859927549.post-28887537589589083842008-05-31T09:15:00.000-07:002008-05-31T16:04:55.614-07:00Yet another FOSS modelIt's been a long time since my last post, that's why I've chosen such a interesting (and controversial) theme.<br /><br />I've been using and contributing to (not expressively, though) <a href="http://en.wikipedia.org/wiki/FOSS">FOSS</a> for a relatively long time, about 6 years. During this time the most intriguing and hard-to-answer question about it was:<br /><span style="font-style: italic;"><br /> Does it really work ? if so, how ?</span><br /><br />Many of you, who already know the benefits of FOSS and read other passionate blog posts about it, might quickly say:<br /><br /> <span style="font-style: italic;">Duh, yes, look around</span> !<br /><br />Amongst with other thousand of passionate images about freedom <span style="color: rgb(102, 204, 204);">[typical </span><span style="font-style: italic; color: rgb(102, 204, 204);">needs citation</span><span style="color: rgb(102, 204, 204);"> point, I apologize in advance] </span>contrasting with evil and illegal practices played by the current proprietary software vendors.<br /><br />However, I'm afraid this approach is not compatible with the need the FOSS idea has to establish itself simply as:<br /><br /><span style="font-style: italic;">A more appropriate way of producing and maintaining software</span><br /><br />First things first ! That's all it has to be.<br /><br />Solving world poverty and reducing pathological economic differences might be kept in the agenda of any sane person living in this planet, not only software developers, but affirming that <span style="font-weight: bold;">free-software</span> by itself will fix those problems is very naive, to not say irresponsible.<br /><br />Enough philosophy for a admittedly 'narrow-mind' guy. Let's move on.<br /><br />My attempt to answer such question, replacing all passionate arguments with pragmatic ideas, goes through a rough and simple logic model:<br /><br /><span style="color: rgb(0, 204, 204);">[Be aware that I could not find any explicitly compatible references, please feel free to disagree with my points]</span><br /><br />FOSS benefits users because they have the opportunity to use and improve the collective code to serve their own purposes;<br /><br />FOSS benefits are even more visible in the upstream project where all individual contributions (<span style="font-weight: bold;">IC</span>) are consolidated as the <span style="font-style: italic;">upstream momentum</span> (UM):<br /><br />Equation1: <span style="font-weight: bold;">UM = Sum(IC)</span><br /><br />Upstreams communities are clearly the most benefited entities in the FOSS scenario, and thus the most interested in keeping it running well. The more people gets involved and contributing the higher will be <span style="font-weight: bold;">UM</span>;<br /><br />Within a FOSS upstream community, the individual benefits (<span style="font-weight: bold;">IB</span>) is equals to the <span style="font-style: italic;">upstream momentum</span> (<span style="font-weight: bold;">UM</span>) times the level of <span style="font-style: italic;">shared interest</span> (<span style="font-weight: bold;">SI</span>) established with the upstream community.<br /><br />Equation2: <span style="font-weight: bold;">IB = UM * SI</span><br /><br />The equation above describes the magic of FOSS, given a higher level of <span style="font-style: italic;">shared interested</span> each <span style="font-weight: bold;">coin</span> you put in the system will return an extra parcel of all the other <span style="font-weight: bold;">coins</span> already running in the system.<br /><br />So, FOSS works (duh!), it's just a matter of selecting the highest <span style="font-style: italic;">upstream momentum</span> <span style="font-weight: bold;"></span>and <span style="font-style: italic;">shared-interest</span> <span style="font-weight: bold;"></span>to get the best individual benefit (<span style="font-weight: bold;">IB</span>).<br /><br />Regarding the fact that your contribution by itself might increase the <span style="font-style: italic;">upstream momentum</span> of a given project, for most of the cases, it can be ignored because the difference will be insignificant and thus the <span style="font-style: italic;">upstream momentum</span> becomes a constant when classifying FOSS projects. It is an instantaneous metric. It is, by itself, already an answer for those people looking for a project to get involved with.<br /><br />In the FOSS eco-system it's very common to find more than one upstream community aiming to solve a specific problem (programming languages, graphical libraries, window managers, etc). When all candidates offer a similar level of <span style="font-style: italic;">shared interest</span> you should choose the one with higher <span style="font-style: italic;">momentum</span><span>, it will produce the best benefit</span><span style="font-style: italic;"> ...</span> That's what could be called the FOSS <span style="font-style: italic;">natural selection</span> rule.<br /><br />You might have noticed that I haven't mentioned yet the <span style="font-style: italic;">contribution cost</span> (<span style="font-weight: bold;">CC</span>) and how it should be considered when in the FOSS scenario.<br /><br />The <span style="font-style: italic;">contribution cost</span> affects how <span style="font-style: italic;">profitable</span> (<span style="font-weight: bold;">P</span>) the relationship between the individual and the upstream community is, as in:<br /><br />Equation 3: <span style="font-weight: bold;">P = IB / CC</span> or expanding <span style="font-weight: bold;">P = UM * SI / CC</span><br /><br />Obviously we know that a <span style="font-weight: bold;">contribution cost</span> always exists, each minute you use to contribute to a FOSS project certainly has a cost, it varies according subjective and personal standards, but certainly it's not <span style="font-weight: bold;">zero</span>. However the same standards apply to the <span style="font-weight: bold;">profitable</span> perception, i.e, for personal relationships FOSS is always a matter of choosing the project with the most momentum and which you share the most interest with and it can be very subjective, no doubt.<br /><br />It is very important to note that the vast majority of FOSS project is sustained by <span style="font-weight: bold;">unprofitable</span> individual relationships by strictly following the equation above. Those relationships are driven by valuable personal believes that can't be measured or estimated in equations, but certainly result in a major benefit in each contributor knowledge and experience otherwise they would not happen (I said it would not be a passionate arguments, so better stop).<br /><br />Back to the original pragmatic line, as it was supposed to be, with those three concepts in mind is much easier to understand the dynamic of FOSS.<br /><br />Users, contributors, companies, they all (can) represent the same role in a FOSS community, should look for profitable projects. The ones :<br /><ol><li>Having highest <span style="font-style: italic;">upstream momentum</span>; </li><li>Having the minimum <span style="font-style: italic;">contribution cost</span>;</li><li>They can establish the maximum <span style="font-style: italic;">shared interested</span>;</li></ol>On the other hand, FOSS upstream communities should work make their project more profitable, maximiz<span style="font-style: italic;">ing shared interest</span> and <span style="font-style: italic;">contribution cost</span>.<br /><br />I will be discussing alternatives for reaching good levels on those field later, but to not let a bad taste in the readers mouth lets pinch some ideas for the next post:<br /><ul><li><span style="font-style: italic;">Shared interest</span> is always higher in small and encapsulated FOSS projects. Shared libraries, pluggable components, external APIs are the way to go.</li><li><span style="font-style: italic;">Contribution cost</span> is smaller when the project well documented, code is accessible & readable and workflows are simple, clear and honest.</li></ul>That's enough for today. Thanks for reading my notes.Anonymoushttp://www.blogger.com/profile/06859558841565963420noreply@blogger.com0tag:blogger.com,1999:blog-6314215202859927549.post-58461899197104899512008-02-15T13:24:00.000-08:002008-02-16T05:32:24.118-08:00About Branches and PPAsI've recently experienced a very successfully story regarding the benefits of using <a href="https://help.launchpad.net/PPAQuickStart/">PPA</a> in <a href="https://launchpad.net/">Launchpad</a>, that I'd like to share with you.<br /><br />As you know I'm not an official Ubuntu developer, I wish I could have the knowledge and time required to be part of such bright group of people, but it's <span style="font-weight: bold;">not</span> the case. So, I'm writing this as a mere <span style="font-weight: bold;">enthusiast.</span><br /><br />Going straight to the point, some days ago, I've got curious about <a href="http://twitter.com/home">Twitter</a> (again time only allow me to see 'old' stuff in the net). I've signed up, typed some texts, followed some friends and it became very <span style="font-weight: bold;">boring</span> ...<br /><br />I thought it could be better if they provide a standalone client and voilĂ , I found the <a href="http://code.google.com/p/gtwitter/">upstream project</a> and the <a href="https://edge.launchpad.net/ubuntu/gutsy/+source/gtwitter">ubuntu gutsy package</a><br /><br /><span style="font-style: italic;">Internet is really fast above the equator.</span><br /><br />I've installed '1.0~beta-5', but my dark theme didn't fit the darkblue text very well :(<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEC5C3PLxlXicpg-sBHF4n29QWUvkBd8KURNceuUJQ0Y8W3acOBaQYfaxFp9vkkFJDxMnvGrQjVwDb-iiNDerEjoKfJediIxAdRMcN_RR0aLIYW0Z-auFjtMWg24eR-bO0NwP9HVCSmGsd/s1600-h/Screenshot-gTwitter+1.0beta.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEC5C3PLxlXicpg-sBHF4n29QWUvkBd8KURNceuUJQ0Y8W3acOBaQYfaxFp9vkkFJDxMnvGrQjVwDb-iiNDerEjoKfJediIxAdRMcN_RR0aLIYW0Z-auFjtMWg24eR-bO0NwP9HVCSmGsd/s320/Screenshot-gTwitter+1.0beta.png" alt="" id="BLOGGER_PHOTO_ID_5167330298891498418" border="0" /></a><br />Checked <a href="https://edge.launchpad.net/ubuntu/hardy/+source/gtwitter">hardy</a> version to see it got better support for GTK themes and it didn't.<br /><br />I didn't think twice and took the liberty for quickly registering <a href="https://edge.launchpad.net/gtwitter">a product in Launchpad</a> and imported the upstream SVN branch.<br /><br />Then, expecting to get <span style="font-weight: bold;">very lucky</span>, after checking that the build dependencies where constant, I realized it could build on gutsy.<br /><br />I've downloaded the hardy sourcepackage:<br /><br /><span style="font-style: italic;">$ dget https://edge.launchpad.net/ubuntu/hardy/+source/gtwitter/1.0~beta-6ubuntu1/+files/gtwitter_1.0~beta-6ubuntu1.dsc</span><br /><br />After unpacking and applied the diff, I've created registered and pushed a branch for the <a href="https://code.edge.launchpad.net/%7Ecprov/gtwitter/1.0-beta6">1.0beta6</a> package series so I could keep track of my changes.<br /><br />I already have a activated PPA, but following <a href="https://help.launchpad.net/PPAQuickStart/">PPAQuickStart</a> describes it in a very detailed way.<br /><br />Felling brave, again, I've simply mocked a smaller version and uploaded a backported version to <a href="https://edge.launchpad.net/%7Ecprov/+archive/">my PPA</a>.<br /><br /><span style="font-style: italic;">$ cd gtwitter-1.0beta</span><br /><span style="font-style: italic;">$ dch -D gutsy -b -v 1.0~beta-6ubuntu1~gutsy1</span><br /><span style="font-style: italic;"> [type a changelog]<br />$ debuild -S -sa<br />[type your gpg passprase twice]<br /></span><span style="font-style: italic;">$ cd ..</span><br /><span style="font-style: italic;">$ dput my_ppa-production gtwitter_1.0~beta-6ubuntu1~gutsy1_source.changes</span><br /><br />After 5 minutes I got an email from Launchpad informing that the source was accepted.<br /><br />Got extremely surprised when, 40 minutes later, it was already successfully built (it is getting faster...)<br /><br /><span style="font-style: italic;"> [enabled my PPA in /etc/apt/sources.list]</span><br /><span style="font-style: italic;">$ sudo apt-get update</span><br /><span style="font-style: italic;">$ sudo apt-get install gtwitter</span><br /><span style="font-style: italic;">...<br />Setting up gtwitter (1.0~beta-6ubuntu1~gutsy1) ...</span><br /><span style="font-style: italic;">...</span><br /><br />It is still dark and unreadable, true, but works very well in gutsy.<br /><br />What's the problem ?! I do have the code :)<br /><br />Using my <span style="font-weight: bold;">non-existent</span> <span style="font-style: italic;">c#-fu</span>, I've managed to change the code the way I wanted , to use gray fonts.<br /><br />My change will probably be considered <span style="font-weight: bold;">offending</span> by the upstream maintainers, but shhh, they don't need to know right now.<br /><br />(you've gotta love the indentation pattern used by them)<br /><br /><span style="font-style: italic;">$bzr ci -m "trying a new version, using 'gray' fonts to match my dark theme."</span><br /><span style="font-style: italic;">...</span><br /><span style="font-style: italic;">$bzr push</span><br /><br />Code changes are <a href="https://code.edge.launchpad.net/%7Ecprov/gtwitter/1.0-beta6">there</a>, publicly available to embarrass me for the rest of my life:<br /><br />Well, let's upload the new version, I have a lot of friends using dark themes (it's the future !), they will send me cookies :)<br /><br /><span style="font-style: italic;">$ dch -D gutsy -b -v 1.0~beta-6ubuntu1~gutsy2</span><br /><span style="font-style: italic;"> [another creative changelog message]<br />$ debuild -S</span><br /><span style="font-style: italic;"> [note that I've omitted the '-sa' option, the orig.tar.gz doesn't need to be sent again, it's already published]<br />$ cd ..</span><br /><span style="font-style: italic;">$ dput my_ppa-production gtwitter_1.0~beta-6ubuntu1~gutsy2_source.changes<br /></span><br />5 minutes, I had the notification in my mail box, another successfully upload :)<br /><br />Other 40 minutes and I got the binary I wanted.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzRxM_j1grbendwu5ZxM4fncmDvH3oqql0sVjKazeVtd5x5TsEvi4Mao_PClzjov-zRqs2SSV3WQG1Es26I4UXE33oDt45qunhclSgIPKV6I3ycasKPlDeSCTwamH0Dq3T7T0idnYJvKld/s1600-h/Screenshot.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzRxM_j1grbendwu5ZxM4fncmDvH3oqql0sVjKazeVtd5x5TsEvi4Mao_PClzjov-zRqs2SSV3WQG1Es26I4UXE33oDt45qunhclSgIPKV6I3ycasKPlDeSCTwamH0Dq3T7T0idnYJvKld/s400/Screenshot.png" alt="" id="BLOGGER_PHOTO_ID_5167328310321640354" border="0" /></a><span style="font-style: italic;">$ sudo apt-get update</span><br /><span style="font-style: italic;">$ sudo apt-get install gtwitter</span><br /><span style="font-style: italic;">...<br />Setting up gtwitter (1.0~beta-6ubuntu1~gutsy2) ...</span><br /><span style="font-style: italic;">...</span><br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiubl-3nDLCvmUhwW03lfCeKYF5ItGPP4SZpz5kd43BWeuhSIL5F9L5sayDbD5Ohu9aE-JbfHv4-PA9fuwSt3_thVAlO_y5eYyYBUuCu9sgV98fWncx4IhZ1koKSAHDAcLd_acDq5-7t9Ly/s1600-h/Screenshot-MygTwitter+1.0beta.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiubl-3nDLCvmUhwW03lfCeKYF5ItGPP4SZpz5kd43BWeuhSIL5F9L5sayDbD5Ohu9aE-JbfHv4-PA9fuwSt3_thVAlO_y5eYyYBUuCu9sgV98fWncx4IhZ1koKSAHDAcLd_acDq5-7t9Ly/s320/Screenshot-MygTwitter+1.0beta.png" alt="" id="BLOGGER_PHOTO_ID_5167330303186465730" border="0" /></a><br /><br />That's all, folks.<br /><br />It's quite possible that you hated it ... No problem, all you need is:<br /><br /><span style="font-style: italic;">bzr branch lp:gtwitter/1.0-beta6</span><br /><br />to easily make it the way you <span style="font-weight: bold;">want</span> and then wait 45 minutes to spread the <span style="font-weight: bold;">free-software</span> joy amongst your friends.Anonymoushttp://www.blogger.com/profile/06859558841565963420noreply@blogger.com0tag:blogger.com,1999:blog-6314215202859927549.post-57810426151690658822007-08-19T21:41:00.000-07:002007-08-19T22:40:48.110-07:00"Inbox Zero" in actionRecently, I was suggested to take a look at <a href="http://www.43folders.com/izero/">Inbox Zero - action-based email"</a> article by Merlin Mann (of http://www.43folders.com).<br /><br />In few words, it basically introduces a programmatic way to <b>process</b> your incoming messages in order to maximize the actual task demanded by them.<br /><br />I found the approach <b>very</b> useful, specially in a environment like we have in Canonical, with a high flux of daily messages (around 1k including Launchpad, Ubuntu and internal communication) of which, at least, 20 % would, theoretically, require some action from me.<br /><br />The fact is, I must recognize, that only a small part of the demanded actions are taken at a reasonable time, most of them are delayed by a explicit inefficiency when dealing with email. <br /><br />Part of the admitted inefficiency is <i>acceptable</i> since, as a programmer, I still have to deliver some work and it does have higher priority (!). However it is clear that I could continue to do my work (maybe more) and become more responsive if I adopt a better way to deal with emails.<br /><br />Well, the title of the post says "in action", so let's go for it:<br /><br />First, I've switched to Gmail sometime ago and the byzantine "enormous number of folders & filter" were inherited from a long time using IMAP/POP based emails accounts.<br /><br />That's gone ! I've only preserved company/wide-topic tags (that's what gmail calls it, actually) and they are:<br /><br /> * Gwyddion: all messages related to the <a href="http://www.gwyddion.com">Gwyddion</a> scope. it includes system/server messages, development & bugs mailistings;<br /> * Async: all messages related to <a href="http://www.async.com.br">Async</a>, including kiwi-dev and internal communication; <br /> * Canonical: Canonical communications and Launchpad development messages;<br /> * Ubuntu: Ubuntu development messages;<br /> * Personal: everything else that do not fit in the categories above, including several developments maillists like Trac, Twisted and MSPGCC.<br /><br />What is the aim of this severe change ? <br /><br />I expect to give more attention to the messages that really deserve it, for instance, all Canonical messages will be processed in 30 minutes batches, i.e, I expect to spend 2 or 3 minutes one each core-hours processing them.<br /><br />Gwyddion & Async related messages can be processed in a less frequent manner, let's say once every 2 or 3 hours. That's actually the usual ETA for actions in that area anyway.<br /><br />Finally, 'Personal' messages will be processed maximum twice or three times a day, normally before start, after lunch and after finished my core-hours, times when I will need something to 'warm up'. Honestly, nobody will die if I do that.<br /><br />Summing up, considering that my core-hous varies between 8 and 9 hours a day, I expect to spend:<br /><br /> * 8 x 3 minutes = 24 minutes processing Canonical messages;<br /> * 4 x 3 minutes = 12 minutes processing Gwyddion & Async messages;<br /> * 0 minutes dealing with Personal messages during core-hours;<br /><br />Right, it is still 36 minutes, about 5 % of my day, 'dealing' with a pile of messages.<br /><br />One could say it is still too much, however, I expect to be a lot more responsive for messages that requires me to only *nod* or say "Yes, sir. We can do that. What else ?" ... And, as far as I can tell, a considerable amount of my incoming messages are like that.<br /><br />Quick and precise answers will increase the my "information throughput level" and benefit the entire community that I take part (or, at least, those persons that depend on me on a certain moment). Also having a constant amount of time applied/spent in a given task will help me to optimize it if necessary (doesn't it really look like programming ?).<br /><br />That's it ... check new messages in the respective folders at the established frequency, answer those that you can with a Yes/No (obviously, two paragraphs answers are included in this category) and defer (in gmail it would be <b>star it</b>) those that you will have to think about. The deferred messages will have to be dealt as Tasks during your day, scheduled according their priorities (decided during the processing time).<br /><br />The game is all about keeping your Inbox (specific folders) empty at the end of their 'processing period' and big *bonus* for ending the day also with "Zero Starred" messages.<br /><br />(Your friends will understand if your Personal messages take a little longer to be answered, thing that won't happen to your bosses/clients ...)<br /><br />I will come later with more accurate statistics about this <i>experiment</i>.<br /><br />The video of the presentation at Google is available in http://www.merlinmann.com/2007/07/26/google-inbox-zero/.Anonymoushttp://www.blogger.com/profile/06859558841565963420noreply@blogger.com1tag:blogger.com,1999:blog-6314215202859927549.post-38026788928461392372007-07-25T19:18:00.000-07:002007-07-25T19:24:46.150-07:00Python for Embedded Systems (reposting from old blog)I hope the <a href="http://www.telit.co.it/product.asp?productId=90">GM862-QUAD</a> was just the begin of the Python-enable devices age in embedded systems.<br /><br />It's a GSM/GPRS QuadriBand module with complete TCP/IP stack and embedded CMOS camera support, which also allows users to run a python application.<br /><br />The embedded python interpreter is a simplified port of the ancient version 1.5.2, and counts with the usual default types:<br /><br />* long<br />* float<br />* complex<br /><br />and modules:<br /><br />* marshal<br />* imp<br />* sys<br /><br />Additionally it also provide some core-specific modules:<br /><br />* MDM: interface between Python and mobile internal AT command handling;<br />* SER: interface between Python and mobile internal serial port ASC0 direct handling;<br />* GPIO: interface between Python and mobile internal general purpose input output direct handling;<br />* MOD: interface between Python and mobile miscellaneous functions.<br /><br />as specified in the manual, but the code, unfortunately isn't free, yet.<br /><br />Hardware platform is not divulged, but it's certainly ARM-based and probably can incorporate a lot of recent free-software development in this area, like, for instance, the maemo for Texas <a href="http://focus.ti.com/general/docs/wtbu/wtbusplashcontent.tsp?templateId=6123&contentId=4758">OMAP</a> platform used in <a href="http://europe.nokia.com/770">Nokia 770/800</a>.Anonymoushttp://www.blogger.com/profile/06859558841565963420noreply@blogger.com0tag:blogger.com,1999:blog-6314215202859927549.post-10595174099478989622007-07-25T19:02:00.001-07:002007-07-25T19:14:45.869-07:00(Late) birthday picturesCheck the pictures organized by <a href="http://www.gwyddion.com/~cprov/jkirner.html">Janice</a> and performed by <span style="font-style:italic;">Amelie</span> (our beautiful female boxer):<br /><br /><a href="http://www.gwyddion.com/~cprov/files/cadeobolo.jpg">Where is the cake ?</a><br /><br /><a href="http://www.gwyddion.com/~cprov/files/cantando.jpg">Singing ... happy birthday to you ...</a><br /><br /><a href="http://www.gwyddion.com/~cprov/files/comendo.jpg">Eating the only snack available</a>Anonymoushttp://www.blogger.com/profile/06859558841565963420noreply@blogger.com0tag:blogger.com,1999:blog-6314215202859927549.post-87769658132460251342007-07-23T17:41:00.000-07:002007-07-25T06:10:25.635-07:00VIVOZAP working on Ubuntu (dapper or feisty)Being as lazy as possible, I've just followed <a href="http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=5698">this article</a>.<br /><br />The <span style="font-weight:bold;">key-thing</span> is:<br /><br />{{{<br />$ sudo rmmod usbserial && sudo modprobe usbserial vendor=0xc88 product=0x17da<br />}}}<br /><br />(apart from the authentication "<phone-number>@vivozap.com.br/vivo" and the dial number "#777")<br /><br />The modem configuration is trivial, and can be done either by editing ppp scripts or using the desktop GUI, doesn't matter.<br /><br />Frankly, I couldn't see any benefit or <span style="font-weight:bold;">hacker</span> options in ppp config.<br /><br />What keeps bothering me is the fact that I have to eject the card, reload the module and insert the card again each time the connection falls or the machine reboots.<br /><br />(obviously I have modified my <span style="font-weight:bold;">/etc/modules</span> with the proper vendor/product, but it doesn't seem to work as expected)Anonymoushttp://www.blogger.com/profile/06859558841565963420noreply@blogger.com1tag:blogger.com,1999:blog-6314215202859927549.post-85513114828613322602007-05-06T01:17:00.000-07:002007-05-07T06:39:26.949-07:00UDS Sevilla<br /><br /><br /><a href="https://wiki.ubuntu.com/UDS-Sevilla">Ubuntu Developer Summit</a> has just started in a <a href="http://www.hoteles-silken.com/hoteles/presentation.php?idmenuleft=0&deploy=true&idhotel=5">gorgeous venue in Sevilla</a>.<br /><br />The meeting atmosphere is great !Anonymoushttp://www.blogger.com/profile/06859558841565963420noreply@blogger.com0tag:blogger.com,1999:blog-6314215202859927549.post-8945269095856469502007-04-17T20:09:00.001-07:002007-04-17T20:09:53.601-07:00IPROUTE2 is your friendI've lost several hours on the multiple uplink in a single machine problem, tried several tutorials & How-To (most of them including iptables mangle marks crap), but discovered this simple and objective document about IPROUTE which sorted it in few simple lines:<br /><br />http://lartc.org/howto/lartc.rpdb.multiple-links.html<br /><br />Thank you, LARTC guys.Anonymoushttp://www.blogger.com/profile/06859558841565963420noreply@blogger.com0tag:blogger.com,1999:blog-6314215202859927549.post-86763984285884983112007-04-17T08:03:00.000-07:002007-04-17T10:23:06.638-07:00New blogHello World !<br /><br />BTW, Google Accounts migration sucks !!!!Anonymoushttp://www.blogger.com/profile/06859558841565963420noreply@blogger.com0