Friday, June 2, 2017

Good snapcrafters use plugins; great snapcrafters steal

When I am snapping a new piece of software I usually find myself googling for similar snapcraft.yaml. This is somewhat embarrassing and looks like I don't know what I am doing.

Well, that's very often precisely the case. There are amazing applications out there, but they require some complex plumbing to work nicely, ask Debian maintainers ...

There is a vast and welcoming documentation for creating a snapcraft project from scratch, a large collection of plugins and a precise method for reaching strict confinement. It's much easier than it use to be.

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 ?)

One can always find, download, unpack and inspect snaps that you think have solved problems similar than yours:

$ snap find cassandra
Name       Version  Developer  Notes  Summary
cassandra  3.7      ev         -      Cassandra distributed database

$ snap download cassandra
Fetching snap "cassandra"
Fetching assertions for "cassandra"

$ ls -lh cassandra_66.*
-rw-rw-r-- 1 cprov cprov 5.5K Jun  2 10:05 cassandra_66.assert
-rw-r--r-- 1 cprov cprov  66M Jun  2 10:05 cassandra_66.snap

$ unsquashfs -n cassandra_66.snap meta/snap.yaml
...

$ cat squashfs-root/meta/snap.yaml
apps:
  cassandra:
    command: command-cassandra.wrapper
    daemon: forking
    plugs:
    - network
    - network-bind
    - mount-observe
...

But this it's not particularly efficient or pleasant to download 66+ MB just for checking a 1K YAML file.

It is lot easier to ask the Snap Store:

$ 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
apps:
  cassandra:
    command: command-cassandra.wrapper
    daemon: forking
    plugs:
    - network
    - network-bind
    - mount-observe
...

Friday, February 13, 2015

MicroXchg 2015 Berlin

TL;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).

Okay, you are interested. Let's go to the (very opinionated) details ...

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 microXchg 2015 team for the event organization and I hope we can meet again next year.

It started with an interesting talk from James Lewis 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.

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 Conway's law, where a system resembles its target organization and vice-versa.

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.

Very nice opening, I might say.

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).

Chris Richardson, 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).

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 lingua franca java) language/framework diversity very nicely. "There is always one best tool for each job", a non-hammer mantra.

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).

Fred George 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.

A panel session closed the day, unasked questions and new answers, more docker, microservices experiences, etc ...

Second day started with Stefan Tilkov 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)

Adrian Cockcroft presented the state of the art in microservices, obviously illustrated with his breakthrough experiences in Netflix but also other success stories like GILT and WalmartLabs, 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.

Sam Newman, 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 (circuit-breakers)

The conference ended with a very good (one of the best IMO) talk from Chad Fowler describing the transition from the Monolitic Ruby+RDBMS  Wunderlist 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.

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).

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).

That was it ...

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.

There seems to be a lot of innovative, concrete and honest efforts surrounding the microservices concept to move it way beyond the early 21th century empty-buzzworlds hall and actually help software designers to strive in this whole new (and wild) world, where speed is getting increasingly more important than anything else.

Monday, July 20, 2009

Launchpad API for PPAs - part 3

Continuing with Launchpad API for PPA, let's illustrate how to copy specific sources from one archive to another.

An authenticated user may copy sources (including their binaries or not) from any public archive to any PPA he has permission to upload using syncSource

One practical example is backporting recent SRUs to LTS series using your PPAs. Let say, we want the latest libvirt version available for testing in your Hardy instance.

{{{
ubuntu = lp.distributions['ubuntu']
primary, partner = ubuntu.archives
ppa = lp.me.getPPAByName(name='ppa')
ppa.syncSource(
source_name='libvirt', version='0.6.1-0ubuntu5.1',
from_archive=primary, include_binaries=False,
to_series='hardy', to_pocket='Release')
}}}

libvirt - 0.6.1-0ubuntu5.1 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.

Tuesday, June 30, 2009

Behavior-driven testing (BDT) support in python

Today Sidnei called my attention to Pyccuracy and Behavior-driven Testing

I decided to give it a try.

