news aggregator

Andrea Colangelo: The (brand new) Debian 3D-Printing Team is hiring!

Planet Ubuntu - Tue, 2014-01-28 09:03

The 3D-printing technology has gained quite a big momentum in recent times. Its use is spreading widely even among hobbyists and many sources report daily several (sometimes weird) examples of its usage. The thing I like most, as a Free Software activist, is that several 3D-printing-related free and open source software are already available and quite good, and some printers are even released as free hardware.

Unfortunately, Debian is quite lagged behind with regard to the availability of such software in our archive, especially compared to other distributions who already ship much of it. Hopefully this situation will change drastically thanks to the brand new Debian 3D-Printing team, whose purpose is to make Debian a rocking platform to do some serious 3D-printing.

The team is bootstrapping right now, and we are looking for volunteers who are willing to help us. Packagers are greatly welcomed, but also triagers, users and passionate people with some experience in the field are extremely valuable.

People willing to join the team can take a look at our (in-progress) wiki page and apply on the team page on Alioth. As with any good packaging team, a mailing list is available to share ideas, feel free to subscribe it, and feel free to join #debian-3dprinting on OFTC if you want to hang out with other team members.

Kees Cook: -fstack-protector-strong

Planet Ubuntu - Mon, 2014-01-27 22:28

There will be a new option in gcc 4.9 named “-fstack-protector-strong“, which offers an improved version of “-fstack-protector” without going all the way to “-fstack-protector-all“. The stack protector feature itself adds a known canary to the stack during function preamble, and checks it when the function returns. If it changed, there was a stack overflow, and the program aborts. This is fine, but figuring out when to include it is the reason behind the various options.

Since traditionally stack overflows happen with string-based manipulations, the default (-fstack-protector), only includes the canary code when a function defines an 8 (--param=ssp-buffer-size=N, N=8 by default) or more byte local character array. This means just a few functions get the checking, but they’re probably the most likely to need it, so it’s an okay balance. Various distributions ended up lowering their default --param=ssp-buffer-size option down to 4, since there were still cases of functions that should have been protected but the conservative gcc upstream default of 8 wasn’t covering them.

However, even with the increased function coverage, there are rare cases when a stack overflow happens on other kinds of stack variables. To handle this more paranoid concern, -fstack-protector-all was defined to add the canary to all functions. This results in substantial use of stack space for saving the canary on deep stack users, and measurable (though surprisingly still relatively low) performance hit due to all the saving/checking. For a long time, Chrome OS used this, since we’re paranoid. :)

In the interest of gaining back some of the lost performance and not hitting our Chrome OS build images with such a giant stack-protector hammer, Han Shen from the Chrome OS compiler team created the new option -fstack-protector-strong, which enables the canary in many more conditions:

  • local variable’s address used as part of the right hand side of an assignment or function argument
  • local variable is an array (or union containing an array), regardless of array type or length
  • uses register local variables

This meant we were covering all the more paranoid conditions that might lead to a stack overflow. Chrome OS has been using this option instead of -fstack-protector-all for about 10 months now.

As a quick demonstration of the options, you can see this example program under various conditions. It tries to show off an example of shoving serialized data into a non-character variable, like might happen in some network address manipulations or streaming data parsing. Since I’m using memcpy here for clarity, the builds will need to turn off FORTIFY_SOURCE, which would also notice the overflow.

#include <stdio.h> #include <stdlib.h> #include <string.h> struct no_chars { unsigned int len; unsigned int data; }; int main(int argc, char * argv[]) { struct no_chars info = { }; if (argc < 3) { fprintf(stderr, "Usage: %s LENGTH DATA...\n", argv[0]); return 1; } info.len = atoi(argv[1]); memcpy(&info.data, argv[2], info.len); return 0; }

Built with everything disabled, this faults trying to return to an invalid VMA:

    $ gcc -Wall -O2 -U_FORTIFY_SOURCE -fno-stack-protector /tmp/boom.c -o /tmp/boom $ /tmp/boom 64 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Segmentation fault (core dumped)

Built with FORTIFY_SOURCE enabled, we see the expected catch of the overflow in memcpy:

    $ gcc -Wall -O2 -D_FORTIFY_SOURCE=2 -fno-stack-protector /tmp/boom.c -o /tmp/boom $ /tmp/boom 64 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA *** buffer overflow detected ***: /tmp/boom terminated ...

So, we’ll leave FORTIFY_SOURCE disabled for our comparisons. With pre-4.9 gcc, we can see that -fstack-protector does not get triggered to protect this function:

    $ gcc -Wall -O2 -U_FORTIFY_SOURCE -fstack-protector /tmp/boom.c -o /tmp/boom $ /tmp/boom 64 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Segmentation fault (core dumped)

However, using -fstack-protector-all does trigger the protection, as expected:

    $ gcc -Wall -O2 -U_FORTIFY_SOURCE -fstack-protector-all /tmp/boom.c -o /tmp/boom $ /tmp/boom 64 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA *** stack smashing detected ***: /tmp/boom terminated Aborted (core dumped)

And finally, using the gcc snapshot of 4.9, here is -fstack-protector-strong doing its job:

    $ /usr/lib/gcc-snapshot/bin/gcc -Wall -O2 -U_FORTIFY_SOURCE -fstack-protector-strong /tmp/boom.c -o /tmp/boom $ /tmp/boom 64 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA *** stack smashing detected ***: /tmp/boom terminated Aborted (core dumped)

For Linux 3.14, I’ve added support for -fstack-protector-strong via the new CONFIG_CC_STACKPROTECTOR_STRONG option. The old CONFIG_CC_STACKPROTECTOR will be available as CONFIG_CC_STACKPROTECTOR_REGULAR. When comparing the results on builds via size and objdump -d analysis, here’s what I found with gcc 4.9:

A normal x86_64 “defconfig” build, without stack protector had a kernel text size of 11430641 bytes with 36110 function bodies. Adding CONFIG_CC_STACKPROTECTOR_REGULAR increased the kernel text size to 11468490 (a +0.33% change), with 1015 of 36110 functions stack-protected (2.81%). Using CONFIG_CC_STACKPROTECTOR_STRONG increased the kernel text size to 11692790 (+2.24%), with 7401 of 36110 functions stack-protected (20.5%). And 20% is a far-cry from 100% if support for -fstack-protector-all was added back to the kernel.

The next bit of work will be figuring out the best way to detect the version of gcc in use when doing Debian package builds, and using -fstack-protector-strong instead of -fstack-protector. For Ubuntu, it’s much simpler because it’ll just be the compiler default.

