news aggregator

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.

The Fridge: Trusty Alpha 2 Available for Testing

Planet Ubuntu - Thu, 2014-01-23 22:16

The second Alpha of Trusty Tahr (to become 14.04 LTS) has now been released for testers and early adopters.

This alpha features images for Edubuntu, Kubuntu, Ubuntu GNOME, Ubuntu Kylin, Xubuntu and Ubuntu Cloud images.

These are not to be used as stable systems but please do test for bugs to report. Always ensure your system is up to date before reporting bugs.

Edubuntu

Edubuntu is the educational flavour of Ubuntu. It’s very similar to stock Ubuntu but integrates a lot of educational software, supports thin clients (LTSP) and offers an optional GNOME lashback desktop as an alternative to Unity.

The Alpha 2 images can be downloaded at: http://cdimage.ubuntu.com/edubuntu/releases/trusty/alpha-2/

More information on Edubuntu alpha 2 is published here: https://wiki.ubuntu.com/TrustyTahr/Alpha2/Edubuntu

Kubuntu

Kubuntu is the KDE based flavour of Ubuntu. It uses the Plasma desktop and includes a wide selection of tools from the KDE project. In this LTS cycle the Kubuntu team are working on stabalising and bug fixing.

The Alpha 2 images can be downloaded at: http://cdimage.ubuntu.com/kubuntu/releases/trusty/alpha-2/

More information on Kubuntu Alpha 2 can be found here: https://wiki.kubuntu.org/TrustyTahr/Alpha2/Kubuntu

Ubuntu GNOME

Ubuntu GNOME is a flavour of Ubuntu featuring the GNOME desktop environment.

The Alpha 2 images can be downloaded at: http://cdimage.ubuntu.com/ubuntu-gnome/releases/trusty/alpha-2/

More information on Ubuntu GNOME Alpha 2 can be found here: https://wiki.ubuntu.com/TrustyTahr/Alpha2/UbuntuGNOME

Xubuntu

Xubuntu is the Ubuntu flavour with Xfce, a stable, light and configurable desktop environment.

The Alpha 2 images can be downloaded at: http://cdimage.ubuntu.com/xubuntu;/releases/trusty/alpha-2/

More information on Xubuntu Alpha 2 will be published here: http://xubuntu.org/news/xubuntu-14-04-alpha-2/

UbuntuKylin

UbuntuKylin is a flavour of Ubuntu that is more suitable for Chinese users.

The Alpha 2 images can be downloaded at: http://cdimage.ubuntu.com/ubuntukylin/releases/trusty/alpha

More information on UbuntuKylin Alpha 2 will be published here: http://www.ubuntukylin.com/downloads/show.php?lang=en&id=147

Ubuntu Cloud

Ubuntu Cloud images can be run on Amazon EC2, Openstack, SmartOS and many other clouds. Included with Alpha-2 are PPC64EL images.

http://uec-images.ubuntu.com/releases/trusty/alpha-2/

Regular daily images for Ubuntu (Unity) can be found at: http://cdimage.ubuntu.com/daily-live/current/

If you’re interested in following the changes as we further develop Trusty, we suggest that you subscribe to the ubuntu-devel-announce list. This is a low-traffic list (a few posts a week) carrying announcements of approved specifications, policy changes, alpha releases and other interesting events.

http://lists.ubuntu.com/mailman/listinfo/ubuntu-devel-announce

Originally posted to the ubuntu-devel-announce mailing list on Thu Jan 23 18:40:13 UTC 2014 by Jonathan Riddell

Jason Gerard DeRose: How to enable perfect-forward-secrecy in Python 3.3

Planet Ubuntu - Thu, 2014-01-23 20:33

One of the many reasons to use Python3 is the ssl.SSLContext, which gives you quite comprehensive control of how you use TLS from Python.

As of Python 3.3, SSLContext supports perfect-forward-secrecy, which you can enable on your server-side SSLContext like this:

server_ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
server_ctx.set_ecdh_curve('prime256v1')

When implementing REST APIs, I highly recommend you secure them with TLS using client-side certificates for authentication. When you have control over both end-points, I recommend you configure TLS in a highly restrictive, modern way. Even though perfect-forward-secrecy must be enabled on the server-side, you can still configure your clients to only connect to servers that have enabled perfect-forward-secrecy (eg, by setting the ciphers to only include ECDHE variants).

For example, this is more or less the way that Dmedia will be configuring TLS for its server going forward:

server_ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
server_ctx.set_ecdh_curve('prime256v1')
server_ctx.verify_mode = ssl.CERT_REQUIRED
server_ctx.set_ciphers('ECDHE-RSA-AES256-SHA')
server_ctx.options |= ssl.OP_NO_COMPRESSION
server_ctx.options |= ssl.OP_SINGLE_ECDH_USE
server_ctx.options |= ssl.OP_CIPHER_SERVER_PREFERENCE
server_ctx.load_cert_chain('/my/server.cert', '/my/server.key')
server_ctx.load_verify_locations('/my/client.ca')

And this is how Dmedia will configure its client:

client_ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
client_ctx.verify_mode = ssl.CERT_REQUIRED
client_ctx.set_ciphers('ECDHE-RSA-AES256-SHA')
client_ctx.options |= ssl.OP_NO_COMPRESSION
client_ctx.load_cert_chain('/my/client.cert', '/my/client.key')
client_ctx.load_verify_locations('/my/server.ca')
Python 3.4

In Python 3.4 (which will be Ubuntu Trusty), SSLContext supports TLSv1.2, and so for Python 3.4, I recommend you set the ciphers to 'ECDHE-RSA-AES256-GCM-SHA384', the big reason being that it's almost twice as fast.

For example, in a recent localhost-to-localhost benchmark I did (so Ethernet wouldn't be the bottleneck), I got:

ECDHE-RSA-AES256-SHA: 394 MB/second
ECDHE-RSA-AES256-GCM-SHA384: 740 MB/second

My recommended Python 3.4 server config is:

server_ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
server_ctx.set_ecdh_curve('prime256v1')
server_ctx.verify_mode = ssl.CERT_REQUIRED
server_ctx.set_ciphers('ECDHE-RSA-AES256-GCM-SHA384')
server_ctx.options |= ssl.OP_NO_COMPRESSION
server_ctx.options |= ssl.OP_SINGLE_ECDH_USE
server_ctx.options |= ssl.OP_CIPHER_SERVER_PREFERENCE
server_ctx.load_cert_chain('/my/server.cert', '/my/server.key')
server_ctx.load_verify_locations('/my/client.ca')

And my recommended Python 3.4 client config is:

client_ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
client_ctx.verify_mode = ssl.CERT_REQUIRED
client_ctx.set_ciphers('ECDHE-RSA-AES256-GCM-SHA384')
client_ctx.options |= ssl.OP_NO_COMPRESSION
client_ctx.load_cert_chain('/my/client.cert', '/my/client.key')
client_ctx.load_verify_locations('/my/server.ca')

Benjamin Kerensa: Interview with Ubuntu Contributor Cody Smith

Planet Ubuntu - Thu, 2014-01-23 18:57

Cody at a Ubuntu Global Jam in 2013.

I recently reached out to Cody Smith who is a long time contributor to the Ubuntu Oregon LoCo. He has ran an Ubuntu Hour nearly every Friday for last couple of years and his passion for Free Software and getting people involved is contagious.

 

Benjamin: When did you first start contributing to Ubuntu and what was the motivation?

Cody: I started contributing around 2012 with bug reports, byte-size bug-fixes, and getting more people using Ubuntu (and Linux in general), my motivation was me wanting to give back to such a great community, and be a part of making Ubuntu better in any way I could.

Benjamin: Can you tell me more about yourself?

Cody:  I am a 21-year old college student with a thirst for the knowledge of how the underpinnings of Linux (and pretty much anything I enjoy using) work, I’ve been using Ubuntu since a little after 10.04 was released. Benjamin: You recently applied for Ubuntu Membership can you tell me how that process was for you? Cody: I’d be lying if I said the membership process wasn’t a bit nerve-wracking. but all in all, I’d say it went alright, to those looking to apply, make sure you have a decent amount of contributions and give the board as much info on the contributions as possible. Benjamin: What is your favorite desktop environment? Cody:  I don’t use a desktop environment more than a plain window manager, that said, I prefer the i3 window manager, fits how I do things perfectly. Benjamin: What are your plans for contributions to Ubuntu in the future? Cody:  my plans are to maintain what I currently do (hold Ubuntu Hours, submit bug fixes for betas, and just get people on board with Ubuntu), as well as taking on more challenging bug fixes, there’s just that sense of satisfaction when your bug fix even gets considered for inclusion in the OS, even more so when it’s included. Get Involved

Getting involved is easy, all you have to do is read our Development Guide, particularly these chapters will help you a lot: Introduction to Ubuntu Development, Getting Set Up and How to fix a bug in Ubuntu. Next…

Find something to work on

We run regular bug fixing initiatives, where you can get started on hand-selected bugs and point out other ways to find bugs to get started with.

Get in touch

There are many different ways to contact Ubuntu developers and get your questions answered. Don’t be shy and get to know us.

  • Be interactive and reach us immediately: talk to us in #ubuntu-motu on irc.freenode.net.

  • Follow mailing lists and get involved in the discussions: ubuntu-devel-announce (announce only, low traffic), ubuntu-devel (high-level discussions), ubuntu-devel-discuss (fairly general developer discussions).

Stay up to date and follow the ubuntudev account on Facebook, Google+, Identi.ca or Twitter.

Xubuntu: Xubuntu 14.04 Alpha 2

Planet Ubuntu - Thu, 2014-01-23 18:44

The Xubuntu team is happy to announce the immediate release of Xubuntu 14.04 Alpha 2!

As often expected with very early cycle releases, this release has some issues which we will be working to resolve before the final release.

Notably, it is impossible to successfully use the Alpha 2 to set up an auto-resized system automatically. You will not be able to set the partition sizes.

Thanks to the 12 who tested and reported to the tracker for Alpha 2:

  • gridcube
  • irihapeti
  • j-bardales
  • jjfrv8
  • lderan
  • lyz
  • paulw2u
  • sergio-br2
  • slickymaster
  • texadactyl
  • wkrekik
  • elfy

We always need more testers so please consider contributing to our daily builds or to the next milestone! Learn more about testing here: Help us test Xubuntu 14.04 LTS

Known Issues
  • Top ruler missing from Abiword: 1261203
  • Keyboard Input Method closing unexpectedly: 1258751
  • Ubiquity window spans monitor width: 1260396
  • Desktop items have background: 1270261
  • Thunar not always automounting USB: 1210898
  • Resize bar missing when running autoresize install option: 1260473

 

Stuart Langridge: Saving the current state of your Ubuntu SDK app, with no effort

Planet Ubuntu - Thu, 2014-01-23 18:14

Earlier today I gave an example of how to use U1DB to save the state of your Ubuntu app. Now, U1DB is useful for actually storing actual data, right enough. But if you want to save state — which tab was showing, what was being typed into a text field, what was chosen in a dropdown, where a list was scrolled to — then that’s built right in 1 to the Ubuntu SDK.

It’s called StateSaver.

This isn’t used to store data, long term. It’s used to make your app automatically remember what position things were in. So quitting the app and restarting it, or switching to another and then switching back, means the app doesn’t reset to the front screen, doesn’t forget what you were halfway through typing in, doesn’t forget where you’d scrolled to.

To use it, just add StateSaver.properties to the Item you want to save things for. So, for example, if you want your ListView to remember the position it was scrolled to, do this:

ListView { id: mylistview model: someModel delegate: ListItem.Standard { text: "row " + model.index } StateSaver.properties: "contentY" }

Just that one thing. Now your ListView remembers where it was scrolled to after a restart. You can do the same with a set of Tabs (just add StateSaver.properties: "selectedTabIndex") or a TextField (StateSaver.properties: "text").

NB: this isn’t really for data saving. It might, or might not, be appropriate to use it for whether a switch is flipped or not. That’s a setting; when the switch is changed, you ought to be doing something with that information. Ideally you could drive everything, declaratively, off of whether the switch.checked is true, and if you can do that then StateSaver is the ideal place to have that info. But if you run a function when a switch is changed, then don’t use StateSaver to remember its state: use U1DB, and store the other stuff that changed alongside it. It’s about saving state, hence the name.

Saving the state of your app like this is an idea so good that other ideas gather at its feet to pray. I think that this should be turned on automatically for the “relevant” properties of each type of Ubuntu SDK widget, and if for some reason you don’t like it you can turn it off. Not for every single property, but for the ones where state makes sense: the scroll position for a ListView, the entered text for a TextField, the visible tab for Tabs. Small things like this are what make the difference between great apps and merely good ones. Any one individual app isn’t particularly harmed by not remembering this stuff; so many apps do not, on other platforms, that people are used to the idea of having their state thrown away. But if almost all the apps do do this, then the ones that don’t get called out on it and then it gets fixed, and that makes the whole platform better. It’s really important that we create a culture of desire for finished, polished apps for Ubuntu. If your app throws away where I was scrolled to, I want the developer to feel a bit embarrassed about that and immediately go to fix it. That’s what will make our platform feel consistent, feel tight, feel together, feel fun to use; the culture of pushing back on unfinished and unpolished and half-ready apps. Open source has historically not had that culture, but I’d really like to use a platform which does.

Importantly, though, for it to be reasonable for we users to require this of app developers, it has to not be really hard for app developers to do. This, taking complicated things and making them easy for app developers to implement, is what the platform is for. And StateSaver is a great example of it; the platform provides! I’m really impressed that this exists and is part of the SDK. (I’d be even more impressed if it did it automatically, as noted.) Good work, Ubuntu SDK team. This stuff needs more publicity!

Longer code example, which remembers which tab you were looking at, where the list is scrolled to, and what was typed in the text field:

import QtQuick 2.0 import Ubuntu.Components 0.1 import Ubuntu.Components.ListItems 0.1 as ListItem MainView { id: root width: units.gu(40) height: units.gu(70) Tabs { id: tabs StateSaver.properties: "selectedTabIndex" Tab { id: t1 title: "StateSaver, 1" page: Page { id: pg ListView { id: lv model: 40 clip: true anchors.fill: parent StateSaver.properties: "contentY" delegate: ListItem.Standard { text: "This is row " + model.index + ". Scroll to wherever." } } } } Tab { id: t2 title: "StateSaver, 2" Column { width: parent.width id: col2 spacing: units.gu(1) anchors.centerIn: parent Label { text: "Enter your favourite pie" horizontalAlignment: Text.AlignHCenter anchors.horizontalCenter: parent.horizontalCenter } TextField { id: tf width: parent.width - units.gu(2) StateSaver.properties: "text" anchors.horizontalCenter: parent.horizontalCenter } } } } }

Notes:

  1. how did I not know this existed! Big thanks to Florian for cueing me in

Pages

Subscribe to Free Software Magazine aggregator