Today we've released 4.13 which is probably the best KDE Applications release ever :)
It also marks the second release we do with a four months schedule instead of a six month one. I think we've ended up with a pretty nice cadence in which we are faster delivering features and bugfixes to users, which at the end is what is important, since the earlier people get the features the earlier they'll find the bugs (let's accept it, all software has bugs) and the earlier the bugs are found the earlier they can be fixed. So basically it's faster progress :)
We have also made good our promise to keep our tests passing, as you can see everything from this release is green (kde-workspace is not green but is not part of the 4.13 release). So kudos to all developers for being awesome in that regard too.
Let's all celebrate on this release but not forget we need to keep working full steam ahead on the releases of KDE Frameworks 5, Plasma 2014.06 and KDE Applications 4.14.
Finally I'd like to remind you that most of the people doing KDE development are volunteers and they invest their time in making this awesome software for you to use for free.
Lots of them even spend time to travel abroad to meet each other in Sprints were they do concentrated hacking for a few days, so if you appreciate the work they do in those Sprints please donate some money so we can actually help them travel and we can make more Sprints happen :-) http://www.kde.org/community/donations/
As anecdote, I had the pleasure of meeting the guys from the KTP Sprint this Friday and after dinner they went back to hacking instead of joining some of us for some beers. That is dedication!
Making good on a long stranding promise with webchick, the DA's Holly Ross rolled her first patch, and inadvertently became the 2014th contributor to Drupal 8 at NYC Camp 2014!
NYC Camp 2014 ended with a bang that perfectly *put a bird* on what was a really tremendous 14th event put on by the NYC Drupal community. Sunday was the final day on which everyone is encouraged to come back and sprint on Drupal code or a project they are working on or to get started contributing with help from a Drupal mentor. Just over 120 attendees came back for Sprints Day, coordinated by Irene Meisel, Cathy Theys & Fureigh.
And we had a very special attendee who with just such mentoring was able to make her first contribution. On Saturday during their panel discussion at the United Nations with UN CITO Atti Riazi, Drupal 7 co-maintainer Angie "webchick" Byron and Drupal Association executive director Holly Ross reaffirmed their vow that webchick would help her commit her first patch to Drupal 8, and set a date of the next day (the last day of the camp which was given over to NYC Camp sprinting.)
Also on Saturday at NYC Camp, Alina Mackenzie had discovered an issue in the multiligual system documentation, where the language manager interface docblock was returning implementation details (methods should never return implementation details; it belongs to the implementation to do that.)
As Holly was going through the issue queue to pick something to work on, she came across this one, which since it affects the Drupal's Multilingual system was perfect for the United Nations, which is preparing to become the largest multilingual Drupal deployment in the world. Alina had a proposed resolution, so with a little mentoring from Cathy Theys, Holly rolled her 1st patch, which passed SimpleTest.
However SimpleTest couldn't catch another inline comment on the sort method itself which also contained implementation details, that tstoeckler noticed when he was reviewing Holly's patch. A temporary setback, Holly quickly rolled a 2nd patch, and even included an interdiff. That was enough to satisfy tsoeckler and he marked the new patch RTBC.
YesCT also added her RTBC (though not before noticing a bug in d.o. node ownership when the node is edited by and admin) and webchick commited the patch at 5:00 pm, and thus at the exact end of NYC Camp.
It was then that everyone noticed an amazing coincidence. Holly had just become the 2014th contributor to Drupal 8. At NYC Camp 2014.
Stay tuned for more highlights from NYC Camp 2014
The Calligra team has released a bugfix version 2.8.2 of the Calligra Suite, and Calligra Active. This release contains a few important bug fixes to 2.8.0 and we recommend everybody to update.Bugfixes in This Release
Here is an overview of the most important fixes. There are several others that are not mentioned here.General
- Move Export to PDF command to the Export menu section instead of the Print section for conformance with other office suites (bug 332603).
- Fix “Missing import filter” bug when saving if not extension is specified (even if selecting a File type is set to a format) (bug 328975).
- Use native file dialogs on Windows.
- Make Rich Text property false by default for Text Editor form widget. Rich Text often causes misbehaviour.
- Fix resetting the slider spin box when double clicking on it (bug 330165).
- Ignore tablet press/release events which did not produce any sane buttons (bug 331925).
- Added support for ‘evdev’ tablets (bugs 332239, 331572, 329641).
- Save line smoothing options between runs of Krita. This is really needed for low-level tablets like Genius to filter the trajectory they report to us.
- Make Krita auto-recognize axes labels of Evdev tablets. The labels are stored in a special property of the XInput device.
- Recognize Surface Pro 2 tablets on Windows (bug 331922).
- Fixed size of predefined images.
- Set default gradient to alpha (bug 329008).
- Clean up the layout of the Transform tool.
- Hide unused settings for stroke in the Path tool (bug 331556).
- Fixed memory leaks in brush handling.
- Fixed memory leaks when resources fail to load.
- Fixed memory leaks when creating strokes (bug 331592).
- Don’t crash on creating a file layer in Krita Gemini (bug 332871).
- Improved splash screen.
- Fix loading plugins for Krita Gemini.
- Save tags with special characters properly (bug 332708).
- Fix removing of tags, don’t load or save dummy tags.
- Add import for PSD layer groups (bug 289857).
- Fix translation issues.
- Fix startup of Krtita Sketch and Gemini.
- The source code is available for download: calligra-2.8.2.tar.xz.
- Calligra binaries are available for download for many operating systems.
Calligra is part of the applications from the KDE community. See more information at the website http://www.calligra.org/.
Warning: not Python
A friend recently built out a site which amongst other things, in some cases features large pages of animated GIFs. There is perhaps nothing more wasteful of an Internet connection than such a page, especialy when the “animation” is actually continuous tone real colour videos converted from some other format.
[Whoops, removed utterly wrong explanation of GIF compression. GIFs aren’t run-length encoded, they use LZW coding, so the description and example that previously appeared here were completely incorrect]
This is pretty much how photos and real-world videos rich in varied tones compress, and so using GIF to encode files like these is a horrible choice.
So why is it popular, then? Well, compatibility of course. GIF has been around since at least the 90s, if not earlier, and has been supported by all browsers for over a decade.
Unless you’ve been living under a rock, you might know that in recent years modern web browsers grew a <video> tag. Great, portable standardized containers for video!
Except it doesn’t work like that at all, because politics and money, of course. As can be seen from Video Formats and Browser Support, there is no single video codec that satisfies all popular browsers.
So unless we encode our videos at least twice (doubling at least storage costs), we can’t portably support the HTML <video> element. Even if a single encoding was supported by all modern browsers, that still leaves those less fortunate people stuck with ancient browsers out in the cold.
Still, each time I click one of these GIF-heavy pages and waiting 30 seconds for all 50MiB of it to load, I’m left wondering if there is a better way. And so comes a little head scratching, and an even littler proof of concept…
My little proof of concept doesn’t quite work well for all GIFs yet, though not surprising, since I only spent an hour or so on it. The general idea is:
* Figure out the maximum size of any GIF frame (since GIF frames may be variable)
* Instantiate a class that uses the information stored in the JSON file to modify the DIV’s background-image-position CSS property at timed intervals, such that all but the image for the current frame is clipped by the DIV’s dimensions
* Success! 8.4MiB GIF is now a 377KiB “animated JPEG”. You can try out a final rendering here (and full page here). Note that many of the GIFs don’t quite render properly yet, and their timing is way off, but I’m certain the output size is representative.
Note also the browser’s CPU usage. It seems at least comparable to the same page full of GIFs, which I was quite surprised by. With Firefox, when the page is running in a background tab, CPU time is minimal.
No doubt there are issues with doing this in some browsers - for example, at the very least, the produced JPEGs are huge when they are decompressed. For our example GIF, this requires at least 40MiB RAM in the browser to decompress (and possibly 56MiB if the browser stores alpha information too)
In any case, I think there is room to improve on this technique and maybe produce something suitable for a live web site.
The original web page that caused me to think about this had 50MiB of GIF files. Recompressed, they come out as just 6.4MiB of JPEGs.
I've taken over "maintaining" DVswitch from Ben Hutchings a few years ago, since Ben realized he didn't have the time anymore to work on it well.
After a number of years, I have to admit that I haven't done a very good job. Not becase I didn't want to work on it, but mainly because I don't have enough time to fix DVswitch against the numerous moving targets that it uses; the APIs of libav and of liblivemedia are fluent enough that just making sure everything remains compilable and in working order is quite a job.
Most of these (apart from DebConf and FOSDEM) maintain local patches which I've been wanting to merge into the upstream version of dvswitch. However, my time is limited, and over the past few years I've not been able to get dvswitch into a state where I confidently felt I could upload it into Debian unstable for a release. One step we took in order to get that closer was to remove the liblivemedia dependency (which implied removing the support for RTSP sources). Unfortunately, the resulting situation wasn't good enough yet, since libav had changed API enough that current versions of DVswitch compiled against current versions of libav will segfault if you try to do anything useful.
I must admit to myself that I don't have the time and/or skill set to maintain DVswitch on an acceptable level all by myself. So, this is a call for help:
If you're using DVswitch for your conference and want to continue doing so, please talk to us. The first things we'll need to do:
- Massage the code back into working order (when compiled against current libav)
- Fix my buildbot instance so that my grand plan of having nightly build/test runs against libav master actually works.
- Merge patches from the suse and CCC people that look nice
- Properly release dvswitch 0.9 (or maybe 1.0?)
See you there?
After a month hiatus, at a new timeslot we resume our weekly Migrate in core Google Hangouts, focusing on Drupal 7.
The time is 3PM in Vancouver, 6PM in Boston, midnight in Europe (sorry) and 6AM in Perth -- coordinating across this many timezones was very hard and Europe got the short stick. Sorry.
Common situations where nc can be used:
- Check connectivity between two nodes. I had to learn hard way that ping (read all ICMP) based protocols are not always the best way to judge connectivity. Often ISPs set ICMP to lower priority and drop it.
- Single file transfer.
- Testing of network applications. I have written several clients and loggers for logstash and graphite which couldn't have been easier to test without nc.
- Firing commands to remote servers where running a conventional tcp/http server is not possible (like VMWare ESXi)
- nc -l <port>
Netcat starts listening for TCP sockets at the specified port. A client can connect and write arbitrary strings to the socket which will be reflected here.
- nc -u -l <port>
Netcat starts listening for UDP sockets at the specified port. A client can write arbitrary strings to the socket which will be reflected here.
- nc -l <port> -e /bin/bash
Netcat starts listening for TCP sockets at the specified port. A client can connect and write arbitrary commands which will be passed to /bin/bash and executed. Use with extreme caution on remote servers. The security here is nil.
- nc -l -k <port> -e /bin/bash
Problem with above command is that nc gets terminated as soon as client disconnects. -k option forces nc to stay alive and listen for subsequent connections as well.
- nc <address> <port>
Connect as client to the server running on <address>:<port> via TCP.
- nc -u <address> <port>
Connect as client to the server running on <address>:<port> via UDP.
- nc -w <seconds> <address> <port>
Connect as client to the server running on <address>:<port> via TCP and timeout after <seconds> of being idle. I used it a lot to send data to graphite using shell scripts.
A cool example to stream any file's content live (mostly used for logs) can be found at commandlinefu.
As you very well may know, we are currently running a campaign for federation and privacy. The campaign ends Friday, and we’re close to meeting our second milestone. Anything you can do to help us out seriously helps a lot.
But you may wonder… where does your money go? How is your money used? Well, good news! We’re revealing our full finances, and I’m giving a full breakdown of how we spent the money we raised in our last campaign. I hope by the end of this post you’ll both be well informed about how your money goes to use, and also agree that as in terms of output from your donation, donating to MediaGoblin is a great use of your money!
So, first of all, here’s the file. (Update: this file is waived into the public domain under CC0 1.0, so feel free to use/modify as you see fit!) It’s plaintext, so you can open this in any text editor, but it’s specifically formatted as a ledger file. (We’re using some metadata in there which requires using git master as ledger 3 has not been released yet, though if you remove the lines that look like comments embedded in the entries, they should work fine on ledger 2.) Note, this is not the official record of MediaGoblin’s expenses/income. The FSF maintains their own books of MediaGoblin… it just so happens that in order to make sure that I am planning things correctly, I currently duplicate their efforts. The file you’re getting here is thus my own records. It may not be following standard accounting practices… this is mostly for my planning purposes. :)
Also note that for simplicity’s sake, the file I’ve given gives only the money raised during last year’s campaign and after, prior to this year’s campaign starting.
Okay! All that said, let’s get on to the finances, right? Let’s run a quick command to get the full balance::$ ledger -f gmg_campaign.ldgr bal $1177.10 Assets:FSF account $50250.90 Expenses $3899.46 Campaign $200.00 Advertisement $440.00 Graphic design $3259.46 Rewards $479.48 Figurines $83.03 Postcards $752.07 Shipping $1620.70 Shirts $324.18 Stickers $40231.36 Development $30481.36 Chris Webber $4500.00 Natalie Foust-Pilcher $5250.00 OPW $5142.80 FSF administration $977.28 Travel $560.45 Chris Webber $416.83 Jessica Tallon $-51428.00 Income $-5000.00 Directed grants $-46428.00 General donations -------------------- 0
Wow, okay! That’s a lot of data. Maybe… too much data? If you aren’t familiar with double ledger accounting or with the ledger command line accounting tool, that might look confusing. Don’t worry, we can break this down step by step.
Let’s start with income::$ ledger -f gmg_campaign.ldgr bal ^Income $-51428.00 Income $-5000.00 Directed grants $-46428.00 General donations -------------------- $-51428.00
Why is the income negative? Don’t worry, that’s normal in double ledger accounting, if confusing to newcomers. In double ledger accounting, money is never “lost”… it always comes from and goes to someplace. Hence income is negative… the money we’re getting is moving initially from these accounts, but since they start at 0, they show up as negative. If it helps, forget there was ever a negative sign there.
As you can see, there are two sub-accounts under income. There’s $5000 that we received for a specific grant… this grant is currently in progress and being completed by Natalie Foust-Pilcher. I’ll get to that later. The rest of the money ($46428) we got in is labeled “general donations”… this is money we received in the campaign that is more flexible. Note that I don’t keep track of each individual donation transaction in the file… the FSF does that. I’m just mirroring the data I’m pulling down from them.
Okay, so that’s the money we got. Where did it go? Let’s look at our assets (money we have) and expenses (money we spent). For simplicity’s sake, we’ll keep the data we have restricted to one level deep:$ ledger -f gmg_campaign.ldgr bal ^Assets ^Expenses --depth=2 $1177.10 Assets:FSF account $50250.90 Expenses $3899.46 Campaign $40231.36 Development $5142.80 FSF administration $977.28 Travel -------------------- $51428.00
(You’ll notice the combined amount here is the same number as the income we looked at above, but positive!)
Okay, keeping this at a 2-level-deep structure… this is easy to read. As you can see, we’ve still got $1177.10 in our account at the FSF as a safety buffer, and we’ve spent $50250.90 of that.
That might not be easy to really get a grasp on just looking at in text form, so let’s see where that money currently is, in pie chart form:
Okay! Now that’s a bit easier to read. From the chart it’s easy to see that the vast majority of money went toward development itself. Actually, if you combine this with travel (ie, reimbursement for myself and another contributor speaking about MediaGoblin or participating in MediaGoblin hackfests), that’s over 80% of the budget right there directly to the most important part of the project… developing the project itself! (We’ll come back to the development section in a moment… but first let’s get the smaller slices of the chart out of the way.)
As mentioned above, the 2.3% in the “unspent / available section” is the bit we still have in the bank at the FSF. Keep in mind that this is before our current fundraising… we had a small amount left in the bank; not terribly much, but enough to keep a buffer.
Next up there’s the 10% “FSF administration” portion of the expenses. The Free Software Foundation is our fiscal sponsor… they handle a number of things for us, including running the infrastructure portion of the campaign. If we had gone with a proprietary crowdfunding system, we may have seen similarly a 5% slice going into the crowdfunding platform hosting overhead. However, as fiscal sponsor the FSF does much more for us than just hosting funding infrastructure; they also help handle employment contracting, sending out tax forms, having financial stewardship that ensures that the money will be used in a way that’s in alignment with their mission, tax deductability of donations, processing bitcoin donations, and promotion of the project. Other things too that I’m missing, I’m sure. So, 10% seems like a big percentage possibly, but they’re doing a lot for us (including basically handling our human resources overhead), and if you consider that this money goes to a nonprofit that supports free software… not bad!
So the last of the not-directly-development-related slices is the campaign expenses themselves. Let’s focus on those details right now, shall we?$ ledger -f gmg_campaign.ldgr bal Campaign $3899.46 Expenses:Campaign $200.00 Advertisement $440.00 Graphic design $3259.46 Rewards $479.48 Figurines $83.03 Postcards $752.07 Shipping $1620.70 Shirts $324.18 Stickers -------------------- $3899.46
So, the campaign expenses were 7.6% of the above budget. Of that, the vast majority of the campaign-related clearly went towards the rewards themselves (83.6% of the campaign expenses, but just 6.3% of the actual entire budget). This actually is not bad… I once heard it said that “many crowdfunding people lose their shirts over sending out shirts”, and that thankfully isn’t the case here… the vast majority of the money we brought into the project got to go into advancing the project itself. It is a big chunk, but not so big as to take away from the project. But yes, you can see that if you’d prefer to not get the goodies that will increase your impact, but at the cost margin here accepting a reward is still perfectly okay if you’d like to do that! (And we can’t blame you, we do have some cool rewards.) Shipping did factor in hugely, especially international shipping, which is very expensive these days… as long as you add to your donation when selecting a reward for international shipping though, that should be okay.
Aside from that, we did put in $200 as an experiment on advertising the campaign on Reddit last year… though we’ve gotten a lot of our donors from Reddit, I’m afraid I can’t say that was cost effective for us (oh well, I guess it’s paying back a bit for all the publicity we get from Redditors), and it was only 0.4% of the budget, and a lesson learned. We also paid longtime MediaGoblin contributor and original lead graphic designer of the project Jef van Schendel to do some design for last year’s campaign, which thankfully we were able to reuse a good portion of for this year’s campaign. Given all that Jef has done for the project, we were more than happy to pay him a bit for this help.
As for travel, mostly I consider this rolled in with the development section, but oh well, we’ll give it its own paragraph anyway. The $560.45 was from a bit of traveling I did promoting MediaGoblin, and the $416.83 was from Jessica Tallon (our Outreach Program for Women participant and lead on our federation work) joining us at our GNU 30th hackathon. This reimbursement also fulfilled a travel grant requirement for our Outreach Program for Women participation.
Okay, that’s all the smaller slices out of the way. On to the big one: development! Note, in this case I don’t mean the nonprofit line of “development” which is to say “fundraising” but rather “putting money into the actual development of the project” (whether code or non-code contributions). Anyway:$ ledger -f gmg_campaign.ldgr bal development $40231.36 Expenses:Development $30481.36 Chris Webber $4500.00 Natalie Foust-Pilcher $5250.00 OPW -------------------- $40231.36
So you may remember earlier when I mentioned that we had a “directed grant” as a $5000 source of income. With 10% going to the FSF, the remaining $4500 goes straight to development… this work is being picked up by Natalie Foust-Pilcher, who is working on this now. (Actually, since the work is still in progress, not all of it has been yet paid, but for the version of the ledger file I am putting up, it’s easier to just account for it as paid than to try to explain some sort of accrual accounting transactions or something equally smart.) The project is to improve MediaGoblin’s metadata support and make MediaGoblin more for academic environments and archival institutions. Pretty cool!
$5250 goes to our participation in Outreach Program for Women. Last year we had an incredible summer with six great internships (four of them women) between Google Summer of Code and Outreach Program for Women.
There are few things we’ve done that I am more proud of in MediaGoblin; not only was the output great (this lead to a whole slew of awesome features in 0.5.0, helped kickstart our federation work, introduced us to community member Natalie Foust-Pilcher who is now doing work on our present MediaGoblin-for-archival/academic-institutions, and allowed us to have a massively cost-effective increase in our development productivity, while also expanding our community), I also think it was a morally important thing to do. It did have a personal cost for me… the money spent on Outreach Program for Women effectively came out of my paycheck. But the return on that investment was so great, both productivity-wise and community-wise, that I’m confident in that decision.
So, speaking of my paycheck, let’s get to that last item of the budget, which is by far the biggest item, at 59.2% of the budget. $30481.36 of the money we raised went to me, which paid me to do a whole multitude of things: I was lead developer and primary architect of the project, I did lots of code review, I did a bunch of administrative work, I oversaw all those internships both mentoring and meta-mentoring… I wore a lot of hats. I worked hard, taking very very few days off. (Most weeks were 60 hour weeks, and aside from a few family gatherings around holidays and a couple of sick days, I did not even take weekends off really.) If you consider the over a year’s worth of dedcated work I put into the project, and then you actually factor in the time it’s taken to do each of these fundraising campaigns, that money was my income for day to day work for a year and a half’s worth of work. That puts my income from this project at only about 20k USD per year. That’s not a lot of money for anyone in the United States (yes, I am spending my own savings to do this), and as a programmer, especially with the experience I’ve accrued at this time, I could be making a lot more for a lot less work and much less stress. So why do it?
I believe in MediaGoblin, and the work we are trying to do here. Both the software itself, but more than that: the things it stands for of user freedom. We are at a critical time, where many people are paying lip service to the ideas of network freedom, but the actual amount of dedicated work going into it is very low. I think we’re at a real crossroads right now… on the one hand, people are aware of issues of network freedom, but on the other hand, that’s because things are really bad right now. There’s a better internet out there that we want. But someone has to build it. If not us, who? I believe we have the right community, the right skills, and we are well positioned in MediaGoblin to make a real and actual difference.
And we are making a difference. Just look at what the last year has brought us: we got out five major releases, six major projects across those summer internships, not to mention that work on federation has actually begun and is moving forward. And you got me working on the project, at a heavily, heavily discounted price. I’m going to say: dollar for dollar on network freedom development, I don’t think you can actually get a better deal than the one you are getting here.
If any or all of that resonates with you, I’m going to ask: please, please donate. We’re working hard to reach our second funding milestone, and we’re actually very close when you factor in the current 10k matching grant.
We work hard to make good use of any money you donate (and, as you see, even helping you know how that money is used). Anything you can give helps a lot.
Dear Developers, if you follow these simple guidelines, your Drupal Features will be much more useful to institutions like Stanford over time. You will win friends and influence people. Drupal will live up to its potential, and there will be much rejoicing.
The rise of open source, and the skyrocketing popularity of Drupal as a CMS, has made for many very happy developers working in the open source world. But for some people, it isn’t just a hobby or a way to bring home a paycheck: it’s a ticket out of crushing poverty.
Today the Krita team releases the second bugfix release of Krita 2.8.
Most of the development work at the moment is going into some big issues for 2.9, like the resources manager, MVC refactoring and HDR color selectors, but there are some nice improvements
- add support for reading PSD layer groups
- new splash screen with recent files and links to the Krita website
- save tags with special characters properly (bug 332708)
- fix removing tags
- restore native file dialogs on Windows
- fix a bunch of memory leaks
And expect more bug fixes for 2.8.3!
Linux users can get updates from their distributions, Windows users can download installers from the kritastudio.com website.
In this new screencast, I first introduce the concept of a dataset: what it is, what it is used for and how it works. I will also outline the characteristics of datasets in the Open Semantic Framework (OSF) such as having a set of permissions for group of users, a unique identifier, etc.
Then I explain how datasets are being used by OSF for Drupal, and how they can be managed using a Drupal portal: how to import, create, register, change permissions to datasets. Then I explain how datasets can become searchable using the SearchAPI or be disabled in the web portal.
Finally I cover the OSF Entities administrators search and browse utility which can be used by Drupal administrators to browse and search for all entities that are accessible to the Drupal portal: even the ones that are indexed in datasets that are not yet registered to the portal.
KDE e.V. is in the right time to be ambitious and heavily increase its resources to support KDE community. Several decisions have been made in this regard and they will be executed during this 2014. The financial situation is healthy enough to afford some level of expansion. So I think it is time for somebody else to come with energy and enthusiasm to drive these changes the following months/years. And we have that person so.....
KDE e.V. is a solid organization, well managed and with a Board that takes the financial area seriously. It has been a pleasure and a honor to be part of the Board.
On the other hand, my relation with SUSE will end this month. Working on openSUSE, an specially building and leading the openSUSE Team, has been a great experience. I wish them all the best, specially in their current main task, turning Factory into a "usable" rolling release by changing the development work flow/process. It is a goal with a high impact for openSUSE. openQA has a nice present, a tremendous potential and future, not just from the technical but also from the business point of view. For those of you looking for a great place to work, consider SUSE. It was for me.
The last few weeks I have been temporary living in Prague. I love this city. I am not attending to openSUSE Conference (I am sure it will be a great one) and I am not sure if I will be able to go to Akademy-es, which is a pity since it takes place in Malaga, where I lived for three years, and it is organized by one of my colleagues, Antonio Larrosa. I plan to go to Akademy in Brno though.
As you can see, these are times for changes, after around two years putting my best in KDE e.V. Board and SUSE/openSUSE. I have no idea what am I going to do next but I am sure it will be exciting so I expect an article soon called "Open Doors". Otherwise....I will not know what to do with so much time, or maybe I will... write more posts. :-)Agustin Benito Bethencourt (Toscalix) KDE eV and KDE Spain member Spanish Blog: http://abenitobethencourt.blogspot.com Linkedin profile: http://es.linkedin.com/in/toscalix
A lot of the heavy lifting is actually done by Jenkins Job Builder (JJB), a great tool created by the OpenStack InfraTeam on which I rely on. During the development process I did small improvements to JJB and submitting a patch back to OpenStack as a way to say thank you sounded like a no-brainer. Little did I know.
The 27 steps to OpenStack contributionIf I had an OpenStack instructor, this is what I would have been told:
ProtipThe following steps illustrate my process on how I eventually succeeded at submitting a patch and I'm confident this is how most wannabe contributors would do it.
- Fork the Github project
- Hack a patch and submit a pull request.
- See the pull request being automatically closed with the message:
openstack-infra/jenkins-job-builder uses Gerrit for code review.
Please visit http://wiki.openstack.org/GerritWorkflow and follow the instructions there to upload your change to Gerrit.
- Visit the GerritWorkflow page.
- Convince yourself that you don't want to read the novel entirely, CTRL+F for smart keywords.
- Run out of ideas, give up.
- Regret, grab a Red Bull, get back to it, read the novel.
- Create a Launchpad.net account (I had one, password recovered).
- Join the OpenStack foundation (wat?).
- Locate the free membership button and click Join Now!
- Skip the legal stuff and find the form fields, name, email...
- Wonder what "Add New Affiliation" means. Skip and submit your application.
- Oops, you need to add an affiliation. Add an affiliation.
- You also need to add an address. Address of what? Run the following Python code to find out:python -c 'import random
print random.choice(["address-of-yourself", "address-of-affiliation"])'
- Finally submit your application form and wonder what they could possibly do with your address, it should work.
- Return to the GerritWorkflow page.
- Ah, upload your SSH key to Gerrit.
- pip install git-review
- Skip the instructions that don't apply to you but don't skip too much.
- Try something. Didn't work? That's because you didn't skip enough.
- Understand that you must run git commit --amend because you need a Change-Id line on your commit message which gets generated by git-review.
- Finally, run git review! (like git push, but pushes to Gerrit)
- Oh wait, now you have to figure out how Gerrit works. It's a code review tool which UI seems to have been inspired from the Jenkins one. Curse.
- <squash the numerous understanding-Gerrit-steps into one>
- Tweet your experience.
- Hope that someone sees your patch.
- Iterate with friendly OpenStack developers.
Dear OpenStackMany contributors probably just gave up and you may have lost valuable contributions. This is not a rant about Gerrit itself (ahem), I do understand that it is a code-review tool that you prefer over Github pull requests and that each tool has its learning curve. But you must smoothen the first-commit-to-Gerrit process for newcomers, one way or another. Please consider these improvements:
- reduce the heavy bureaucracy
- replace Launchpad's sign-in with Github's, the source is cloned from there anyway
- write instructions geared towards developers in a hurry, they can later become better users by reaching out for help to OpenStack developers, as I did.
- (my favorite) convert a Github pull request into a Gerrit review and submit the link on the pull request before closing it.
NYC Camp ("nice camp") is an annual conference featuring talks, industry summits and code sprinting all aimed at accelerated learning and contributing to Drupal and related open source projects."
NYC Camp (aka 'nice camp') is an annual 4 day mini Drupal conference held in NYC dedicated to Drupal learning and contribution. Best of all it's completely free and volunteer powered! This past year we had a spectacular event packed with trainings, sessions, summits and sprints. We've got a great event in the works and expect NYC Camp 2014 to rock even harder than last year!
Interested in volunteering? Yes You! Sign up to participate and contribute to your NYC Drupal community here
Stay up to date on all upcoming NYCCamp News by following us on twitter @NYCCampDrupal
The power of Qt running on the ubiquity of Android is a potent combination that can be used to great effect in a number of different applications. But are there certain apps that really shine when they’re built using this dynamic duo?
Before I go any further, let me introduce myself. My name is Andy Gryc, and I’ve worked in the embedded industry for my entire career. I’ll be contributing a few guest blogs in anticipation of KDAB’s Qt on Android webinar, presented by BogDan Vatra with a little assistance from yours truly. I won’t be delving into the bits and bytes—I’ll leave that to BogDan as the world’s foremost “Qt on Android” expert. Instead, I want to ask some meta-questions.
My first question is obviously this: What types of apps rock Qt on Android?
- Medical – Real-time and reliable access/control of hardware (pure Qt embedded system with an amazing UI)
- Home Media – A set-top box that can leverage a standard development platform (Android) but allows precise control of the embedded hardware decoders/encoders (Qt/C++)
- Enterprise – Server/cloud applications that can be deployed on Windows, Mac, or Linux desktops (Qt) as easily as on phones (Qt + Android)
- Automotive – Easy access to low-level vehicle systems (C++) and high performance user interfaces (Qt) with an app framework (Android) for infotainment systems
- Gaming – Games written using a powerful C++ and graphical toolkit (Qt) that can be ported to multiple desktop, console, or mobile platforms (including Android)
Although these are my top five, there are certainly others. In fact, there is great potential for Qt on Android wherever a system has either of these two characteristics:
- Any app that needs low-level access from a high-level common environment—much like in-dash apps for the automotive market. For example, airline in-flight entertainment, heavy machinery, or white goods (sophisticated appliances)
- Anything that needs cross-platform deployment strategies between mobile and non-mobile (desktop or embedded)—like the enterprise market. Other apps that fit into this category are satellite radio receivers, universal remotes, network admin consoles, even educational/academic applications
I’m sure there are other industries and apps that I haven’t thought of. I’d love to hear if you are using Qt on Android for a different purpose or can think of other ideal applications.
Looking for more detail? Join BogDan and me on May 6 for “Qt on Android: Is it right for you?” We’ll be providing an overview of this technology marriage, and how you might be able to apply it to your project.
Want even more? In the month of June, BogDan will be extending his European Coffee and Code tour to several cities across the US. This will be a hands-on technical session: getting your development ramped up quickly, explaining how Qt and Android works, and for the really adventurous, getting into the nuts and bolts like JNI interfaces and Qt-to-Android surface control.