© 2014, Kees Cook. This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License.

Randall Ross: Planet Ubuntu Needs More Awesome - Conclusion

Planet Ubuntu - Mon, 2014-01-27 21:18

Could Planet Ubuntu be made more awesome? Definitely. Planet Ubuntu is not as useful as it could be and we are aiming too low. Let's reboot it.

In conclusion (and interpreting that I collected and summarized here and here):

Readers of Planet Ubuntu are loyal. They say that they derive value from the site but they want more. Planet Ubuntu is an important part of the Ubuntu information landscape. Let's admit that and let's give it the attention and maintenance it deserves.

Planet Ubuntu is nearly as important to Ubuntu as www.ubuntu.com as it represents the real pulse of the Ubuntu project as seen through the eyes of its contributors, potentially *all* of them. It does not have a commercial angle, nor does it present Ubuntu in the uni-dimensional "software-y" way that most privately run Ubuntu news sites do. In fact, Planet Ubuntu reminds us that *"Ubuntu is not just software"*. No other site has the potential to send that message as loudly and clearly. Name a proprietary platform that is anything except software for the extraction of profit for a select few at the expense of everyone else. See why the "Ubuntu is not just software" message is important?

I recommend that we work hard to measure our audience size, publish it, then set goals to expand our readership *well* beyond the current echo chamber that consists mainly of Ubuntu Members (and "free software enthusiasts/contributors"). We cannot improve what we cannot measure.

Let's re-frame Planet Ubuntu as *the* place for authoritative goings-on in the Ubuntu project as written by those who are passionate about making Ubuntu. Let's ditch the current tagline "Planet Ubuntu is a window into the world, work and lives of Ubuntu developers and contributors." This tagline opens the door to ambiguity and confusion of our readers. I can imagine someone new to Ubuntu coming to Planet Ubuntu and seeing that most of the posts have nothing to do with Ubuntu. The signal that sends is "Ubuntu is not important enough for even its contributors to write about." Perception becomes reality.

Let's not water down the site with random tidbits of unrelated content. This infuriates (yes, that strong a word) people who come to the site looking for a pulse on the Ubuntu project. I personally feel that it is disrespectful (or at least in bad taste) to use the popularity of Planet Ubuntu as a springboard for one's personal projects and topics completely unrelated to Ubuntu. I'm not saying that's always the motivation of those who post unrelated content, but I *am* saying that it happens. Plus, everyone who posts to Planet Ubuntu has their own personal blog anyways. What's the point of shipping irrelevant information to the eyeballs of people who crave Ubuntu information?

If we cannot enforce a "stay on topic" rule, then I recommend that we consider moderation and/or emphasis/de-emphasis of submitted articles based on the relevance to Ubuntu. This moderation could be crowd-sourced or automated.

I recommend that we adopt a zero tolerance rule for Ubuntu CoC violations, deleting posts that do not comply in no longer than 5 minutes or 500 page views, whichever occurs first. Authors that violate the Ubuntu CoC should be removed using a "three-strikes and you're out" rule. I recommend that we remove authors that have not posted Ubuntu content during a span of one year.

I recommend that we extend Planet Ubuntu authorship well beyond Ubuntu Members. Let's identify people who are truly passionate about Ubuntu and who live and breathe it. Let's get past the notion that blogging about Ubuntu requires membership in an exclusive club. Let's encourage and people who do a lot for Ubuntu but who never get a voice to step forward and help write the content of the site. Let's embrace our community members inside Canonical and respect them for what they are: passionate and dedicated Ubuntu contributors.

Let's change the look of Planet Ubuntu. Let's make it more modern and more interactive. Let's make it work well on all the screen sizes (form factors) that Ubuntu supports. Let's choose a platform that we make and control, or at least one that does not use us. We are tired of being used.

In conclusion, Planet Ubuntu has the potential to be *much* more awesome, and we should seriously consider making it *the* place to visit for all things Ubuntu by rebooting it.

---
Thank you, and a call for assistance.
This concludes my series on making Planet Ubuntu awesome again. If you have additional thoughts and constructive suggestions kindly share your thoughts in the comments. If you would like to help champion a blueprint or work items to bring these improvements to fruition, please raise your hand.

Tony Whitmore: Helen Thompson

Planet Ubuntu - Mon, 2014-01-27 18:30

This isn’t my usual sort of blog post, so please bear with me.

Last summer I worked for Neil Thomas Douglas as second photographer at a wedding in Oxfordshire. James and Helen had put a lot of thought and effort into their day. From the outdoor ceremony where Helen’s pupils sang, through the meal cooked by family members and served to guests seated on hay bales, and onto the evening with live bands, swings and tug-of-war, the whole day was alive with their personalities. It was clear just how much Helen loved James. Her short, powerful speech sent shivers down my spine.

Helen died suddenly last month.

Even though I only knew her for a day, it was clear that Helen was a caring, lively and compassionate person. Someone who wanted to make the world a better place to live in. It was a privilege to be a part of Helen and James’ wedding day.

The fundraising campaign that Helen had set up to raise just £200 for voluntary aid workers in the Philippines has been flooded with donations and is currently at over 9000% of the target. This immense response shows just how loved and respected Helen was. If you can give anything in Helen’s memory, please do.

Thanks to James and Neil for letting me write this post.

Pin It

Alan Pope: January 2014 Core Apps Hack Day Two – Calendar and RSS Reader

Planet Ubuntu - Mon, 2014-01-27 10:19

See also January 2014 Core Apps Hack Day One – Reminders and Music.

Day two of the January 2014 Core Apps Hack Days brings focus to Calendar and RSS Reader (a.k.a. ‘Shorts’), but as always we welcome contributions to any app on any day of the week!

In order to get started we’ve come up with some suggestions for new developers.

First off get your development environment setup as documented at http://developer.ubuntu.com/apps/create/get-the-sdk/ which you can do either natively on Ubuntu 13.10 or 14.04 or in a Virtual Machine if you prefer.
If you have a Nexus device, you could either replace the legacy OS with Ubuntu using either of these guides – https://wiki.ubuntu.com/Touch/Install or https://wiki.ubuntu.com/Touch/DualBootInstallation.

Next up take a look at some of these suggestions based on your area of interest and skill level.

We welcome translations for all our Core Apps. If that’s if interest you can find everything you need at https://translations.launchpad.net/ubuntu-calendar-app and https://translations.launchpad.net/ubuntu-rssreader-app.