Started by repackaging the unofficial ubuntu packages I found in http://deb.gabrielfalcao.com/unstable/ in my PPA (basically, for fun).

https://edge.launchpad.net/~cprov/+archive/sandbox

There you can find python-pyccuracy and its dependencies (python-pyoc and python-selenium).

Install python-pyccurancy.

{{{
$ sudo apt-get install python-pyccuracy
}}}

Install the Selenium RC, if you don't have it yet, and run the server.

{{{
$ wget http://release.seleniumhq.org/selenium-remote-control/1.0.1/selenium-remote-control-1.0.1-dist.zip
$ unzip selenium-remote-control-1.0.1-dist.zip
$ java -jar selenium-remote-control-1.0.1/selenium-server-1.0.1/selenium-server.jar
}}}

Then you can use pyccuracy_console to run its own test suite which uses BDT.

{{{
$ pyccuracy_console -d /usr/share/pyccuracy/tests/acceptance/action_tests/ -p "*en-us.acc"
}}}

To be continued ...

Sunday, June 14, 2009

PPA support on `software-properties`

Based on the discussion we had at UDS, Michael Vogt, Robert Collins and I came up with a easier and non-evil way of installing Launchpad PPA in Ubuntu systems.

The approach is very simple:

detect PPA installation and automatically fetch the corresponding signing key, so the package inventory can be reloaded successfully at the end of the process.

No magic, the same look and feel ubuntu users are used to, and at the end, the job is done with no risks.

PPAs are Third-party Softwares

In this example, we will use Ubuntu Mozilla Daily PPA, so you can add:

The repository deb line listed on the PPA page:


Or simply use the supported shortcut for PPAs:

ppa:ubuntu-mozilla-daily/ppa

Click on Add Source and that's it, PPA and signing key enabled.

