October 05, 2017

Henri Bergius

Building an IoT dashboard with NASA Open MCT

One important aspect of any Internet of Things setup is being able to collect and visualize data for analysis. Seeing trends in sensor readings over time can be useful for identifying problems, and for coming up with new ways to use the data.

We wanted an easy solution for this for the c-base IoT setup. Since the c-base backstory is that of a crashed space station, using space technology for this made sense.

OpenMCT view on c-base

NASA Open MCT is a framework for building web-based mission control tools and dashboards that they’ve released as open source. It is intended for bringing together tools and both historical and real-time data, as can be seen in their Mars Science Laboratory dashboard demo.

c-beam telemetry server

As a dashboard framework, Open MCT doesn’t really come with batteries included. You get a bunch of widgets and library functionality, but out of the box there is no integration with data sources.

However, they do provide a tutorial project for integrating data sources. We started with that, and built the cbeam-telemetry-server project which gives a very easy way to integrate Open MCT with an existing IoT setup.

With the c-beam telemetry server we combine Open MCT with the InfluxDB timeseries database and the MQTT messaging bus. This gives a “turnkey” setup for persisting and visualizing IoT information.

Getting started

The first step is to install the c-beam telemetry server. If you want to do a manual setup, first install a MQTT broker, InfluxDB and Node.js. Optionally you can also install CouchDB for sharing custom dashboard layouts between users.

Then just clone the c-beam telemetry server repo:

$ git clone

Install the dependencies and build Open MCT with:

$ npm install

Now you should be able to start the service with:

$ npm start

Running with Docker

There is also an easier way to get going: we provide pre-built Docker images of the c-beam telemetry server for both x86 and ARM.

There are also docker-compose configuration files for both environments. To install and start the whole service with all its dependencies, grab the docker-compose.yml file (or the Raspberry Pi 3 version) and start with:

$ docker-compose up -d

We’re building these images as part of our continuous integration pipeline (ARM build with this recipe), so they should always be reasonably up-to-date.

Configuring your data

The next step is to create a JavaScript configuration file for your Open MCT. This is where you need to provide a “dictionary” listing all data you want your dashboard to track.

Data sets are configured like the following (configuring a temperature reading tracked for the 2nd floor):