If you find bugs in the apps you can look for existing bugs to confirm or fix at https://bugs.launchpad.net/ubuntu-calendar-app/+bugs and https://bugs.launchpad.net/ubuntu-rssreader-app/+bugs, or file new bugs at https://bugs.launchpad.net/ubuntu-calendar-app/+filebug and https://bugs.launchpad.net/ubuntu-rssreader-app/+filebug

You may find some bugs which have yet to be confirmed or triaged, we’d love your help there too.

You’ll find out-standing merge proposals on launchpad at https://code.launchpad.net/ubuntu-calendar-app/+activereviews and https://code.launchpad.net/ubuntu-rssreader-app/+activereviews.

If you’d like to take on a task then we have some work items in the blueprints which you can assign to yourself and get cracking on at https://blueprints.launchpad.net/ubuntu-phone-commons/+spec/coreapps-1404-calendar-dev and https://blueprints.launchpad.net/ubuntu-phone-commons/+spec/coreapps-1404-rssreader-dev

You can find out more about the Core Apps Hack Days at the links at the top, and you’ll find all of us hanging out on #ubuntu-app-devel on freenode.

Jo Shields: Dear Debian Developers, lrn2gpg

Planet Ubuntu - Mon, 2014-01-27 10:05

For some strange reason, I’ve been receiving a lot of GPG-signed mail from Debian Developers and Maintainers lately. In response to each of these mails, I need to send a GPG-encrypted reply. The rate at which I’m able to send replies has been significantly hampered by the poor state in which many DD/DM’s maintain their GPG keys. Here are a few common mistakes, so you can consider correcting them.

Ensure you have a UID for the email address(es) you use

When I send an encrypted mail, I need to be sure that the recipient is legit. This means any decent mail client should refuse to send an encrypted message to foo@bar.com unless that email address is known somehow to GPG. In many cases, someone with a valid key for foo@bar.com would send their signed mail from foobar@gmail.com without that being a valid UID. In some cases, foo@bar.com isn’t even a valid email address anymore (i.e. the bar.com mail server says no such mailbox).

You should have a UID for each address you use.

Signatures are per-UID

You may well have a valid UID for foo@debian.org, foo@bar.com, and foobar@gmail.com – but the PGP trust model doesn’t automatically trust every UID as much as its peers. Each individual UID needs to be trusted (i.e. signed/uploaded) by others. What if you added billg@microsoft.com as a UID – should that automatically be trusted? Clearly not. Just because you have foo@debian.org doesn’t mean it’s trusted for encryption without some signatures.

Make sure you actually have an encrypting subkey

GPG sucks, and as a result, it reports “Skipping unusable pubkey” when the issue is a lack of valid encrypting subkeys. If you have revoked all encrypting subkeys, or allowed them to expire, then I cannot send you encrypted mail.

Exact naming matters

“Bob Bobbertson <foo@bar.com>” and “Böb Böbbërtsön <foo@bar.com>” are different people. Check your mail client’s “From:” setting, to ensure it matches your UID. If not, fix one of them.

Check your webmail plugin isn’t shit

Some people use third party plugins to integrate GPG into their webmail client (e.g. Hotmail or GMail). Make sure this actually works.

Don’t use Enigmail

Enigmail is a popular plugin to integrate GPG into Mozilla Thunderbird. It doesn’t work, in most cases. Almost every single BADSIG in my inbox is due to Enigmail. Thunderbird will insert spurious line wraps and escape characters into your mail after signing, resulting in invalid signatures.

It’s mostly okay if you never quote mail, and restrict messages to about 70 characters.

I know plenty of Debian Developers don’t care about GPG other than for package signing – but please, for the sanity of the rest of us, take an occasional moment to care a little.

I should note that the worst offenders for keys which don’t “just work” were Developers with 1024D keys – the best behaved were Maintainers of all stripes.

Benjamin Mako Hill: My Geekhouse Bike Frame

Planet Ubuntu - Mon, 2014-01-27 03:27

In 2011, Mika and I bought in big at the Boston Red Bones party’s charity raffle — supporting MassBike and NEMBA — and came out huge. I won $500 off a custom frame at Geekouse Bikes.

For years, Mika and I have been planning to do the Tour d’Afrique route (Capetown to Cairo), unsupported, on bike. People that do this type of ride sometimes use an expedition touring frame. I worked with Marty Walsh at Geekhouse to design a bike based on this idea. The concept was a rugged steel touring frame, built for my body and comfortable over long distances, with two quirks:

  1. It’s designed for 26 inch mountain bike wheels and mountain bike components to ensure that the bike is repairable with parts from the kinds of cheap mountain bikes that can be found almost everywhere in the world.
  2. It includes S&S torque couplers that let me split the frame in half to travel with the bike as standard luggage.

As our pan-Africa trip kept getting pushed back, so did the need for the bike. Last week, I finally picked up the finished bike from Marty’s shop in Boston. It is gorgeous. I absolutely love it.

I’m looking forward to building up the bicycle over the next couple months and I’ll post more pictures when it’s finished. I am blown away by Marty’s craftsmanship and attention to detail. I am psyched that his donation made this bike possible and that I was able to get the frame while helping cycling in Massachusetts!

Elizabeth Krumbach Joseph: CloudCamp Hackathon and Ubuntu User Days

Planet Ubuntu - Mon, 2014-01-27 01:03

I’ve had a busy weekend! On Friday night I headed over to the San Francisco Hub for a CloudCamp Social Good Hackathon sponsored by HP Cloud (my employer) and Intel.

The event kicked off with an introduction, including words from Dave Nielsen where he spoke about CloudCamps and touched upon how HP Cloud uses OpenStack and works in the OpenStack community. As part of the sponsor team, I wasn’t participating in the hackathon teams, but it was my job for the evening to make sure folks could get signed up for their HP Cloud accounts and use the promo code for the event. It was really cool to see the HP Cloud Horizon interface being used. Hooray Horizon!

It was a great experience for me to get out of my infrastructure and development mindset and see all the work we do with OpenStack paying off in powering the servers that developers are using to build real applications. The Hackathon itself was also inspiring because all of the projects were for social good, from finding mental health resources to helping to solving the pipeline problem related to women in STEM.

Sunday I was able to have some great chats with colleagues and others about how OpenStack cloud platforms could better serve the application developers. It’s clear that some of the terms that systems administrators and infrastructure developers are very different from the world of application development, and some of the concepts can be confusing. I see a fair amount of people using file sharing services to move files where it seems to me a proper object store with an API would be optimal.

