Welcome to Planet openSUSE

This is a feed aggregator that collects what openSUSE contributors are writing in their respective blogs.

To have your blog added to this aggregator, please read the instructions.

29 August, 2015


In October 2012 I announced the first version of the User Data Manifesto during the Latinoware Keynote in Brazil. The idea was to define some basic right that all users should have in the digital age. This was still before the Snowden revelations. But it was already very clear that the privacy and security is at risk by cloud services and SaaS solutions that totally ignore the rights and interests of their users. So the idea was to try to define what this rights should be in the internet age.

The version 1.0 was instantly very popular and I got a ton of positive feedback and support. But over the time it also became clear that a few things could be expressed in a simpler and clearer way. So the idea came up to do a revision of the manifesto based on all the feedback.

During last years ownCloud Contributor Conference Hugo Roy from FSFE and ToS;DR, Jan-C. Borchardt and I started to work on the version 2. Now one year later I’m super happy to say that Hugo launched the new version of the manifesto during the ownCloud Contributor Conference keynote here in Berlin just a few minutes ago.
This is the result of a lot of discussion and the input from a lot of people and organizations. I’m also super proud to say that several well known organization are official launch partners of this 2.0 version of the manifesto and support the manifesto and the ideas behind this. This supporters are:

  • KDE
  • Free Software Foundation Europe
  • Netzpolitik.org
  • X-Lab
  • ToS;DR
  • Spreed
  • ownCloud
  • More information about the manifesto can be found here

    I hope that this Manifesto helps to promote the importance of privacy, data protection, security and control over the own data in the cloud age.
    If your organization, company or open source project wants to help to push this forward and want to support this manifesto then please send me a message and we will add you to the list of supporters.


    Up to recently, the only social presence for Weblate was my personal Twitter account. It's time to change that.

    You can now follow news and information about Weblate on Twitter, Facebook or Google+.

    Filed under: English phpMyAdmin SUSE Weblate | 0 comments

    Michal Čihař: Weblate 2.3

    04:00 UTC


    Weblate 2.3 has been released today. It comes with better features for project owners, better file formats support and more configuration options for users.

    Full list of changes for 2.3:

    • Dropped support for Django 1.6 and South migrations.
    • Support for adding new translations when using Java Property files
    • Allow to accept suggestion without editing.
    • Improved support for Google OAuth2.
    • Added support for Microsoft .resx files.
    • Tuned default robots.txt to disallow big crawling of translations.
    • Simplified workflow for accepting suggestions.
    • Added project owners who always receive important notifications.
    • Allow to disable editing of monolingual template.
    • More detailed repository status view.
    • Direct link for editing template when changing translation.
    • Allow to add more permissions to project owners.
    • Allow to show secondary language in zen mode.
    • Support for hiding source string in favor of secondary language.

    You can find more information about Weblate on http://weblate.org, the code is hosted on Github. If you are curious how it looks, you can try it out on demo server. You can login there with demo account using demo password or register your own user.

    Weblate is also being used https://hosted.weblate.org/ as official translating service for phpMyAdmin, Gammu, Weblate itself and other projects.

    If you are free software project which would like to use Weblate, I'm happy to help you with set up or even host Weblate for you.

    Further development of Weblate would not be possible without people providing donations, thanks to everybody who have helped so far!

    PS: The roadmap for next release is just being prepared, you can influence this by expressing support for individual issues either by comments or by providing bounty for them.

    Filed under: English phpMyAdmin SUSE Weblate | 0 comments


    After recent porting python-gammu to Python 3, it was quite obvious to me that new release will have some problems. Fortunately they have proven to be rather cosmetic and no big bugs were found so far.

    Anyway it's time to push the minor fixes to the users, so here comes python-gammu 2.2. As you can see, the changes are pretty small, but given that I don't expect much development in the future, it's good to release them early.

    Filed under: English Gammu python-gammu SUSE Wammu | 0 comments


    After Monday release of separate Gammu and python-gammu, the obvious task was to get the new package to distributions.

    First I've started with Debian packages, what was quite easy as from quite complex CMake + Python package it is now purely CMake and it was mostly about removing stuff. Soon the updated Gammu package was uploaded to experimental. Once having that ready, I've also update the backports for Ubuntu and these are available in Gammu PPA. Creating new python-gammu package was a bit harder as this is the first Python 3 compatible package I've created, but it's now ready and sitting in the NEW queue.

    While working on python-gammu package, I've realized that some of the data used in testsuite are missing in the tarball. While not being critical, this is definitely not nice, so I've decided to release python-gammu 2.1 today. It also includes fixes for some corner cases found by coverity.

    For openSUSE the packaging was quite easy as well, stripping out unneeded parts of Gammu package went smoothly and it's now in hardware project, SR to Factory is pending. With python-gammu it turned out to be much harder as the testsuite had failed there with some strange error coming out of libdbi. After looking deeper into it, the problem is in new return type available in Git snapshot openSUSE is shipping. Fortunately producing fix was quite easy, so next Gammu upstream will handle that properly and package in hardware project is already patched. You can now use python-python-gammu from devel:languages:python and SR to Factory is pending as well.

    Filed under: Debian English Gammu python-gammu SUSE Wammu | 0 comments


    I've spent first day of SUSE Hackweek on Gammu. There are quite many tasks to be done and I wanted to complete at least some of them.

    First I started with the website. I did not really like the old layout and aggressive colors and while touching it's code it's good idea to make the website work well in mobile devices. I've started with conversion to Bootstrap and It turned out to be quite easy task. The next step was making the pages simpler as in many places there was too much information hidden in sidebar. While doing content cleanup, I've removed some features which really don't make much sense these days (such as mirror selection). Anyway read more in the news entry on the site itself.

    Second big task was to add support for Python 3 in python-gammu. It seems that world is finally slowly moving towards Python 3 and people started to request python-gammu to be available there as well. The porting itself took quite some time, but I've mostly completed it before Hackweek. Yesterday, there was just some time spent on polishing and releasing standalone python-gammu and Gammu without python bindings. Now you can build python-gammu using distutils or install it using pip install python-gammu.

    Filed under: English Gammu python-gammu SUSE Wammu | 0 comments


    As usual, I look at the application stats for phpMyAdmin just after student application period of Google Summer of Code is over.

    First of all we got way more proposals than in last years, but also number of bogus proposals went up (you can see them as ignored in the chart).

    Same as in past years, people leave the submission to the last moment, even though we encourage them to submit early so that they can adjust the application based on our feedback. But still we got more than half of the proposals in last three days.

    Number of applications over time

    Anyway we're just working on evaluation and will finalize it in upcoming days. Of course you will know the results from Google on April 27th.

    PS: You can compare to our 2014, 2013 and 2012 numbers.

    Filed under: English phpMyAdmin SUSE | 0 comments

    Michal Čihař: Weblate 2.2

    04:00 UTC


    Weblate 2.2 has been released today. It comes with improved search, user interface cleanup and various other fixes.

    Full list of changes for 2.2:

    • Performance improvements.
    • Fulltext search on location and comments fields.
    • New SVG/javascript based activity charts.
    • Support for Django 1.8.
    • Support for deleting comments.
    • Added own SVG badge.
    • Added support for Google Analytics.
    • Improved handling of translation file names.
    • Added support for monolingual JSON translations.
    • Record component locking in a history.
    • Support for editing source (template) language for monolingual translations.
    • Added basic support for Gerrit.

    You can find more information about Weblate on http://weblate.org, the code is hosted on Github. If you are curious how it looks, you can try it out on demo server. You can login there with demo account using demo password or register your own user.

    Weblate is also being used https://hosted.weblate.org/ as official translating service for phpMyAdmin, Gammu, Weblate itself and other projects.

    If you are free software project which would like to use Weblate, I'm happy to help you with set up or even host Weblate for you.

    Further development of Weblate would not be possible without people providing donations, thanks to everybody who have helped so far!

    PS: The roadmap for next release is just being prepared, you can influence this by expressing support for individual issues either by comments or by providing bounty for them.

    Filed under: English phpMyAdmin SUSE Weblate | 0 comments


    In past days, several new free software projects have been added to Hosted Weblate. If you are interested in translating your project there, just follow instruction at our website.

    The new projects include:

    PS: Added later during the week:

    • Boilr, a cryptocurrency and bullion price alarms for Android
    • SwitchyOmega, a proxy manager and switcher for Chromium

    Filed under: English phpMyAdmin SUSE Weblate | 0 comments


    After releasing Weblate 2.0 with Bootstrap based UI, there was still lot of things to improve. Weblate 2.1 brought more consistency in using buttons with colors and icons. Weblate 2.2 will bring some improvements in other graphics elements.

    One of thing which was for quite long in our issue tracker is to provide own renderer for SVG status badge. So far Weblate has offered either PNG badge or external SVG rendered by shields.io. Relying on external service was not good in a long term and also caused requests to third party server on many pages, what could be considered bad privacy wise.

    Since this week, Weblate can render SVG badge on it's own and they are also matching current style used by other services (eg. Travis CI):

    Translation status

    One last thing which really did not fit into new UI were activity charts. In past they were rendered as PNG on server side, but for upcoming releases we have switched to use Chartist javascript library and render them as SVG on client side. This way we can nicely style them to fit into page, they scale properly and also reduce server load. You can see them in action on Hosted Weblate server:

    Weblate activity chart

    Filed under: English phpMyAdmin SUSE Weblate | 0 comments

    Michal Čihař: Weblate 2.1

    04:00 UTC


    Weblate 2.1 has been released today. It comes with native Mercurial support, user interface cleanup and various other fixes.

    Full list of changes for 2.1:

    • Added support for Mercurial repositories.
    • Replaced Glyphicon font by Awesome.
    • Added icons for social authentication services.
    • Better consistency of button colors and icons.
    • Documentation improvements.
    • Various bugfixes.
    • Automatic hiding of columns in translation listing for small screens.
    • Changed configuration of filesystem paths.
    • Improved SSH keys handling and storage.
    • Improved repository locking.
    • Customizable quality checks per source string.

    You can find more information about Weblate on http://weblate.org, the code is hosted on Github. If you are curious how it looks, you can try it out on demo server. You can login there with demo account using demo password or register your own user. Ready to run appliances will be soon available in SUSE Studio Gallery.

    Weblate is also being used https://hosted.weblate.org/ as official translating service for phpMyAdmin, Gammu, Weblate itself and others.

    If you are free software project which would like to use Weblate, I'm happy to help you with set up or even host Weblate for you.

    Further development of Weblate would not be possible without people providing donations, thanks to everybody who have helped so far!

    Filed under: English phpMyAdmin SUSE Weblate | 0 comments

    28 August, 2015


    The SUSE office in Nuremberg, Germany, had a special presentation given by Dominique Leuenberger, last week about the interconnecting points of the openSUSE project.

    Specifically, Leuenberger covered the integration process of Tumbleweed and Leap and explained the difference between the two.

    “Leap is trying to find the balance between how much SLE (SUSE Linux Enterprise) and how much Tumbleweed,” he said.

    Tumbleweed is a tested and stable rolling release with the most recent kernels, software versions and packages while SLE focuses on delivering enterprise-quality technology, efficiency and systems management.

    Leuenberger, who has been in the openSUSE project since it started, further explained how items enter the Open Build Service, are tested and reviewed in the Factory process and then how items receive automated testing in openQA.

    “Once openQA is ready, we give this all to our happy users, hopefully, most of the time,” he said. “As usual they always report more bugs, which is why the openSUSE Factory mailing list is really helpful.”

    Users of Tumbleweed are recommended to sign up to the openSUSE Factory mailing list to share user experience and get involved with improving and advancing systems to create long-term stability for Free and Open Source Software systems.

    The audio and video quality isn’t the high quality, but it is understandable and the slides are readable. The presentation last about 25 minutes and there was about 30 minutes dedicated to the questions about the software development process.


    You want to be an Open Source developer? Want to hack up some nasty code. Make everyone obey your order and take over the world. I was young back when I entered these shallow waters and how green I was back then.. oh boy!

    My first app

    I been coding long time maybe too long. First I was using Pascal but it was too high level for me and not cool at all. When I started using Linux KDE 1 was Koolest desktop environment on earth and CDE was de-facto environment on for the big boys. Soon after KDE 2 was released I started using KDE PIM suite because KMail is still neat application and Korganizer was way better than Evolution. I realized I like to format my happenings in list which wasn’t supported the way I liked. I thought, ‘Hey what If I write console application for that. I know how to code C and Java so C++ can’t that hard?’.

    It was possible. QT2 was really great GUI library for writing applications. That time QT licensing was insane but today it’s much easier to understand. Writing applications with KDE libraries wasn’t all that hard. Application was all main-function and soon as I got it working I mailed to KDE mailing list. I don’t have that mail any more and can’t find it from the net but it was something like: ‘Hello, I’m the best QT-coder ever and I have this app called KonsoleKalendar‘. I got very friendly feedback and it got included into CVS. I though now I’m greatest coder ever lived!

    Actually I maintained KonsoleKalendar only short time and as I said I wasn’t happy about licensing of QT2 (It didn’t help that it was badly written application like ever). Most wonderful and bizarre thing is that KonsoleKalendar this exists in KDE5 and it’s in much better shape than when I left it. Afterwards this was the main learning point about collaboration in Open Source project for me. In start of 2000 there weren’t Git nor there where any fancy GUIs for sending patches. People mailed each other and tried to cope with CVS/Subversion and KDE still is very friendly community if you compare it to many others.

    Getting along the communities

    If you ever are going to cope the Open Source world try to get along with community. There is as many communities as there is project and they can be friendly, neutral, unknown or hostile. There are several nearly or really hostile projects where bug reports and patches are rejected with making fun of you body organs or mom. Hostile projects seems to have same pattern. There one master of universe mega alpha coder that dictators everything and then people who needs that project or are somehow contributed something that coder number one things that they can exists. If you cross this kind of project you should have very nice shielding or


    The openSUSE.Asia Committee seeks sponsors for the second edition of openSUSE.Asia Summit that will take place in Taipei city, Taiwan from 5th and 6th of December 2015. We expect about 200 attendees ranging from developers, regular users and power users to attend the summit. The sponsorship amount will cover travel costs for speakers and some attendees, as well as the cost of facilities.

    The summit aims to provide a free platform for users, contributors and developers from both inside and outside of the openSUSE community fostering ties the open source enthusiasts across communities. Attendees take this opportunity to learn about different modern technologies and share their experiences.

    By sponsoring, individuals, businesses, and organizations can show their appreciation the efforts of the openSUSE community and summit volunteers. The sponsorship, is also a great way to

    • Promote your products in the community.
    • Talk about the product in the business track. It will be a great opportunity for the sponsor to describe their products to FOSS, and the openSUSE community. Businesses can talk about their solutions, and on other topics such as training, exchange of technology and other topics in line with the guiding principles of the summit and openSUSE Project.
    • Sponsors will be promoted through the following venues
      • Promotion through the openSUSE.Asia Summit website.
      • Promotion through printed materials advertising the event.
      • Inclusion of sponsor material in the summit welcome package.
      • Sponsor promotional advertising visible throughout the event location.
      • Visibility at other community events that are used to promote openSUSE.Asia summit.
    •  Sponsors can also request a booth to highlight their products and businesses.

    For more details on sponsorship, contact Joey Lee (jlee@suse.com) and Max Lin (mlin@suse.com) no later than 19th of October, 2015.

    26 August, 2015

    Michael Meeks: 2015-08-26 Wednesday.

    21:00 UTCmember

    • Early up, team meeting, interview , mail; hacking; wrote up a spec. Sync'd with Niall before his holiday. Plugged away at vile non-rendering menu problem; turns out it is rendered, but we're missing a glFlush - fun, it seems GDI has a similar issue with a GdiFlush() call for similar purposes.

    25 August, 2015

    Michael Meeks: 2015-08-25 Tuesday.

    21:00 UTCmember

    • Early up, mail chew; hackery. Early meeting. Hacking. Lunch. E. frenetic cycling, fell off her bike but ok. Plugged away at bits of hackery and admin.


    The openSUSE.Asia Committee is happy to announce the call for papers upcoming second openSUSE.Asia Summit. Starting today, the Committee is looking forward to see your proposals. The committee is looking for speakers from different avenues representing and advocating Free and Open Source Software.

    Presentations can be submitted in any of the four formats

    • Lightning Talk (10 mins)
    • Short Talk (30 mins)
    • Long Talk (60 mins)
    • Workshop (3 hours)

    The openSUSE.Asia committee highly recommends workshops or hands on sessions. Papers can be submitted at the conference website.


    Papers can be submitted until 25th of September. The openSUSE.Asia Committee will evaluate the proposals based on the submitted abstracts and available time in the schedule, and, the accepted proposals will be announced on 9th October.

    24 August, 2015


    Preparations for the openSUSE.Asia Summit are rolling. As we are busy prepping ourselves for this big event, we realized that we need a logo for our very own Summit. Following tradition, we are back with the logo contest. We are looking for a logo which best reflects openSUSE and its community in Asia. The contest is open now and ends on 19 September 2015. We will send a “Geeko Mystery Box” as an appreciation for the best logo designed.

    The Rules of the Contest are as follows:

    1. We will accept only SVG format for original design.

    2. Both color and monochrome(black and white) version are required as part of your submission.

    3. The elements of your design should reflect the openSUSE community in Asia.

    4. The logo should avoid the following things:

        • No brand names or trademarks of any kind.

        • No illustrations that may consider inappropriate, offensive, hateful, tortuous, defamatory, slanderous or libelous.

        • No sexually explicit or provocative images.

        • No images of weapons or violence.

        • No alcohol, tobacco, or drug use imagery.

        • No designs which promotes bigotry, racism, hatred or harm against groups or individuals; or promotes discrimination based on race, gender, religion, nationality, disability, sexual orientation or age.

        • No religious, political, or nationalist imagery.

    5. The logo should comply with “openSUSE Project Trademark Guidelines” published at: https://en.opensuse.org/File:OpenSUSE_Trademark_Guidelines.pdf

    6. You should also agree that the openSUSE community have right to interpret the usage of the artwork.

    7. All your artwork will be licensed under CC-BY-SA 3.0.

    The following links can be useful to you:

    Please send your design to opensuse.asia@gmail.com with the following entries:

    1. Vector file of the design in attachment, with svg format ONLY.

    2. Bitmap of design in attachment – image size: 256*256px at least. Format: png or jpg. Less than 512KB.

    3. Your name.

    4. Where are you working/studying now. (optional)

    5. Your phone number. (optional)

    After that, the openSUSE.Asia Summit Committee will decide on the logos, subject to the condition, that the logo meets all the requirements. The final decision will be made by openSUSE.Asia Summit Committee and it may not be the highest scored design. We recommend the artist to use Inkscape, a powerful, free and open source vector graphics tool for all kinds of design.

    Note: The article has been updated after discussion with openSUSE.Asia team regarding entry rules.

    Michael Meeks: 2015-08-24 Monday.

    21:00 UTCmember

    • Up early, team meetings & 1:1's much of the day; mail chew, hacked on polishing up the software watchdog thread for busted OpenGL drivers that hang. Lunch. Really enjoying the CI infra. and it's ability to catch my stupid mistakes.
    • Chat with Philippe, more fixing, built ESC bug stats.


    Many things can be modelled as finite state machines. Particularly things where you’d naturally use “state” in the name e.g. the current state of an order, or delivery status. We often model these as enums.

    enum OrderStatus {

    Enums are great for restricting our order status to only valid states. However, usually there are only certain transitions that are valid. We can’t go from Delivered to Failed. Nor would we go straight from Pending to Delivered. Maybe we can transition from Purchased to either Shipped or Cancelled.

    Using enum values we cannot restrict to the transitions to only those that we desire. It would be nice to also let the compiler help us out by not letting us choose invalid transitions in our code.

    We can, however, achieve this if we use a class hierarchy to represent our states instead, and it can still be fairly concise. There are other reasons for using regular classes, they allow us to store and even capture state from the surrounding context.

    Here’s a way we could model the above enum as a class heirarchy with the valid transitions.

    interface OrderStatus extends State<OrderStatus> {}
    static class Pending     implements OrderStatus, BiTransitionTo<CheckingOut, Cancelled> {}
    static class CheckingOut implements OrderStatus, BiTransitionTo<Purchased, Cancelled> {}
    static class Purchased   implements OrderStatus, BiTransitionTo<Shipped, Failed> {}
    static class Shipped     implements OrderStatus, BiTransitionTo<Refunded, Delivered> {}
    static class Delivered   implements OrderStatus, TransitionTo<Refunded> {}
    static class Cancelled   implements OrderStatus {}
    static class Failed      implements OrderStatus {}
    static class Refunded    implements OrderStatus {}

    We’ve declared an OrderStatus interface and then created implementations of OrderStatus for each valid state. We’ve then encoded the valid transitions as other interface implementations. There’s a TransitionTo<State> and BiTransitionTo<State1,State2>, or TriTransitionTo<State1,State2,State3> depending on the number of valid transitions from that state. We need differently named interfaces for different numbers of transitions because Java doesn’t support variance on the number of generic type parameters.

    Compile-time checking valid transitions

    Now we can create the TransitionTo/BiTransitionTo interfaces, which can give us the functionality to transition to a new state (but only if it is valid)

    We might imagine an api like this where we can choose which state to transition to

    new Pending()
        .transitionTo(Refunded.class) // <-- can we make this line fail to compile?

    This turns out to be a little tricky, but not impossible, due to type erasure.

    Let’s try to implement BiTransitionTo interface with the two valid transition.

    public interface BiTransitionTo<T, U> {
        default T transitionTo(Class<T> type) { ... }
        default U transitionTo(Class<U> type) { ... }

    Both of these transitionTo methods have the same erasure. So we can’t do it quite like this. However, if we can encourage the consumer of our API to pass a lambda, there is a way to work around this same erasure problem.

    So how about this API, where instead of passing class literals we pass constructor references. It looks similarly clean

    23 August, 2015

    Michael Meeks: 2015-08-23 Sunday.

    21:00 UTCmember

    • NCC, family church, Tony spoke; caught up with the other Tony & Anne. Back for lunch, quartet practice in the garden - suprisingly good after a big gap. David & Allison over for the afternoon - good to see them. Bed earlyish.

    22 August, 2015

    Michael Meeks: 2015-08-22 Saturday.

    21:00 UTCmember

    • Up earlyish; bid 'bye to Leanne, and off to Bruce & Annes. Tackled a bug in the car while J. drove - a 'VclPtr' bug turned out to pre-date LibreOffice 4.2 - good to stimulate more bug-hunting in lots of areas.
    • Tried to hunt down how to return a phone found on the beach to it's owner; called EE. to help out: "take it to a shop". Lunch. Out to the beach ourselves near the Aldeburgh shell. Lots of lying on the beach with Sue, Clive, B & A.
    • Back for some tea; hacked on another couple of issues on the way home, one real, one non-reproducible. Mail chew.


    TumbleweedThis week Tumbleweed posted two snapshots in spite of the fact many developers with families had been on holidays before school begins.

    In those two snapshots, there were changes to  PyQt4 and an upgrade to a newer Kernel.


    No major versions were upgraded in the 20150819 Tumbleweed snapshot, but TW did update to Linux Kernel 4.1.5.

    The 20150815 snapshot there were bug-fixes in PyQt4 for 4.11.4., 4.11.3 and 4.11.2. Added support was also applied for Qt v4.8.6 and there were several other updates.


    This weekend, we are at the Free and Open Source Software Conference at the University of Applied Sciences Bonn-Rhein-Sieg. Jon “Maddog” Hall, chairman of the non profit Linux International and co-founder of the open source initiative, gives a Keynote speech titled “Beginning of the End or End of the Beginning?

    There are tons of development workshops at this event, so if you have never been to FrOSCon, we highly recommend you come or plan to attend one in the future.

    Landing Page

    The landing page is momentarily delayed and should be finished soon. There are still a few more things that need to be changed and feedback from the community has been helpful. The graphics increase the temperature of computers and use more than normal levels of RAM, so some slight adjustments need to be made before the new page is published.


    On the Factory Mailing List, a discussion about new default fonts for Leap began and is moving along constructively.

    One of the bigger discussions taking place about Leap is reviewing packages. Anyone who is able to review packages and wants to help can get involved with the review team. An option may be built into the Open Build Service to help streamline the process of the review team, which will send packages for review to a reviewers who specialize in a certain area. The details aren’t clear just yet, but expect to hear more about this in the future.

    Asia Summit

    Two days ago we found out that the second openSUSE Asia Summit will take place in at the National Taipei University of Education in Taiwan from Dec. 5 to 6. With Taipei 101 in the background of this summit, it is certain to be stellar. If you’re in Asia or the Pacific, come to the summit and see how you can contribute to the openSUSE project!

    21 August, 2015

    Michael Meeks: 2015-08-21 Friday.

    21:00 UTCmember

    • Up rather early, hacked away at this and that; positive partner call. Chewed through mail, admin & bugs.

    Benjamin Weber: HTML in Java

    12:09 UTCmember


    Another use of lambda parameter reflection could be to write html inline in Java. It allows us to create builders like this, in Java, where we’d previously have to use a language like Kotlin and a library like Kara.

    String doc =
                meta(charset -> "utf-8"),
                link(rel->stylesheet, type->css, href->"/my.css"),
                script(type->javascript, src -> "/some.js")
                h1("Hello World", style->"font-size:200%;"),
                    p("Here is an interesting paragraph"),
                        "And another",

    Which generates html like

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
        <meta name="generator" content=
        "HTML Tidy for Java (vers. 2009-12-01), see jtidy.sourceforge.net">
    <meta charset="utf-8"><script type="text/javascript" src=
        <h1>Hello World</h1>
        <p>Here is an interesting paragraph</p>
        <p>And another<small>small</small></p>

    Code Generation

    Why would you do this? Well we could do code generation. e.g. we can programmatically generate paragraphs.

            .map(number -> "Paragraph " + number)
            .map(content -> p(content))

    Help from the Type System

    We can also use the Java type system to help us write valid code.

    It will be a compile time error to specify an invalid attribute for link rel.

    It’s a compile time error to omit a mandatory tag

    It’s also a compile time error to have a body tag inside a p tag, because body is not phrasing content.

    We can also ensure that image sizes are in pixels


    We can also help reduce injection attacks when inserting content from users into our markup, by having the DSL html-encoding any content passed in.


        "<p>&lt;script src=&quot;attack.js&quot;&gt;&lt;/script&gt;</p>", 
        p("<script src=\"attack.js\"></script>").asString()

    How does it work?

    See this previous blogpost that shows how to get lambda parameter names with reflection. This allows us to specify the key value pairs for html attributes quite cleanly.

    I’ve created an Attribute type that converts a lambda to a html attribute.

    public interface Attribute<T> extends NamedValue<T> {
        default String asString() {
            return name() + "=\"" + value()+"\"";

    For the tags themselves we declare an interface per tag, with a heirarchy to allow certain tags in certain contexts. For example Small is PhrasingContent and can be inside a P tag.

    public interface Small extends PhrasingContent {
        default Small small(String content) {
            return () -> tag("small", content);

    To make it easy to have all the tag names available in the context without having to static import lots of things, we can create a “mixin” interface that combines all the tags.

    public interface HtmlDsl extends

    Then where we want to write html we just make our class implement HtmlDsl (Or we could staticly import the methods instead.


    20 August, 2015


    We are happy to announce the second openSUSE.Asia Summit following a glorious successful first edition. The conference will take place in Taiwan at National Taipei University of Education, Taiwan on December 5th and 6th, 2015.

    The summit is a great way for both openSUSE contributors, and, users to meet each other and have fun. The openSUSE community will get together, share their experiences, and, learn free and open source technologies.
    The goals of the Summit are

    1. To promote openSUSE, its tools, and, other free open source software in Asia.
    2. To introduce people to the openSUSE Project, through a series of talks, discussions and workshops.
    3. To show prospective contributors, different various ways of contributing to the openSUSE Project and provide a platform for them to engage with contributors and find different avenues in the project that match their interests.

    Normally, the openSUSE contributors and users communicated with each other online, thus it is a great opportunity to meet and talk face to face.  In addition, we have chance to learn free and open technologies, to share experiences with each other, and most of all, have fun at the Summit, and, in Taipei city.

    Stay tuned!!!!

    Michael Meeks: 2015-08-20 Thursday.

    21:00 UTCmember

    • Mail chew; most pleased to notice a disabled person opposite get into their (ordinary looking) car and with a remote-control raise a roof-box through 90 degrees across the side of the car, from which a tether came, which then hoisted their wheel-chair inside, closed the flap for that, and then returned the box to the horizontal (while they drove off) - amazingly good.
    • ESC call; hacked away at some code to disable OpenGL if we get a crash inside a block of OpenGL code.

    19 August, 2015

    Michael Meeks: 2015-08-19 Wednesday.

    21:00 UTCmember

    • A day of phone calls , all positive, and E-mail, likewise.

    It was simple: netneutrality is good. Companies shouldn't be able to buy their way on a fast lane! That stifles innovation and competition and risks ruining the internet. Just like John Oliver explained it! But now the Brazilians are making things complicated.

    Brazil was one of the first countries to introduce strong Net Neutrality laws, points for them. But now, Brazilian banks and local government are paying for the data bundles of users! Heresy! Why?

    Well, many Brazilians can't afford a data bundle. Yet they need to bank, or order new passports. And it turns out that handling people in person at the office is more expensive for the banks and local governments than have them use an app on their phone. So, they made a deal with some local providers: users, even without a data bundle, can do their banking online and order their passports without paying. That seems like a win-win.

    Zero rating, as this practice is called, exempts some services from from the data bundle - exactly what Brasil is doing. It is used widely in India ("internet.org") and in Chile it offered many people access to a limited set of internet services - until it was outlawed. But in a country where only a quarter of the citizens has access to broadband internet, aren't we doing the population a disservice by taking away their internet access, however limited?

    Zero rating is essentially the equivalent of a collect call - the receiver pays. What is wrong with that? Even wikimedia supports zero rating!

    It isn't win-win but lose-it-all

    The thing is - the provider will be the gate keeper of what services you can. You are allowed only on a piece of the internet, being blocked not by technical boundaries but by a business model. A model which allows providers to extract more money from their business than they otherwise would have - not by offering more services, but by offering less.

    The result will inevitably be lower data caps because it forces more companies to pay for zero rating! This is exactly what happens in Canada, where $45 gets you 2GB of data - compare that to the price of 8 dollars for the same amount in Finland. Canada is now changing the rules. Cable providers have figured that out, too, and try imposing limits while excepting certain services. And indeed, when providers introduce zero rating, prices go up!

    Interestingly, when zero-rating is squashed, the opposite happens. When the government forbade zero rating in the Netherlands, its largest provider KPN responded by doubling their users' data caps without a price hike.

    Thus, my suggestion to the Brazil government would be: work with providers to get indiscriminate data bundles to more users, rather than empowering providers to control their users' Internet usage.

    Zero rating exist by virtue of artificial Internet scarcity in the form of usage caps and it is not part of the solution to bringing Internet access to everybody. It is part of the problem.

    18 August, 2015

    Michael Meeks: 2015-08-18 Tuesday.

    21:00 UTCmember

    • More mail chew, project review, bit of hackery on LOK pre-initialization. Thrilled to see Caolan's result of filter testing with a more comprehensive set of files: 0 import failures, 0 export failures, 0 coverity warnings built ESC bug stats.

    Older blog entries ->