var floor2 = new app.Dictionary('2nd floor', 'floor2');
floor2.addMeasurement('temperature', 'floor2_temperature', [
    units: 'degrees',
    format: 'float'
], {
  topic: 'bitraf/temperature/1'

You can have multiple dictionaries in the same Open MCT installation, allowing you to group related data sets. Each measurement needs to have a name and a unit.

Getting data in

In the example above we also supply a MQTT topic to read the measurement from. Now sending data to the dashboard is as easy as writing numbers to that MQTT topic. On command-line that would be done with:

$ mosquitto_pub -t bitraf/temperature/1 -m 27.3

If you were running the telemetry server when you sent that message, you should’ve seen it appear in the appropriate dashboard.

Bitraf temperature graph with Open MCT

There are MQTT libraries available for most programming languages, making it easy to connect existing systems with this dashboard.

The telemetry server is also compatible with our MsgFlo framework, meaning that you can also configure the connections between your data sources and Open MCT visually in Flowhub.

This makes it possible to utilize the existing MsgFlo libraries for implementing data sources. For example, with msgflo-arduino you can transmit sensor data from Tiva-C or NodeMcu microcontrollers to the dashboard.

Status and how you can help

The c-beam telemetry server is currently in production use in a couple of hackerspaces, and seems to run quite happily.

We’d love to get feedback from other deployments!

If you’d like to help with the project, here are couple of areas that would be great:

  • Adding tests to the project
  • Implementing downsampling of historical data
  • Figuring out ways to control IoT devices via the dashboard (so, to write to MQTT instead of just reading)

Please file issues or make pull requests to the repository.

by Henri Bergius ( at October 05, 2017 12:00 AM

July 11, 2017

Henri Bergius

Flowhub IoT hack weekend at c-base: buttons, sensors, the Big Switch

Last weekend we held the c-base IoT hack weekend, focused on the Flowhub IoT platform. This was continuation from the workshop we organized at the Bitraf makerspace a week earlier. Same tools and technologies, but slightly different focus areas.

c-base is one of the world’s oldest hackerspaces and a crashed space station under Berlin. It is also one of the earliest users of MsgFlo with quite a lot of devices connected via MQTT.

Hack weekend debriefing

Hack weekend

Just like at Bitraf, the workshop aimed to add new IoT capabilities to c-base, as well as to increase the number of members who know how to make the station’s setup do new things. For this, we used three primary tools:

Internet of Things

The workshop started in Friday evening after a lecture on nuclear pulse propulsion ended in the main hall. We continued all the way to late Sunday evening with some sleep breaks in between. There is something about c-base that makes you want to work there at night.

Testing a humidity sensor

By Sunday evening, we had built and deployed 15 connected IoT devices, with five additional ones pretty far in development. You can find the source code in the c-flo repository.

Idea wall

Sensor boxes

Quite a lot of c-base was already instrumented when we started the workshop. We had details on electricity consumption, internet traffic, and more. But one thing we didn’t have was information on the physical environment at the station. To solve this, we decided to build a set of sensor boxes that we could deploy in different areas of the hackerspace.

Building sensors

The capabilities shared by all the sensor boxes we deployed were:

  • Temperature
  • Humidity
  • Motion (via passive infrared)

For some areas of interest we provided some additional sensors:

  • Sound level (for the workshop)
  • Light level (for c-lab)
  • Carbon dioxide
  • Door open/closed
  • Gravity

Workshop sensor on a breadboard

We found a set of nice little electrical boxes that provided a convenient housing for these sensor boxes. This way we were able to mount them in proper places quickly. This should also protect them from dust and other elements to some degree.

Installed weltenbaulab sensor

The Big Switch

The lights of the c-base main hall are controllable via MsgFlo, and we have a system called farbgeber to produce pleasing color schemes for any given time.

However, when there are events we need to enable manual control of all lights and sound. To make this “MsgFlo vs. IP lounge” control question clearer, we built a Big Switch to decide which controls the lights:

Big Switch in action

The switch is an old electric mains switch from an office building. It makes a satisfying sound when you turn it, and is big enough that you can see which way the setting is from across the room.

To complement the Big Switch we also added a “c-boom” button to trigger the disco mode in the main hall:

c-boom button

Info screens

One part of the IoT setup was to make statistics and announcements about c-base visible in different areas of the station. We did this by rolling out a set of displays with Raspberry Pi 3s connected to the MsgFlo MQTT environment.

Info screens ready for installing

The announcements shown on the screens range from mission critical information like station power consumption or whether the bar is open, to more fictional ones like the NoFlo-powered space station announcements.

Air lock

We also built an Android version of the info display software, which enabled deploying screens using some old donated tablets.

Info screen tablet


This was another successful workshop. Participants got to do new things, and we got lots of new IoT infrastructure installed around c-base. The Flowhub graph is definitely starting to look populated:

c-base is a graph

We also deployed NASA OpenMCT so that we get a nice overview on the station status. Our telemetry server provides MsgFlo participants that receive data via MQTT, store it in InfluxDB, and then visualize it on the dashboard:

OpenMCT view on c-base

All the c-base IoT software is available on Github:

If you’d like to have a similar IoT workshop at your company, we’re happy to organize one. Get in touch!

by Henri Bergius ( at July 11, 2017 12:00 AM

July 04, 2017

Henri Bergius

Flowhub IoT workshop at Bitraf: sensors, access control, and more

I just got back to Berlin from the Bitraf IoT hackathon we organized in Oslo, Norway. This hackathon was the first of two IoT workshops around MsgFlo and Flowhub IoT. The second will be held at c-base in Berlin this coming weekend.

Bitraf and the existing IoT setup

Bitraf is a large non-profit makerspace in the center of Oslo. It provides co-working facilities, as well as labs and a large selection of computer controlled tools for building things. Members have 24/7 access to the space, and are provided with everything needed for CNC milling, laser cutting, 3D-printing and more.

The space uses the Flowhub IoT stack of MsgFlo and Mosquitto for business-critical things like the door locks that members can open with their smartphone.

Bitraf lock system

In addition to access control, they also had various environmental sensors available on the MQTT network.

With the workshop, our aim was to utilize these existing things more, as well as to add new IoT capabilities. And of course to increase the number of Bitraf members with the knowledge to work with the MsgFlo IoT setup.


Being a makerspace, Bitraf already had everything needed for the physical side of the workshop — tons of sensors, WiFi-enabled microcontrollers, tools for building cases and mounting solutions. So the workshop preparations mostly focused on the software side of things.

The primary tools for the workshop were:

To help visualize the data coming from the sensors people were building, I integrated the NASA OpenMCT dashboard with MsgFlo and InfluxDB time series database. This setup is available at the cbeam-telemetry-server project.

OpenMCT at Bitraf

This gave us a way to send data from any interesting sensors in the IoT network to a dashboard and visualize it. Down the line the persisted data can also be interesting for further analysis or machine learning.

Kick-off session

We started the workshop with a quick intro session about Flowhub, MsgFlo, and MQTT development. There is unfortunately no video, but the slides are available:

<iframe allowfullscreen="true" frameborder="0" height="569" mozallowfullscreen="true" src=";loop=false&amp;delayms=3000" webkitallowfullscreen="true" width="960"></iframe>

After the intro, we did a round of all attendees to see what skills people already had, and what they were interested in learning. Then we started collecting ideas what to work on.

Bitraf IoT ideas

People picked their ideas, and the project work started.

Idea session at Bitraf IoT

I’d like to highlight couple of the projects.

New sensors for the makerspace

Teams at work

Building new sensors was a major part of the workshop. There were several projects, all built on top of msgflo-arduino and the ESP8266 microcontroller:

Working on a motion sensor

There was also a project to automatically open and close windows, but this one didn’t get completed over the weekend. You can follow the progress in the altF4 GitHub repo.

Tool locking

All hackerspaces have the problem that people borrow tools and then don’t return them when finished. This means that the next person needing the tool will have to spend time searching for it.

To solve this, the team designed a system that enabled tools to be locked to a wall, with a web interface where members can “check out” a tool they want to use. This way the system constantly knows what tools are in their right places, and which tools are in use, and by who.

You can see the tool lock system in action in this demo video:

<iframe allowfullscreen="" frameborder="0" height="480" src="" width="853"></iframe>

Source code and schematics:

After the hackathon

Before my flight out, we sat down with Jon to review how things went. In general, I think it is clear the event was a success — people got to learn and try new things, and all projects except one were completed during the two days.

Our unofficial goal was to double the number of nodes in the Bitraf Flowhub graph, and I think we succeeded in this:

Bitraf as a graph

Here are couple of comments from the attendees:

Really fun and informative. The development pipeline also seems complete. Made it a lot easier for beginner to get started.

this was a very fantastic hackathon! Lots of interesting things to learn, very enthusiastic participants, great stewardship and we actually got quite a few projects finished. Well done everbody.

In general the development tools we provided worked well. Everybody was able to run the full Flowhub IoT environment on their own machines using the Docker setup we provided. And apart from a couple of corner cases, msgflo-arduino was easy to get going on the NodeMCUs.

With these two, everybody could easily wire up some sensors and see their data in both Flowhub and the OpenMCT dashboard. From the local setup going to production was just a matter of switching the MQTT broker configuration.

If you’d like to have a similar IoT workshop at your company, we’re happy to organize one. Get in touch!

by Henri Bergius ( at July 04, 2017 12:00 AM

June 24, 2017

Riku Voipio

Cross-compiling with debian stretch

Debian stretch comes with cross-compiler packages for selected architectures:
 $ apt-cache search cross-build-essential
crossbuild-essential-arm64 - Informational list of cross-build-essential packages for
crossbuild-essential-armel - ...
crossbuild-essential-armhf - ...
crossbuild-essential-mipsel - ...
crossbuild-essential-powerpc - ...
crossbuild-essential-ppc64el - ...

Lets have a quick exact steps guide. But first - while you can use do all this in your desktop PC rootfs, it is more wise to contain yourself. Fortunately, Debian comes with a container tool out of box:

sudo debootstrap stretch /var/lib/container/stretch
echo "strech_cross" | sudo tee /var/lib/container/stretch/etc/debian_chroot
sudo systemd-nspawn -D /var/lib/container/stretch
Then we set up cross-building enviroment for arm64 inside the container:

# Tell dpkg we can install arm64
dpkg --add-architecture arm64
# Add src line to make "apt-get source" work
echo "deb-src stretch main" >> /etc/apt/sources.list
apt-get update
# Install cross-compiler and other essential build tools
apt install --no-install-recommends build-essential crossbuild-essential-arm64
Now we have a nice build enviroment, lets choose something more complicated than the usual kernel/BusyBox to cross-build, qemu:

# Get qemu sources from debian
apt-get source qemu
cd qemu-*
# New in stretch: build-dep works in unpacked source tree
apt-get build-dep -a arm64 .
# Cross-build Qemu for arm64
dpkg-buildpackage -aarm64 -j6 -b
Now that works perfectly for Qemu. For other packages, challenges may appear. For example you may have to se "nocheck" flag to skip build-time unit tests. Or some of the build-dependencies may not be multiarch-enabled. So work continues :)

by Riku Voipio ( at June 24, 2017 04:03 PM

June 19, 2017

Henri Bergius

Two hackathons in a week: thoughts on NoFlo and MsgFlo

Last week I participated in two hackathons, events where a group of strangers would form a team for two or three days and build a product prototype. In the end all teams pitch their prototypes, and the best ones would be given some prizes.

Hackathons are typically organized to get feedback from developers on some new API or platform. Sometimes they’re also organized as a recruitment opportunity.

Apart from the free beer and camaraderie, I like going to hackathons since they’re a great way to battle test the developer tools I build. The time from idea to having to have a running prototype is short, people are used to different ways of working and different toolkits.

If our tools and flow-based programming work as intended, they should be ideal for these kind of situations.

Minds + Machines hackathon and Electrocute

Minds + Machines hackathon was held on a boat and focused on decarbonizing power and manufacturing industries. The main platform to work with was Predix, GE’s PaaS service.

Team Electrocute

Our project was Electrocute, a machine learning system for forecasting power consumption in a changing climate.

1.5°C is the global warming target set by the Paris Agreement. How will this affect energy consumption? What kind of generator assets should utilities deploy to meet these targets? When and how much renevable energy can be utilized?

The changing climate poses many questions to utilities. With Electrocute’s forecasting suite power companies can have accurate answers, on-demand.

Electrocute forecasts

The system was built with a NoFlo web API server talking over MsgFlo with a Python machine learning backend. We also built a frontend where users could see the energy usage forecasts on a heatmap.

NoFlo-Xpress in action

Unfortunately we didn’t win this one.

Recoding Aviation and Skillport

Recoding Aviation was held at hub:raum and focused on improving the air travel experience through usage of open APIs offered by the various participating airports.

Team Skillport

Skillport was our project to make long layovers more bearable by connecting people who’re stuck at the airport at the same time.

Long layovers suck. But there is ONE thing amazing about them: You are surrounded by highly skilled people with interesting stories from all over the world. It sometimes happens that you meet someone randomly - we all have a story like that. But usually we are too shy and lazy to communicate and see how we could create a valuable interaction. You never know if the other person feels the same.

We built a mobile app that turns airports into a networking, cultural exchange and knowledge sharing hub. Users tell each other through the app that they are available to meet and what value they can bring to an interaction.

The app connected with a J2EE API service that then communicated over MsgFlo with NoFlo microservices doing all the interactions with social and airport APIs. We also did some data enrichment in NoFlo to make smart recommendations on meeting venues.

MsgFlo in action

This time our project went well with the judges and we were selected as the winner of the Life in between airports challenge. I’m looking forward to the helicopter ride over Berlin!

Category winners

Skillport also won a space at hub:raum, so this might not be the last you’ll hear of the project…

Lessons learned

Benefits of a message queue architecture

I’ve written before on why to use message queues for microservices, but that post focused more on the benefits for real-life production usage.

The problems and tasks for a system architecture in a hackathon are different. Since the time is short, you want to enable people to work in parallel as much as possible without stepping on each other’s toes. Since people in the team come from different backgrounds, you want to enable a heterogeneous, polyglot architecture where each developer can use the tools they’re most productive with.

MsgFlo is by its nature very suitable for this. Components can be written in any language that supports the message queue used, and we have convenience libraries for many of them. The discovery mechanism makes new microservices appear on the Flowhub graph as soon as they start, enabling services to be wired together quickly.

Mock early, mock often

Mocks are a useful way to provide a microservice to the other team members even before the real implementation is ready.

For example in the GE Predix hackathon, we knew the machine learning team would need quite a bit of time to build their model. Until that point we ran their microservice with a simple msgflo-python component that just gave random() as the forecast.

This way everybody else was able to work with the real interface from the get-go. When the learning model was ready we just replaced that Python service, and everything was live.

Mocks can be useful also in situations where you have a misbehaving third-party API.

Don’t forget tests

While shooting for a full test coverage is probably not realistic within the time constraints of a hackathon, it still makes sense to have at least some “happy path” tests. When you’re working with multiple developers each building a different parts of the service, interface tests serve a dual purpose:

  • They show the other team members how to use your service
  • They verify that your service actually does what it is supposed to

And if you’re using a continuous integration tool like Travis, the tests will help you catch any breakages quickly, and also ensure the services work on a clean installation.

For a message queue architecture, fbp-spec is a great tool for writing and running these interface tests.

Talk with the API providers

The reason API and platform providers organize these events is to get feedback. As a developer that works with tons of different APIs, this is a great opportunity to make sure your ideas for improvement are heard.

On the flip side, this usually also means the APIs are in a pretty early stage, and you may be the first one using them in a real-world project. When the inevitable bugs arise, it is a good to have a channel of communications open with the API provider on site so you can get them resolved or worked around quickly.

Room for improvement

The downside of the NoFlo and MsgFlo stack is that there is still quite a bit of a learning curve. NoFlo documentation is now in a reasonable place, but with Flowhub and MsgFlo we have tons of work ahead on improving the onboarding experience.

Right now it is easy to work with if somebody sets it up properly first, but getting there is a bit tricky. Fixing this will be crucial for enabling others to benefit from these tools as well.

by Henri Bergius ( at June 19, 2017 12:00 AM

June 07, 2017

Henri Bergius

Reprogramming the hackerspace: MsgFlo IoT workshops at c-base and Bitraf

This July we’re organizing two hack weekends around MsgFlo and Flowhub:

Both of these will focus on reprogramming the Internet of Things setup of the hackerspace. The aim is to connect more devices at the spaces to the MsgFlo environment, and come up with new connections between systems, and ways to visualize them.

If you’re interested, feel welcome to join! Bring your own laptop. For the Bitraf event, please register on the Meetup page. For c-base, add yourself to the Facebook event.

c-base disco mode

Focus areas

  • MsgFlo IoT and new functionality — connecting internet services with MsgFlo, adding new smarts to the hackerspace IoT setup. Skills: Python, Node.js, Rust
  • Hardware hacking — connecting more devices with MsgFlo. Skills: microcontroller programming, electronics
  • Information displays — new infoscreen designs, data visualizations. Skills: web design, React.js, Django
  • Mobile app — bringing the hackerspace IoT functionality to mobile. Skills: Android
  • Woodworking — new cases, mounts, decorations for various systems. Skills: woodworking, painting

You don’t have to an expert to participate. We’ll be there to help you get up to speed!

More information

c-flo station at c-base

If you’d like to have a similar IoT workshop at your company, we’re happy to organize one. Get in touch!

by Henri Bergius ( at June 07, 2017 12:00 AM

April 11, 2017

Riku Voipio

Deploying OBS

Open Build Service from SuSE is web service building deb/rpm packages. It has recently been added to Debian, so finally there is relatively easy way to set up PPA style repositories in Debian. Relative as in "there is a learning curve, but nowhere near the complexity of replicating Debian's internal infrastructure". OBS will give you both repositories and build infrastructure with a clickety web UI and command line client (osc) to manage. See Hectors blog for quickstart instructions.

Things to learned while setting up OBS

Me coming from Debian background, and OBS coming from SuSE/RPM world, there are some quirks that can take by surprise.

Well done packaging

Usually web services are a tough fit for Distros. The cascade of weird dependencies and build systems where the only practical way to build an "open source" web service is by replicating the upstream CI scripts. Not in case of OBS. Being done by distro people shows.

OBS does automatic rebuilds of reverse dependencies

Aka automatic binNMUs when you update a library. This however means you need lots of build power around. OBS has it's own dependency resolver on the server that recalculate what packages need rebuilding when - workers just get a list of packages to install for build-depends. This a major divergence from Debian, where sbuild handles dependencies client side. The OBS dependency handler doesn't handle virtual packages* / alternative build-deps like Debian - you may have to add a specific "Prefer: foo-dev" into the OBS project config to solve alternative choices.

OBS server and worker do http requests in both directions

On startup workers connect to OBS server, open a TCP port and wait requests coming OBS. Having connections both directions is a bit of hassle firewall-wise. On the bright side, no need to setup uploads via FTP here..

Signing repositories is complicated

With Debian 9.0 making signed repositories pretty much mandatory, OBS makes signing rather complicated. obs-signd isn't included in Debian, since it depends on gnupg patch that hasn't been upstreamed. Fortunately I found a workaround. OBS signs release files with /usr/bin/sign -d /path/to/release. Where replacing the obs-signd provided sign command your own script is easy ;)

Git integration is rather bolted-on than integrated

OBS provides a method to integrate with git using services. - There is no clickety UI to link to git repo, instead you make an xml file called _service with osc. There is no way to have debian/ tree in git.

The upstream community is friendly

Including the happiest thanks from an upstream I've seen recently.


All in all rather satisfied with OBS. If you have a home-grown jenkins etc based solution for building DEB/RPM packages, you should definitely consider OBS. For simpler uses, no need to install OBS yourself, openSUSE public OBS will happily build Debian packages for you.

*How useful are virtual packages anymore? "foo-defaults" packages seem to be the go-to solution for most real usecases anyways.

by Riku Voipio ( at April 11, 2017 08:23 PM

January 09, 2017

Riku Voipio

20 years of being a debian maintainer

fte (0.44-1) unstable; urgency=low

* initial Release.

-- Riku Voipio <riku.voipio> Wed, 25 Dec 1996 20:41:34 +0200
Welp I seem to have spent holidays of 1996 doing my first Debian package. The process of getting a package into Debian was quite straightforward then. "I have packaged fte, here is my pgp, can I has an account to upload stuff to Debian?" I think the bureaucracy took until second week of January until I could actually upload the created package.

uid Riku Voipio <riku.voipio>
sig 89A7BF01 1996-12-15 Riku Voipio <riku.voipio>
sig 4CBA92D1 1997-02-24 Lars Wirzenius <liw>
A few months after joining, someone figured out that to pgp signatures to be useful, keys need to be cross-signed. Hence young me taking a long bus trip from countryside Finland to the capital Helsinki to meet the only other DD in Finland in a cafe. It would still take another two years until I met more Debian people, and it could be proven that I'm not just an alter ego of Lars ;) Much later an alternative process of phone-calling prospective DD's would be added.

by Riku Voipio ( at January 09, 2017 08:01 AM

January 01, 2017

Viikon VALO


ReText on yksinkertainen, mutta tehokas, työkalu tekstien ja muistiinpanojen kirjoittamiseen Markdown-, reStructuredText- tai Textile-merkintäkielillä.

Markdown, reStructuredText ja Textile ovat merkintäkieliä, joilla muotoiluja sisältäviä tekstidokumentteja voidaan kirjoittaa puhtaasti tekstimuotoisena. Valmis dokumentti käännetään yleensä näytettäväksi johonkin toiseen muotoon, kuten html- tai pdf-tiedostoiksi. Näissä kielissä muotoilut merkitään mahdollisimman luonnollisilla tavoin, jolloin myös merkintäkielinen alkuperäinen teksti pysyy helposti luettavana. Esimerkiksi luettelot merkitään rivin aloittavilla "-"-merkeillä.

ReText on sovellus, jolla näillä kielillä kirjoitettujen dokumenttien muokkaaminen on helppoa. Kielissä käytettävät merkinnät korostetaan ohjelmassa havainnollisesti ja lopullista dokumenttia voi tarkastella ohjelman esikatselutoiminnolla. Esikatselu on käytettävissä joko erillisenä näkymänä tai raakatekstin rinnalla näytettävänä tosiaikaisesti päivittyvänä näkymänä.

Esimerkiksi Markdown-muotoinen teksti:



- numeroimaton
- luettelo

sitä vastaava html-koodi:


ja lopullinen käyttäjälle näytettävä teksti:



  • numeroimaton
  • luettelo

ReTextin yhteydessä on mahdollista käyttää joitain Python-kirjastojen tukemia laajennuksia Markdown-kieleen. Extra-laajennuspaketti on oletuksena käytössä. Tämä laajennus sisältää muun muassa tuen taulukoille ja määritelmälistoille.

Laajennetussa Markdown-kielssä taulukot kirjoitetaan "piirtämällä" sarakkeet pystyviivamerkeillä "|" ja erottamalla sarakkeiden otsikot muusta taulukosta "-"-merkeillä. Esimerkiksi:

| Item     | Value |
| -------- | -----:|
| Computer | $1600 |
| Phone    | $12   |
| Pipe     | $1    |

Eli valmiina taulukkona:

Item Value
Computer $1600
Phone $12
Pipe $1

Taulukoiden muokkaaminen tässä muodossa voi olla hankalaa, jos pystyviivojen haluaa pysyvän kohdakkain. Tämän takia ReTextissä on erikseen päälle kytkettävä "table mode", jolloin ohjelma pyrkii automaattisesti kohdistamaan pystyviivat taulukon "solun" leveyden muuttuessa. Tämä toiminnallisuus on oletuksena kuitenkin pois päältä.

Jos ohjelmalla on käytössään MathJax-kirjasto, on ReTextillä mahdollista kirjoittaa myös matemaattisia kaavoja käyttämällä LaTeX-kieltä.

ReText on sellaisenaan varsin kätevä työkalu muistiinpanojen tekemiseen, mutta toisinaan lopputulos halutaan tallentaa jossain luettavaksi tai edelleen välitettäväksi tarkoitetussa muodossa. Tämä onnistuu ReTextin vienti- eli export-toiminnoilla. Luotu dokumentti voidaan oletuksena viedä html-, odt- ja pdf-muotoihin. Vientitoiminnot ovat ohjelman laajennuksia, joita voi halutessaan tehdä itse hyödyntämällä esimerkiksi Pandoc-ohjelmaa.

GNU GPL (v2+)
Toimii seuraavilla alustoilla
Ohjelma on asennettavissa Linux-järjestelmäiin paketinhallinnasta tai vaihtoehtoisesti Pythonin pip-paketointijärjestelmän avulla. Muut käyttöjärjestelmät eivät ole virallisesti tuettuja, mutta asennusohjeista löytyy neuvoja ohjelman asentamiseen myös Windows- ja MacOS-alustoille.

Teksti: Pesasa
Kuvakaappaukset: Pesasa

January 01, 2017 02:00 PM

August 25, 2016

Viikon VALO


Linux on suomalaisen Linus Torvaldsin alulle panema UNIX-tyyppisen käyttöjärjestelmän ydin. Sen julkistamisesta tulee 25. elokuuta 2016 kuluneeksi 25 vuotta. Sen jälkeen Linux on valloittanut maailman puhelimista ja reitittimistä palvelimiin ja supertietokoneisiin saakka.

Linuxin kehitys alkoi, kun Helsingin Yliopistossa silloin opiskellut Linus Torvalds halusi ohjelmoida UNIX-tyyppisen käyttöjärjestelmän omiin tarpeisiinsa. Ensimmäinen versio toimi vain Torvaldsin itsensä omistaman koneen tyyppisissä laitteissa. Aikaansaannoksen julkistus 25.8.1991 sen ajan "sosiaalisessa mediassa", Usenet News -ryhmässä comp.os.minix oli melko vaatimaton ilmoitus vapaasta "harrasteprojektista", josta "ei tule mitään suurta ja ammattimaista, kuten GNU-järjestelmästä". Linus pyysi muilta Minix-järjestelmän käyttäjiltä kommentteja ja ehdotuksia siitä, mitä hyviä ja huonoja puolia heidän mielestään Minixissä oli ja mihin suuntaan uutta käyttöjärjestelmää heidän mielestään pitäisi kehittää. Erityisesti Torvalds painotti, että järjestelmä ei ole sovitettavissa muun tyyppisille laitteille ja että se tulee tuskin koskaan tukemaan muun tyyppisiä levyjä kuin niitä, joita hänellä itsellään sattui olemaan käytössä.

Hello everybody out there using minix -

I'm doing a (free) operating system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones. This has been brewing since april, and is starting to get ready. I'd like any feedback on things people like/dislike in minix, as my OS resembles it somewhat (same physical layout of the file-system (due to practical reasons) among other things).

I've currently ported bash(1.08) and gcc(1.40), and things seem to work. This implies that I'll get something practical within a few months, and I'd like to know what features most people would want. Any suggestions are welcome, but I won't promise I'll implement them :-)

Linus (

PS. Yes - it's free of any minix code, and it has a multi-threaded fs. It is NOT protable (uses 386 task switching etc), and it probably never will support anything other than AT-harddisks, as that's all I have :-(.

(Linus Torvaldsin alkuperäinen viesti Googlen arkistoimana)

Historia on kuitenkin näyttänyt, miten pahasti Linus aliarvioi aloittamansa projektin merkityksen. Erityisesti hänen päätöksensä lisensoida Linux Richard M. Stallmanin ja Free Software Fondationin GNU-projektia varten esittelemällä GNU GPL -lisenssillä vaikutti ratkaisevasti käyttöjärjestelmäytimen jatkokehitykseen ja menestykseen. Vapaa avoimen lähdekoodin lisensointi mahdollisti järjestelmän avoimen kehityksen ja houkutteli mukaan asiasta kiinnostuneita ohjelmoijia.

Usein kuulee arvioita, että Linuxin menestyksen huomioon ottaen Linus Torvalds olisi voinut lyödä rahoiksi, jos hän ei olisi lisensoinut järjestelmää avoimeksi. Tämä tuskin kuitenkaan pitää paikkaansa, sillä ilman vapaata lisensointia järjestelmä ei todennäköisesti olisi houkutellut ympärilleen samanlaista kehittäjien ja suurten yritystenkin muodostamaa yhteisöä, jonka seurausta sen voimakas kehitystahti ja maailmanvalloitus on ollut. Ilman vapaata lisensointia Linux olisi jäänyt vain Torvaldsin viestissään mainitsemaksi harrastusprojektiksi. Kenties Linuxin nykyisen aseman ja suosion olisi saanut jokin muu vapaa käyttöjärjestelmä, esimerkiksi FreeBSD, joka on Linuxin tavoin UNIX-tyyppinen järjestelmä ja avointa lähdekoodia.

Linuxin vapaa ja avoin lähdekoodi on mahdollistanut myös sen sovittamisen mitä moninaisimpiin laitteisiin. Pieniin ja vähillä resursseilla varustettuisiin laitteisiin, kuten reitittimiin, siitä on voitu riisua kaikki ylimääräinen ja suuriin tehokkaisiin supertietokoneisiin siitä on ollut mahdollista räätälöidä tehokkaita ja skaalautuvia versioita. Hajautetusti tapahtuva kehitys on suuri talkooprojekti, josta jokainen osallistuva osapuoli hyötyy moninkertaisesti enemmän kuin oman työpanoksensa verran. Linuxin kehitystä onkin sanottu maailman suurimmaksi ohjelmistoprojektiksi.

Suuri osa Internetin toiminnasta tukeutuukin Linuxiin aina liikennettä ohjaavista reititinlaitteista suurten toimijoiden, kuten Googlen, Facebookin, Twitterin, Wikipedian ja Amazonin, palvelinsaleihin.

Red Hat Fedora Ubuntu Debian Linux Mint OpenSUSE

Linux-ydintä jaetaan tyypillisesti jakeluiksi kutsuttujen käyttöjärjestelmäkokonaisuuksien osana. Tunnetuimpia jakeluita ovat esimerkiksi Red Hat Enterprise Linux, sen yhteisövetoinen versio Fedora, Ubuntu, sen taustalla oleva yhteisöllisesti kehitettävä Debian GNU/Linux, Linux Mint, openSUSE sekä lukuisat muut versiot. Koska jakelut sisältävät Linux-ytimen lisäksi valtavan joukon muitakin ohjelmistoja, halutaan toisinaan antaa kunniaa myös GNU-projektin aikaansaannoksille käyttämällä kokonaisuudesta nimitystä "GNU/Linux".

Jakeluina levitettäviä käyttöjärjestelmäversioita käytetään tyypillisesti työpöytäkäytössä (varsinaiset työpöytäkoneet ja kannettavat tietokoneet) sekä palvelimissa. Näiden lisäksi Linux-ydin esiintyy myös lukemattomissa kuluttajalaitteissa, joiden Linux-pohjaisuus ei näy päälle päin ja joiden käyttäjät eivät edes tiedä käyttävänsä Linuxia. Näitä ovat muun muassa Android-puhelimet ja -tabletit, suuri osa reitittimistä ja langattomista tukiasemista, monet älytelevisiot ja medialaitteet sekä Googlen kehittämään järjestelmään perustuvat Chromebook-kannettavat.

Erityisesti Android-laitteiden raju yleistyminen on lisännyt Linux-pohjaisten laitteiden käyttäjien määrän valtaviin lukemiin, vaikka suurin osa käyttäjistä ei tätä itse tiedostakaan. Perinteisessä työpöytäkäytössä Linux-pohjaisten järjestelmien osuus on vielä pysynyt melko vaatimattomana. Tämä lienee johtunut osaltaan virheellisestä vaikeakäyttöisyyden mielikuvasta sekä ennen kaikkea siitä, että kuluttajat ostavat tietokoneensa valmiiksi asennettuina ja laitteisiin esiasennettu järjestelmä on käytännössä lähes aina valmistajasta riippuen joko Applen MacOS tai jokin Microsoftin Windows-versioista. Vuoden 2016 aikana Linuxin käyttöosuus on tilastoissa kuitenkin noussut, syystä tai toisesta, jo yli kahden prosentin. Onko kyse kasvaneesta kiinnostuksesta vapaampaa ja käyttäjän yksityisyyttä paremmin kunnioittavaa käyttöjärjestelmäalustaa kohtaan vai kuluttajalaitteiden painotuksen yleisestä siirtymisestä puhelimiin ja tablettilaitteisiin?

Linuxin työpöytävalloitus on ollut jo pitkään vuosittainen vitsin aihe. "Onko tämä vuosi työpöytä-Linuxin vuosi?" Varsinaiseen työpöytäkäyttöön Linux-järjestelmät ovat olleet oikeasti käyttöliittymiensä kannalta valmiita jo vuosia. Työpöytäympäristöjä on ollut tarjolla jopa useampia erilaisiin makuihin. Valloitusta on kuitenkin hidastanut erityisesti esiasennettujen laitteiden puute sekä kuluttajien haluttomuuus vaihtaa tutusta järjestelmästä toiseen. Työpöytäkäytön vähentyminen on kuitenkin luonut uudenlaisen tilanteen ja samalla esimerkiksi Googlen markkinoille tuomat Chromebook-laitteet ovat viimeisteltyinä ja pelkistettyinä tuotteina keränneet uudenlaista suosiota myös Linuxille. Muun perinteisen tietokonemyynnin laskiessa Chromebookit ovat lisänneet myyntiään ja jopa vallanneet Amazonin joulumyynnin kärkipaikat.

Oman lisänsä Linux-tarjontaan tuovat Androidin rinnalle nousseet uudet mobiilialustat, kuten Ubuntun puhelin- ja tablettiversio, Jollan Sailfish OS sekä Samsungin Tizen.

Teksti: Pesasa
Kuvakaappaukset: Pesasa

August 25, 2016 08:00 AM

May 09, 2016

Riku Voipio

Booting ubuntu 16.04 cloud images on Arm64

For testing kvm/qemu, prebaked images cloud images are nice. However, there is a few steps to get started. First we need a recent Qemu (2.5 is good enough). An efi firmware is needed, and cloud-utils, for customizing our VM.

sudo apt install -y qemu qemu-utils cloud-utils
Cloud images are plain - there is no user setup, no default user/pw combo, so to log in to the image, we need to customize the image on first boot. The defacto tool for this is cloud-init. The simplest method for using cloud-init is passing a block media with a settings file - of course for real cloud deployment, you would use one of fancy network based initialization protocols cloud-init supports. Enter the following to a file, say cloud.txt:


- name: you
- ssh-rsa AAAAB3Nz....
groups: sudo
shell: /bin/bash
This minimal config will just set you a user with ssh key. A more complex setup can install packages, write files and run arbitrary commands on first boot. In professional setups, you would most likely end up using cloud-init only to start Ansible or another configuration management tool.

cloud-localds cloud.img cloud.txt
qemu-system-aarch64 -smp 2 -m 1024 -M virt -bios QEMU_EFI.fd -nographic \
-device virtio-blk-device,drive=image \
-drive if=none,id=image,file=xenial-server-cloudimg-arm64-uefi1.img \
-device virtio-blk-device,drive=cloud \
-drive if=none,id=cloud,file=cloud.img \
-netdev user,id=user0 -device virtio-net-device,netdev=user0 -redir tcp:2222::22 \
-enable-kvm -cpu host
If you are on an X86 host and want to use qemu to run an aarch64 image, replace the last line with "-cpu cortex-a57". Now, since the example uses user networking with tcp port redirect, you can ssh into the VM:

ssh -p 2222 you@localhost
Welcome to Ubuntu 16.04 LTS (GNU/Linux 4.4.0-22-generic aarch64)

by Riku Voipio ( at May 09, 2016 12:32 PM

March 03, 2016

Wikimedia Suomi

Tutustu Wikimedia Suomen hallitukseen

Joulukuun syyskokouksessa valittiin tälle vuodelle uusi hallitus. Saimme paitsi uuden puheenjohtajan, myös kaksi uutta hallituksen jäsentä ja ajattelimme, että meidän olisi sopivaa esittäytyä ja kertoa, mitä me Wikimedia Suomi ry:ssä teemme.

11988433_10153267182238250_206824623170660918_nAloitetaan Heikki Kastemaasta, joka on vapaa toimittaja ja kulttuurinavigaattori Viikistä, Helsingistä.

“Kirjoitin ensimmäisen artikkelini Wikipediaan joulukuussa 2005. Olen vuosien varrella tullut vakuuttuneeksi siitä, että Wikipedia on tietoyhteiskunnan erinomainen keksintö. Kun tulin viime vuonna hallitukseen yllätyin siitä, miten paljon muita asioita ja aktiivisuutta Wikiperheen toimintaan liittyy.
Olen hallituksen puheenjohtaja, joka tarkoittaa yhdistyksen hallituksen, ulkoisten ja kansainvälisten suhteiden hoitamista. Yhdistykssä haluaisin edistää kaikkia niitä näkökulmia, joita Wikimedia tarjoaa. Minua kiinnostaa yleistiedon välittäminen. Haluaisin suunnata suomenkielisen Wikipedian muokkaajia myös Wikien väliseen, interwiki-toimintaan. Ajattelen nykyisin paljon sitä, miten erilaisia asioita Wikipediaa muokatessa voi oppia. Keskustelin vastikään erään toimittajakolleegan kanssa Wikipedian lukemisesta ja totesimme, että Wikipedian lukeminen (kuten kaikki lukeminen) vaatii erityistä tarkkaavaisutta sen suhteen, hyväksyykö lukija tiedon paikkansa pitävyyden. Tuumasimme myös, että tämä lukutapa voi olla myös lukijaa kasvattava ja opettava kokemus.”

teemuHallituksen sihteeri on Teemu Perhiö, poliittisen historian opiskelija Helsingistä.

“Minun vastuullani on selvittää, miten Wikipedian koulutusohjelma voitaisiin käynnistää Suomessa. Haluaisin, että Wikipedia olisi jokaisen projekti; vaikka Wikipedian kirjoittakunta on laaja-alaista, asiantuntevia muokkaajia kaivattaisiin lisää. Jos näet Wikipediassa puutteellisen artikkelin, täydennä sitä rohkeasti. Ilahdun aina kun huomaan jonkun uuden käyttäjän tuottaneen uutta ja laadukasta sisältöä Wikipediaan.”

Toinen uusi kasvo hallituksessa on Minna Turtiainen, kokoelmapäällikkö Gallen-Kallelan Museosta.

“Olen monipuolinen ja helposti innostuva sivistystä edistävämuseoammattilainen, jolla pysyy jakoavain kädessä ja numerot järjestyksessä. En ole mistään kotoisin, olen syntynyt Hämeenlinnassa, asun Vuosaaressa Helsingissä ja käyn töissä Espoossa. Olen edistänyt vapaata ja avointa tietoa museoissa ja muistiorganisaatioissa, ja pyrkinyt luomaan uusia toimintamalleja näiden ympärille. Samalla olen toiminut eri rooleissa Wikimedia Suomen kanssa yhteisten tavoitteiden saavuttamiseksi. Päädyin hallitukseen, sillä Wikimediassa osoitettiin kiinnostusta osaamiseeni. WMFIn hallituksessa vastaan muistiorganisaatioiden kanssa tehtävästä työstä. Käytän apunani pitkän taidemuseouran aikana syntyneitä verkostoja muuallakin GLAM-sektorilla ja tuntemustani alan sisäisistä käytännöistä. Rakennan edeltäjieni luomalle perustalle ja koetan saada aikaan hyviä, jatkossa käyttökelpoisia käytäntöjä. Haluan edistää muistiorganisaatioiden sitoutumista yhteistyöhön Wikimedian kanssa ja auttaa havaitsemaan uusien toimintamuotojen mahdollisuuksi<wbr></wbr>a. Ammatillinen tehtäväni on välittää kulttuuriperintö eteenpäin. Wikimedia tarjoaa tähän erinomaiset mahdollisuudet. Otin viime viikolla oppijana osaa Pelimuseon wikipajaan, jossa wikipedistienkin luotsaamana toteutetaan aivan uutta museota. Minusta on vaikuttavaa, että museon perusidea asetetaan alusta saakka avoimeksi yhteisölle, johon kaikki voivat liittyä. Toivoisin, että muistiorganisaatiot olisivat entistä laajemmin valmiita asettumaan sisältöjään koskevaan vuorovaikutukseen kaikkien käytettävissä olevilla tavoilla.”

Vanhoina jäseninä hallituksessa jatkavat minun lisäkseni Tommi Kovala (varapuheenjohtaja) ja Kimmo Virtanen.

somehelmet2“Minä olen siis Johanna Janhonen, yrittäjä ja someasiantuntija Laukaan Lievestuoreelta, Keski-Suomesta. Olen päivittänyt Wikipediaa vuodesta 2009 lähtien ja kiinnostunut paitsi Wikipediasta myös Wikimedia-liikkeestä. Pidän myös Wikipedia-aiheisia koulutuksia ja pitääkseni itseni ajantasalla siitä, mitä Wikimedian ympärillä tapahtuu, liityin Wikimedia Suomi ry:hyn syksyllä 2013 ja tulin saman tien valituksi myös hallitukseen. Minulla alkoi siis jo kolmas hallitusvuosi. Aiemmin olen toiminut mm. somepäivittäjänä ja viime vuoden olin sihteeri, tänä vuonna vähensin työmäärääni ja olen nyt Wikimedia Suomen tiedottaja. Käytännössä se tarkoittaa sitä, että yritän huolehtia siihen, että ihmiset muistaisivat kirjoittaa blogiimme ja pitää muutenkin melua siitä, mitä me teemme. Lähetän myös uutiskirjeitä, joissa kerrotaan Wikimediaan liittyviä uutisia meiltä ja muualta, tilaa sinäkin oma kirjeesi ja muista vinkata minulle uutisaiheista. Ja tänne blogiinkin saa tulla vierasbloggaamaan! Viime vuonna olin 8 hallitusjäsenen joukossa ainoa nainen, mikä vastaa hyvin sitä suhdetta, joka naismuokkaajilla on Wikipediassa (naisia on noin 15%). Haluan muokkaajien joukkoon paitsi enemmän naisia, myös enemmän asiantuntijoita, jotka voisivat käyttää työaikaansa muokkaamiseen. Ainoa suomenkielinen tietosanakirja tarvitsee mielestäni lisää päivittäjiä! Naisista puheenollen, ensi viikolla Helsingissä järjestetään Naistenpäivän Wikipedia-talkoot, jonne kaikki ovat erittäin tervetulleita. En pääse paikalle, joten järjestän omat talkoot ja rohkaisen muita vastaavassa tilanteessa olevia tekemään samoin.”


by Johanna Janhonen at March 03, 2016 05:03 AM

February 26, 2016


Ubuntu-tietokoneiden saatavuus Suomessa parantunut

Datakuja (Data Group Vantaa) on ottanut yhteyttä Ubuntu Suomeen tiedottaakseen, että Ubuntu-mallien saatavuus on nyt parantunut. Jatkossa voi heidän kauttaan tilata Delliltä yksittäisiäkin Ubuntu-tietokoneita, kun aiemmin halvempien mallien kohdalla oli tarve tilata useampi kappale kerralla mikä ei sopinut kovin hyvin yksityishenkilöille eikä monien yrityksienkään tarpeisiin. Katso myös muiden Dell-jälleenmyyjien yhteystiedot.

Ubuntu-tietokoneiden ostomahdollisuudet Suomessa ovat vuosien varrella vaihdelleet mutta olleet aina jonkin verran rajalliset, vaikka Dellillä onkin maailmalla kymmeniä Ubuntu-malleja jatkuvasti myynnissä. Parhaimmillaan useiden suomalaisten tietokonekauppojen käyttämä tukkuri piti malleja valikoimissaan, jolloin Ubuntu-tietokoneita pystyi tilaamaan monista verkkokaupoista. Edelleen nykymaailmassa verkkokaupat olisivat tervetulleita, mutta otamme toki ilolla vastaan tiedon että monia Dell-malleja on saatavilla kun vain osaa kysyä.

Mallivalikoima vaihtelee, mutta seuraavassa tyypillinen valikoima joka on saatavilla Ubuntulla ja suomalaisella näppäimistöllä:

  • Latitude 3550-sarja: i3-suoritin, 15,6″ näyttö, 4GB RAM, 500GB kiintolevy, Ubuntu 14.04 LTS
  • Inspiron 15 -sarja: vähävirtaisempi N3050-suoritin, muuten samansuuntainen kuin yllä
  • Huippumallit XPS 13 Developer Edition ja Precision-sarjan Developer Editionit (Dellin ja Ubuntun ”Sputnik”-projekti)
    • Päivitys 16.3.2016: esim. malleja myynnissä:
      Dell XPS 13 i5-6300U/FullHD/8GB/256GB, Ubuntu 14.04 LTS
      Dell XPS 13 i7-6600U/QuadHD+/8GB/512GB, Ubuntu 14.04 LTS
  • Kysy myös esim. 13,3″ näytöillä varustettuja Latitude 13 Education Series -Ubuntu-malleja

Vuosi sitten ja aiemmin Ubuntu Suomi ei tiedottanut mallien saatavuudesta parhaalla mahdollisella tavalla, joten ostajat eivät välttämättä löytäneet malleja. Toivottavasti nyt paremmalla tiedon levityksellä saadaan myyntiä nousuun ja malleja takaisin tukkurinkin valikoimiin.

by Timo Jyrinki at February 26, 2016 08:47 AM

February 23, 2016

Wikimedia Suomi

Minkälainen on yhteisöllisesti tehty museo?

Mediamuseo Rupriikin tutkija Niklas Nylund ja wikipedisti Jukka Ala-Hynnilä kertovat Suomen Pelimuseon wikiprojektista

Suomen pelimuseo on ensimmäinen Suomeen toteutettava museo, jonka rahoituksesta osa on kerätty joukkorahoituksella, eikä vastaavia löydy juuri ulkomailtakaan. Syyskuun lopussa päättyneeseen joukkorahoituskampanjaan osallistui yli 1100 mesenaattia ja rahaa saatiin kerättyä lähes 86 000 euroa. Pelimuseo avautuu museokeskus Vapriikissa suunnitelmien mukaisesti ensi vuoden alusta, mutta joukkorahoitukseen osallistuneet pääsevät museoon jo joulukuussa 2016.

Suomen pelimuseon suunnittelutiimillä on nyt kädet täynnä työtä, kun suomalaisten pelien ja pelaamisen monipolvisesta historiasta pitäisi luoda 400 neliön ymmärrettävä museonäyttely, joka puhuttelee paitsi pelien himoharrastajia, myös museokeskus Vapriikin muita kävijöitä. Onneksi pelimuseon tiimillä on apunaan viime vuoden lopussa käyntiin laitettu Wikiprojekti: Suomen pelimuseo, jonka tavoitteena on lähentää museon sisältötyötä ja Wikipediaa toisiinsa. Wikiprojektin kaltainen yhteisöllinen sisällöntuotanto sopii mainiosti myös museota rahoittaneen joukkorahoituksen henkeen.

Pelimuseon taustavoimiin kuuluu Tampereen yliopiston, Tampereen kaupungin ja Pelikonepeijoonit-harrastajaryhmän lisäksi myös Mediamuseo Rupriikki, jolla on jo monen vuoden kokemus Wikipedia-työskentelystä. Rupriikin ensimmäiset Wikipajat järjestettiin 2013 ja sen jälkeen pajoja on järjestetty kerran tai kaksi vuodessa. Rupriikille on alusta asti ollut selvää, että museoiden ja Wikipedian tavoitteet ovat samankaltaisia, niissä kun on kummassakin pohjimmiltaan kyse tieteen popularisoinnista.

Media_Museum_Rupriikki_wikipaja_2015-2 (1)

Wikiprojekti: Suomen pelimuseon ensimmäinen kokoontuminen loppuvuodesta 2015. Kuva: Olimar / CC BY SA 4.0

Rupriikin wikipajoihin osallistuneet ovat olleet alusta asti motivoituneita kirjoittamaan nimenomaan peleistä. Siksi Wikiprojekti: Suomen pelimuseon kaltainen työskentelymetodi tuntui luontevalta tavalta edetä. Uuden wikiprojektin on tarkoitus olla alusta asti säännöllisempää ja museon näyttelytyöhön tiukemmin kytkettyä toimintaa. Museo luovuttaa näyttelytyön yhteydessä löytyvät uudet lähteet ja kuvamateriaalin wikiprojektin käyttöön. Samalla yritetään tunnistaa sellaisia ilmiötason artikkeliaiheita, joiden käsittely voisi muuten olla vaikeaa sekä museolle että Wikipedialle. Näitä voivat olla jutut esimerkiksi kasuaalipeleistä tai peliväkivallasta.

Museonäyttelyssä on mahdollista kertoa uusia asioita suomalaisten pelien ja pelinkehittäjien taustoista, mutta näyttely on tilallisena mediana kuitenkin aina rajallinen. Näyttelyyn ei yksinkertaisesti mahdu kovinkaan monen sadan sanan sepustuksia yhdestä aiheesta. AV-ratkaisuilla voidaan sisällyttää pelattavia pelejä, haastatteluvideoita ja kuvia, mutta niidenkin määrä on lopulta rajallinen.

Wikipediassa voidaan sen sijaan hyvin luontevasti täydentää museonäyttelystä löytyvää tietoa, siellä kun tilaa riittää. Kun museo tekee yhteistyötä Wikimedia Suomen ja wikipedistien kanssa, saadaan laadukkaita ja hyvin toimitettuja juttuja Suomen pelimuseon kannalta kiinnostavista aiheista. QR-koodien tai vastaavan avulla lisätiedot ovat yleisön tavoitettavissa koska vain, vaikkapa älypuhelimellaan surffaten.


Olimar / CC BY SA 4.0

Näin tiivis Wikipedia-yhteistyö vaatii Suomen pelimuseolta ennen kaikkea uudenlaista työskentelykulttuuria, kuten avoimen tiedon ideaalien hyväksymistä ja näyttelyprojektista ulospäin viestimistä jo varhaisessa vaiheessa. Wikityöskentelyn tueksi olemme jo nyt ehtineet kokoamaan aika vaikuttavan peleihin liittyvän lähdeaineiston, joka täydentyy koko ajan. Aineistoon kuuluu esimerkiksi vanhojen pelilehtien vuosikertoja, miltei kaikki Suomessa julkaistut roolipelit ja ihan uusinta tutkimusta. Lisäksi voimme julkaista vapaan käytön lisensseillä ainakin osia Tampereen museoiden kuva-arkiston mittavasta kuvakokoelmasta. Kuvista löytyy muun muassa herkullisia näkökulmia suomalaiseen pelaamiseen eri vuosisatoina.

Wikiprojektin aikana museo tietysti tarjoaa tilat ja pientä purtavaa vapaaehtoisille. Tämä on pieni hinta siitä, että museosta muodostuu luonteva paikka kokoontua ja synnyttää uutta tietoa. Samalla se on tärkeää myös projektin parissa työskenteleville wikipedisteille, sillä kasvotusten on helpompi keskustella ja suunnitella mistä kannattaa kirjoittaa. Säännöllinen pajatyöskentely museotiloissa on hyvää mainosta tulevalle pelimuseolle ja se on myös hyvä tapa innostaa museokävijöitä mukaan Wikipedian muokkaamiseen. Odotamme innolla mitä wikiprojekti-kokeilu tuo tullessaan.

Niklas Nylund
Mediamuseo Rupriikki

Jukka Ala-Hynnilä

by Teemu Perhiö at February 23, 2016 11:48 AM

February 17, 2016

Riku Voipio

Ancient Linux swag

Since I've now been using Linux for 20 years, I've dug up some artifacts from the early journey.

  1. First the book, from late 1995. This from before Tux, so the penguin in the cover is just a co-incidence. The book came with a slackware 3.0 CD, which was my entrance to Linux. Today, almost all of the book is outdated - slackware and lilo install? printing with lpr? mtools and dosemu? ftp, telnet with SLIP dialup? Manually configuring XFree86 and fvwm? How I miss those times!* The only parts of the book are still valid are: shell and vi guides. I didn't read latter, and instead imported my favorite editor from dos FTE.
  2. Fast forward some years, into my first programming job. Ready to advertise the Linux revolution, I bought the mug on right. Nobody else would have a Tux mug, so nobody would accidentally take my mug from the office dishwasher. That only worked for my first work place (a huge and nationally hated IT consultant house). The next workplace, a mobile gaming startup (in 2001, I was there before it was trendy!) - and there was already plenty of Linux mugs when I joined...
  3. While today it may be hard to imagine, those days using Microsoft office tools was mandatory. That leads to the third memorabilia in the picture. Wordperfect for Linux existed for a brief while, and in the box (can you imagine, software came in physical boxes?) came a Tux plush.

* Wait no, I don't miss those times at all

by Riku Voipio ( at February 17, 2016 08:19 PM

January 09, 2016

Viikon VALO

Open Science

Tieteen tekemisen tulisi olla läpinäkyvää ja kaikkien saatavilla. Open Science -liike pyrkii lisäämään tieteen avoimuutta ja tarkistettavuutta.

 Tiedeyhteisö on 1600-luvulla aloitetusta tieteellisten lehtien julkaisemisesta lähtien pyrkinyt jakamaan tutkimustietoa keskenään, jotta tulokset olisivat helpommin saatavissa ja vahvistettavissa sekä uusia tuloksia olisi mahdollista luoda pohjautuen aiempiin. Ennen tätä tieteellisiä tuloksia pyrittiin salailemaan siinä toivossa, että niille löydettäisiin rahallisesti tuottoisaa käyttöä. Näin tiedemiehet olivat usein taiteilijoiden tapaan rikkaiden mesenaattien ylläpidettävinä. Koska tieteelliset tulokset saatettiin pitää useitakin vuosia piilossa julkisuudelta, syntyi usein myös kiistaa siitä, kuka lopulta oli keksinyt tuloksen ensimmäisenä. Tieteellisten julkaisujen myötä tieteen tekeminen kiihtyi, sillä tuli helpommaksi perustaa omat tuloksensa toisten jo aiemmin tekemien tieteellisten tulosten pohjalle.

Nykyisin tieteellisen julkaisemisen avoimuuden ongelmina on kuitenkin nähty toisaalta yritysten halu pitää teettämänsä tutkimuksen tulokset omana tietonaan ja toisaalta perinteisten tieteellistä julkaisua harjoittavien painotalojen yritykset rajoittaa tiedon vapautta omien taloudellisten etujensa vuoksi. Yritysten pyrkimykset pitää rahoittamansa tutkimus omassa käytössään on ymmärrettävää, mutta toisaalta usein, varsinkin haastajan asemassa oleville yrityksille, tieteellisen tiedon vaihtaminen muiden tutkijoiden kanssa kiihdyttää myös oman tutkimuksen kehitystä ja tekee siitä luotettavampaa. Painotalojen toiminnassa ongelmallisena nähdään erityisesti se, miten yleensä julkisella rahoituksella toimivat tutkijat tuottavat painotaloille vastikkeettomasti julkaistavaa sisältöä, josta samat julkiset tahot, esimerkiksi yliopistot, jälleen maksavat paperille painettujen lehtien ja sähköisiin lehtiarkistoihin pääsyn muodossa. Sen lisäksi, että tutkijat tuottavat lehtien sisällön ja maksavat kollegojensa tuottamasta sisällöstä, he usein toimivat myös vastikkeettomasti julkaisujen uskottavuutta ylläpitävinä artikkelien vertaisarvioijina. Painotalot lisäksi tyypillisesti vaativat tutkijoilta allekirjoitetun sopimuksen, jolla artikkelien tekijänoikeudet siirrettiin kustantajalle. Onneksi nykyään on nähtävissä painotalojen tyytyminen julkaisulupiin, jolloin tekijä voi julkaista artikkeleitaan myös muualla.

Aiemmin paperille tapahtuva julkaiseminen vaati julkaisutalolta organisointityötä. Papereita kopioitiin ja läheteltiin fyysisinä kopioina vertaisarvioijille. Latominen sekä painaminen tehtiin painossa ja painettuja lehtiä läheteltiin yliopistojen kirjastoihin ympäri maailmaa. Digitalisoitumisen myötä myös tieteellisten tutkimusten julkaiseminen on yksinkertaistunut ja helpottunut eikä siihen kaivata samalla tavalla välikäsiä. Toisaalta julkaisujen hinnat ovat nousseet ja pääsy julkaistuun tietoon on kallistunut. Lisäksi etsityn tiedon löytäminen voi olla vaikeaa ja kallista, kun jokaisesta julkaisusta pitää maksaa ennen sen lukemista. Tieteen avoimuutta ja saatavuutta puolustavat tutkijat ovat alkaneet kannattaa Open Science- ja Open access -liikkeitä, joiden tarkoituksena on helpottaa tutkijoiden välistä yhteistyötä. Tutkijat julkaisevat tekemänsä tutkimuksen perinteisten lehtien lisäksi Open Access -tyyppisesti avoimesti saatavilla olevina artikkeleina verkkopalveluissa. Erityisesti on kerännyt suurta suosiota.

Tutkimusten ja tutkimusdatan avoimen julkaisun perusteluita:

  • Mahdollistaa paremmin tutkimuksen ja datan oikeellisuuden vertaisarvioinnin.
  • Tieteestä ja sen tekemisestä tulee läpinäkyvämpää ja toistettavampaa, jolloin sen luotettavuus lisääntyy.
  • Avoin tiede saa aikaan suuremman vaikutuksen, koska useammat tutkijat voivat käyttää sitä oman tutkimuksensa pohjana. Tutkijoiden on aiempaa helpompaa löytää yhteyksiä eri tutkimusten välillä.
  • Tutkimus on usein tehty julkisella rahoituksella, joten tulostenkin tulisi olla julkisia.

Avoimen julkaisemisen sudenkuoppia:

  • Myös avoimesti julkaistu tutkimus tarvitsee vertaisarviointia ja kriittistä käsittelyä. Vaarana on, että tutkimuksia avoimena julkaiseviin palveluihin julkaistaan myös "huuhaatiedettä".
  • Suuri yleisö voi ymmärtää tutkimuksen väärin. Alaan perehtymättömät mediat saattavat uutisoida tutkimuksesta suurelle yleisölle virheellisesti tai epätarkasti.

Vapaiden ja avoimien lähdekoodin ohjelmien aate on saanut alkunsa yliopistoympäristössä tutkijoiden keskuudessa ja avoimen tieteen liikkeiden myötä myös muu tiede on pyrkimässä edelleen avoimempaan tieteen tekoon. Tieteellä olisikin vielä paljon opittavaa avoimen lähdekoodin yhteisöjen käyttämistä menetelmistä, kuten tulosten julkaisemisesta varhaisessa vaiheessa, jopa keskeneräisenä, sekä versionhallinnan käytössä. Esimerkiksi Software Carpentry -sivusto sisältää hyvää opetusmateriaalia tutkijoiden käyttöön sopivista ohjelmistoista, kuten Git, Python ja R.

"Jos olen nähnyt muita kauemmas, se johtuu siitä, että olen seissyt jättiläisten harteilla." – Isaac Newton

Open Science Federation
The OpenScience Project
Open Access Week
Open science (Wikipedia)
Open access (Wikipedia)
PhD Comics: Open Access Week (8:23 min)

Teksti: Pesasa
Kuvakaappaukset: Pesasa

January 09, 2016 10:00 PM

January 04, 2016


Suomen kielen oikoluvun palauttaminen toimintaan Firefox-selaimessa

Firefox-selain on muuttunut niin, että Ubuntun mukana tuleva korkealaatuinen suomen kielen oikoluku ei valitettavasti enää toimi selaimessa. Jatkossa Firefox ei salli järjestelmän asentamia laajennuksia. Pienen kielen edustajana emme voi helposti vaikuttaa isojen selainkehittäjien valintoihin, eikä ratkaisua ongelman korjaamiseksi ole lähiaikoina tarjolla.

Voit joko ottaa oikoluvun pois käytöstä jotta suomenkielisiä tekstejä ei turhaan alleviivata punaisella, tai palauttaa Voikko-oikoluvun toimintaan toistaiseksi asentamalla sen Firefoxin omasta laajennuspalvelusta.

Vaihtoehto 1: Ota oikoluku pois käytöstä

1. Avaa Muokkaa → Asetukset
2. Valitse Lisäasetukset

3. Ota valinta Oikolue käyttäjän kirjoitukset pois käytöstä

Vaihtoehto 2: Palauta suomen kielen oikoluku toimintaan

1. Avaa TyökalutLisäosat

2. Valitse Laajennukset. Kuten näkyy, Mozilla-laajennus Voikon käyttöön on poissa käytöstä eikä sitä voi ottaa käyttöön.

3. Kirjoita Hae lisäosista -kenttään ”voikko” ja napsauta sitten Asenna-painiketta

4. Napsauta Käynnistä uudelleen -tekstiä

5. Varmista vielä Laajennukset-valinnan kautta, että Suomen kielen oikoluku on käytössä. Vanhan edelleen asennettuna olevan lisäosan voi jättää huomiotta

6. Nyt oikoluku toimii jälleen, mutta huomaa että toimenpide pitää toistaa jos Ubuntu-koneella on useampia käyttäjätunnuksia. ffvoikko6


Toivottavaa olisi, että niin Firefox- kuin Chrome/Chromium-selainten kehittäjät sallisivat järjestelmän oikoluvun käytön omien rajoittuneempien oikolukujen sijaan. Esimerkiksi Ubuntussa oikoluku on edelleen integroituna muun muassa kaikkiin GNOME- ja KDE-ohjelmiin, ja samojen yleispalveluiden käyttö olisi mahdollista myös selaimissa. Valitettavasti selaimissa on toimiva oma oikoluku muun muassa helpommille indoeurooppalaisille kielille, joten suurta painetta selainkehittäjiä kohtaan ei ole.

Firefox saattaa poistaa kokonaan oikoluvun lisäämisen mahdollisuuden laajennuksen avulla myöhemmin, missä vaiheessa viimeistään muut ratkaisut tulevat tarpeeseen.

by Timo Jyrinki at January 04, 2016 03:59 PM

December 30, 2015

Viikon VALO


Hugo on kevyt, nopea ja helppokäyttöinen työkalu staattisten, mutta hyvin organisoitujen www-sivujen julkaisemiseen.

 Www-sivujen toiminta pohjautuu nykyisin tyypillisesti siihen, että käyttäjän pyytäessä palvelimelta sivua www-selaimella, palvelin suorittaa jollain ohjelmointikielellä tehdyn ohjelman, jolla sivu muodostetaan dynaamisesti tietokannasta noudettujen tietojen pohjalta. Tällä menetelmällä palvelin joutuu suorittamaan saman ohjelmakoodin toistuvasti uudelleen ja uudelleen aina, kun käyttäjä pyytää samaa sivua. Aikoinaan www-sivut oli toteutettu staattisina html-sivuina, jolloin palvelimen tarvitsi vain palauttaa www-selaimelle valmiina oleva sivu suorittamatta sen generoivaa ohjelmakoodia. Staattiset html-sivut säästävät aikaa ja palvelimen resursseja. Ne toimivat hyvin, kun on kyse vain muutamasta sivusta, mutta suuremmilla sivustoilla ongelmaksi muodostuu koko sivuston ylläpito. Jos sivuja on esimerkiksi 242 kappaletta ja sivuston navigointiin tulee yksi uusi valinta, pitää sama valikko päivittää kaikille sivuille samanlaisena.

Vaihtoehtona kahdelle edellä kuvatulle tavalle ylläpitää www-sivustoa on tapa, jossa koko sivusto luodaan staattisiksi html-sivuiksi generoimalla ne ohjelmallisesti yhdellä kertaa ja tämän jälkeen palvelin voi tarjota nopeasti näitä valmiiksi luotuja staattisia sivuja. Tämä tapa siis yhdistää edellä kuvattujen kahden tavan hyvät puolet. Muutoksen yhteydessä sivuston sivut generoidaan uudelleen, mutta vain yhden kerran. Koska sivut ovat pelkkää html:ää, on ne helppoa sijoittaa lähes mihin tahansa kotisivutilaa tarjoavaan palveluun tai vaikka GitHubiin.

Hugo on komentoriviltä käytettävä työkalu, jolla on helppoa luoda näyttäviä ja nopeita staattisia html-sivuja käyttäviä www-sivustoja. Hugo on toteutettu Go-kielellä, sillä voi luoda työhakemistoon www-sivuprojektin, ylläpitää ja luoda sivustolle uusia Markdown-muotoisia sivuja sekä kääntää Markdown-tekstistä staattisia html-tiedostoja. Hugo luo sivuston valitun teeman mukaisella pohjalla ja luo kullekin sivulle käytetyn pohjan mukaisesti tarvittavat valikot sekä muut komponentit. Hugo on ohjelmoitu nopeutta silmälläpitäen ja se generoikin uuden version sivustosta hyvin nopeasti.

Hugolla on helppo ylläpitää sivustoa, jolla on erityyppisiä sivuja, kuten blogipostauksia ja pysyviä sivuja. Hugolla on helppo tehdä luettelosivuja, joilla luetellaan kaikki saman tyyppiset sivut tai vaikka tietyllä tunnisteella (tag) merkityt sivut. Uuden sivuston aloittaminen tapahtuu helposti komennolla:

hugo new site .

Tämä alustaa nykyiseen työhakemistoon joukon valmiita hakemistoja ja tiedostoja, joita käytetään sivuston pohjana.

Uuden blogi-kirjoituksen voi luoda komennolla:

hugo new post/

Tämä luo uuden työhakemiston alle uuden tiedoston content/post/, johon käyttäjä voi kirjoittaa haluamansa tekstin Markdown-muotoiluilla.

Ennen sivuston html-tiedostojen generoimista tarvitaan vielä käytettävä teema, jonka voi joko luoda itse tai ladata valmiina tarjolla olevista vaihtoehdoista. Kun teema on asennettu themes-hakemistoon ja sivuston asetustiedostoon config.toml on ilmoitettu valittu teema ja sivuston otsikko, voidaan sivuston tarvitsemat html-tiedostot generoida komennolla:


Tämä luo tiedostot oletuksena työhakemiston alla olevaan public-hakemistoon. Kääntämisen voi tehdä myös komennolla:

hugo server

Tällöin sivujen kääntämisen lisäksi Hugo käynnistää myös sisäänrakennetun www-palvelimen, jota käyttämällä on helppoa testata sivuston toimiminen. Oletuksena käynnissä oleva palvelin seuraa myöskin Hugo-projektin tiedostojen muutoksia ja generoi html-tiedostot uudelleen aina tarvittaessa. Näin esimerkiksi sisällön, valikoiden tai sivupohjan muokkaaminen laukaisee html-tiedostojen uudelleenluonnin ja sivuston kehittäminen on helppoa.

Hugo soveltuu hyvin sellaisille käyttäjille, jotka haluavat www-sivustonsa toimivan mahdollisimman nopeasti ja joita ei haittaa komentorivin käyttäminen sekä tiedostojen siirtäminen palvelimelle. Hugolla yhden blogi-kirjoituksen lisääminen tarkoittaa teemasta riippuen mahdollisesti sitä, että uuden kirjoituksen otsikko näkyy monilla muillakin sivuilla ja sivutetuissa artikkeliluetteloissa ensimmäisen sivun alkuun tulee uusi artikkeli, ensimmäisen sivun viimeinen siirtyy toiselle sivulle ja niin edelleen. Näin yhden sivun muuttaminen vaikuttaa mahdollisesti useampaan sivuun. Uusien html-sivujen generointi ei Hugolla kestä hetkeä pidempää, mutta kaikki muuttuneet sivut pitää muistaa kopioida palvelimelle. Tähän voi käyttää esimerkiksi rsync-ohjelmaa. Jos mahdollista, Hugoa voi käyttää myös suoraan palvelimella, jolloin sivuston asetuksiin voi määritellä public-hakemiston sijasta jonkin muun hakemiston julkaisemista varten.

Halutessaan Hugon voi yhdistää Git-versionhallinnan kanssa, jolloin Gitin "post-receive hook" -toimintoa käyttämällä julkaiseminen voi tapahtua yksinkertaisesti lisäämällä uusi Markdown-tiedosto versionhallintaan ja lähettämällä sen git push -toiminnolla www-palvelimella sijaitsevaan git-repositoryyn. Ohjeet Hugon ja Gitin yhdistämiseen.

Lähdekoodi (Github)
Apache 2.0
Toimii seuraavilla alustoilla
Windows, Mac OS X, Linux
Ohjelma on asennettavissa sen kotisivuilta ladattavista paketeista.

Teksti: Pesasa
Kuvakaappaukset: Pesasa

December 30, 2015 10:00 PM

December 16, 2015

Wikimedia Suomi

GLAM-metadata ja pyörän jatkuva uudelleen keksiminen

Kun GLAM päättää avata aineistojaan esimerkiksi wikimedia commonssiin tai wikidataan, on edessä myös sisällöllis-tekninen toteutus. Jos GLAMilla on talon sisällä tarpeeksi osaamista ja aikaa, mitään ongelmaa ei tietenkään ole. Usein jompikumpi tai molemmat kuitenkin puuttuu.

Yksi mahdollisuus on se, että löytyy vapaaehtoinen tekijä, joka muokkaa datan ja vie sen haluttuun avoimen tiedon ympäristöön. Ongelma on siinä, että yleensä tästä prosessista ei kerry mitään tietoa GLAM-organisaatiolle päin. Tekijä on “musta laatikko”, joka maagisesti toimii aineiston kanssa ja pullauttaa ulos tuloksen. Seuraavalla kerralla ollaan taas lähtötilanteessa.

Asia on vielä kehnompi, jos ajatellaan että seuraavalla kerralla tuo “musta laatikko” ei olekaan käytettävissä. Ratkaisut ovat “hack until it works” -tyylisiä eikä niitä yleensä dokumentoida mitenkään. Siispä seuraava tekijä aloittaa taas alusta. Mihinkään ei kerry tietoa siitä, miten mikäkin aineiston vapautus on käytännössä tehty.


GLAM-massalatausprojektissa yritetään ratkoa ongelmaa.

Työnimellä Metapipe kulkevan ohjelmiston ajatus on luoda alusta, jossa GLAMit, vapaaehtoiset sisällön muokkaajat ja skriptien kirjoittajat voisivat toimia yhdessä. Jos tämä kuulostaa liian harmoniselta, niin sitten ainakin niin, että syntyy yhteistä dokumentaatiota siitä miten kukin aineistojaan on käsitellyt.

Perusajatuksena on yksi tiedosto kuvaa mitä kaiken sen mitä aineistolle piti tehdä, jotta se saatiin siirrettyä esimerkiksi wikidataan tai commonssiin. Tämä tiedosto ei kuitenkaano ole pelkkä kuvaus, vaan se on toimiva ohjelma, jota voi hyödyntää muissa samankaltaisissa projekteissa.

Metapipen graafisen noodi-pohjaisen käyttöliittymän mockup.

Käyttäjän näkökulmata metapipe on graafinen työkalu, jossa rakennetaan haluttu lopputulos palikka (node) kerrallaan. Käyttäjät voivat katsoa muiden palikoita (nodeja) ja myös tarvittaessa käyttää niitä.

Ohjelmoijan näkökulmasta metapipe on kokoelma *muokattavia* javascript -funktioita, jotka on yhdistetty toisiinsa tietyllä tavalla. Ohjelmoija voi luoda uusia palikoita (nodeja) käyttäjille.

Projekti on suunnitteluvaiheessa ja kokeiluversioita pyritään luomaan heti kun mahdollista palautteen saamiseksi.

by Ari Häyrinen at December 16, 2015 01:39 PM

December 05, 2015

Aapo Rantalainen

Cross-compiling Adb for Windows

Continuing with same theme than previous posts. Adb can be compiled with Linux for Windows (Cross-compiling).


Adb (Android Debug Bridge) is debugging tool to communicate with Android-device and host. Developer can install whole Android SDK and get adb. But I think it is handy tool for (power-)users too. Personally I think that developing with Linux is easier than with Windows, so I made step-by-step tutorial how to cross-compile adb for Windows using Ubuntu.

How to

This is not the newest version of Adb (because at that point it will start using source code from other part of SDK, and a little bit earlier merging from c to c++ which complicates things too much). Code is somewhere between Android-5.1.1_r29 and Android-6.0.0_r1.

#Needed tools
sudo apt-get install  mingw-w64 git make
#Download source code (about 32MB, 2015-12-05)
git clone
cd core/adb

#Change last known working commit ( This was made 2015-03-09)
git checkout 9b1fd969a7b7f1c6f1ed19719f21d57001d3c461

#Download some precompiled DLL's and one header from git
base64 -d AdbWinApi.dll\?format\=TEXT > AdbWinApi.dll

base64 -d AdbWinUsbApi.dll?format=TEXT > AdbWinUsbApi.dll

base64 -d adb_api.h?format=TEXT > adb_api.h

#Compile external libraries
#OPENSSL (latest release (2015-12-05))
tar xvf openssl-1.0.2e.tar.gz
mv openssl-1.0.2e openssl
cd openssl
CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ CPP=i686-w64-mingw32-cpp RANLIB=i686-w64-mingw32-ranlib ./Configure mingw
cd ..

#ZLIB (latest release (2015-12-05))
tar xvf zlib-1.2.8.tar.gz
mv zlib-1.2.8 zlib
cd zlib
sed 's/--lc//' -i configure     #One fix for configure
CC=i686-w64-mingw32-gcc CXX=i686-w64-mingw32-g++ CPP=i686-w64-mingw32-cpp RANLIB=i686-w64-mingw32-ranlib  ./configure 
cd ..
#Create Makefile
echo -e '
# standalone Makefile for adb for windows
SRCS+= adb.c
SRCS+= adb_main.c
SRCS+= sysdeps_win32.c    #replaces fdevent.c 
SRCS+= adb_client.c
SRCS+= commandline.c
SRCS+= console.c
SRCS+= file_sync_client.c
SRCS+= get_my_path_windows.c    #replaces get_my_path_linux.c
SRCS+= services.c
SRCS+= sockets.c
SRCS+= transport.c
SRCS+= transport_local.c
SRCS+= transport_usb.c
SRCS+= usb_windows.c       #replaces  usb_linux.c
SRCS+= adb_auth_host.c
SRCS+= adb_auth.c
SRCS+= adb_listeners.c
#VPATH+= ../libcutils  #not used, because of USE_SYSDEPS_WIN32

SRCS+= ../libzipfile/centraldir.c
SRCS+= ../libzipfile/zipfile.c

#CPPFLAGS+= -DHAVE_SYMLINKS    #readlink will fail
#CPPFLAGS+= -DHAVE_TERMIO_H    #No concept of tty in Windows

#Added for Windows

CPPFLAGS+= -I../include

#Locally compiled
CPPFLAGS+= -Iopenssl/include/
LDFLAGS+= -Lopenssl/
CPPFLAGS+= -Izlib/
LDFLAGS+= -Lzlib/

LIBS+= AdbWinUsbApi.dll
LIBS+= AdbWinApi.dll

LIBS+= -lcrypto -lpthread -lz  #lrt dropped, not used in Windows
LIBS+= -lws2_32 -lgdi32

CC= i686-w64-mingw32-gcc
LD= i686-w64-mingw32-gcc
CXX= i686-w64-mingw32-g++


OBJS= $(SRCS:.c=.o)

all: adb.exe
adb.exe: $(OBJS)
\t$(CXX) $(CXXFLAGS) -c -o adb_io.o adb_io.cpp
\t$(LD) -o $@ $(LDFLAGS) $(OBJS) adb_io.o  $(LIBS)
\ti686-w64-mingw32-strip $@
\trm -rf *.o adb.exe
' > standalone_Makefile

make -f standalone_Makefile

#Move adb.exe to the Windows and profit.


Even I based this tutorial on my last blog-post, this old project gave much good extra information:

by Aapo Rantalainen at December 05, 2015 07:18 PM

Building adb for Ubuntu without whole SDK

This post is upgrade for my previous post about building ADB for Ubuntu:


Adb (Android Debug Bridge) is debugging tool to communicate with Android-device and host.


Developer can install whole Android SDK and get adb. But I think adb should be possible to build alone. Ubuntu/Debian has package android-tools-adb, which contains adb, but it will never be newest version.

How to

This is not the newest version (because at that point it will start using source code from other part of SDK). Code is somewhere between Android-5.1.1_r29 and Android-6.0.0_r1.

#Needed tools
sudo apt-get install zlib1g-dev libssl-dev git make gcc
#Download source code (about 32MB, 2015-12-05)
git clone
cd core/adb

#Change last working commit (after that more code needed. This was made 2015-04-17)
git checkout 0b8ecb32908f0ccde550dd510f4a562239085806

#Create Makefile
echo -e '
# standalone Makefile for adb
SRCS_CPP+= adb.cpp
SRCS_CPP+= adb_auth.cpp
SRCS_CPP+= adb_io.cpp
SRCS_CPP+= adb_listeners.cpp
SRCS_CPP+= sockets.cpp
SRCS_CPP+= transport.cpp
SRCS_CPP+= transport_local.cpp
SRCS_CPP+= transport_usb.cpp
SRCS_CPP+= fdevent.cpp
SRCS_CPP+= get_my_path_linux.cpp
SRCS_CPP+= usb_linux.cpp
SRCS_CPP+= adb_auth_host.cpp
SRCS_CPP+= services.cpp
SRCS_CPP+= adb_main.cpp
SRCS_CPP+= console.cpp
SRCS_CPP+= commandline.cpp
SRCS_CPP+= adb_client.cpp
SRCS_CPP+= file_sync_client.cpp

SRCS+= ../libcutils/socket_inaddr_any_server.c
SRCS+= ../libcutils/socket_local_client.c
SRCS+= ../libcutils/socket_local_server.c
SRCS+= ../libcutils/socket_loopback_client.c
SRCS+= ../libcutils/socket_loopback_server.c
SRCS+= ../libcutils/socket_network_client.c
SRCS+= ../libcutils/load_file.c
CPPFLAGS+= -I../include

CXXFLAGS+= -fpermissive -std=c++11

LIBS= -lcrypto -lpthread -lrt -lz 
CC= gcc
LD= g++
OBJS= $(SRCS:.c=.o)
OBJS_CPP= $(SRCS_CPP:.cpp=.o)
all: adb
adb: $(OBJS) $(OBJS_CPP)
\t$(LD) -o $@ $(LDFLAGS) $(OBJS) $(OBJS_CPP) $(LIBS) 
\trm -rf *.o ../libcutils/*.o adb
' > standalone_Makefile

make -f standalone_Makefile

./adb --version
#Android Debug Bridge version 1.0.32

You will get several warnings:

warning: invalid conversion from ‘const char*’ to ‘char*’ [-fpermissive]

by Aapo Rantalainen at December 05, 2015 02:35 PM

November 29, 2015

Viikon VALO


QGIS on paikkatieto-ohjelmisto, jota käytetään karttojen piirtämiseen ja sijaintiin liittyvien analyysien laatimiseen. Se soveltuu kartoituksen ammattilaisille ja data-analyytikoille.

Monissa paikkatietojärjestelmän tehtävissä voidaan käyttää QGISiä: Käyttäjä voi luoda uutta paikkatietoaineistoa, ylläpitää tietokannan materiaalia, laatia datasta analyyseja tai piirtää esitykseen soveltuvia karttoja. Ohjelmiston avulla kartantekijä pystyy digitoimaan paperisia karttoja, biologi tutkimaan kasvilajien levinneisyyttä tai kauppias valitsemaan otollisimman paikan uudelle myymälälle.

Käyttäjä voi täydentää sisään rakennettuja työkaluja ulkoisilla ohjelmilla, sillä QGIS toimii käyttöliittymänä muille vapaan lähdekoodin paikkatieto-ohjelmille. Toiminnallisuutta voi laajentaa muiden muassa GRASS- ja SAGA-ohjelmistojen työkaluilla. Ohjelmiston tekijät ylläpitävät lisäosakirjastoa, joka sisältää lukuisia laajennuksia. Esimerkiksi OpenLayers-lisäosa hakee OpenStreetMap -palvelun rasterikarttoja.

Käyttäjä voi automatisoida usein toistuvia työvaiheita. Graafisessa mallintajassa käyttäjä piirtää vuokaavion, joka kuvaa tietolähteet, käytettävät algoritmit ja lopputuotteet. Toisena vaihtoehtona on ohjelmoida Python-kielinen skripti, joka kuvaa työvaiheita. Käyttäjä voi suorittaa valmiit prosessikuvaukset työkalupalkista.

QGISin käyttäjille on laadittu runsaasti ohjeistusta. Ohjeistus on tarpeen, sillä QGISin käyttö edellyttää perustietoja kartoituksesta. Verkkoaineisto ja kirjat ovat pääasiassa englanninkielisiä, mutta ohjelmisto on käännetty suomeksi.

Toimii seuraavilla alustoilla
Linux, Windows, Mac OS X, FreeBSD
Lue kehittäjien laatimat asennusohjeet
Linkkejä oppimateriaaliin
Ohjeet Tilastokeskuksen rajapintapalvelun käyttöön

Teksti: Mikko Harhanen
kuvakaappaukset: Mikko Harhanen

November 29, 2015 03:00 PM

November 24, 2015

Wikimedia Suomi

Wikimedia Suomi ry:n syyskokous ja hallitusehdokkaat vuodelle 2016

Tervetuloa Wikimedia Suomi ry:n syyskokoukseen!

Tällä sivulla esittäytyvät Wikimedia Suomen ensi vuoden hallituksen ehdokkaat. Jos haluat ehdokkaaksi, täytä tämä lomake. Hallitus valitaan syyskokouksessa 2.12. klo 17 alkavassa kokouksessa. Voit osallistua kokoukseen etäyhteydellä Google Hangoutin kautta.


Ehdokkaat hallitukseen 2016

<iframe frameborder="0" height="1000px" src="" width="100%"></iframe>

by Susanna Ånäs at November 24, 2015 10:08 AM

November 20, 2015


Converting an existing installation to LUKS using luksipc

This is a burst of notes that I wrote in an e-mail in June when asked about it, and I'm not going to have any better steps since I don't remember even that amount as back then. I figured it's better to have it out than not.

So... if you want to use LUKS In-Place Conversion Tool, the notes below on converting a shipped-with-Ubuntu Dell XPS 13 Developer Edition (2015 Intel Broadwell model) may help you. There were a couple of small learnings to be had...
The page<wbr></wbr>linux/luksipc/ itself is good and without errors, although funnily uses reiserfs as an example. It was only a bit unclear why I did save the initial_keyfile.bin since it was then removed in the next step (I guess it's for the case you want to have a recovery file hidden somewhere in case you forget the passphrase).

For using the tool I booted from a 14.04.2 LTS USB live image and operated there, including downloading and compiling luksipc in the live session. The exact reason of resizing before luksipc was a bit unclear to me at first so I simply indeed resized the main rootfs partition and left unallocated space in the partition table.

Then finally I ran ./luksipc -d /dev/sda4 etc.

I realized I want /boot to be on an unencrypted partition to be able to load the kernel + initrd from grub before entering into LUKS unlocking. I couldn't resize the luks partition anymore since it was encrypted... So I resized what I think was the empty small DIAGS partition (maybe used for some system diagnostic or something, I don't know), or possibly the next one that is the actual recovery partition one can reinstall the pre-installed Ubuntu from. And naturally I had some problems because it seems vfatresize tool didn't do what I wanted it to do and gparted simply crashed when I tried to use it first to do the same. Anyway, when done with getting some extra free space somewhere, I used the remaining 350MB for /boot where I copied the rootfs's /boot contents to.

After adding the passphrase in luks I had everything encrypted etc and decryptable, but obviously I could only access it from a live session by manual cryptsetup luksOpen + mount /dev/mapper/myroot commands. I needed to configure GRUB, and I needed to do it with the grub-efi-amd64 which was a bit unfamiliar to me. There's also grub-efi-amd64-signed I have installed now but I'm not sure if it was required for the configuration. Secure boot is not enabled by default in BIOS so maybe it isn't needed.

I did GRUB installation – I think inside rootfs chroot where I also mounted /dev/sda6 as /boot (inside the rootfs chroot), ie mounted dev, sys with -o bind to under the chroot (from outside chroot) and mount -t proc proc proc too. I did a lot of trial and effort so I surely also tried from outside the chroot, in the live session, using some parameters to point to the mounted rootfs's directories...

I needed to definitely install cryptsetup etc inside the encrypted rootfs with apt, and I remember debugging for some time if they went to the initrd correctly after I executed mkinitramfs/update-initramfs inside the chroot.

At the end I had grub asking for the password correctly at bootup. Obviously I had edited the rootfs's /etc/fstab to include the new /boot partition, I changed / to be "UUID=/dev/mapper/myroot /     ext4    errors=remount-ro 0       ", kept /boot/efi as coming from the /dev/sda1 and so on. I had also added "myroot /dev/sda4 none luks" to /etc/crypttab. I seem to also have GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda4:myroot root=/dev/mapper/myroot" in /etc/default/grub.

The only thing I did save from the live session was the original partition table if I want to revert.

So the original was:

Found valid GPT with protective MBR; using GPT.
Disk /dev/sda: 500118192 sectors, 238.5 GiB
Logical sector size: 512 bytes
First usable sector is 34, last usable sector is 500118158
Partitions will be aligned on 2048-sector boundaries
Total free space is 6765 sectors (3.3 MiB)
Number  Start (sector)    End (sector)  Size       Code  Name
1            2048         1026047   500.0 MiB   EF00  EFI system partition
2         1026048         1107967   40.0 MiB    FFFF  Basic data partition
3         1107968         7399423   3.0 GiB     0700  Basic data partition
4         7399424       467013631   219.2 GiB   8300
5       467017728       500117503   15.8 GiB    8200

And I now have:

Number  Start (sector)    End (sector)  Size       Code  Name

1            2048         1026047   500.0 MiB   EF00  EFI system partition
2         1026048         1107967   40.0 MiB    FFFF  Basic data partition
3         1832960         7399423   2.7 GiB     0700  Basic data partition
4         7399424       467013631   219.2 GiB   8300
5       467017728       500117503   15.8 GiB    8200
6         1107968         1832959   354.0 MiB   8300

So it seems I did not edit DIAGS (and it was also originally just 40MB) but did something with the recovery partition while preserving its contents. It's a FAT partition so maybe I was able to somehow resize it after all.

The 16GB partition is the default swap partition. I did not encrypt it at least yet, I tend to not run into swap anyway ever in my normal use with the 8GB RAM.

If you go this route, good luck! :D

by Timo Jyrinki ( at November 20, 2015 02:14 PM

November 19, 2015

Wikimedia Suomi

Suomalaisen Kirjallisuuden Seura ja Wikipedian Lähdekirjasto yhteistyöhön

Wikipedian Lähdekirjaston etusivu

Wikipedian Lähdekirjaston etusivu suomenkielisessä Wikipediassa. CC BY SA 4.0

Wikipedian Lähdekirjaston tunnus. Heatherawalls CC BY SA 4.0

Suomalaisen Kirjallisuuden Seura (SKS) lahjoittaa pilottihankkeessa Wikipedian Lähdekirjastolle 20 tunnusta Kansallisbiografia ja Suomen talouselämän vaikuttajat -verkkojulkaisuihin vuoden määräajaksi. Verkkojulkaisuissa on yli 8 500 henkilön elämäkerrat. Tunnuksien avulla Wikipedian muokkaajat voivat kehittää Wikipediassa erityisesti historiallisesti merkittävien suomalaisten henkilöiden artikkeleita.

Wikipedian Lähdekirjasto on Wikipedian sisäinen hanke, jonka tehtävänä on auttaa Wikipedian muokkaajia löytämään luotettavia lähteitä artikkeleiden parantamiseksi. Osana tätä tehtävää Lähdekirjasto tekee yhteistyötä julkaisijoiden kanssa. Se ottaa lahjoituksena vastaan käyttöoikeuksia julkaisijan aineistoihin, ja jakaa ne eteenpäin kokeneille Wikipedian muokkaajille. He puolestaan käyttävät aineistoja artikkeleiden kehittämisessä, viittaavat niihin ja lisäävät niitä lähteiksi artikkeleihin.

Wikipedian Lähdekirjasto on Wikipedia Libraryn suomenkielinen haara. Kansainvälisellä Wikipedia Librarylla on yli 40 yhteistyökumppania, kuten Oxford University Press, JSTOR, Elsevier, de Gruyter, Cochrane Collaboration, Royal Society UK ja BMJ. Suomalaisen Kirjallisuuden Seura on ensimmäinen suomalainen yhteistyökumppani.

Wikipedia on usein ensimmäinen paikka, josta ihmiset hakevat tietoa internetissä. Me emme halua, että Wikipedia on vain tiedonhaun päätepiste – parhaiten se toimii lähtökohtana tietämyksen syventämiseen. Mitä parempia aineistoja Wikipedian artikkeleissa on hyödynnetty, sitä paremmista lähteistä lukija voi hakea lisätietoa ja laajentaa näkemystään. Kun tietoa on avoimesti saatavilla, sitä on helpompi hyödyntää ja soveltaa.

Wikipedian Lähdekirjasto on avoin uusille yhteistyömahdollisuuksille ja etsii uusia kumppaneita. Onko sinun organisaatiollasi tarjota apua lähteiden löytämisessä ja hyödyntämisessä Wikipediassa? Ota yhteyttä!

Teemu Perhiö

Wikipedian Lähdekirjasto

Lahjoituksen projektisivu Wikipediassa

by Teemu Perhiö at November 19, 2015 08:36 AM

November 05, 2015


Sisäänkirjautumisen jälkeen näkyvän mustan ruudun korjaaminen Lubuntu 14.04:ssä

Tämä ohje voi olla tarpeen osalle Lubuntu 14.04 LTS -asennuksista (Ubuntu yhteisön ylläpitämällä LXDE-käyttöliittymällä), ja sitä voi kokeilla muissakin virhetilanteissa. Vastaavan korjauksen voi tehdä myös tietokonetta käynnistettäessä Ubuntun palautustilan (”recovery mode”) valikon avulla.

Useat asiakkaat ovat viime päivinä raportoineet, että Ubuntu-läppäri tai -työasema yllättäen lakkasi toimimasta oikein. Oire on, että sisäänkirjautumisessa, käyttäjätunnuksen ja salasanan syöttämisen jälkeen ruutu vilkkuu ja on hetken musta. Tämän jälkeen näyttö tulee takaisin kirjautumisnäkymään.

Ongelma johtuu Ubuntun päivityksestä, joka on epäonnistunut ja jättänyt graafisen työpöytäympäristön toimimattomaan tilaan.

Korjauksen voi tehdä itse avaamalla tekstipäätteen painamalla Ctrl+Alt+F1 ja kirjautumalla sisään tekstitilassa. Sen jälkeen voi ajaa päivityksen loppuun onnistuneesti komentamalla:

sudo dpkg --configure -a
sudo apt-get update
sudo apt-get upgrade -y

Lopuksi aja sudo reboot. Ubuntun uudelleenkäynnistymisen jälkeen sisäänkirjautuminen ja käyttö pitäisi onnistua normaalisti.

Ohje on julkaistu alun perin osoitteessa

by Otto at November 05, 2015 09:06 AM

August 31, 2015

Niklas Laxström

MediaWiki short urls with nginx and main page without redirect

This post has been updated 2015-09-06 with simplified code suggested by Krinkle.

Google PageSpeed Insights writes:

Redirects trigger an additional HTTP request-response cycle and delay page rendering. In the best case, each redirect will add a single roundtrip (HTTP request-response), and in the worst it may result in multiple additional roundtrips to perform the DNS lookup, TCP handshake, and TLS negotiation in addition to the additional HTTP request-response cycle. As a result, you should minimize use of redirects to improve site performance.

Let’s consider the situation where you run MediaWiki as the main thing on your domain. When user goes to your domain, MediaWiki by default will issue a redirect to, assuming you have configured the recommended short urls.

In addition the short url page writes:

Note that we do not recommend doing a HTTP redirect to your wiki path or main page directly. As redirecting to the main page directly will hard-code variable parts of your wiki’s page setup into your server config. And redirecting to the wiki path will result in two redirects. Simply rewrite the root path to MediaWiki and it will take care of the 301 redirect to the main page itself.

So are we stuck with a suboptimal solution? Fortunately, there is a way and it is not even that complicated. I will share example snippets from configuration how to do it.

Configuring nginx

For nginx, the only thing we need in addition the default wiki short url rewrite is to rewrite / so that it is forwarded to MediaWiki. The configuration below assumes MediaWiki is installed in the w directory under the document root.

location ~ ^/wiki/(.*)$ {
	rewrite ^/wiki/(.*)$ /w/index.php/$1;

location = / {
	rewrite ^ /w/index.php;

Whole file for the curious.

Configuring MediaWiki

First, in our LocalSettings.php we have the short url configuration:

$wgArticlePath      = "/wiki/$1";
$wgScriptPath       = "/w";

In addition we use hooks to tell MediaWiki to make / the URL for the main page, not to be redirected:

$wgHooks['GetLocalURL'][] = function ( &$title, &$url, $query ) {
	if ( $title->isExternal() || $query != '' && $title->isMainPage() ) {
		$url = '/';

// Tell MediaWiki that "/" should not be redirected
$wgHooks['TestCanonicalRedirect'][] = function ( $request ) {
	return $request->getRequestURL() !== '/';

This has the added benefit that all MediaWiki generated links to the main page point to the domain root, so you only have one canonical url for the wiki main page. The if block in the middle with strpos checks for problematic characters ? and & and forces them to use the long URLs, because otherwise they would not work correctly with this nginx rewrite rule.

And that’s it. With these changes you can have your main page displayed on your domain without redirect, also keeping it short for users to copy and share. This method should work for most versions of MediaWiki, including MediaWiki 1.26 which forcefully redirects everything that doesn’t match the canonical URL as seen by MediaWiki.

by Niklas Laxström at August 31, 2015 08:14 AM

August 03, 2015

Niklas Laxström – harder, better, faster, stronger

I am very pleased to announce that has been migrated to new servers sponsored by netcup GmbH. Yes, that is right, we now have two servers, both of which are more powerful than the old server.

Since the two (virtual) servers are located in the same data center and other nitty gritty details, we are not making them redundant for the sake of load balancing or uptime. Rather, we have split the services: ElasticSearch runs on one server, powering the search, translation search and translation memory; everything else runs on the other server.

In addition to faster servers and continuous performance tweaks, we are now faster thanks to the migration from PHP to HHVM. The Wikimedia Foundation did this a while ago with great results, but HHVM has been crashing and freezing on for unknown reasons. Fortunately, recently I found a lead that the issue is related to a ini_set function, which I was easily able to work around while the investigation on the root cause continues.

Non-free Google Analytics confirms that we now server pages faster.

Non-free Google Analytics confirms that we now serve pages faster: the small speech bubble indicates migration day to new servers and HHVM. Effect on the actual page load times observed by users seems to be less significant.

We now have again lots of room for growth and I challenge everyone to make us grow with more translations, new projects or other legitimate means, so that we reach a point where we will need to upgrade again ;). That’s all for now, stay tuned for more updates.

by Niklas Laxström at August 03, 2015 10:48 AM

August 02, 2015

Aapo Rantalainen

Board game geometry

There are several board games played with square grid and TOKEN CAN MOVE DIAGONALLY. I’m not saying this is wrong or even hard to play with.
I’m describing what this mean mathematically.

Look the picture. Green token can move four steps. We can now say that each possible target point (B and C) and source point (A) has distance four.
DistanceBetween(A,B) = 4
DistanceBetween(A,C) = 4

This is true in this game-universe and with these game-rules. If we then use our physical reality and measure distances with ruler.

photo2 photo3
We get that:
DistanceBetween(A,B) = 16 centimetres
DistanceBetween(A,C) = 22 centimetres


I repeat this is not a bug in rules. It is not even paradox. But how does it look in our reality if we somehow set that “nearby points have distance of one”?

First we (mathematically) define our game board. Let say we have three types of points:
– Corner: It has three neighbourhood points (E.g. point A)
– Side: Five neighbourhood points (E.g. point B)
– Center: Eight neighbourhood points (E.g. point D)

(Where neighbourhood point = point with distance 1)

And then we have some little more complicated relation between points:


Distance(A,B) = 1
Distance(A,C) = 1
Distance(A,D) = 1
Distance(B,C) = 1
Distance(B,D) = 1
Distance(C,D) = 1
…For each point in board.

Let’s construct this:
* Starting with one corner (A) (in 0,0,0)
bb01 * Helper points X Y Z bb_02
*Lines from A to each helper point X and Y and Z. bb_03*Ball with center A and radius 1. It intersects three helper lines on points B and C and Dbb_04
(Note: it is not circle but ball, therefor it looks points B and C and D are not intersecting ball)

*Lines between BC, BD and CD (length of each is 1) bb_05

*This construction is now equivalent what we wanted.


And here is a physical construction of 20 points (marked by four tokens) from corner of the board.

photo5Because they are equivalent I suggest playing with right-side board.

by Aapo Rantalainen at August 02, 2015 04:54 PM

July 29, 2015


Kokemuksia Meizu MX4 -Ubuntu-puhelimesta

Juuri ennen juhannusta pakettikusti toi minulle Meizu MX4 -Ubuntu-puhelimen käyttöön, ja käyttöön se päätyikin hyvin nopeasti, korvaten BQ Aquaris E4.5:n. Käyttöjärjestelmä säilyi samana, joten en suuremmin sen käyttökokemukseen syvenny vaan säästän sen erilliseen  juttuun. Lisää raudan teknisistä spekseistä löytyy muun muassa Meizun sivuilta.

MEIZU MX4 saatekirjeen ja kirveen kera

Postin tuomaa

MX4 on kooltaan selkeästi isompi kuin Aquaris, näytön ollessa selkeästi leveämpi yltäen laitteen reunoihin. Ainakin minun käyttökokemus on että jonkinlaiset reunat näyttöjen sivuilla helpottaa reunaeleiden kanssa. MX4:n koko on sitä luokkaa että allekirjoittaneen sormien ulottuminen kokee hetkittäin haasteita. Käsittely muutenkin on jonkin verran hankalampaa, siitä todisteena kova kosketus maantien kanssa.


Meizu lommoilla

Alumiinirunkoisena puhelin kuitenkin kestää ilmeisen hyvin kovaakin kuritusta, tästä isoa plussaa paljon rymyävälle. Näytön suurempi koko ja tarkkuus pääsi kunnolla oikeuksiinsa tässä hiljattain kun päivityksessä muutettiin MX4:lle asetettua ruudukkoarvoa jolla määritetään näytölle piirrettävän sisällön suhteellista kokoa.

Ubuntu Suomi twitter

Näytölle mahtuu tekstiä

Akkukesto oli aluksi sangen heikko ja lämpöä riitti pitkin päivää. Muutaman korjauspäivityksen jälkeen tuollakin saralla tuli selkeitä parannuksia, nyt akun kestäen vähäistä käyttöä useamman päivän tahi kovempaa käyttöä päivän tahi puolitoista.

MX4 Ubuntun akunkäyttö

Akku kestää jo päivän yli

Meizu on laittanut melkoisesti ruutia MX4:ään ajatellen Ubuntun tarpeita. 8 ydintä puksuttaa todennäköisesti melkoisesti alikäytöllä eikä laitteen rajoja oikeastaan tarvitse miettiä normikäytössä. Keskusmuistiakin on ladattu riittämiin, ohjelmien taustalla pyörimistä voisi tällaisella raudalla sallia huomattavasti vapaammin kuin nyt tehdään.

Kamerasta ei vielä saada täyttä hyötyä irti ohjelmistobugien takia. 21 Mpix kamerasta saadaan tällä hetkellä käyttöön vain noin 15 Mpix eikä videokuvakaan käytä kameran täyttä resoluutiota vielä.

Kaikenkaikkiaan Meizu MX4 on tällä hetkellä sangen onnistunut puutteistaan huolimatta, ohjelmistosta johtuvat ongelmat ovat ratkaistavissa ja korjauksia ja parannuksia tuleekin säännöllisesti päivityksistä.

Seuraavaa Ubuntu Insiders -puhelinta odotellessa…

– Tm_T

by Tm_T at July 29, 2015 12:14 PM

June 08, 2015


Pikakatsaus: Dell XPS 13 Developer Edition – Ubuntua suoraan kaupasta

Tässä nopea vilkaisu uunituoreeseen Suomessakin saatavilla olevaan Dell XPS 13 Developer Editioniin, joka tulee Ubuntu 14.04 LTS -käyttöjärjestelmällä (lisättynä mallikohtaisilla korjauksilla). Mallista on Suomesta suoraan saatavilla kahta mallia, joiden yhdistäviä tekijöitä ovat i7-5600U -suoritin, 8GB käyttömuistia sekä 256GB SSD-kiintolevy. Eroina valittavana on joko mattapintainen FullHD-näyttö ilman kosketustukea, tai hieman kiiltävämpi QHD (3200×1800) -näyttö kosketustuella. Päädyin näistä ensimmäiseen pääasiassa jonkin verran paremman akunkeston sekä ulkokäytössä näppärän mattapinnan takia. Työkäytössä en ole huomannut tarvetta kosketusnäytölle, vaikka toki sellainen olisi mukava esim tulevaa Unity 8:aa ajatellen.

Tein pienen tarjouskierroksen Etelä-Suomen Dell-jälleenmyyjien välillä, mutta mitenkään kattavasti en liikkeitä käynyt läpi. Parhaimman palvelun selvityksineen tarjosivat vantaalainen Datakuja sekä turkulainen Jimm’s PC Store. Molemmat vastasivat tarjouspyyntöön, selvittivät asiaa (koska kyseessä oli vasta myyntiin tulossa oleva malli) ja palasivat asian tiimoilta sähköpostitse tai puhelimitse. Muutamassa muussa liikkeessä vastaus oli lyhyempi tyyliin “ei näy vielä listoilla”. Datakujalla ei ole verkkokauppaa mutta palvelu oli muutoin ripeää ja ensiluokkaista. Tätä kirjoitettaessa Jimm’s:n listoilla ei näitä uusia XPS 13 Ubuntu-malleja näy (päivitys 15.6.2015: Jimm’s on lisännyt FullHD-mallin tilattavaksi), mutta Ubuntu Suomen Tietokoneet ja laitteet -sivulla on jo 6 kauppaa joilta uudet XPS1316EAC- ja XPS1326EAC-tuotekoodilliset mallit löytyvät.

Ubuntu laatikosta -kuvasarja


Musta laatikko, valkoinen kissa.

Avattu laatikko

Avattu laatikko

Kansi auki! Huomaa Ubuntu-logo.

Kansi auki! Huomaa Ubuntu-logo.

Virrat päälle, käynnistyslogosta ensimmäisen käyttökerran videoon.

Virrat päälle, käynnistyslogosta ensimmäisen käyttökerran videoon.

Ensimmäisen käynnistyskerran kysymykset, aloittaen kielestä.

Ensimmäisen käynnistyskerran kysymykset, aloittaen kielestä.

Palautusmedian luominen. Olin lukenut että on suositeltavaa ladata ensin uusimmat päivitykset, joten ohitin tässä vaiheessa.

Palautusmedian luominen. Olin lukenut että on suositeltavaa ladata ensin uusimmat päivitykset, joten ohitin tässä vaiheessa.

Ubuntu viimeistelee asetuksiaan.

Ubuntu viimeistelee asetuksiaan.

Valmiina kirjautumaan.

Valmiina kirjautumaan.

Työpöydällä ollaan!

Työpöydällä ollaan!

Paljon päivityksiä ladattavaksi...

Paljon päivityksiä ladattavaksi…

Ensimmäisen toimituserän ongelmia

Päivitys: Dell keskeytti XPS 13 -myynnin kesällä hetkeksi aikaa, jotta kaikki korjaukset saatiin suoraan tehtaalta tuleviin laitteisiin!

Ikävä kyllä ensimmäinen toimituserä oli osittain puutteellinen. Ongelmat on helppo korjata näillä ohjeilla, mutta on ikävää että tämän vuosimallin XPS 13 ei ollut moitteeton suoraan. Ensinnäkin, päivitysten asentaminen keskeytyy ensimmäisellä kerralla, mikä on helpoin korjata avaamalla Unity-valikkoPääte ja suorittamalla komento sudo apt-get install -f (joka ehdottaa pakettien libc-dev-bin, libc6-dbg, libc6-dev ja udev päivittämistä).

Toiseksi kosketuslevyn täydellisesti toimimaan saava ajuri on mukana, mutta ei käytössä. Se on helppo ottaa käyttöön parilla klikkauksella, ks Dellin YouTube-video tai alla olevat kuvat.

Valintaikkuna kosketuslevyn paremman ajurin käyttöön ottoon.

Valintaikkuna kosketuslevyn paremman ajurin käyttöön ottoon.

meta-closeupValinnaisesti on vielä mahdollista ottaa uusimmat ajurit käyttöön 14.04.2 LTS:n ajurituen muodossa, mutta ehkä parasta on odottaa elokuussa julkaistavaa 14.04.3 LTS -ajuritukea (vastaa 15.04:aa) jos uunituoreet ajurit kiinnostavat. Itselleni 14.04.2 LTS toimi kyllä hyvin mutta mikrofoni lakkasi oletuksena toimimasta. Dellin blogauksen perusteella tämä toimisi 15.04:n ajurituella suoraan taas. Puhtaalta pöydältä tuskin kannattaa Ubuntua lähteä asentamaan, sillä Dellin mallikohtaiset korjaukset, kuten yllä näytetyt, löytävät tiensä mahdollisesti vasta 15.10:een jos kaikki lasketaan yhteen. Linkatun Dell-blogikirjoituksen kautta löytyvät kyllä myös tiedot niin eri puhtaiden Ubuntu-versioiden kuin Debianin tai muiden Linux-jakeluiden käyttäjille.


Dell XPS 13 Developer Edition + Ubuntu 14.04 LTS on erittäin toimiva kokonaisuus, joka lähentelisi täydellisyyttä ellei ensimmäisessä toimituserässä olisi mainittuja ongelmia. Läppäri on erinomaisen näköinen, tuntuinen ja kevyt.

Olen siirtänyt nyt työtiedostoni uudelle koneelle, ja päivittäinen työnteko sujuu kuin tanssi. Mahdollisesti mielenkiintoisina täkyinä käytän LXC:tä Ubuntun kehitysversion ajamiseen sekä tein aika mielenkiintoisen ”LUKS In-Place Conversion” -operaation, jota en tosin suosittele ellei GRUB2 ole lähimpiä ystäviäsi 🙂

Timo Jyrinki

(tämä blogipostaus on vapaa käännös englanninkielisestä versiostani)

by Timo Jyrinki at June 08, 2015 11:06 AM


Quick Look: Dell XPS 13 Developer Edition (2015) with Ubuntu 14.04 LTS

I recently obtained the newest Dell's Ubuntu developer offering, XPS 13 (2015, model 9343). I opted in for FullHD non-touch display, mostly because of better battery life, the actual no need for higher resolution, and matte screen which is great outside. Touch would have been "nice-to-have", but in my work I don't really need it.

The other specifications include i7-5600U CPU, 8GB RAM, 256GB SSD [edit: lshw], and of course Ubuntu 14.04 LTS pre-installed as OEM specific installation. It was not possible to directly order it from Dell site, as Finland is reportedly not online market for Dell... The wholesale company however managed to get two models on their lists and so it's now possible to order via retailers. [edit: here are some country specific direct web order links however US, DE, FR, SE, NL]

In this blog post I give a quick look on how I started up using it, and do a few observations on the pre-installed Ubuntu included. I personally was interested in using the pre-installed Ubuntu like a non-Debian/Ubuntu developer would use it, but Dell has also provided instructions for Ubuntu 15.04, Debian 7.0 and Debian 8.0 advanced users among else. Even if not using the pre-installed Ubuntu, the benefit from buying an Ubuntu laptop is obviously smaller cost and on the other hand contributing to free software (by paying for the hardware enablement engineering done by or purchased by Dell).


The Black Box. (and white cat)

Opened box.

First time lid opened, no dust here yet!
First time boot up, transitioning from the boot logo to a first time Ubuntu video.
A small clip from the end of the welcoming video.
First time setup. Language, Dell EULA, connecting to WiFi, location, keyboard, user+password.
Creating recovery media. I opted not to do this as I had happened to read that it's highly recommended to install upgrades first, including to this tool.
Finalizing setup.
Ready to log in!
It's alive!
Not so recent 14.04 LTS image... lots of updates.

Problems in the First Batch

Unfortunately the first batch of XPS 13:s with Ubuntu are going to ship with some problems. They're easy to fix if you know how to, but it's sad that they're there to begin with in the factory image. There is no knowledge when a fixed batch will start shipping - July maybe?

First of all, installing software upgrades stops. You need to run the following command via Dash → Terminal once: sudo apt-get install -f (it suggests upgrading libc-dev-bin, libc6-dbg, libc6-dev and udev). After that you can continue running Software Updater as usual, maybe rebooting in between.

Secondly, the fixed touchpad driver is included but not enabled by default. You need to enable the only non-enabled ”Additional Driver” as seen in the picture below or instructed in Youtube.

Dialog enabling the touchpad driver.

Clarification: you can safely ignore the two paragraphs below, they're just for advanced users like me who want to play with upgraded driver stacks.

Optionally, since I'm interested in the latest graphics drivers especially in case of a brand new hardware like Intel Broadwell, I upgraded my Ubuntu to use the 14.04.2 Hardware Enablement stack (matches 14.10 hardware support): sudo apt install --install-recommends libgles2-mesa-lts-utopic libglapi-mesa-lts-utopic linux-generic-lts-utopic xserver-xorg-lts-utopic libgl1-mesa-dri-lts-utopic libegl1-mesa-drivers-lts-utopic libgl1-mesa-glx-lts-utopic:i386
Even though it's much better than a normal Ubuntu 14.10 would be since many of the Dell fixes continue to be in use, some functionality might become worse compared to the pre-installed stack. The only thing I have noticed though is the internal microphone not working anymore out-of-the-box, requiring a kernel patch as mentioned in Dell's notes. This is not a surprise since the real eventual upstream support involves switching from HDA to I2S and during 14.10 kernel work that was not nearly done. If you're excited about new drivers, I'd recommend waiting until August when the 15.04 based 14.04.3 stack is available (same package names, but 'vivid' instead of 'utopic'). [edit: I couldn't resist myself when I saw linux-generic-lts-vivid (3.19 kernel) is already in the archives. 14.04.2 + that gives me working microphone again!] [edit 08/2015: full 14.04.3 HWE stack now available, improves graphics performance and features among else, everything seems good: sudo apt install --install-recommends linux-generic-lts-vivid libgles2-mesa-lts-vivid libglapi-mesa-lts-vivid xserver-xorg-lts-vivid libgl1-mesa-dri-lts-vivid libegl1-mesa-lts-vivid libgl1-mesa-glx-lts-vivid:i386 libegl1-mesa-lts-vivid libwayland-egl1-mesa-lts-vivid mesa-vdpau-drivers-lts-vivid libgl1-mesa-dri-lts-vivid:i386 ]


Dell XPS 13 Developer Edition with Ubuntu 14.04 LTS is an extremely capable laptop + OS combination nearing perfection, but not quite there because of the software problems in the launch pre-install image. The laptop looks great, feels like a quality product should and is very compact for the screen size.

I've moved over all my work onto it and everything so far is working smoothly in my day-to-day tasks. I'm staying at Ubuntu 14.04 LTS and using my previous LXC configuration to run the latest Ubuntu and Debian development versions. I've also done some interesting changes already like LUKS In-Place Conversion, converting the pre-installed Ubuntu into whole disk encrypted one (not recommended for the faint hearted, GRUB reconfiguration is a bit of a pain).

I look happily forward to working a few productive years with this one!

by Timo Jyrinki ( at June 08, 2015 11:02 AM

May 09, 2015

Niklas Laxström

14 more languages “fully” translated this week

This week, MediaWiki’s priority messages have been fully translated in 14 more languages by about a dozen translators, after we checked our progress. Most users in those languages now see the interface of Wikimedia wikis entirely translated.

In two months since we updated the list of priority translations, languages 99+ % translated went from 17 to 60. No encouragement was even needed: those 60 languages are “organically” active, translators quickly rushed to use the new tool we gave them. Such regular and committed translators deserve a ton of gratitude!

However, we want to do better. We did something simple: tell MediaWiki users that they can make a difference, even if they don’t know. «With a couple hours’ work or less, you can make sure that nearly all visitors see the wiki interface fully translated.» The results we got in few hours speak for themselves:

Special:TranslationStats graph of daily registrations

This week’s peak of new translator daily registrations was ten times the usual

Special:TranslationStats of daily active translators

Many were eager to help: translation activity jumped immediately

Thanks especially to CERminator, David1010, EileenSanda, KartikMistry, Njardarlogar, Pymouss, Ranveig, Servien, StanProg, Sudo77(new), TomášPolonec and Чаховіч Уладзіслаў, who completed priority messages in their languages.

For the curious, the steps to solicit activity were:

There is a long tail of users who see talk page messages only after weeks or months, so for most of those 60 languages we hope to get more translations later. It will be harder to reach the other hundreds languages, for which there are only 300 active users in Wikimedia according to interface language preferences: about 100 incubating languages do not have a single known speaker on any wiki!

We will need a lot of creativity and word spreading, but the lesson is simple: show people the difference that their contribution can make for free knowledge; the response will be great. Also, do try to reach the long tail of users and languages: if you do it well, you can communicate effectively to a large audience of silent and seemingly unresponsive users on hundreds Wikimedia projects.

by Niklas Laxström at May 09, 2015 10:00 AM

March 09, 2015

Niklas Laxström

IWCLUL 3/3: conversations and ideas

In IWCLUL talks, Miikka Silfverberg’s mention of collecting words from Wikipedia resonated with my earlier experiences working with Wikipedia dumps, especially the difficulty of it. I talked with some people at the conference and everyone seemed to agree that processing Wikipedia dumps takes a lot of time, which they could spend for something else. I am considering to publish plain text Wikipedia dumps and word frequency lists. While working in the DigiSami project, I familiarized myself with the utilities as well as the Wikimedia Tool Labs, so relatively little effort would be needed. The research value would be low, but it would be worth it, if enough people find these dumps and save time. A recent update is that Parsoid is planning to provide plain text format, so this is likely to become even easier in the future. Still, there might be some work to do collect pages into one archive and decide which parts of page will stay and which will be removed: for example converting an infobox to collection of isolated words is not useful for use cases such as WikiTalk, and it can also easily skew word frequencies.

I talked with Sjur Moshagen about keyboards for less resourced languages. Nowadays they have keyboards for Android and iOS, in addition to keyboards for computers (which already existed). They have some impressing additional features, like automatically adding missing accents to typed words. That would be too complicated to implement in jquery.ime, a project used by Wikimedia that implements keyboards in a browser. At least the aforementioned example uses finite state transducer. Running finite state tools in the browser does not yet feel realistic, even though some solutions exist*. The alternative of making requests to a remote service would slow down typing, except perhaps with some very clever implementation, which would probably be fragile at best. I have still to investigate whether there is some middle ground to bring the basic keyboard implementations to jquery.ime.

*Such as jsfst. One issue is that the implementations and the transducers themselves can take lot of space, which means we will run into same issues as when distributing large web fonts at Wikipedia.

I spoke with Tommi Pirinen and Antti Kanner about implementing a dictionary application programming interface (API) for the Bank of Finnish Terminology in Arts and Sciences (BFT). That would allow direct use of BFT resources in translation tools like and Wikimedia’s Content Translation project. It would also help indirectly, by using a dump for extending word lists in the Apertium machine translation software.

I spoke briefly about language identification with Tommi Jauhiainen who had a poster presentation about the project “The Finno-Ugric languages and the internet”. I had implemented one language detector myself, using an existing library. Curiously enough, many other people met in Wikimedia circles have also made their own implementations. Mine had severe problems classifying languages which are very close to each other. Tommi gave me a link for another language detector, which I would like to test in the future to compare its performance with previous attempts. We also talked about something I call “continuous” language identification, where the detector would detect parts of running text which are in a different language. A normal language detector will be useful for my open source translation memory service project, called InTense. Continuous language identification could be used to post-process Wikipedia articles and tag foreign text so that correct fonts are applied, and possibly also in WikiTalk-like applications, to provide the text-to-speech (TTS) with a hint on how to pronounce those words.

Reasonator entry for Kimmo KoskenniemiReasonator is a software that generates visually pleasing summary pages in natural language and structured sections, based on structured data. More specifically, it uses Wikidata, which is the Wikimedia structured data project, developed by Wikimedia Germany. Reasonator works primarily for persons, though other types or subjects are being developed. Its localisation is limited, compared to the about three hundred languages of MediaWiki. Translating software which generates natural language sentences dynamically is very different from the usual software translation, which consists mostly of fixed strings with occasional placeholder which is replaced dynamically when showing text to an user.

It is not a new idea to use grammatical framework (GF), which is a language translation software based on interlingua, for Reasonator. In fact I had proposed this earlier in private discussions to Gerard Meijssen, but this conference renewed my interest in the idea, as I attended the GF workshop held by Aarne Ranta, Inari Listenmaa and Francis Tyers. GF seems to be a good fit here, as it allows limited context and limited vocabulary translation to many languages simultaneously; vice versa, Wikidata will contain information like gender of people, which can be fed to GF to get proper grammar in the generated translations. It would be very interesting to have a prototype of a Reasonator-like software using GF as the backend. The downside of GF is that (I assume) it is not easy for our regular translators to work with, so work is needed to make it easier and more accessible. The hypothesis is that with GF backend we would get a better language support (as in grammatically correct and flexible) with less effort on the long run. That would mean providing access to all the Wikidata topics even in smaller languages, without the effort of manually writing articles.

by Niklas Laxström at March 09, 2015 01:37 PM

March 04, 2015

Aapo Rantalainen

Newer adb for Ubuntu, with sideloading

Android debugging tool ADB has ‘new‘ feature called sideload, which is in use on Android devices, but not all versions of host toolset. Here comes instructions for compiling newest version from source.


Adb (Android Debug Bridge) is debugging tool to communicate with Android-device and host.


Some people follow instructions and then encounters mystic error:
adb “*cannot read ‘sideload’ *”


adb in your system is too old. E.g. you are using Ubuntu/Debian and your adb comes from package android-tools-adb.


Compile your own adb (doesn’t need full Android SDK).

#Needed tools
sudo apt-get install zlib1g-dev libssl-dev git make gcc

#Download source code (this is currently the newest branch, in future it might still work without issues)
git clone -b android-5.0.2_r1
cd core/adb

#Create Makefile
echo -e '
# standalone Makefile for adb
SRCS+= adb.c
SRCS+= fdevent.c
SRCS+= adb_client.c
SRCS+= commandline.c
SRCS+= console.c
SRCS+= file_sync_client.c
SRCS+= get_my_path_linux.c
SRCS+= services.c
SRCS+= sockets.c
SRCS+= transport.c
SRCS+= transport_local.c
SRCS+= transport_usb.c
SRCS+= usb_linux.c
SRCS+= usb_vendors.c
SRCS+= adb_auth_host.c

VPATH+= ../libcutils
SRCS+= socket_inaddr_any_server.c
SRCS+= socket_local_client.c
SRCS+= socket_local_server.c
SRCS+= socket_loopback_client.c
SRCS+= socket_loopback_server.c
SRCS+= socket_network_client.c
SRCS+= load_file.c

VPATH+= ../libzipfile
SRCS+= centraldir.c
SRCS+= zipfile.c

CPPFLAGS+= -I../include

LIBS= -lcrypto -lpthread -lrt -lz
CC= gcc
LD= gcc

OBJS= $(SRCS:.c=.o)

all: adb

adb: $(OBJS)
\t$(LD) -o $@ $(LDFLAGS) $(OBJS) $(LIBS)

\trm -rf $(OBJS) adb
' > standalone_Makefile

make -f standalone_Makefile

./adb sideload foobar

Adb can be tested without device connected, and with dummy filename. Error message should be then:

* cannot read 'foobar' *


Makefile starting point:

More to read

Adb sideload feature is added:

commit 447f061da19fe46bae35f1cdd93eeb16bc225463
Author: Doug Zongker
Date: Mon Jan 9 14:54:53 2012 -0800</code>

add "adb sideload" and sideload connection state

Recovery will soon support a minimal implementation of adbd which will
do nothing but accept downloads from the "adb sideload" command and
install them. This is the client side command (mostly resurrected out
of the old circa-2007 "adb recover" command) and the new connection

Change-Id: I4f67b63f1b3b38d28c285d1278d46782679762a2

But it is still not documented:

by Aapo Rantalainen at March 04, 2015 05:21 PM

February 23, 2015

Niklas Laxström

IWCLUL 2/3: morphology, OCR, a corpus vs. Wiktionary

More on IWCLUL: now on the sessions. The first session of the day was by the invited speaker Kimmo Koskenniemi. He is applying his two-level formalism in a new area, old literary Finnish (example of old literary Finnish). By using two-level rules for old written Finnish together with OMorFi, he is able to automatically convert old text to standard Finnish dictionary forms, which can be used, in the main example, as an input text to an search engine. He uses weighted transducers to rank the most likely equivalent modern day words. For example the contemporary spelling of wijsautta is viisautta, which is an inflected form of the noun viisaus (wisdom). He only takes the dictionary forms, because otherwise there are too many unrelated suggestions. This avoids the usual problems of too many unrelated morphological analyses: I had the same problen in my master’s thesis when I attempted using OMorFi to improve Wikimedia’s search system, which was still using Lucene at that time.

Jeremy Bradley gave presentation about an online Mari corpus. Their goal was to make a modern English-language textbook for Mari, for people who do not have access to native speakers. I was happy to see they used a free/copyleft Creative Commons license. I asked him whether they considered Wiktionary. He told me he had discussed with a person from Wiktionary who was against an import. I will be reaching my contacts and see whether an another attempt will succeed. The automatic transliteration between Latin, Cyrillic and IPA was nice, as I have been entertaining the idea of doing transliteration from Swedish to Finnish for WikiTalk, to make it able to function in Swedish as well by only using Finnish speech components. One point sticks with me: they had to add information about verb complements themselves, as they were not recorded in their sources. I can sympathize with them based on my own language learning experiences.

Stig-Arne Grönroos’ presentation on Low-resource active learning of North Sámi morphological segmentation did not contain any surprises for me after having been exposed to this topic previously. All efforts to support languages where we have to cope with limited resources are welcome and needed. Intermediate results are better than working with nothing while waiting for a full morphological analyser, for example. It is not completely obvious to me how this tool can be used in other language technology applications, so I will be happy to see an example.

Miikka Silfverberg presented about OCR, using OMorFi: can morphological analyzers improve the quality of optical character recognition? To summarize heavily, OCR performed worse when OMorFi was used, compared to just taking the top N most common words from Wikipedia. I understood this is not exactly the same problem of large number of readings generated by morphological analyser, rather something different but related.

by Niklas Laxström at February 23, 2015 12:25 PM

February 12, 2015


Uusia Ubuntu-tuotteita: Dell-tehokannettava ja Bq-puhelin

Uusia Ubuntu-tuotteita on nyt saatavilla myös Suomessa.

Dell Precision M3800 Developer Edition

M3800Markkinoiden ohuimman ja kevyimmän 15 tuuman tehokannettavan, Precision M3800 -työaseman uusia ominaisuuksia ovat muun muassa 4K Ultra HD  -kosketusnäyttö, Thunderbolt 2 -teknologia ja Ubuntu-pohjainen versio ohjelmistokehittäjille.

Thunderbolt 2 -portti mahdollistaa 20 Gbps:n datasiirtonopeuden ja tukee korkean resoluution ja suorituskyvyn näyttöjä ja muita laitteita. Lisäksi Dell on lisännyt M3800-tehokannettavaan tallennusvaihtoehtoja ja nostanut saatavilla olevan sisäisen levyaseman kokoa 2 teratavuun. Kannettavan paksuus on noin 18 mm ja painoa on noin 1,88 kg. Kannettava sisältää Intel Core i7 -neliydinsuorittimen, NVIDIA Quadro K1100M -näytönohjaimen ja keskusmuistia 16 Gt.

Precision M3800 -kannettava on saatavilla Ubuntu-, Windows 7 -ja Windows 8.1 -käyttöjärjestelmillä. Dell tarjoaa ensimmäisen kerran Precision M3800 -kannettavasta Ubuntu-pohjaisen kehittäjäversion. Ubuntu-kehittäjäversio on tilattavissa suoraan Dell Suomen puhelinpalvelusta (yritykset) tai tilaamalla Dell-jälleenmyyjiltä (myös kuluttajat, toimitukset alkavat maaliskuussa) kautta maan.

Seuraavaksi odotellaan tietoja Dell XPS 13 Developer Editionin uusimmasta versiosta, jonka ei pitäisi tulla kovin paljon M3800:aa perässä. Odotettavissa on markkinoiden paras Ultrabook virallisella Ubuntu-tuella.

Maailman ensimmäinen Ubuntu-puhelin: Bq Aquaris E4.5 Ubuntu Edition

bqBq Aquaris E4.5 Ubuntu Edition on maailman ensimmäinen Ubuntu-puhelin, ja saatavilla nyt rajoitetusti Euroopassa. Ubuntu-puhelimissa käytetään Ubuntun uutta Unity 8 -käyttöliittymää ja sen erityisesti näkymiin (scopes) pohjautuvaa käyttötapaa. Perinteisistä sovelluksista mukana on muun muassa Telegram, HERE-kartat, Cut the Rope sekä Facebook- ja Twitter-websovellukset. Työpöytä-Ubuntun tapaan Ubuntu-puhelimetkin ovat markkinoiden vahvimmin avointa lähdekoodia käyttäviä massamarkkinatuotteita, joten myös kehittäjät pääsevät mukaan kaikilla tasoilla sovelluskehityksen lisäksi.

Myynti on alkanut eilen tapahtuneella pikamyyntitapahtumalla (Flash Sale). Myyntiin liittyi aluksi suuria teknisiä ongelmia, eikä Suomi ollut aluksi maissa joihin toimitetaan. Iltapäiväksi luvattiin uusi erä – tällä kertaa Suomi oli jo mukana, ja tekniset ongelmat olivat poissa, mutta myyntierä loppui jo 4 minuutissa. Suurin osa kiinnostuneista jäi ilman, mikä aiheutti harmitusta ympäri nettiä. Myyntitapahtuman ei kaiken kaikkiaan voi sanoa menneen aivan putkeen. Seuraava myyntierä lienee ensi viikolla, mistä tiedotetaan Bq:n ja Ubuntun Twitter-tileillä. Bq ilmoitti jälkikäteen saaneensa yli 12 000 tilausta minuutissa.

Bq:n saatavuudesta muuten kuin pikamyynnein ei ole vielä tarkkaa tietoa. Operaattorikumppaneiksi on tässä vaiheessa ilmoitettu 3 Sweden, (Espanja), giffgaff (Iso-Britannia) ja Portugal Telecom, ja näistäkään ei tiedetä juuri muuta kuin nimet.

Keskustelua Bq:sta yms. muun muassa Ubuntu Suomen keskustelualueiden uudella mobiililaitteet-alueella.

Puhelinpuolella seuraavaksi odotellaan Meizu-valmistajaa, jonka huhutaan esittelevän Ubuntu-puhelintaan MWC-messuilla maaliskuun alussa.

by Timo Jyrinki at February 12, 2015 01:27 PM

March 19, 2014


Qt 5.2.1 in Ubuntu

Ubuntu running Qt 5.2.1
Ubuntu running Qt 5.2.1
Qt 5.2.1 landed in Ubuntu 14.04 LTS last Friday, hooray! Making it into a drop-in replacement for Qt 5.0.2 was not trivial. Because of the qreal change, it was decided to rebuild everything against the new Qt, so it was an all at once approach involving roughly 130 source packages while the parts were moving constantly. The landing last week meant pushing to archives around three thousand binary packages - counting all six architectures - with the total size of closer to 10 gigabytes.

The new Qt brings performance and features to base future work on, and is a solid base for the future of Ubuntu. You may be interested in the release notes for Qt 5.2.0 and 5.2.1. The Ubuntu SDK got updated to Qt Creator 3.0.1 + new Ubuntu plugin at the same time, although updates for the older Ubuntu releases is a work in progress by the SDK Team.

How We Got Here

Throughout the last few months before the last joint push, I filed tens of tagged bugs. For most of that time I was interested only in build and unit test results, since even tracking those was quite a task. I offered simple fixes here and there myself, if I found out a fix.

I created automated Launchpad recipe builds for over 80 packages that rely on Qt 5 in Ubuntu. Meanwhile I also kept on updating the Qt packaging for its 20+ source packages and tried to stay on top of Debian's and upstream's changes.

Parallel to this work, some like the Unity 8 and UI Toolkit developers started experimenting with my Qt 5.2 PPA. It turned out the rewritten QML engine in Qt 5.2 - V4 - was not entirely stable when 5.2.0 was released, so they worked together with upstream on fixes. It was only after 5.2.1 release that it could be said that V4 worked well enough for Unity 8. Known issues like these slowed down the start of full-blown testing.

Then everything built, unit tests passed, most integration tests passed and things seemed mostly to work. We had automated autopilot integration testing runs. The apps team tested through all of the app store to find out whether some needed fixes - most were fine without changes. On top of the found autopilot test failures and other app issues, manual testing found a few more bugs

Some critical pieces of software
like Sudoku needed small fixing
Finally last Thursday it was decided to push Qt in, with a belief that the remaining issues had fixes in branches or not blockers. It turned out the real deployment of Qt revealed a couple of more problems, and some new issues were raised to be blockers, and not all of the believed fixes were really fixing the bugs. So it was not a complete success. Considering the complexity of the landing, it was an adequate accomplishment however.

Specific Issues

Throughout this exercise I bumped into more obstacles that I can remember, but those included:
  • Not all of the packages had seen updates for months or for example since last summer, and since I needed to rebuild everything I found out various problems that were not related to Qt 5.2
  • Unrelated changes during 14.04 development broke packages - like one wouldn't immediately think a gtkdoc update would break a package using Qt
  • Syncing packaging with Debian is GOOD, and the fixes from Debian were likewise excellent and needed, but some changes there had effects on our wide-spread Qt 5 usage, like the mkspecs directory move
  • xvfb used to run unit tests needed parameters updated in most packages because of OpenGL changes in Qt
  • arm64 and ppc64el were late to be added to the landing PPA. Fixing those archs up was quite a last minute effort and needed to continue after landing by the porters. On the plus side, with Qt 5.2's V4 working on those archs unlike Qt 5.0's V8 based Qt Declarative, a majority of Unity 8 dependencies are now already available for 64-bit ARM and PowerPC!
  • While Qt was being prepared the 100 other packages kept on changing, and I needed to keep on top of all of it, especially during the final landing phase that lasted for two weeks. During it, there was no total control of "locking" packages into Qt 5.2 transition, so for the 20+ manual uploads I simply needed to keep track of whether something changed in the distribution and accommodate.
One issue related to the last one was that some things needed were in progress at the time. There was no support for automated AP test running using a PPA. There was also no support on building images. If migration to Ubuntu Touch landing process (CI Train, a middle point on the way to CI Airlines) had been completed for all the packages earlier, handling the locking would have been clearer, and the "trunk passes all integration tests too" would have prevented "trunk seemingly got broken" situations I ended up since I was using bzr trunks everywhere.

Qt 5.3?

We are near to having a promoted Ubuntu image for the mobile users using Qt 5.2, if no new issues pop up. Ubuntu 14.04 LTS will be released in a month to the joy of desktop and mobile users alike.

It was discussed during the vUDS that Qt 5.3.x would be likely Qt version for the next cycle, to be on the more conservative side this time. It's not entirely wrong to say we should have migrated to Qt 5.1 in the beginning of this cycle and only consider 5.2. With 5.0 in use with known issues, we almost had to switch to 5.2.

Kubuntu will join the Qt 5 users next cycle, so it's no longer only Ubuntu deciding the version of Qt. Hopefully there can be a joint agreement, but in the worst case Ubuntu will need a separate Qt version packaged.

by Timo Jyrinki ( at March 19, 2014 07:42 AM

November 27, 2013


Jolla launch party

And then for something completely different, I've my hands on Jolla now, and it's beautiful!

A quick dmesg of course is among first things to do...
[    0.000000] Booting Linux on physical CPU 0
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Linux version (abuild@es-17-21) (gcc version 4.6.4 20130412 (Mer 4.6.4-1) (Linaro GCC 4.6-2013.05) ) #1 SMP PREEMPT Mon Nov 18 03:00:49 UTC 2013
[ 0.000000] CPU: ARMv7 Processor [511f04d4] revision 4 (ARMv7), cr=10c5387d
[ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, PIPT instruction cache
[ 0.000000] Machine: QCT MSM8930 CDP
... click for the complete file ...
And what it has eaten: Qt 5.1!
... click for the complete file ...
It was a very nice launch party, thanks to everyone involved.

Update: a few more at my Google+ Jolla launch party gallery

by Timo Jyrinki ( at November 27, 2013 08:10 PM

Workaround for setting Full RGB when Intel driver's Automatic setting does not work


I upgraded from Linux 3.8 to 3.11 among with newer Mesa, X.Org and Intel driver recently and I found a small workaround was needed because of upstream changes.

The upstream change was the Add "Automatic" mode for "Broadcast RGB" property, and defaulting to the Automatic. This is a sensible default, since many (most?) TVs default to the more limited 16-235, and continuing to default to Full from the driver side would mean wrong colors on the TV. I've set my screen to support the full 0-255 range available to not cut the amount of available shades of colors down.

Unfortunately it seems the Automatic setting does not work for my HDMI input, ie blacks become grey since the driver still outputs the more limited range. Maybe there could be something to improve on the driver side, but I'd guess it's more about my 2008 Sony TV actually having a mode that the standard suggests limited range for. I remember the TV did default to limited range, so maybe the EDID data from TV does not change when setting the RGB range to Full.

I hope the Automatic setting works to offer full range on newer screens and the modes they have, but that's probably up to the manufacturers and standards.

Below is an illustration of the correct setting on my Haswell CPU. When the Broadcast RGB is left to its default Automatic setting, the above image is displayed. When set to Full, the image below with deeper blacks is seen instead. I used manual settings on my camera so it's the same exposure.


For me the workaround has evolved to the following so far. Create a /etc/X11/Xsession.d/95fullrgb file:
if [ "$(/usr/bin/xrandr -q --prop | grep 'Broadcast RGB: Full' | wc -l)" = "0" ] ; then
/usr/bin/xrandr --output HDMI3 --set "Broadcast RGB" "Full"
And since I'm using lightdm, adding the following to /etc/lightdm/lightdm.conf means the flicker only happens once during bootup:


Important: when using the LightDM setting, enable executable bits (chmod +x) to /etc/X11/Xsession.d/95fullrgb for it to work. Obviously also check your output, for me it was HDMI3.

If there is no situation where it'd set back to "Limited 16:235" setting on its own, the display manager script should be enough and having it in /etc/X11/Xsession.d is redundant and slows login time down. I think for me it maybe went from 2 seconds to 3 seconds since executing xrandr query is not cheap.


Note that unrelated to Full range usage, the Limited range at the moment behaves incorrectly on Haswell until the patch in bug #71769 is accepted. That means, the blacks are grey in Limited mode even if the screen is also set to Limited.

I'd prefer there would be a kernel parameter for the Broadcast RGB setting, although my Haswell machine does boot so fast I don't get to see too many seconds of wrong colors...

by Timo Jyrinki ( at November 27, 2013 08:50 AM

August 15, 2013

Aapo Rantalainen

Tikkupeli ja matematiikkaa.

Kumpi voittaa 7531-tikkupelin? Miksi?
Säännöt kahdelle pelaajalle.
Alkuasetelma: Tikut ovat riveittäin, ensimmäisellä rivillä 7 tikkua, seuraavalla 5, sitten 3 ja viimeisellä 1.

Vuorollaan pelaaja valitsee yhden rivin ja poistaa siltä haluamansa määrän tikkuja. Kuitenkin ainakin yhden. Halutessaan vaikka kaikki (eikä tietenkään enempää kuin mitä rivillä on).

Häviäjä on se pelaaja joka joutuu ottamaan pelilaudalta viimeisen tikun.

Saanko aloitusvuoron vai haluatko sinä aloittaa pelin? Todista.


Pysähdy tähän miettimään.

Vastaus alkaa:

Otetaan käyttöön merkintätapa, jossa jokainen pelitilanne kuvataan neljällä numeromerkillä. Koska tikkurivien järjestyksellä ei ole merkitystä, sovitaan että numeromerkit ovat aina suurimmasta pienimpään. Eli tila 2100 = 2010 = 2001 = 1200 = 1020 = 0120 = 0210 = 0201 = 0021. Merkitään näitä kaikkia tiloja 2100:lla
Nyt pelin häviämisehto on:

Määritelmä I
Pelaaja häviää jos hänelle tulee tila 1000.
(Reunahuomautus: Jos jättäisimme nollat kokonaan merkitsemättä, tikkurivien määrä aloituksessa voisi olla jokin muukin kuin neljä.)

Tässä seuraa matemaattinen todistus. ‘Lemma’ on siis ‘apulause’. Koodarit voi ajatella sen funktiokutsuna (älä sotke matematiikan funktioihin). Määrittelen aina ensin lemman, ennen kuin käytän sitä, jotta ei varmasti synny kehäpäätelmiä.

Väitän että aloittaja häviää aina (tämä selviää todistuksen lopusta vasta).
Väite: Kaikille (eli ∀) aloittajan siirroille löytyy (eli ∃) vastustajalta vastine, jolla aloittaja häviää.

Lemma 1110: vuorossa oleva pelaaja häviää, jos hänelle tulee tila 1110.
Todistus: Tekee pelaaja minkä tahansa siirron, niin seuraava tila on 1100.
Josta vastustaja palauttaa 1000. Määritelmän mukaan häviää.

Lemma 2200: häviää
Todistus: (Pelaaja voi ottaa jommalta kummalta riviltä joko yhden tai kaksi tikkua.)
Voi päätyä tilaan
a) 2100
Josta vastustaja palauttaa 1000. Määritelmän mukaan häviää.
b) 2000
Josta vastustaja palauttaa 1000. Määritelmän mukaan häviää.

Lemma 2211: häviää
Todistus: Voi päätyä tilaan
a) 2210
Josta vastustaja palauttaa 2200. Lemman 2200 mukaan häviää.
b) 2111
Josta vastustaja palauttaa 1110. Lemman 1110 mukaan häviää.
c) 2110
Josta vastustaja palauttaa 1110. Lemman 1110 mukaan häviää.

Lemma 3210: häviää
Todistus: Voi päätyä tilaan
a) 3200
Josta vastustaja palauttaa 2200. Lemman 2200 mukaan häviää.
b) 3110
Josta vastustaja palauttaa 1110. Lemman 1110 mukaan häviää.
c) 2210
Josta vastustaja palauttaa 2200. Lemman 2200 mukaan häviää.
d) 2110
Josta vastustaja palauttaa 1110. Lemman 1110 mukaan häviää.
e) 2100
Josta vastustaja palauttaa 1000. Määritelmän mukaan häviää.

Lemma 3300: häviää
Todistus: Voi päätyä tilaan
a) 3200
Josta vastustaja palauttaa 2200. Lemman 2200 mukaan häviää.
b) 3100
Josta vastustaja palauttaa 1000. Määritelmän mukaan häviää.
c) 3000
Josta vastustaja palauttaa 1000. Määritelmän mukaan häviää.

Lemma 3311: häviää
Todistus: Voi päätyä tilaan
a) 3310
Josta vastustaja palauttaa 3300. Lemman 3300 mukaan häviää.
b) 3211
Josta vastustaja palauttaa 2211. Lemman 2211 mukaan häviää.
c) 3111
Josta vastustaja palauttaa 1110. Lemman 1110 mukaan häviää.
d) 3110
Josta vastustaja palauttaa 1110. Lemman 1110 mukaan häviää.

Lemma 4400: häviää
Todistus: Voi päätyä tilaan
a) 4300
Josta vastustaja palauttaa 3300. Lemman 3300 mukaan häviää.
b) 4200
Josta vastustaja palauttaa 2200. Lemman 2200 mukaan häviää.
c) 4100
Josta vastustaja palauttaa 1000. Määritelmän mukaan häviää.
d) 4000
Josta vastustaja palauttaa 1000. Määritelmän mukaan häviää.

Lemma 4411: häviää
Todistus: Voi päätyä tilaan
a) 4410
Josta vastustaja palauttaa 4400. Lemman 4400 mukaan häviää.
b) 4311
Josta vastustaja palauttaa 3311. Lemman 3311 mukaan häviää.
c) 4211
Josta vastustaja palauttaa 2211. Lemman 2211 mukaan häviää.
d) 4111
Josta vastustaja palauttaa 1110. Lemman 1110 mukaan häviää.
e) 4110
Josta vastustaja palauttaa 1110. Lemman 1110 mukaan häviää.

Lemma 5500: häviää
Todistus: Voi päätyä tilaan
a) 5400
Josta vastustaja palauttaa 4400. Lemman 4400 mukaan häviää.
b) 5300
Josta vastustaja palauttaa 3300. Lemman 3300 mukaan häviää.
c) 5200
Josta vastustaja palauttaa 2200. Lemman 2200 mukaan häviää.
d) 5100
Josta vastustaja palauttaa 1000. Määritelmän mukaan häviää.
e) 5000
Josta vastustaja palauttaa 1000. Määritelmän mukaan häviää.

Lemma 5410: häviää
Todistus: Voi päätyä tilaan
a) 5400
Josta vastustaja palauttaa 5500. Lemman 5500 mukaan häviää.
b) 5310
Josta vastustaja palauttaa 3210. Lemman 3210 mukaan häviää.
c) 5210
Josta vastustaja palauttaa 3210. Lemman 3210 mukaan häviää.
d) 5110
Josta vastustaja palauttaa 1110. Lemman 1110 mukaan häviää.
e) 5100
Josta vastustaja palauttaa 1000. Määritelmän mukaan häviää.
f) 4410
Josta vastustaja palauttaa 4400. Lemman 4400 mukaan häviää.
g) 4310
Josta vastustaja palauttaa 3210. Lemman 3210 mukaan häviää.
h) 4210
Josta vastustaja palauttaa 3210. Lemman 3210 mukaan häviää.
i) 4110
Josta vastustaja palauttaa 1110. Lemman 1110 mukaan häviää.
j) 4100
Josta vastustaja palauttaa 1000. Määritelmän mukaan häviää.

Lemma 5511: häviää
Todistus: Voi päätyä tilaan
a) 5510
Josta vastustaja palauttaa 5500. Lemman 5500 mukaan häviää.
b) 5411
Josta vastustaja palauttaa 4411. Lemman 4411 mukaan häviää.
c) 5311
Josta vastustaja palauttaa 3311. Lemman 3311 mukaan häviää.
d) 5211
Josta vastustaja palauttaa 2211. Lemman 2211 mukaan häviää.
e) 5111
Josta vastustaja palauttaa 1110. Lemman 1110 mukaan häviää.
f) 5110
Josta vastustaja palauttaa 1110. Lemman 1110 mukaan häviää.

Lemma 6420: häviää
Todistus: Voi päätyä tilaan
a) 6410
Josta vastustaja palauttaa 5410. Lemman 5410 mukaan häviää.
b) 6400
Josta vastustaja palauttaa 4400. Lemman 4400 mukaan häviää.
c) 6320
Josta vastustaja palauttaa 3210. Lemman 3210 mukaan häviää.
d) 6220
Josta vastustaja palauttaa 2200. Lemman 2200 mukaan häviää.
e) 6210
Josta vastustaja palauttaa 3210. Lemman 3210 mukaan häviää.
f) 6200
Josta vastustaja palauttaa 2200. Lemman 2200 mukaan häviää.
g) 5420
Josta vastustaja palauttaa 5410. Lemman 5410 mukaan häviää.
h) 4420
Josta vastustaja palauttaa 4400. Lemman 4400 mukaan häviää.
i) 4320
Josta vastustaja palauttaa 3210. Lemman 3210 mukaan häviää.
j) 4220
Josta vastustaja palauttaa 2200. Lemman 2200 mukaan häviää.
k) 4210
Josta vastustaja palauttaa 3210. Lemman 3210 mukaan häviää.
l) 4200
Josta vastustaja palauttaa 2200. Lemman 2200 mukaan häviää.

Lemma 6431: häviää
Todistus: Voi päätyä tilaan
a) 6430
Josta vastustaja palauttaa 6420. Lemman 6420 mukaan häviää.
b) 6421
Josta vastustaja palauttaa 6420. Lemman 6420 mukaan häviää.
c) 6411
Josta vastustaja palauttaa 4411. Lemman 4411 mukaan häviää.
d) 6410
Josta vastustaja palauttaa 5410. Lemman 5410 mukaan häviää.
e) 6331
Josta vastustaja palauttaa 3311. Lemman 3311 mukaan häviää.
f) 6321
Josta vastustaja palauttaa 3210. Lemman 3210 mukaan häviää.
g) 6311
Josta vastustaja palauttaa 3311. Lemman 3311 mukaan häviää.
h) 6310
Josta vastustaja palauttaa 3210. Lemman 3210 mukaan häviää.
i) 5431
Josta vastustaja palauttaa 5410. Lemman 5410 mukaan häviää.
j) 4431
Josta vastustaja palauttaa 4411. Lemman 4411 mukaan häviää.
k) 4331
Josta vastustaja palauttaa 3311. Lemman 3311 mukaan häviää.
l) 4321
Josta vastustaja palauttaa 3210. Lemman 3210 mukaan häviää.
m) 4311
Josta vastustaja palauttaa 3311. Lemman 3311 mukaan häviää.
n) 4310
Josta vastustaja palauttaa 3210. Lemman 3210 mukaan häviää.

Lemma 6521: häviää
Todistus: Voi päätyä tilaan
a) 6520
Josta vastustaja palauttaa 6420. Lemman 6420 mukaan häviää.
b) 6511
Josta vastustaja palauttaa 5511. Lemman 5511 mukaan häviää.
c) 6510
Josta vastustaja palauttaa 5410. Lemman 5410 mukaan häviää.
d) 6421
Josta vastustaja palauttaa 6420. Lemman 6420 mukaan häviää.
e) 6321
Josta vastustaja palauttaa 3210. Lemman 3210 mukaan häviää.
f) 6221
Josta vastustaja palauttaa 2211. Lemman 2211 mukaan häviää.
g) 6211
Josta vastustaja palauttaa 2211. Lemman 2211 mukaan häviää.
h) 6210
Josta vastustaja palauttaa 3210. Lemman 3210 mukaan häviää.
i) 5521
Josta vastustaja palauttaa 5511. Lemman 5511 mukaan häviää.
j) 5421
Josta vastustaja palauttaa 5410. Lemman 5410 mukaan häviää.
k) 5321
Josta vastustaja palauttaa 3210. Lemman 3210 mukaan häviää.
l) 5221
Josta vastustaja palauttaa 2211. Lemman 2211 mukaan häviää.
m) 5211
Josta vastustaja palauttaa 2211. Lemman 2211 mukaan häviää.
n) 5210
Josta vastustaja palauttaa 3210. Lemman 3210 mukaan häviää.

Lemma 6530: häviää
Todistus: Voi päätyä tilaan
a) 6520
Josta vastustaja palauttaa 6420. Lemman 6420 mukaan häviää.
b) 6510
Josta vastustaja palauttaa 5410. Lemman 5410 mukaan häviää.
c) 6500
Josta vastustaja palauttaa 5500. Lemman 5500 mukaan häviää.
d) 6430
Josta vastustaja palauttaa 6420. Lemman 6420 mukaan häviää.
e) 6330
Josta vastustaja palauttaa 3300. Lemman 3300 mukaan häviää.
f) 6320
Josta vastustaja palauttaa 3210. Lemman 3210 mukaan häviää.
g) 6310
Josta vastustaja palauttaa 3210. Lemman 3210 mukaan häviää.
h) 6300
Josta vastustaja palauttaa 3300. Lemman 3300 mukaan häviää.
i) 5530
Josta vastustaja palauttaa 5500. Lemman 5500 mukaan häviää.
j) 5430
Josta vastustaja palauttaa 5410. Lemman 5410 mukaan häviää.
k) 5330
Josta vastustaja palauttaa 3300. Lemman 3300 mukaan häviää.
l) 5320
Josta vastustaja palauttaa 3210. Lemman 3210 mukaan häviää.
m) 5310
Josta vastustaja palauttaa 3210. Lemman 3210 mukaan häviää.
n) 5300
Josta vastustaja palauttaa 3300. Lemman 3300 mukaan häviää.

VÄITE: Tilanteesta 7531 häviää.
Todistus: Voi päätyä tilaan
a) 7530
Josta vastustaja palauttaa 6530. Lemman 6530 mukaan häviää.
b) 7521
Josta vastustaja palauttaa 6521. Lemman 6521 mukaan häviää.
c) 7511
Josta vastustaja palauttaa 5511. Lemman 5511 mukaan häviää.
d) 7510
Josta vastustaja palauttaa 5410. Lemman 5410 mukaan häviää.
e) 7431
Josta vastustaja palauttaa 6431. Lemman 6431 mukaan häviää.
f) 7331
Josta vastustaja palauttaa 3311. Lemman 3311 mukaan häviää.
g) 7321
Josta vastustaja palauttaa 3210. Lemman 3210 mukaan häviää.
h) 7311
Josta vastustaja palauttaa 3311. Lemman 3311 mukaan häviää.
i) 7301
Josta vastustaja palauttaa 3210. Lemman 3210 mukaan häviää.
j) 6531
Josta vastustaja palauttaa 6431. Lemman 6431 mukaan häviää.
k) 5531
Josta vastustaja palauttaa 5511. Lemman 5511 mukaan häviää.
l) 5431
Josta vastustaja palauttaa 5410. Lemman 5410 mukaan häviää.
m) 5331
Josta vastustaja palauttaa 5511. Lemman 5511 mukaan häviää.
n) 5321
Josta vastustaja palauttaa 3210. Lemman 3210 mukaan häviää.
o) 5311
Josta vastustaja palauttaa 3311. Lemman 3311 mukaan häviää.
p) 5310
Josta vastustaja palauttaa 3210. Lemman 3210 mukaan häviää.

by Aapo Rantalainen at August 15, 2013 08:30 PM

March 30, 2013

Jouni Roivas


Usually it's easy to get things working with Qt (, but recently I encoutered an issue when trying to implement simple component derived from QGraphicsWidget. My initial idea was to use QGraphicsItem, so I made this little class:

class TestItem : public QGraphicsItem
TestItem(QGraphicsItem *parent=0) : QGraphicsItem(parent) {}
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
virtual QRectF boundingRect () const;

virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);

void TestItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
qDebug() << __PRETTY_FUNCTION__ << "press";

void TestItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
qDebug() << __PRETTY_FUNCTION__ << "release";

void TestItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
painter->fillRect(boundingRect(), QColor(255,0,0,100));

QRectF TestItem::boundingRect () const
return QRectF(-100, -40, 100, 40);
Everything was working like expected, but in order to use a QGraphicsLayout, I wanted to derive that class from QGraphicsWidget. The naive way was to make minimal changes:

class TestWid : public QGraphicsWidget
TestWid(QGraphicsItem *parent=0) : QGraphicsWidget(parent) { }
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
virtual QRectF boundingRect () const;

virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);

void TestWid::mousePressEvent(QGraphicsSceneMouseEvent *event)
qDebug() << __PRETTY_FUNCTION__ << "press";

void TestWid::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
qDebug() << __PRETTY_FUNCTION__ << "release";

void TestWid::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
painter->fillRect(boundingRect(), QColor(0,0,255,100));

QRectF TestWid::boundingRect () const
return QRectF(-100, -40, 100, 40);

Pretty straightforward, isn't it? It showed and painted things like expected, but I didn't get any mouse events. Wait what?

I spent hours just trying out things and googling this problem. I knew I had this very same issue earlier but didn't remember how I solved it. Until I figured out a very crucial thing, in case of QGraphicsWidget you must NOT implement boundingRect(). Instead use setGeometry for the object.

So the needed changes was to remote the boundingRect() method, and to call setGeometry in TestWid constructor:

setGeometry(QRectF(-100, -40, 100, 40));

After these very tiny little changes I finally got everthing working. That all thing made me really frustrated. Solving this issue didn't cause good feeling, I was just feeling stupid. Sometimes programming is a great waste of time.

by Jouni Roivas ( at March 30, 2013 01:57 PM

August 31, 2012

Jouni Roivas

Adventures in Ubuntu land with Ivy Bridge

Recently I got a Intel Ivy Bridge based laptop. Generally I'm quite satisfied with it. Of course installed latest Ubuntu on it. First problem was EFI boot and BIOS had no other options. Best way to work around it was to use EFI aware grub2. I wanted to keep the preinstalled Windows 7 there for couple of things, so needed dual boot.

After digging around this German links was most relevant and helpful:

In the end all I needed to do was to install Grub2 to EFI boot parition (/dev/sda1 on my case) and create the grub.efi binary under that. Then just copy /boot/grub/grub.cfg under it as well. On BIOS set up new boot label to boot \EFI\grub\grub.efi

After using the system couple of days found out random crashes. The system totally hanged. Finally traced the problem to HD4000 graphics driver:

Needed to update Kernel. But which one? After multiple tries, I took the "latest" and "shiniest" one: With that kernel I got almost all the functionality and stability I needed.

However one BIG problem: headphones. I got sound normally from the speakers but after plugging in the headphones I got nothing. This problem seems to be on almost all the kernels I tried. Then I somehow figured out a important thing related to this. When I boot with headphone plugged in I got no sound from them. When I boot WITHOUT headphones plugged then they work just fine. Of course I debugged this problem all the time with the headphones plugged in and newer noticed this could be some weird detection problem. Since I kind of found solution for this I didn't bother to google it down. And of course Canonical does not provide support for unsupported kernels. If I remember correctly with the original Ubuntu 12.04 kernel this worked, but the HD4000 problem is on my scale bigger one than remember to boot without plugging anything to the 3.5" jack....

Of course my hopes are on 12.10 and don't want to dig it deeper, just wanted to inform you about this one.

by Jouni Roivas ( at August 31, 2012 07:57 PM

July 04, 2012

Ville-Pekka Vainio

SSD TRIM/discard on Fedora 17 with encypted partitions

I have not blogged for a while, now that I am on summer holiday and got a new laptop I finally have something to blog about. I got a Thinkpad T430 and installed a Samsung SSD 830 myself. The 830 is not actually the best choice for a Linux user because you can only download firmware updates with a Windows tool. The tool does let you make a bootable FreeDOS USB disk with which you can apply the update, so you can use a Windows system to download the update and apply it just fine on a Linux system. The reason I got this SSD is that it is 7 mm in height and fits into the T430 without removing any spacers.

I installed Fedora 17 on the laptop and selected drive encryption in the Anaconda installer. I used ext4 and did not use LVM, I do not think it would be of much use on a laptop. After the installation I discovered that Fedora 17 does not enable SSD TRIM/discard automatically. That is probably a good default, apparently all SSDs do not support it. When you have ext4 partitions encrypted with LUKS as Anaconda does it, you need to change two files and regenerate your initramfs to enable TRIM.

First, edit your /etc/fstab and add discard to each ext4 mount. Here is an example of my root mount:
/dev/mapper/luks-secret-id-here / ext4 defaults,discard 1 1

Second, edit your /etc/crypttab and add allow-discards to each line to allow the dmcrypt layer to pass TRIM requests to the disk. Here is an example:
luks-secret-id-here UUID=uuid-here none allow-discards

You need at least dracut-018-78.git20120622.fc17 for this to work, which you should already have on an up-to-date Fedora 17.

Third, regenerate your initramfs by doing dracut -f. You may want to take a backup of the old initramfs file in /boot but then again, real hackers do not make backups ;) .

Fourth, reboot and check with cryptsetup status luks-secret-id-here and mount that your file systems actually use discard now.

Please note that apparently enabling TRIM on encrypted file systems may reveal unencrypted data.

by Ville-Pekka Vainio at July 04, 2012 06:14 PM

April 29, 2012

Miia Ranta

Viglen MPC-L from Xubuntu 10.04 LTS to Debian stable

With Ubuntu not supplying a kernel suitable for the CPU (a Geode GX2 by National Semiconductors, a 486 buzzing at 399MHz clock rate) of my Viglen MPC-L (the one Duncan documented the installation of Xubuntu in 2010), it was time to look for other alternatives. I wasn’t too keen on the idea of using some random repository to get the suitable kernel for newer version of Ubuntu, so Debian was the next best thing that came to mind.

Friday night, right before heading out to pub with friends, I sat on the couch, armed with a laptop, USB keyboard, RGB cable and a USB memory stick. Trial and error reminded me to

  1. use bittorrent to download the image since our flaky Belkin-powered Wifi cuts off the connection every few minutes and thus corrupts direct downloads, and
  2. do the boot script magic of pnpbios=off noapic acpi=off like with our earlier Xubuntu installation.

In contrast to the experience of installing Xubuntu on the Viglen MPC-L, the Debian installation was easy from here on. The installer seemed to not only detect the needed kernel and install the correct one (Linux wizzle 2.6.32-5-486 #1 Mon Mar 26 04:36:28 UTC 2012 i586 GNU/Linux) but, judging from the success of the first reboot after the installation had finished and a quick look at /boot/grub/grub.cfg, had also set the right boot options automatically. So the basic setup was a *lot* easier than it was with Xubuntu!

Some things that I’ve gotten used to being automatically installed with Ubuntu weren’t pre-installed with Debian and so I had to install them for my usage. Tasksel installed ssh server, but rsync, lshw and ntfs-3g needed to be installed as well which I had gotten used to having in Ubuntu, but installing them wasn’t too much of a chore. As I use my Viglen MPC-L as my main irssi shell nowadays, I had to install of course irssi, but some other stuff needed by it and my other usage patterns… so… after installing apt-file pastebinit zsh fail2ban for my pet peeves, and tmux irssi irssi-scripts libcrypt-blowfish-perl libcrypt-dh-perl libcrypt-openssl-bignum-perl libdbi-perl sqlite3 libdbd-sqlite3-perl I finally have approximately the system I needed.

All in all, the experience was a lot easier than what I had with Xubuntu in September 2010. It definitely surprised me and I kind of hope that this process wasn’t as easy and automated 18 months ago…

by Miia Ranta (Myrtti) at April 29, 2012 10:00 PM

January 24, 2012

Sakari Bergen

WhiteSpace faces in Emacs 23

This is a good old case of RTFM, but since I spent a couple of hours figuring it out, I thought I’d blog about it anyway…

The WhiteSpace package in Emacs allows you to visualize whitespace in your code. The overall settings of the package are controlled with the ‘whitespace-style’ variable. Before Emacs 23 you didn’t need to include the ‘face’ option to make different faces work. However, since Emacs 23 you need to have it set.

Now I can keep obsessing about whitespace with an up-to-date version of Emacs, and maybe publicly posting stuff like this will help me remember to RTFM in the future also :)

by sbergen at January 24, 2012 05:35 PM

January 09, 2012

Sakari Bergen

Multiuser screen made easy

The idea for this all started with someone mentioning

it’d be good if there was some magic thing which did some SSH voodoo to get you a shell that the person on the other end could watch

So, I took a quick look around and noticed that Screen can already do multiuser sessions, which do exactly this. However, controlling the session requires writing commands to screen, which is both relatively complex for beginners and relatively slow if the remote user is typing in ‘rm -Rf *’ ;)

So, I created a wizard-like python script, which sets up a multiuser screen session and a simple one button GUI (using PyGTK) for allowing and disallowing the remote user access to the session. It also optionally creates a script which makes it easier for the remote user to attach to the session.


Known issues:

  • The helper script creation process for the remote user does not check the user input and runs sudo. Even though the script warns the user, it’s still a potential security risk
  • If the script is terminated unexpectedly, the screen session will stay alive, and will need to be closed manually before this script will work again

Resolving the issues?

Fixing the security issue would be just a matter of more work. However, the lingering screens are a whole different problem: I tried to find out a way to get the pid for the screen session, but failed to find a way to do this in python. This would have made the lingering screen sessions less harmful, as all the communication could have been done with <pid>.<session> instead of simply <session>, which it uses now. The subprocess.Popen object contains the pid of the launched process, but the actual screen session is a child of this process, and thus has a different pid. If anyone can point me toward a solution to this, it’d be greatly appreciated!

by sbergen at January 09, 2012 07:55 PM

January 03, 2012

Sakari Bergen

New site up!

I finally got the work done, and here’s the result! I moved from Dupal to WordPress, as it feels better for my needs. So far I’ve enjoyed it more than Drupal.

I didn’t keep all of the content from my old site: I recreated most of it and added some new content. I also went through links to my site with Google’s Webmaster Tools, and added redirects to urls which are linked to from other sites (and resurrected one blog post).

It’s been a while since I did any PHP, HTML or CSS. I almost got frustrated for a moment, but after reading this article, things progressed much easier. Thanks to the author, Andrew Tetlaw! I was also inspired by David Robillard’s site, which is mostly based on the Barthelme theme. However, I started out with Automattic’s Toolbox theme, customizing most of it.

If you find something that looks or feels strange, please comment!

by sbergen at January 03, 2012 08:57 PM

November 06, 2011

Miia Ranta

Ubuntu 11.10 on an ExoPC/Wetab, or how I found some use for my tablet and learnt to hate on-screen keyboards

I attended an event in the spring that ended with a miraculous incident of being given an ExoPC to use. The operating system that it came installed with was a bit painful to use (and I’m not talking about a Microsoft product), so I didn’t find too much use for the device. I flashed it with a new operating system image quite often, only to note that none to few problems were ever fixed in the UI. Since operating system project is pretty much dead now with participants moving to new areas and projects of interest, I decided to bite the bullet and flash my device with the newest Ubuntu.

Installation project requires an USB memory stick made into an installation media with the tools shipped with regular Ubuntu. A keyboard is also nice to have to make installation process feasible in the first place, or at least it makes it much less painful experience. After the system is installed, comes the pain of getting the hardware to play nice. Surprisingly I’ve had no other problems than trying to figure out how to make the device and operating system to realise that I want to scroll or right-click with my fingers instead of a mouse. Almost all the previous instructions I’ve come across involve (at best) Ubuntu 11.04 and a 2.6.x kernel – and the rest fail to give a detailed instruction on how to make the scrolling or right-clicking work with evdev. The whole process is very frustrating, and I still haven’t figured everything out.

Anyway. First thing you notice, especially without the fingerscrolling working, is that the new scrollbars are a royal pain in the hiney. The problem isn’t as bad in places where the problem can be bypassed, like in Chromium with the help of an extension called chromeTouch where the fingerscrolling can be set to work, or in Gnome-shell which actually has a decent sized scrollbar, or uninstalling overlay-scrollbar altogether, which isn’t pretty, but it works.

Exopc The second immediate thing that slaps a cold wet towel on the face is – after you’ve unplugged the USB keyboard – is the virtual keyboards. Ubuntu and its default environment Unity use OnBoard as the default on-screen keyboard. OnBoard is a complete keyboard with (almost) all the keys a normal keyboard would have, but it lacks a few features that are needed on a tablet computer: it lacks automation of hiding and unhiding itself. In addition to this annoyance OnBoard had the tendency of swapping the keyboard layout to what I assume to be either US or British instead of the Finnish one I had set as default on the installation. One huge problem with OnBoard is at least in my use that it ends up being underneath the Unity interface, where it’s next to useless.

I tried to install other virtual keyboards, like Maliit and Florence, but instructions and packages on Oneiric are lacking and anyway, I still don’t know how to change the virtual keyboard from OnBoard to something else. However, the virtual keyboard in a normal Gnome 3 session with Gnome-Shell seems to work more like the virtual keyboards should, but alas, it doesn’t seem to recognize the keyboard layout settings at all and thus I’m stuck to non-Finnish keyboard layout.

However among all these problems Ubuntu 11.10 manages to show great potential with both Unity and Gnome 3. Ubuntu messaging menu is nice, once gmnotify has been installed (as I use Chromium application Offline Gmail as my email client), empathy set up, music application of choice filled with music and browser settings synchronized.

I’ve found that the webcam works perfectly and the video call quality is much better than it has been earlier on my laptop where I’ve resorted into using GMails video call feature, because it Just Works. It’s nice to see that pulseaudio delivers and bluetooth audio works 100% with both empathy video calls and stereo music/video content.

Having read of the plans for future Ubuntu releases from blogposts of people who were attending UDS-P in Orlando this past week, I openly welcome our future tablet overlords. Ubuntu on tablets needs love and it’s nice to know it’s coming up. This all bodes well for my plan to take over the world with Ubuntu tablet, screen, emacs and chromium :-)

by Miia Ranta (Myrtti) at November 06, 2011 12:06 AM

October 29, 2011

Ville-Pekka Vainio

Getting Hauppauge WinTV-Nova-TD-500 working with VDR 1.6.0 and Fedora 16

The Hauppauge WinTV-Nova-TD-500 is a nice dual tuner DVB-T PCI card (well, actually it’s a PCI-USB thing and the system sees it as a USB device). It works out-of-the-box with the upcoming Fedora 16. It needs a firmware, but that’s available by default in the linux-firmware package.

However, when using the Nova-TD-500 with VDR a couple of settings need to be tweaked or the signal will eventually disappear for some reason. The logs (typically /var/log/messages in Fedora) will have something like this in them:
vdr: [pidnumber] PES packet shortened to n bytes (expected: m bytes)
Maybe the drivers or the firmware have a bug which is only triggered by VDR. This problem can be fixed by tweaking VDR’s EPG scanning settings. I’ll post the settings here in case someone is experiencing the same problems. These go into /etc/vdr/setup.conf in Fedora:

EPGBugfixLevel = 0
EPGLinger = 0
EPGScanTimeout = 0

It is my understanding that these settings will disable all EPG scanning which is done in the background and VDR will only scan the EPGs of the channels on the transmitters it is currently tuned to. In Finland, most of the interesting free-to-air channels are on two transmitters and the Nova-TD-500 has two tuners, so in practice this should not cause much problems with outdated EPG data.

by Ville-Pekka Vainio at October 29, 2011 06:07 PM

August 25, 2011

Miia Ranta

Things I learnt about managing people while being a Wikipedia admin

Colour explosion Just over four years ago I gave up my volunteer, unpaid role as an administrator of the Finnish Wikipedia. Today, while discussing with a friend, I realised what has been one of the most valuable lessons in both my professional life and hobbies. While I am quite pessimistic in general, I still benefit from these little nuggets of positive insight almost every day when communicating and working with other people.

  • Assume Good Faith. “Unless there is clear evidence to the contrary, assume that people who work on the project are trying to help it, not hurt it.” Most people aren’t your enemies. Most people will not try to hurt you. If stupidity is abound, it’s (usually) not meant as a personal attack towards you, nor is it intentional.
  • When someone does something that doesn’t immediately make sense, which contradicts your assumptions about the skills and common sense of a person you are dealing with, discuss it with them! Don’t make assumptions based on partial information or details, ask for more info so you don’t need to assume the worst! If something is unclear, asking won’t make things worse.

Pessimists are never disappointed, only positively surprised. But while the world seems like a dark a desolate place and the humanity seems to be doomed, I still have to try to believe in the sensibility of people and that we can make something special for the project we are trying to work for. Ubuntu, Wikipedia, Life… or just your day-to-day job.

by Miia Ranta (Myrtti) at August 25, 2011 11:49 PM

August 21, 2011

Miia Ranta

And then, unexpectedly, life happens

I hope none of you have expected me to blog more often. It’s been over a year since I’ve last blogged, and so much has happened since I last did.

I’ve travelled to Cornwall, started a Facebook page that got a huge following in no time, fiddled a bit with CMS Made Simple at work, bought another Nexus One to replace one that broke and after getting the broke one fixed, gave the extra to my sister as a Christmas present, have taught Duncan how to make gravadlax and crimp Carelian pasties, visited Berlin and bought a game. I’ve attended a few geeky events, like Local MeeGo Network meetings of Tampere, Finland, MeeGo Summit also in Tampere, MeeGo Conference in San Francisco, US and OggCamp’11 in Farnham, UK.

I’ve also taken few steps in learning to code in QML, poked around Arduino and bought a new camera, Olympus Pen E-PL1.

My mom What else has happened? Well, among other things, my mother was diagnosed with cholangiocarcinoma right after New Year, and she passed away 30th of June.

Many things that I have taken for granted have changed or gone away forever. Importance of some things have changed as my life is trying to find a new path to run in.

Blogging and some of my Open Source related activities have taken a toll, which I am planning to fix now that I feel like I’m strong enough to use my energy on these hobbies again. Sorry for the hiatus, folks.

Coming up, perhaps in the near future:

  • Rants and Raves about Arduino
  • Entries about social networking sites
  • Camera/Photography jabber
  • Mobile phone/Tablet chatter

So, just so you know, I’m alive, and will soon be in an RSS feed reader near you. AGAIN.

by Miia Ranta (Myrtti) at August 21, 2011 12:20 AM

August 06, 2011

Ville-Pekka Vainio

The Linux/FLOSS Booth at Assembly Summer 2011

The Assembly Summer 2011 demo party / computer festival is happening this weekend in Helsinki, Finland. The Linux/FLOSS booth here is organized together by Finnish Linux User Group, Ubuntu Finland, MeeGo Network Finland and, of course, Fedora. I’m here representing Fedora as a Fedora Ambassador and handing out Fedora DVDs. Here are a couple of pictures of the booth.

The booth is mostly Ubuntu-coloured because most of the people here are members of Ubuntu Finland and Ubuntu in general has a large community in Finland. In addition to live CDs/DVDs, the MeeGo people also brought two tablets running MeeGo (I think they are both ExoPCs) and a few Nokia N950s. They are also handing out MeeGo t-shirts.

People seem to like the new multi-desktop, multi-architecture live DVDs that the European Ambassadors have produced. I think they are a great idea and worth the extra cost compared to the traditional live CDs.

by Ville-Pekka Vainio at August 06, 2011 11:11 AM

April 29, 2011

Sakari Bergen

Website remake coming up, comments disabled

The format of my current website has not worked very well for me, and I'm a bit lazy with bloggy stuff. So, I decided to remake this website. I've already made a new design, and will probably be switching to Wordpress from Drupal because it's a bit simpler. Hope to get the new site up in a few months latest!

Due to a lot of spam recently, I disabled comments.

by sbergen at April 29, 2011 09:53 AM

March 21, 2011

Jouni Roivas


Recently Wayland have become a hot topic. Canonical has announced that Ubuntu will go to Wayland. Also MeeGo has great interest on it.

Qt has had (experimental) Wayland client support for some time now.

A very new thing is support for Qt as Wayland server. With that one can easily make own Qt based Wayland compositor. This is huge. Since this the only working Wayland compositor has been under wayland-demos. Using Qt for this opens many opportunities.

My vision is that Wayland is the future. And the future might be there sooner than you think...

by Jouni Roivas ( at March 21, 2011 09:42 AM

February 24, 2011

Jouni Roivas

January 03, 2011

Ville-Pekka Vainio

Running Linux on a Lenovo Ideapad S12, part 2

Here’s the first post of what seems to be a series of posts now.


I wrote about acer-wmi being loaded on this netbook to the kernel’s platform-driver-x86 mailing list. That resulted in Chun-Yi Lee writing a patch which adds the S12 to the acer-wmi blacklist. Here’s the bug report.


I did a bit of googling on the ideapad-laptop module and noticed that Ike Panhc had written a series of patches which enable a few more of the Fn keys on the S12. The git repository for those patches is here. Those patches are also in linux-next already.

So, I cloned Linus’ master git tree, applied the acer-wmi patch and then git pulled Ike’s repo. Then I followed these instructions, expect that now Fedora’s sources are in git, so you need to do something like fedpkg co kernel;cd kernel;fedpkg prep and then find the suitable config file for you. Now I have a kernel which works pretty well on this system, except for the scheduling/sleep issue mentioned in the previous post.

by Ville-Pekka Vainio at January 03, 2011 10:19 AM

December 27, 2010

Ville-Pekka Vainio

Running Linux (Fedora) on a Lenovo Ideapad S12

I got a Lenovo Ideapad S12 netbook (the version which has Intel’s CPU and GPU) a few months ago. It requires a couple of quirks to work with Linux, I’ll write about them here, in case they’ll be useful to someone else as well.


The netbook has a “Broadcom Corporation BCM4312 802.11b/g LP-PHY (rev 01)” wifi chip. It works with the “b43″ open source driver, which is in the kernel. However, I think that it may not actually reach the speeds it should. You could also use the proprietary “wl” kernel module, available in RPM Fusion as “kmod-wl”, but I don’t like to use closed source drivers myself.

The b43 driver needs the proprietary firmware from Broadcom to work with the 4312 chip. Following these instructions should get you the firmware.


The kernel needs the “nolapic_timer” parameter to work well with the netbook. If that parameter is not used, it seems like the netbook will easily sleep a bit too deep. Initially people thought that the problem was in the “intel_idle” driver, the whole thing is discussed in this bug report. However, according to my testing, the problem with intel_idle was fixed, but the netbook still has problems, they are just a bit more subtle. The netbook boots fine, but when playing music, the system will easily start playing the same sample over and over again, if the keyboard or the mouse are not being used for a while. Apparently the system enters some sort of sleeping state. I built a vanilla kernel without intel_idle and I’m seeing this problem with it as well.

Then there’s “acer-wmi”. The module gets loaded by the kernel and in older versions it was probably somewhat necessary, because it handled the wifi/bluetooth hardware killswitch. It causes problems with NetworkManager, though. It disables the wifi chip on boot and you have to enable wifi from the NetworkManager applet by hand. Here’s my bug report, which hasn’t gotten any attention, but then again, I may have filed it under the wrong component. Anyway, in the 2.6.37 series of kernels there is the “ideapad_laptop” module, which apparently handles the hardware killswitch, so acer-wmi shouldn’t be needed any more and can be blacklisted.

by Ville-Pekka Vainio at December 27, 2010 03:18 PM

November 29, 2010

Jouni Roivas

Encrypted rootfs on MeeGo 1.1 netbook

I promised my scripts to encrypt the rootfs on my Lenovo Ideapad running MeeGo 1.1. It's currently just a dirty hack but thought it could be nice to share it with you.

My scripts uses cryptoloop. Unfortunately MeeGo 1.1 netbook stock kernel didn't support md_crypt so that was a no go. Of course I could compile the module myself but I wanted out-of-the box solution.

Basic idea is to create custom initrd and use it. My solution needs Live USB stick to boot and do the magic. Also another USB drive is needed to get the current root filesystem in safe while encrypting the partition. I don't know if it's possible to encrypt "in place" meaning to use two loopback devices. However this is the safe solution.

For the busy ones, just boot the MeeGo 1.1 Live USB and grab these files:

chmod a+x

And follow the instructions.

The ones who have more time and want to double check everything, please follow instructions at:

This solution has at least one drawback. Once the kernel updates you have to recreate the initrd. For that purposes I created a tiny script than can be run after kernel update:

That script also needs the script above.

Of course that may break your system at any time, so be warned.

For my Lenovo Ideapad S10-3t and MeeGo 1.1 netbook it worked fine. My test case was to make very fresh installation first from the Live/installation USB. Boot again and setup the cryptoloop from Live USB. After that I could easily boot my crypted MeeGo 1.1. It asks password in very early phase of boot process. After it's written correctly the MeeGo 1.1 system should boot up normally.

This worked for me, and I give no guarantee that this works for you. However you're welcome to send patches and improvements.

UPDATE 29.11.2010:
Some people have reported problems when they have different kernel version than on Live USB. The're unable to boot back to their system. I try to figure out solution for this issue.

by Jouni Roivas ( at November 29, 2010 12:48 PM

June 14, 2010

Miia Ranta

California Dreamin’, release 1.2.1 (LCS2010, MeeGo workshop videos)

As promised earlier, I’ve now published four of the sessions from Linux Collaboration Summit 2010 which was held in San Francisco in April. They’re viewable in, and I’ve decided to follow the licensing Linux Foundation itself has for the videos of the previous day, so the videos are licensed in CreativeCommons Attribution. I managed to burn a lot of time to edit the videos, but I guess in the end they’re fairly good. The sound quality isn’t magnificent, but most of the time you can tell what is actually said… I’ve not yet uploaded the MeeGo question hour or the panel, because I’m not still quite convinced that the sound quality is good enough. If you want them on, please leave a comment.

Quim Gil - A Working Day in MeeGo project

Without further ado, here are the episodes so far:

<3 <3

by Miia Ranta (Myrtti) at June 14, 2010 09:49 PM