I didn’t attend on Saturday due to my previous commitment to host Ubuntu User Days. Over the past several weeks, Jose Antonio Rey and I have searched the community for volunteers to give user-level classes in the Ubuntu Classroom IRC channels for our day of sessions. I was keen to make this event a success after missing one for raring, but we kept the schedule to only 9 full sessions so it was manageable and we maintained the quality we were seeking in instructors and sessions.

I’m happy to report that we didn’t have any last minute cancellations, no shows or timezone mix-ups! The instructors were all talented and professional and made for a series of sessions that we should all be proud of.

Session logs were made available directly following each session:

Huge thanks to all the community members who participated in this event.

Elizabeth Krumbach Joseph: My pink WASD keyboard

Planet Ubuntu - Mon, 2014-01-27 00:04

I like the color pink. Over the years I’ve collected lots of pink electronics that have measured up to their non-pink counterparts, from pink ethernet cables (hey, that’s my photo on Gizmodo!) to my pink netbook that has traveled the world with me (frequently still seen at Ubuntu Hours, always came along to Ubuntu Developer Summits and recently was at the OpenStack Summit in Hong Kong).

Keyboards have always been tricky though. Ones that come in pink tend to be princess or Barbie themed for little girls, which means they are either too small or of poor quality. I have found some larger, adult-ish pink keyboards, but they have never been mechanical, which is my strong preference. I’m on my keyboard all day, a good keyboard is important.

Then my friend Karen McLoughlin Largent posted a picture of her custom-colored keyboard from WASD Keyboards. It was pink! And mechanical! Be still my heart!

I went with the WASD V2 104-Key Custom Mechanical Keyboard with Cherry MX Blue switches (though Brown was also a contender), no sound dampeners, and all the keys in pink, with Classic layout and function keys, just like my current IBM keyboard.


I was going to crop my messy desk, but if you look close, I have the following pink items peeking into this photo: pen, mini swiss army knife, earbuds, USB cable, USB stick

Oh, and the final thing that made me spend over $150 on a keyboard? They let you have a custom OS key, and Ubuntu (as well as Linux Tux) were part of their default options.

Even better? I live near where they put them together, so I ordered it Wednesday and with no rush and standard shipping I was plugging it in to my computer on Saturday.

I love it. It’s much more clicky than the Model M successor IBM keyboard that I had previously used, which had dampeners, but after an hour I was quite at home with my noisy new friend. Hooray!

Sam Hewitt: Potentially-Vegan Chocolate Cheesecake

Planet Ubuntu - Mon, 2014-01-27 00:00

Silken (or "soft") tofu, is not as versatile as it's firmer counterpart, but I know it as a good egg substitute, so when I mistakenly purchased a brick of soft tofu I thought I'd bake with it.

While this recipe is not quite as rich as others it's still delicious –and you can feel somewhat better about yourself after eating a couple pieces.

    Ingredients
  • 1 cup graham cracker crumbs (or other cookie, like Oreo)
  • ~2 tablespoons melted butter (or butter substitute)
  • 1 brick (250g) soft/silken tofu
  • 1 brick (250g) cream cheese, regular, soy or otherwise (at room temperature)
  • 1/2 teaspoon vanilla extract
  • 1 cup sugar
  • 4 oz. bittersweet chocolate, roughly chopped
  • 1/4 cup cocoa powder
  • 3 tablespoons flour
  • 30 mL (one shot) espresso (optional)
  • 1/2 teaspoon salt
  • Optional:
  • sliced strawberries
  • powdered sugar
The "potentially vegan" bit is if you decide to use vegan-friendly substitutes for cream cheese and butter.
    Recommended Equipment
  • blender
  • ~9-inch springform pan
    Batter
  1. In a blender, combine the tofu and cream cheese.
  2. Add the sugar, salt, cocoa powder, vanilla extract, chopped chocolate & espresso (if using). Blend until smooth. (Add a little water if there's difficulty.)
  3. Remove to a large bowl and stir in the flour. Set aside.
  4. Crust
  5. Preheat an oven to 350 degrees Fahrenheit.
  6. Combine the cracker/cookie crumbs with the melted butter(-esque substance).
  7. Press evenly into the bottom of your greased springform pan.
  8. Bake for 10-12 minutes.
  9. Remove
  10. Directions
  11. Pour your batter into the pan atop the crust.
  12. Return to the oven and bake until the center of the cake is no longer jiggly (forgive the technical term) – 30 minutes.
  13. At this point, turn off the oven and leave the cake in for another hour to cool with the over –this prevents a split in the cake.
  14. Remove. Using a thin knife to separate the sides of the pan from the cake.
  15. Now cover & place in a fridge to chill. Garnish with strawberries and powdered sugar, if desired.
  16. Enjoy :-)

Matthew Helmke: Today’s Sermon

Planet Ubuntu - Sun, 2014-01-26 19:07

I had the privilege of delivering the sermon this morning at New Song Episcopal Church in Coralville, Iowa. If you are reading this introduction via an RSS feed and are interested in the rest of the post, click through to read on.

Isaiah 9:1-4; Psalm 27:1, 5-13; 1 Corinthians 1:10-18; Matthew 4:12-23
(Full lectionary passages are included below the sermon text along with today’s Collect, which is also referred to in the sermon.)

Today’s lectionary includes passages that deal with light. Even the Epistle, though it doesn’t mention the word, includes an idea closely related to light. At least it did as I read it in a new light this week.

I started the week pondering light itself. What is light? I don’t mean the scientific definition, although that is also interesting. I mean beyond that. What does light mean to us? For us?

For me, it starts with something visceral. Light means safety. I’ve walked down dark streets that feel very different than they do on a clear, sunny afternoon. In the light, I can see what surrounds me. I don’t fear what may be lurking nearby, the potential for harm or accident. In the light, objects take their true shape and are clearly discerned. We don’t guess about shadowy figures and nightmarish hidden motives.

Light means warmth. Historically, light is produced by something burning. Our sun, a giant ball of flaming gas. A fire. A torch. A candle. We can escape the cold by drawing ourselves near to this sort of light—especially apt after a week like this one.
From the safety and warmth of light, we get the sense of comfort. Light comforts us in our fears, in our times of unknowing, in those times when we feel the coldness of being alone.

Light symbolizes knowledge. Truth. Light symbolizes acceptance. A refuge from the cold, dark realities that often confront us. A safe harbor from the storms of doubt, fear, pain, and ignorance.