(right now the Authentication tab does not reload automatically, you have to click Restore Defaults to see the new key. I'm working on a fix).

A testing version of the package is available in my Experimental PPA (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)


Monday, June 8, 2009

Your firewall does not like keyserver.ubuntu.com ...

... or any other non-80 service on the web

No problem, if you can access a server which is not submitted to the same access restrictions here is one solution.

First make the service hostname to resolve as localhost in your system editing /etc/hosts so its first line looks like:

{{{

127.0.0.1    localhost keyserver.ubuntu.com

}}}

That done, you can setup an secure ad-hoc tunnel with SSH in a terminal.

{{{

ssh <username>@<server> -L 11371:keyserver.ubuntu.com:11371 -N

}}}

You can put that in a script and run it for you session OR if you like GUI apps, try installing gstm (read more).

 

 

 

 

Posted via web from cprov's posterous

Wednesday, April 15, 2009

Launchpad API for PPAs - part 2


Continuing with Launchpad APIs for PPAs, let's illustrate how to find sources within a PPA.

Sources can be found, basically, by name, version, distroseries and status by calling getPublishedSources on a target archive.

 >>> def test_source_lookup(lp):
...     ppa = lp.people['ubuntu-mozilla-daily'].archive
...    ubuntu = lp.distributions['ubuntu']
...    jaunty = ubuntu.getSeries(name_or_version='jaunty')
...    last_firefox = ppa.getPublishedSources(
...        source_name='firefox-3.5', status='Published', distro_series=jaunty,
...        exact_match=True)[0]
...    print last_firefox.displayname

When it run, the output is:

firefox-3.5 3.5~b4~hg20090415r24712+nobinonly-0ubuntu1~umd1 in jaunty

Play with the arguments, also instead of fetching the first item (most recent one) from the collection you may iterate over it.

Posted via web from cprov's posterous

Wednesday, March 25, 2009

Launchpad API for PPAs


I've received few complains about how hard it is to extract information from the Launchpad API documentation for managing PPAs.

I will start a series of post with useful actions for PPA users and owner.

Start by reading the Launchpad API help page and familirize yourself with it. For experiments, I usually use a setup script and jump into a interactive python section.

$ python -i lpapi_setup.py
>>> launchpad
<launchpadlib.launchpad.Launchpad object at 0x13eb0d0>

Now, we can find out what's my PPA signing-key fingerprint:

>>> ppa = launchpad.people['cprov'].archive
>>> print ppa.displayname
PPA for Celso Providelo
>>> print ppa.signing_key_fingerprint
DCAC43EE807ADF67495AD95809C5BECB0DC0F66C

to be continued ...

Posted via web from cprov's posterous

How cool is that ?


I guess I will have to use it a little bit more before saying ...

Posted via web from cprov's posterous

Thursday, September 4, 2008

Ubuntu Developer Week

(Yes, I know the event is almost gone ... what can I do ? I'm always late)

During this Ubuntu Developer Week I had other two opportunities to talk more about Soyuz and the beloved PPAs.

"Soyuz and all that Jazz" and "Introduction to PPAs" sessions were very exciting, a lot of interest was manifested by the audience.

I could clearly notice that they were avidly looking for ways to be more productive by making collaboration an intrinsic characteristic of their workflows.

IMO, that's exactly where Launchpad stands up compared with other systems, allowing an almost flat learning-curve for users with any level of expertise. A really smooth and intuitive path from the fix to the anyone in need of it, and also the other way around, from the issue to anyone who can fix it.

I have to say that, as a launchpad developer, I'm really proud to be part of all this!



Tuesday, September 2, 2008

Thursday, August 21, 2008

Sun SPOT

Another very interesting product/idea coming from Sun in direction to the 'Internet of things' (wireless sensor networks), the SunSPOTs

However, IMHO, it can't go any further than 'another shiny geek gadget' 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)

Monday, August 11, 2008

DebConf8

Before start posting my notes about DebConf8 I would like to say that it has been a great time.

The conference was amazingly well organized, kudos to the debian-ar team.

Mar del Plata is a very pleasant city which leads to a very good impression of Argentine (my first time here).

I've attended very interesting presentations already, stay tunned ...

Saturday, May 31, 2008

Yet another FOSS model

It's been a long time since my last post, that's why I've chosen such a interesting (and controversial) theme.

I've been using and contributing to (not expressively, though) FOSS for a relatively long time, about 6 years. During this time the most intriguing and hard-to-answer question about it was:

Does it really work ? if so, how ?


Many of you, who already know the benefits of FOSS and read other passionate blog posts about it, might quickly say:

Duh, yes, look around !

Amongst with other thousand of passionate images about freedom [typical needs citation point, I apologize in advance] contrasting with evil and illegal practices played by the current proprietary software vendors.

However, I'm afraid this approach is not compatible with the need the FOSS idea has to establish itself simply as:

A more appropriate way of producing and maintaining software

First things first ! That's all it has to be.

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 free-software by itself will fix those problems is very naive, to not say irresponsible.

Enough philosophy for a admittedly 'narrow-mind' guy. Let's move on.

My attempt to answer such question, replacing all passionate arguments with pragmatic ideas, goes through a rough and simple logic model:

[Be aware that I could not find any explicitly compatible references, please feel free to disagree with my points]

FOSS benefits users because they have the opportunity to use and improve the collective code to serve their own purposes;

FOSS benefits are even more visible in the upstream project where all individual contributions (IC) are consolidated as the upstream momentum (UM):

Equation1: UM = Sum(IC)

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 UM;

Within a FOSS upstream community, the individual benefits (IB) is equals to the upstream momentum (UM) times the level of shared interest (SI) established with the upstream community.

Equation2: IB = UM * SI

The equation above describes the magic of FOSS, given a higher level of shared interested each coin you put in the system will return an extra parcel of all the other coins already running in the system.

So, FOSS works (duh!), it's just a matter of selecting the highest upstream momentum and shared-interest to get the best individual benefit (IB).

Regarding the fact that your contribution by itself might increase the upstream momentum of a given project, for most of the cases, it can be ignored because the difference will be insignificant and thus the upstream momentum 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.

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 shared interest you should choose the one with higher momentum, it will produce the best benefit ... That's what could be called the FOSS natural selection rule.

You might have noticed that I haven't mentioned yet the contribution cost (CC) and how it should be considered when in the FOSS scenario.

The contribution cost affects how profitable (P) the relationship between the individual and the upstream community is, as in:

Equation 3: P = IB / CC or expanding P = UM * SI / CC

Obviously we know that a contribution cost 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 zero. However the same standards apply to the profitable 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.

It is very important to note that the vast majority of FOSS project is sustained by unprofitable 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).

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.

Users, contributors, companies, they all (can) represent the same role in a FOSS community, should look for profitable projects. The ones :
  1. Having highest upstream momentum;
  2. Having the minimum contribution cost;
  3. They can establish the maximum shared interested;
On the other hand, FOSS upstream communities should work make their project more profitable, maximizing shared interest and contribution cost.

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:
  • Shared interest is always higher in small and encapsulated FOSS projects. Shared libraries, pluggable components, external APIs are the way to go.
  • Contribution cost is smaller when the project well documented, code is accessible & readable and workflows are simple, clear and honest.
That's enough for today. Thanks for reading my notes.

Friday, February 15, 2008

About Branches and PPAs

I've recently experienced a very successfully story regarding the benefits of using PPA in Launchpad, that I'd like to share with you.

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 not the case. So, I'm writing this as a mere enthusiast.

Going straight to the point, some days ago, I've got curious about Twitter (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 boring ...

I thought it could be better if they provide a standalone client and voilĂ , I found the upstream project and the ubuntu gutsy package

Internet is really fast above the equator.

I've installed '1.0~beta-5', but my dark theme didn't fit the darkblue text very well :(


Checked hardy version to see it got better support for GTK themes and it didn't.

I didn't think twice and took the liberty for quickly registering a product in Launchpad and imported the upstream SVN branch.

Then, expecting to get very lucky, after checking that the build dependencies where constant, I realized it could build on gutsy.

I've downloaded the hardy sourcepackage:

$ dget https://edge.launchpad.net/ubuntu/hardy/+source/gtwitter/1.0~beta-6ubuntu1/+files/gtwitter_1.0~beta-6ubuntu1.dsc

After unpacking and applied the diff, I've created registered and pushed a branch for the 1.0beta6 package series so I could keep track of my changes.

I already have a activated PPA, but following PPAQuickStart describes it in a very detailed way.

Felling brave, again, I've simply mocked a smaller version and uploaded a backported version to my PPA.

$ cd gtwitter-1.0beta
$ dch -D gutsy -b -v 1.0~beta-6ubuntu1~gutsy1
[type a changelog]
$ debuild -S -sa
[type your gpg passprase twice]
$ cd ..
$ dput my_ppa-production gtwitter_1.0~beta-6ubuntu1~gutsy1_source.changes

After 5 minutes I got an email from Launchpad informing that the source was accepted.

Got extremely surprised when, 40 minutes later, it was already successfully built (it is getting faster...)

[enabled my PPA in /etc/apt/sources.list]
$ sudo apt-get update
$ sudo apt-get install gtwitter
...
Setting up gtwitter (1.0~beta-6ubuntu1~gutsy1) ...

...

It is still dark and unreadable, true, but works very well in gutsy.

What's the problem ?! I do have the code :)

Using my non-existent c#-fu, I've managed to change the code the way I wanted , to use gray fonts.

My change will probably be considered offending by the upstream maintainers, but shhh, they don't need to know right now.

(you've gotta love the indentation pattern used by them)

$bzr ci -m "trying a new version, using 'gray' fonts to match my dark theme."
...
$bzr push

Code changes are there, publicly available to embarrass me for the rest of my life:

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 :)

$ dch -D gutsy -b -v 1.0~beta-6ubuntu1~gutsy2
[another creative changelog message]
$ debuild -S

[note that I've omitted the '-sa' option, the orig.tar.gz doesn't need to be sent again, it's already published]
$ cd ..

$ dput my_ppa-production gtwitter_1.0~beta-6ubuntu1~gutsy2_source.changes

5 minutes, I had the notification in my mail box, another successfully upload :)

Other 40 minutes and I got the binary I wanted.

$ sudo apt-get update
$ sudo apt-get install gtwitter
...
Setting up gtwitter (1.0~beta-6ubuntu1~gutsy2) ...

...




That's all, folks.

It's quite possible that you hated it ... No problem, all you need is:

bzr branch lp:gtwitter/1.0-beta6

to easily make it the way you want and then wait 45 minutes to spread the free-software joy amongst your friends.

Sunday, August 19, 2007

"Inbox Zero" in action

Recently, I was suggested to take a look at Inbox Zero - action-based email" article by Merlin Mann (of http://www.43folders.com).

In few words, it basically introduces a programmatic way to process your incoming messages in order to maximize the actual task demanded by them.

I found the approach very 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.

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.

Part of the admitted inefficiency is acceptable 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.

Well, the title of the post says "in action", so let's go for it:

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.

That's gone ! I've only preserved company/wide-topic tags (that's what gmail calls it, actually) and they are:

* Gwyddion: all messages related to the Gwyddion scope. it includes system/server messages, development & bugs mailistings;
* Async: all messages related to Async, including kiwi-dev and internal communication;
* Canonical: Canonical communications and Launchpad development messages;
* Ubuntu: Ubuntu development messages;
* Personal: everything else that do not fit in the categories above, including several developments maillists like Trac, Twisted and MSPGCC.

What is the aim of this severe change ?

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.

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.

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.

Summing up, considering that my core-hous varies between 8 and 9 hours a day, I expect to spend:

* 8 x 3 minutes = 24 minutes processing Canonical messages;
* 4 x 3 minutes = 12 minutes processing Gwyddion & Async messages;
* 0 minutes dealing with Personal messages during core-hours;

Right, it is still 36 minutes, about 5 % of my day, 'dealing' with a pile of messages.

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.

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 ?).

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 star it) 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).

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.