It is in these cold, dark moments of our lives that light has its greatest impact, where it can perform its most transformative work, for it is in these moments when we see most clearly its stark and beautiful contrast against the backdrop of our plight.

I’ve had several of these moments in my life. I’m sure you have, too. These are the moments where, when we feel like we are standing in the deepest valley of our fears, stuck in a bog of despondency or terror, someone comes in and brings us hope. Sometimes it is in the form of an answer. Sometimes it is in the form of a rescue. Still other times it is just standing alongside us so we know we are not alone. I’ve even had a few moments where I felt something I can only call supernatural convincing me that an absurd hope exists where none may be seen, where no evidence gives reason to believe, where in the flash of a moment everything in my perspective and understanding changes.

These, all of these, are the moments that Isaiah talks about so poetically as he describes those who walked in darkness who have seen a great light and he then uses words like these to describe their response: joy, rejoice, exult. These are the moments that the Psalmist is singing about as the words of the song proclaim salvation, strength, beauty, and shelter.

Jesus, in the Gospel, is named as Isaiah’s light. As evidence, Matthew tells about Jesus giving the good news that the Kingdom of God is near and describes Jesus healing sickness and disease. Jesus’ message is “repent,” but that seems an easy thing to do when one who lives in what today’s service started out calling “the shrouded world” and “the borderlands” suddenly experiences this light. Who wouldn’t want to drop everything to follow that?

Maybe that is part of what Paul is talking about in today’s Epistle. When you go through this kind of life-changing experience, so many things become less important to you. I wonder if he is making his appeal for unity based on the realization that Christ’s ability to transform us from our darkness is a process. A life-long process. One that is more analogous to a journey than to a doorway. We each begin our journey differently. Maybe some learned through one teacher. Others from someone else. But, ultimately we are all traveling toward the same destination. We are all in the process of experiencing the great light in different ways, each of us having ourselves and our world revealed to us in uniquely appropriate ways and at opportune moments.

For some, seeing the great light is the result of feeling loved and accepted, not just by a mysterious spirit somewhere “out there,” but by a loving community of people who are connected to one another by faith. For most of us, that sort of love, acceptance, and yes, forgiveness is a deep-seated need. A longing. Our hearts cry out, “Is there anyone who knows what I am going through? If they know, does anyone care? Will I still be accepted if people know? If they know who I really am?”

I am absolutely convinced God is capable of answering that supernaturally. But, I’m even more convinced that God usually chooses instead to answer that through people. Voices in our head tend to make us question our sanity. Someone coming up and giving us a warm, honest welcome does something more beautiful. Over time, God may choose to add a supernatural voice to confirm what human voices have first said, but that may not even be necessary if we have clear evidence in the unusual, wonderful lives and examples of the people around us.

I wonder if Paul’s point is that the power of the cross of Christ has nothing to do with specific people, with words, with decisions about what color carpet should be installed in the sanctuary. Maybe he is saying that the true power is in the way it enables us to set aside the undue importance we place on those things to work for a common good as a community. These types of communities still disagree, but they are not divided by those disagreements. These types of communities still honor leaders, but do not idolize anyone. These types of communities understand that every person is important and should be welcomed, loved, and valued.

These types of communities are not normal. In my opinion, they only exist where there is light.

These types of communities do not exist for the purpose of fighting against darkness. They exist for the purpose of spreading light.

I’ve really come to think that repentance has nothing to do with highlighting the evil in the world and warning people away from it. It isn’t even about self-training, self-discipline, or self-flagellation to remove impurities we find in ourselves.

Repentance is embracing light when we see it. It is running toward that light. It is being honest when the light exposes dark places in ourselves and being willing to face reality and ask for help.

Repentance is what happens when the beauty of the goodness of God outshines the grim reality of our worlds, both personal and corporate, outshines to the extent that our hearts long for the beauty and discover we no longer feel attached to anything else.

New Song is a beautiful community. It is a unique place in the world. We aren’t perfect, but we know that. However, this is a community that has seen and experienced light. In each of our lives, something has happened to make us want to embrace one another. For me, it started with the act of being embraced by you when I first walked in. Maybe your story is similar. I shouldn’t be surprised if we all agree that being welcomed was integral to our experience here.

I’ve attended a lot of churches. I’ve visited a lot more. The typical, but not universal experience is a warm greeting at the door, maybe a smile or two. As time goes by, though, I always find myself wondering if the people around me would still like me if they knew “who I really am.” Listening to what has been proclaimed in many of those pulpits has sometimes made my fears more pronounced.

If you knew my hopes, my fears, my dreams, and my struggles, what would that mean to our relationship? We all ask questions like that. We all have reasons to do so. All of us have experienced pain; we have been hurt by past relationships, hurt by family or friends, maybe even hurt by other communities of faith. The evidence of our experiences prepares us to expect disappointment.

We may even start to wonder in despair whether we will ever find anyone who will accept us as we are—and who will also be honest with us and themselves about who they are. We wonder if we will ever find anyone who is real.

What do you do when a group of people makes you feel wanted and welcome, even when they learn your secrets? Even the secrets that others have used as a reason for rejecting you? What do you do when you see these people’s warts and flaws, but realize that beneath them lie hearts that are filled with pure motives and kind intentions and a willingness to own up to imperfections with a desire to improve? What do you do when you see loving acceptance in action?

What would anyone do? It is so very rare.

Me? Like the sons of Zebedee, I drop everything and run to embrace it.

We exist to bring light into dark places. To be light in a world of shadows. It is not our job to subdue the darkness ourselves, but rather to carry the light. Light is more powerful than darkness.

Light brings freedom and joy where there is oppression.
Light brings safety where there is trouble.
Light brings unity where there is division.
Light brings purpose where there is tedium and toil.
Light brings healing where there is sickness and disease.
Light draws the attention of everyone who sees it.

May the dawning light of Christ give hope to the broken, the persecuted, the alien and the excluded, that we might feel the kingdom drawing near and turn to follow him. And, as we do, may we be the means by which others experience that same light.
Amen.

Collect:
God of all people you sent your Son into the shrouded world into the borderlands; may his dawning light give hope to the broken, the persecuted, the alien and the excluded, that we might feel the kingdom drawing near and turn to follow him; through Jesus Christ, the morning star. Amen.
(Prayers for an Inclusive Church by Steven Shakespeare)

(All scripture passages are quoted from the Revised Standard Version translation of the Bible, copyright © National Council of Churches of Christ in America.)
The OT: Isaiah 9:1-4
There will be no gloom for those who were in anguish. In the former time he brought into contempt the land of Zebulun and the land of Naphtali, but in the latter time he will make glorious the way of the sea, the land beyond the Jordan, Galilee of the nations.
The people who walked in darkness
have seen a great light;
those who lived in a land of deep darkness–
on them light has shined.
You have multiplied the nation,
you have increased its joy;
they rejoice before you
as with joy at the harvest,
as people exult when dividing plunder.
For the yoke of their burden,
and the bar across their shoulders,
the rod of their oppressor,
you have broken as on the day of Midian.

The Psalm: Psalm 27:1, 5-13
Dominus illuminatio
1
The LORD is my light and my salvation;
whom then shall I fear?
the LORD is the strength of my life;
of whom then shall I be afraid?
5
One thing have I asked of the LORD;
one thing I seek;
that I may dwell in the house of the LORD all the days
of my life;
6
To behold the fair beauty of the LORD
and to seek him in his temple.
7
For in the day of trouble he shall keep me safe
in his shelter;
he shall hide me in the secrecy of his dwelling
and set me high upon a rock.
8
Even now he lifts up my head
above my enemies round about me.
9
Therefore I will offer in his dwelling an oblation
with sounds of great gladness;
I will sing and make music to the LORD.
10
Hearken to my voice, O LORD, when I call; *
have mercy on me and answer me.
11
You speak in my heart and say, “Seek my face.” *
Your face, LORD, will I seek.
12
Hide not your face from me, *
nor turn away your servant in displeasure.
13
You have been my helper;
cast me not away; *
do not forsake me, O God of my salvation.

The Epistle: 1 Corinthians 1:10-18
I appeal to you, brothers and sisters, by the name of our Lord Jesus Christ, that all of you be in agreement and that there be no divisions among you, but that you be united in the same mind and the same purpose. For it has been reported to me by Chloe’s people that there are quarrels among you, my brothers and sisters. What I mean is that each of you says, “I belong to Paul,” or “I belong to Apollos,” or “I belong to Cephas,” or “I belong to Christ.” Has Christ been divided? Was Paul crucified for you? Or were you baptized in the name of Paul? I thank God that I baptized none of you except Crispus and Gaius, so that no one can say that you were baptized in my name. (I did baptize also the household of Stephanas; beyond that, I do not know whether I baptized anyone else.) For Christ did not send me to baptize but to proclaim the gospel, and not with eloquent wisdom, so that the cross of Christ might not be emptied of its power. For the message about the cross is foolishness to those who are perishing, but to us who are being saved it is the power of God.

The Gospel: Matthew 4:12-23
When Jesus heard that John had been arrested, he withdrew to Galilee. He left Nazareth and made his home in Capernaum by the sea, in the territory of Zebulun and Naphtali, so that what had been spoken through the prophet Isaiah might be fulfilled:

“Land of Zebulun, land of Naphtali,
on the road by the sea, across the Jordan, Galilee of the Gentiles–
the people who sat in darkness have seen a great light,
and for those who sat in the region and shadow of death light has dawned.”

From that time Jesus began to proclaim, “Repent, for the kingdom of heaven has come near.”

As he walked by the Sea of Galilee, he saw two brothers, Simon, who is called Peter, and Andrew his brother, casting a net into the sea– for they were fishermen. And he said to them, “Follow me, and I will make you fish for people.” Immediately they left their nets and followed him. As he went from there, he saw two other brothers, James son of Zebedee and his brother John, in the boat with their father Zebedee, mending their nets, and he called them. Immediately they left the boat and their father, and followed him.

Jesus went throughout Galilee, teaching in their synagogues and proclaiming the good news of the kingdom and curing every disease and every sickness among the people.

Ubuntu Classroom: Saucy Ubuntu User Days Wrap-up

Planet Ubuntu - Sun, 2014-01-26 02:39

On January 25-26th 2014 we hosted Ubuntu User Days in the Ubuntu Classroom.

If you weren’t able to join us, or just want to refresh your memory about what you learned, logs from all sessions are now available:

We are very thankful to our instructors and attendees who made the work of these last weeks worthwhile, we feel very proud of all of them. Congratulations!


Ubuntu LoCo Council: Team Check-Ins, coming soon to your LoCo Team!

Planet Ubuntu - Sat, 2014-01-25 22:45

Hello again!

This time we would like to announce that we have just started a process of team check-ins. Most team contacts should get an email from any of the members of the LoCo Council with some questions, so please make sure to respond to it as soon as you have time to. This will help us to improve how we manage things, as well as how we support teams. If you are a team contact and have not been contacted until February the 2nd, then please send us an email to loco-council@lists.ubuntu.com. If you are not a team contact you shouldn’t have anything to worry about.

Thanks for all your help! Make sure to stay tuned, as we will be posting some more news soon.

Sam Hewitt: Vichyssoise (a.k.a Leek & Potato Soup)

Planet Ubuntu - Sat, 2014-01-25 00:00

Vichyssoise is a (French-y) soup made of puréed leek, onion, potato, cream, & stock. Traditionally you eat it cold, however, I prefer to eat it hot.

    Ingredients
  • 3-4 leeks –you'll be using the white parts only
  • 2 onions, minced
  • ~2 tablespoons olive oil
  • ~4 cups dry potatoes (such as Russet), chopped
  • 3 cups chicken stock –you can substitute vegetable stock or water.
  • 1 teaspoon salt
  • 2 cloves
  • 2 bay leaves
  • 1 1/2 cups heavy cream
  • chives, chopped for garnish
  • black pepper, for garnish
To make things easier later you can place the cloves and bay leaves in a bouquet garni –tie them up in some cheesecloth or kitchen twine.
    Directions
  1. Trim the root end of the leeks and cut off the majority of the green part. Finely chop.
  2. Heat the oil in a large pot. Saute the chopped leeks & onion over medium heat until the onion has turned translucent.
  3. Pour in the chicken stock and add the chopped potato. Bring to a low boil.
  4. Reduce to low heat and add the salt, cloves & bay leaves. Cover.
  5. When the potato has cooked through, fish out the bay leaves and cloves.
  6. Then, uquite sing your favourite machine (a handheld or stand blender is recommended), puree the soup until it's quite smooth.
  7. Prior to serving stir in the heavy cream.
  8. Serve, make available the chopped chive and black pepper for garnishing. Enjoy.