(Your friends will understand if your Personal messages take a little longer to be answered, thing that won't happen to your bosses/clients ...)

I will come later with more accurate statistics about this experiment.

The video of the presentation at Google is available in http://www.merlinmann.com/2007/07/26/google-inbox-zero/.

Wednesday, July 25, 2007

Python for Embedded Systems (reposting from old blog)

I hope the GM862-QUAD was just the begin of the Python-enable devices age in embedded systems.

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.

The embedded python interpreter is a simplified port of the ancient version 1.5.2, and counts with the usual default types:

* long
* float
* complex

and modules:

* marshal
* imp
* sys

Additionally it also provide some core-specific modules:

* MDM: interface between Python and mobile internal AT command handling;
* SER: interface between Python and mobile internal serial port ASC0 direct handling;
* GPIO: interface between Python and mobile internal general purpose input output direct handling;
* MOD: interface between Python and mobile miscellaneous functions.

as specified in the manual, but the code, unfortunately isn't free, yet.

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 OMAP platform used in Nokia 770/800.

(Late) birthday pictures

Check the pictures organized by Janice and performed by Amelie (our beautiful female boxer):

Where is the cake ?

Singing ... happy birthday to you ...

Eating the only snack available

Monday, July 23, 2007

VIVOZAP working on Ubuntu (dapper or feisty)

Being as lazy as possible, I've just followed this article.

The key-thing is:

{{{
$ sudo rmmod usbserial && sudo modprobe usbserial vendor=0xc88 product=0x17da
}}}

(apart from the authentication "@vivozap.com.br/vivo" and the dial number "#777")

The modem configuration is trivial, and can be done either by editing ppp scripts or using the desktop GUI, doesn't matter.

Frankly, I couldn't see any benefit or hacker options in ppp config.

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.

(obviously I have modified my /etc/modules with the proper vendor/product, but it doesn't seem to work as expected)

Sunday, May 6, 2007

UDS Sevilla


Ubuntu Developer Summit has just started in a gorgeous venue in Sevilla.

The meeting atmosphere is great !