Ian Weisser: Transit schedule data demystified - using GTFS

Planet Ubuntu - Fri, 2014-01-24 22:42
General Transit Feed Specification (GTFS) is the Google-originated standard format for transit route, stop, trip, schedule, map, and fare data. Everything except realtime.

It's called a feed because it (usually) includes an RSS update for changes.
There are lists of feeds on the Google wiki, and on the separate GTFS data website.

Each organization's GTFS file includes all their services, so some agency files can get pretty big, and get updated often. Any schedule change or route adjustment means a new release of the entire GTFS file. The file itself is merely a big zipfile, containing several csv files that are strangely required to be mislabelled as .txt.

Here's the contents of Milwaukee County Transit System's GTFS file:

$ unzip -l mcts.zip
Archive: mcts.zip
Length Date Time Name
--------- ---------- ----- ----
169 2014-01-10 05:01 agency.txt
40136 2014-01-10 05:00 calendar_dates.txt
5746 2014-01-10 05:01 routes.txt
307300 2014-01-10 05:00 stops.txt
35198135 2014-01-10 05:00 stop_times.txt
650622 2014-01-10 05:01 trips.txt
8369736 2014-01-10 05:01 shapes.txt
3490 2014-01-10 05:01 terms_of_use.txt
--------- -------
44575334 8 files
Yeah, 44MB unzipped.
But only 5MB zipped. Still not something you want to download every day to your phone.

Let's find a stop at Mitchell International Airport:

$ cat stops.txt | grep AIRPORT
7168,7168,AIRPORT,, 42.9460473, -87.9037345,,,1
7162,7162,AIRPORT & ARRIVALS TERMINAL,, 42.9469597, -87.9030569,,,0

It's right, there are two stops at the airport. Each stop has a latitude and longitude, a unique ID number, and a descriptive name. The final field designates a timepoint (1=Timepoint, 0=Not).

Let's try an intersection where two routes cross:

$ cat stops.txt | grep "HOWELL & OKLAHOMA"
709,709,HOWELL & OKLAHOMA,, 42.9882051, -87.9043319,,,1
658,658,HOWELL & OKLAHOMA,, 42.9885464, -87.9045333,,,1
$ cat stops.txt | grep "OKLAHOMA & HOWELL"
5152,5152,OKLAHOMA & HOWELL,, 42.9881561, -87.9046550,,,1
5068,5068,OKLAHOMA & HOWELL,, 42.9883466, -87.9041176,,,1

Here's a problem that will require some logic to solve. I consider the intersection to be one place (not a GTFS term). Many trips and routes can use the same stop. Multiple stops (GTFS terms) can exist at the same place. In this case, northbound, southbound, eastbound, and westbound buses each have a different stop at the same place.

This might make your job easier...or harder.

GTFS cares about trips and stops. It doesn't care that Stops #709 and #5152 are twenty meters apart, and serve different routes - that it's a transfer point. Nothing in GTFS explicitly links the two stops. Generally, you must figure out the logic to do that - you have the lat/lon and the name to work with.

GTFS does have an optional transfers.txt file, that fills in the preferred transfer locations for you. But that's for a more advanced exercise.


Let's see what stops at #709:

$ grep -m 5 ,709, stop_times.txt
4819177_1560,06:21:00,06:21:00,709, 14,,0,0
4819179_1562,06:49:00,06:49:00,709, 14,,0,0
4819180_1563,07:02:00,07:02:00,709, 14,,0,0
4819181_1564,07:15:00,07:15:00,709, 14,,0,0
4819182_1565,07:28:00,07:28:00,709, 14,,0,0


These fields are trip_id, arrival_time, departure_time, and stop-sequence (14th).

Let's see the entire run of trip 4819177_1560:

$ grep 4819177_1560 stop_times.txt
4819177_1560,06:09:00,06:09:00,7162, 2,,0,0 # Hey, look - stops out of sequence in the file
4819177_1560,06:09:00,06:09:00,7168, 1,,0,0 # Begin Trip
4819177_1560,06:11:00,06:11:00,7178, 3,,0,0
[...]
4819177_1560,06:20:00,06:20:00,8517, 13,,0,0
4819177_1560,06:21:00,06:21:00,709, 14,,0,0 # Howell & Oklahoma
4819177_1560,06:22:00,06:22:00,711, 15,,0,0
[...]
4819177_1560,07:17:00,07:17:00,1371, 66,,0,0
4819177_1560,07:19:00,07:19:00,6173, 67,,0,0
4819177_1560,07:20:00,07:20:00,7754, 68,,0,0 # End of trip

We can also look up more information about trip 4819177_1560:

$ grep 4819177_1560 trips.txt
GRE,13-DEC_WK,4819177_1560,N BAYSHORE - VIA OAKLAND-HOWELL METROEXPRESS,0,515111,13-DEC_GRE_0_12

This needs a little more explanation
  • route_id: Green Line (bus)
  • service_id (weekday/days-of-service): 13-DEC_WK
  • headsign: N BAYSHORE - VIA OAKLAND-HOWELL METROEXPRESS
  • direction_id (binary, 0 or 1): 0
  • block_id (useful only if the same bus changes routes): 515111
  • shape_id (useful for route maps): 13-DEC_GRE_0_12

Let's look up the route_id:

$ grep GRE routes.txt
GRE,MCTS, GRE,MetroEXpress GreenLine,,3,http://www.ridemcts.com/Routes-Schedules/Routes/GRE/,,
The full route name is MetroEXpress GreenLine, it's a bus (type-3 = bus) route, and we have the operator website for it.

Let's look up the service_id:

$ grep -m 10 13-DEC_WK calendar_dates.txt
13-DEC_WK,20140113,1
13-DEC_WK,20140114,1
13-DEC_WK,20140115,1
13-DEC_WK,20140116,1
13-DEC_WK,20140117,1
13-DEC_WK,20140120,1
13-DEC_WK,20140121,1
13-DEC_WK,20140122,1
13-DEC_WK,20140123,1
13-DEC_WK,20140124,1
Ah, this specific trip is a weekday (Monday-Friday) only trip.


Let's look up the route map shapefile for the trip:

$ grep 13-DEC_GRE_0_12 shapes.txt
13-DEC_GRE_0_12, 42.946054, -87.903810,10001
13-DEC_GRE_0_12, 42.946828, -87.903659,10002
13-DEC_GRE_0_12, 42.946824, -87.903588,10003
13-DEC_GRE_0_12, 42.946830, -87.903472,10004
[...]
13-DEC_GRE_0_12, 43.123137, -87.915431,670004
13-DEC_GRE_0_12, 43.123359, -87.915228,670005
13-DEC_GRE_0_12, 43.124016, -87.914535,670006
13-DEC_GRE_0_12, 43.124117, -87.914440,670007

The line for this trip has 520 points. That's pretty detailed.


So what do we know?

We know that Stop #709 is served by the GreenLine route, it's the 14th stop in direction 0, it's a bus line, we have all the times the stop is served, and we have the route website. We know the route map and all the other stops of any trip serving that stop.

How can we find the next scheduled bus at stop #709?

One way is to start with all trips that stop at #709 from stop_times.txt.

Since we probably know what time it is, we can filter out all the past times, and most of the future times. This leaves us with a nice, small list of, say, 10 possibles that include trips that don't run today at all (we must delve deeper to determine).

We can look up each of those trips in trips.txt, and get the route.

Each trip also includes a service_id code. The calendar_dates.txt file tells us which dates each service_id code is valid.

Right, we need to do three lookups.

The shell code gets a bit complex with three lookups, so I shifted to Python and wrote a basic next-vehicle-at-stop-lookup in about 160 lines. Python lists are handy, since it can handle all the stops at a location just as easily as a single stop. Python's zip module is also handy, so I can read data directly from the zipfile. But at 13 seconds, Python is probably too slow for this kind of application:

$ time ./next_bus.py

Next departures from Howell & Okahoma
16:16 GRE N AIRPORT - VIA OAKLAND-HOWELL METROEXPRESS
16:22 GRE N BAYSHORE - VIA OAKLAND-HOWELL METROEXPRESS
16:26 51 OKLAHOMA - TO LAKE DRIVE
16:28 51 TO 124TH ST. - VIA OKLAHOMA
16:30 GRE N AIRPORT - VIA OAKLAND-HOWELL METROEXPRESS
16:35 GRE N BAYSHORE - VIA OAKLAND-HOWELL METROEXPRESS
16:43 51 TO 124TH ST. - VIA OKLAHOMA
16:44 GRE N AIRPORT - VIA OAKLAND-HOWELL METROEXPRESS
16:45 51 TO NEW YORK
16:45 GRE N BAYSHORE - VIA OAKLAND-HOWELL METROEXPRESS
16:56 GRE N BAYSHORE - VIA OAKLAND-HOWELL METROEXPRESS

real 0m13.171s # Ugh. If I had started 13 seconds sooner, I wouldn't be bored now.
user 0m10.740s
sys 0m0.260s


All that time crunching the GTFS file has not gone unnoticed.

Trip planners (like Google) pre-process the data, mapping out and caching link-node and transfer relationships, limiting the trip data to the next hour or two (as appropriate), and using rather fancy algorithms to prune the link-node map to a likely set of  possibilities before looking at trips along those links.

That's one reason Google Transit is much faster than 13 seconds.

But that's all advanced stuff.

Also advanced is how to integrate real-time data, which uses one of several different formats. Next time...



Benjamin Kerensa: MozStumbler Experience Getting Better

Planet Ubuntu - Fri, 2014-01-24 22:14

The MozStumbler App is continuing to improve for those who are contributing location data to the Mozilla Location Service which has a goal of building experimental geo-location data based on publicly observable cell tower and wifi access point information. The greatest part about this project is that the app MozStumbler and the platform are open source and there is also FxStumbler for Firefox OS!

So here is what the app looks like today:

Pretty cool right? Well you can hack on this app too by simply forking the Github repo linked above and contributing to the project and you can also download the latest .apk and install it and run it on your android device. Ultimately I hope other services like OpenSignal or Sensorly might consider contributing some of the data they collect to the Mozilla Location Service and maybe other open source mobile platforms like Ubuntu Touch or Sailfish OS could make their own app and collaborate with the Mozilla community.

Also there was some hint at Mozilla Summit that this project could ultimately turn into an Ingress style game to keep contributors interested.

Paul Tagliamonte: Thanks, Valve (thvalve)

Planet Ubuntu - Fri, 2014-01-24 22:05

I took Valve’s offer up (by way of the kickass Collabora folks) for some games. I can confirm that I got them, and it looks like it’s working great.

Just want to give a shout-out and express my gratitude. I know it’s not something they had to do, so it’s super cool that they wanted to.

Thvalve!

Alan Pope: January 2014 Core Apps Hack Day One – Reminders and Music

Planet Ubuntu - Fri, 2014-01-24 10:58

As David blogged yesterday, we’re having another round of Core Apps Hack Days for our Ubuntu Phone Core Apps

Each day we’re focussing on two apps, today that’s Reminders and Music, but as always we welcome contributions to any app on any day of the week!

In order to get started we’ve come up with some suggestions for new developers.

First off get your development environment setup as documented at http://developer.ubuntu.com/apps/create/get-the-sdk/ which you can do either natively on Ubuntu 13.10 or 14.04 or in a Virtual Machine if you prefer.
If you have a Nexus device, you could either replace the legacy OS with Ubuntu using either of these guides – https://wiki.ubuntu.com/Touch/Install or https://wiki.ubuntu.com/Touch/DualBootInstallation.

Next up take a look at some of these suggestions based on your area of interest and skill level.

We welcome translations for all our Core Apps. If that’s if interest you can find everything you need at https://translations.launchpad.net/reminders-app and https://translations.launchpad.net/music-app.

If you find bugs in the apps you can look for existing bugs to confirm or fix at https://bugs.launchpad.net/reminders-app/+bugs and https://bugs.launchpad.net/music-app/+bugs, or file new bugs at https://bugs.launchpad.net/reminders-app/+filebug and https://bugs.launchpad.net/reminders-app/+filebug

You may find some bugs which have yet to be confirmed or triaged, we’d love your help there too.

You’ll find out-standing merge proposals on launchpad at https://code.launchpad.net/reminders-app/+activereviews and https://code.launchpad.net/music-app/+activereviews.

If you’d like to take on a task then we have some work items in the blueprints which you can assign to yourself and get cracking on at https://blueprints.launchpad.net/ubuntu-phone-commons/+spec/reminders-app-development and https://blueprints.launchpad.net/ubuntu-phone-commons/+spec/coreapps-1404-music-dev

You can find out more about the Core Apps Hack Days at the links at the top, and you’ll find all of us hanging out on #ubuntu-app-devel on freenode.

Pages

Subscribe to Free Software Magazine aggregator