Categories
main mozilla tech

Update on Verbatim

Just a short note. After getting a very positive feedback in Prague on the Verbatim project, and fairly negative on its performance, I spent some time making it faster and snappier and got it to the point when I believe this problem is mitigated and we can push Pootle Verbatim’s incarnation to production.

So what’s going on right now?

We’re working with the IT team to get a new virtual machine with its own public vhost (you can track the progress in bug 523920). This should happen very soon and once we’re there, we’ll let you know and start using Verbatim to help you manage website localization.

Categories
main mozilla tech

MiniOpenWebCamp in Prague :)

As a part of the Mozilla DevDay in Prague this Friday we will hold a Mini Open Web Camp at the afternoon.

Drumbeat img by Mark Surman

The idea is to use the energy of DevDay participants to get their feedback on the major issues we’re currently addressing with Mozilla project.

We have a room booked, and we hope to attract all algorithmically impaired people (the others will probably go to Mozilla Labs Hack Session) to join us for a two hour brainstorm.

The formula may change, but currently we’re planning to set a list of topics and go over them with Mark Surman (ED in Mozilla Foundation) and Tristan Nitot (President of Mozilla Europe) igniting each of them by having a short conversation in front of the public. At some point, we’re turning it into a round table and invite participants to share their views and address the concerns.

The meeting will probably be small enough to gain an atmosphere of teamwork and I hope it’ll be a great journey over the current challenges of the Internet and an opportunity to make an impact on how those might be solved!

Please, do not hesitate to register, and join us there 🙂

Categories
main mozilla tech

Express Mozilla

Recently I asked Mozilla for new set of business cards. The overall concept of paper cards you give to people is becoming less appealing and I definitely like the “google me” approach, not only because that’s what we really do to find someone, but also because it expresses Google’s vision and theme.

Since I was able to choose the back of the card, I started wondering… How to express Mozilla theme? How to express Mozilla?

After a few hours of trying and failing to produce anything that would even remotely give me the feeling, I went to Mark Surman’s blog for inspiration and found his blog post about visualizing Mozilla in one sentence with wordle. *Click*

Then it went fast. Took similar approach, copied all comments with suggestions, sorted them, gave to wordle which produced this. From there, I used Gimp to resize it and boom, done. Let me know what you think 🙂

Business card - front
Gandalf's business card - front

Business card - back
Gandalf's business card - back

Categories
main mozilla tech

AMO loses accent

Since the beginning of times, AMO has been using unique localization format codenamed as “monopo”. It bases on gettext, but instead of using string in source language as an ID:

msgid "What's your name?"
msgstr "¿Cómo te llamas?"

it uses a unique identifier as an ID and lists places where the entity is used in a comment above it:

#: views/addons/policy.thtml:78 views/addons/policy.thtml:79
msgid "test_whats_name"
msgstr "¿Cómo te llamas?"

This customization makes the PO file work very differently. You cannot localize using your po file only – you don’t know the source string you’re translating, so you need to have en-US file and your file and compare them. But the greater issue is an incompatibility of such format with most Gettext tools and libraries.

Gettext is probably the most popular localization format in the open source world. In result, over years, huge number of localization tools, libraries and API’s to languages has been created in order to simplify and support localization efforts. Due to the po->monopo switch AMO localizers were limited in their choice and even internally, AMO equivalents of get_entity function (named ___() and n___() for plurals) were pretty complex.

What once served us well, was not the choice we wanted to keep forever and by the power of bugzilla I have been assigned to challenge the status quo.

At the beginning there was darkness and lightning, all across the Earth… ekhm, not this one.

This hydra had four heads and all of them had to be attacked simultaneously in order to minimize the SNAFU window while in transition:

  1. AMO localization code has been crafted to work with monopo
  2. AMO templates and code has been calling for entities by the unique id – ___(‘test_whats_name’) instead of ___(‘What’s your name’)
  3. AMO localization files were written using the monopo syntax
  4. Our toolchain (like export-po.py or Verbatim) was customized to work with monopo

Wrt. the format, we decided to switch to normal gettext and keep context where needed (for example when there are multiply strings with the same english name – in order to avoid duplication).

On the 6th of August I had the weapons ready and Wil Clouser decided to make the switch before the next AMO release giving us little but 3 days to switch. Brave man he is.

We did the switch and on the 13th od August the first battle was called. We won on all fronts except the templates switch which against the plan happened to remove context reference from the function call.

In result in a few places where we kept the context we did not ask for it. So instead of ___(‘What’s your name?’, ‘test_whats_name’) we had only ___(‘What’s your name?’). This call did not work because in the .po file we had both, context and ID (and we cannot get the ID without a context in such case).

Yesterday I finished crafting a new weapon to fix this. The plan was to take en_US po file, iterate through all templates and PHP files in AMO code and check if the entity ID matches one from en_US po file and if the po file entity has context. If this is the case, then replace the function call with a new one containing context.

The only remaining issue was that what we tried to fix were the cases in our entity pool that had multiply ID’s identified by context only. And in this case we were using ID to match entity from PO file with an entity from the code. How do we know if we matched the right entity?

Consider the following case. We have an entity with id “Recover your password”. It may be a window title, a link to a recovery tool or title of an email. It may be translated differently depending on the context (and it would be translated differently in Polish) so we want to have multiple entities here. Since Gettext uses english string as an ID we cannot have 3 entities with the same ID so we need to add what’s called msgctxt. It looks like this:

msgctxt "email_title"
msgid "Recover your password"
msgstr "Odzyskaj hasło"

msgctxt "tools_link"
msgid "Recover your password"
msgstr "Odzyskiwanie hasła"

Now, in the broken template file we have ___(‘Recover your password’) and we need to match it to one of the entities to replace it with ___(‘Recover your password’, ‘tools_link’). But how do we get the right entity?

Fortunately, we were storing source comments for each entity which gave us a list of template files in which the entity has been used. And we preserved this while transiting. It looked like this:

#: views/addons/policy.thtml:78 views/addons/email.thtml:19
msgctxt "email_title"
msgid "Recover your password"
msgstr "Odzyskaj hasło"
#: views/addons/menu.thtml:28 views/addons/layout.thtml:79
msgctxt "tools_link"
msgid "Recover your password"
msgstr "Odzyskiwanie hasła

Now, we just took the comment, extracted files from it and made sure that the template file we’re fixing is on the list of files extracted from the comment. If it did, we’re using the right entity. If not, try the next one.

With this script in hand, last night we did the final switch, marked the bug as fixed and are open for last commits before the new AMO release!

The whole thing was possible thanks to L10n-drivers team and Addons team cooperation and Wil Clouser’s decision not to hit the nail on the head. Since today, AMO is a quite canonical gettext project 🙂

What’s next?

We’ll now work on tools (like extract-po.py) to regain the ability to narrow localization sections. Previously one could use the ID to find out which entities are from statistics or editor sections and deprioritize them. Now we’ll try to give him that info while extracting entities.

Categories
main mozilla tech

MCS – round two

Over the last quarter of 2008 and somewhere into first months of 2009 I was working on the project called Mozilla Community Sites. We got a lot at the time, with initial implementations for several products, the Theme, Logo, style guidelines and the whole concept that was originally introduced by Pascal Chevrel and me in 2004 really took off.

Then, at some point I had to call it a release and switch to other tasks, while MCS was waiting there for people to pick it up and use. From the very early days of the project, I knew it’s one of the projects that has to be maintained by the community of its users and upstreaming patches people make while deploying will set the speed of the project. In the end, we have to use the work to understand what’s most important and I’m personally maintaining only one community website – wiki.aviary.pl, so I can’t be the only driving force.

Over a few months we saw a lot of experimentation with MCS, and there are at least 10-15 sites that are using some aspects of the project (for example Mozilla Lietuvoje, Mozilla Argentina or Mozilla Srbija) and people started approaching me and sending patches, asking for bug fixes, features and plans. I would like to especially thank Tomer, Jesper, Guillermo and RQ.

Unfortunately, until now, I really failed to find time to push MCS further, and I feel like I was blocking it by being an inactive owner of the project. Things are slowly changing as RQ started pushing patches to the repo, Jesper and Topal started working on their sites working around me, Tomer suggesting to start a community group forum for MCS and me wrapping up my other projects to have a clean slate to work on MCS once again, this time, collaborating in a group! Yay! 🙂

So, I’d like to thank everyone involved in this project and apologize for not being able to be active when it was needed, and I’ll do my best to make myself and the project back on tracks. Rimas committing patches and Jesper getting an HG account is a solid first step. I want to start a group project for MCS next week, and I hope we’ll have more people joining the project now. In the time of EU MozCamp, we should have a lot of exciting things done here 🙂

Categories
main mozilla po polsku tech

Zmiana rozmiaru zdjęcia z uwzględnieniem zawartości

Poniższy tekst jest tłumaczeniem artykułu “Content aware image resizing“, zamieszczonego na stronie hacks.mozilla.org na licencji Creative Commons Attribution 3.0 United States License. Autorem tekstu jest Christopher Blizzard. Spis wszystkich tłumaczeń artykułów z hacks.mozilla.org dostępny jest na stronach wiki.aviary.pl.

Obejrzyj demo w Firefox 3.5.

200px-nasa-cairZmiana rozmiaru obrazka z uwzględnieniem zawartości jest metodą skalowania obrazka bez zniekształcania zawartości, innymi słowy: nielinearne rozszeranie obrazków. Algorytm ten został po raz pierwszy opisany przez Shai Avidan i Ariela Shamira i opublikowany w 2007 (“Seam Carving for Content-Aware Image Resizing.”)

Od tego czasu powstało kilka świetnych implementacji tego algorytmu dostępnych na licencjach wolnego oprogramowania takich jak wtyczka do Gimpa czy CAIR – aplikacja napisana w C++.

Teraz, dzięki Canvas i językowi JavaScript możliwe jest wykonanie tego w przeglądarce bez użycia wtyczki.

Od wersji 1.5, Firefox oferuje możliwość manipulacji bitmapą z poziomu API Canvas. Wersja 3.5 nie tylko wprowadza jeszcze szybszy silnik JavaScript, ale też dodaje nową metodę dla Canvas – createImageData – umożliwiając tworzenie nowych rozwiązań.

Na potrzeby tego dema został zaimplementowany fragment algorytmu do zmiany rozmiaru obrazka z uwzględnieniem zawartości. Szerokość zdjęcia może byc zmieniana dynamicznie bez zmiany jego wysokości. Ta implementacja korzysta z wykrawania szwów (seam carving) do zmiany rozmiary obrazka, śledząc mało widoczne pionowe linie.
200px-cair-stepsJest to cztero-krokowy algorytm zagnieżdzony. Jedna iteracja zmienia rozmiar obrazka o jeden piksel. Na początek obrazek jest pobierany do kontekstu Canvas, a następnie rozpoczyna się iteracja:

  1. Zdjęcie jest przeliczane do skali szarości
  2. Obliczane są krawędzie na zdjęciu (Użyty jest algorytm o nazwie Sobel convolution) oraz jego matryca energetyczna
  3. Wykrywane są szwy o najmniejszej energii (pionowe linie o grubości 1 piksela nieprzerwanie idące od góry do dołu matrycy energetycznej)
  4. Nastepnie piksel z wykrytego szwu jest usuwany z oryginalnego zdjęcia i wynik jest wklejany jako źródło dla kroku 1

Każdy z poprzednich kroków przechowuje w rozmiarze źródła zdjęcia całą matrycę danych. Choć te matryce nie są pełnymi zdjęciami, tylko artefaktami po algorytmie, przechowywanie ich jest znacznie wygodniejsze niż użycie prostych tablic (JS Array) i dlatego własnie wykorzystana jest tu metoda kontekstu Canvas o nazwie createImageData. Jedną z zalet zastosowania takiego procesu jest to, że można pokazywać pośrednie kroki które zostały wykonane w trakcie obliczania efektu końcowego.

To demo pokazuje w jaki sposób można wykonać bardziej inteligentne zmienianie rozmiar obrazka niż proste spłaszczanie pikseli w CSS. Mając możliwości manipulowania obrazek oraz moc obliczeniową dostępną z poziomu przeglądarki otwiera nowy zakres możliwości do tworzenia aplikacji WWW prezentujących dane wizualne użytkownikom. A to demo to przecież korzysta tylko z ułamka tych możliwości…

Categories
main po polsku tech

Wolne myśli o nowych projektach starych gigantów

Na rynku zaczyna się robić ciekawie. Zwłaszcza konkurencja Microsoftu z Google (i troszeczkę z Apple) nabiera tempa i myślę, że przyszły rok będzie pamiętany długo w kronikach branży komputerowej.

Polska blogosfera podąża za trendami i wyraźnie widać, że Google skończył się miesiąc miodowy a pojawienie się konkurencji (choćby ze strony nielubianego Microsoftu) jest przyjmowane z lekką nutką ekscytacji.

Cytując Anil’s “Google’s Microsoft Moment”:

Czy Google jest “zły”? Nie ma to znaczenia. Osiągneli punkt w ambicji korporacji i zmianach kultury organizacji który sprawia, że będą postrzegani jakby byli.

My take

Jak każdy kto wychował się na webie w latach 1998-2008 mam uraz do MS za to co zrobili z rynkiem po zdobyciu dominacji i w efekcie ograniczone zaufanie co do ich intencji. Jeszcze bardziej martwi mnie, że spośród wszystkich firm na rynku IT Microsoft wydaje mi się najmniej rozumieć idee wolnego oprogramowania i delikatną układ ekosystemu, który pozwala w tym momencie projektom takim jak Linux, OpenOffice, Wikipedia czy Mozilla istnieć. Google i Apple wydają się rozumieć (Google z projektami takimi jak Summer of Code, Apple z WebKitem) i zostawiać trochę miejsca. Microsoft wydaje się bezwzględnie eliminować takie projekty (przykłady Samby czy SCO).

To sprawia, że pojawienia się Microsoftu w szeroko rozumianym “webie” obawiam się – pisałem zresztą o tym jakie uczucia budzi we mnie, na przykład, ich sposób reklamowania IE8 (a to jeszcze przed “śmieszną” reklamą z wymiotowaniem!).

Z drugiej strony, konkurencja jest niesłychanie ważnym elementem tworzenia rynku pro-konsumenckiego (pod warunkiem, że gracze nie mają możliwości obchodzenia mechanizmów konkurencji przez np. vendor lock in) i jestem pewien, że z jednej strony koniec “miesiąca miodowego” od społeczności webowej, a z drugiej pojawenie się konkurencji może mieć bardzo pozytywne skutki dla nas, odbiorców i dla firm. Na dodatek Microsoft niewątpliwie zaskoczył ogłaszając, że webowy MS Office będzie w całości aplikacją WWW działającą na wielu przeglądarkach (oby utrzymali ten kurs ;)).

Nie wiem czy Microsoft ma szanse. Google może w każdym momencie zrobić przytyczek i otworzyć docsy. To naprawde nie jest dla nich duże ryzyko. Na dodatek MS przenosi bitwę na pole przeciwnika. Dotychczas korzystali z tego, że ogromna większość ich klientów nawet nie rozważała korzystania z web aplikacji, zatem wybierali między coraz lepszym MS Officem a mało konkurencyjnym dla biznesu OpenOffice. Prawdziwą konkurencję mieli jedynie na platformie Apple gdzie przegrywali z IWork (imho słusznie), ale tak długo jak Apple ma blisko zerowy rynek korporacyjny to nie dotykało ich wizerunku ani dochodów biznesowych. Teraz nagle będą na rynku konkurować z całkiem porównywalnym produktem a na dodatek koszt zmiany produktu jest mniejszy niż kiedykolwiek.

Z drugiej strony system operacyjny od Google to też niecodzienne zjawisko. Google wchodzi na pole przeciwnika z produktem, który przecież jakościowo z całą pewnością nie będzie odstawał od Moblina, Ubuntu, Suse czy RedHata… Nie ma siły. Zatem wszystko co może wykorzystać, by zdobyć więcej rynku to marketing i partnerzy biznesowi. To zaś oznacza szansę dla innych wydawców Linuksa… kto wie…

I jeszcze słowo o bingu. Jeśli chodzi o jakość, to polecam zrobienie sobie blind testu – mi wyszedł dość jednoznacznie wskazując ile jeszcze brakuje algorytmom binga. Natomiast ciekawi mnie odbiór statystyk. Po startcie nowej wyszukiwarki wszyscy z niepokojem czekali na wyniki i teraz zarówno vbeta, jak i antyweb ogłaszają sukces (AntyWeb w ogóle ogłasza potężne zwycięstwo w wielu bitwach). Czyżby?

Net Applications

Wyniki z NetApplications
Wyniki z NetApplications

Zacytuje sam siebie:

Spojrzmy komu odbiera Bing:

Otoz zabral 2.89% z MSN Global i 1.83 z Microsoft Live Search, co daje w sumie 4.72%. To zas oznacza, ze w pierwszym miesiacu (z calkiem potezna, masowa, zalewajaca kampania) Bing zyskal… 0.6%. 0.3% od Google, 0.2% od Yahoo i 0.1% od AOL.

StatCounter

Wyniki ze StatCounter
Wyniki ze StatCounter

StatCounter jest jeszcze bardziej bezwzględny, wskazuje na 3.33% rynku podczas gdy na tydzien przed wejściem binga na rynek, MSN miał 1.31% a Windows Live 2.11%… W sumie… 3.42%.

Ranking.pl

Wyniki z GemiusRanking.pl
Wyniki z GemiusRanking.pl

Jeszcze ładniej prezentuje to ranking.pl – łączy on mianowicie binga, msn i windows live pokazując zwykła płaską ciągłą linie ostatnich tygodni i dając bingowi 1.72% (a w tygodniu poprzedzającym wejście binga ta grupa miała 1.75%)

Wnioski?

Czy oznacza to, że bing jest bez szans? A skąd. Unifikacja marki, widoczne skupienie się na rozwoju jednej wyszukiwarki, powiązanie jej z innymi usługami (MS Web Office anyone) z pewnością da bingowi rynek większy od aktualnego, ale dziwią mnie zabarwione sensacyjnie wpisy pisane przez stare wygi blogosfery o “bolesnym policzku” jaki Google dostało od MS. Ludzie, opamiętajcie się! Toż to na razie jest porażka! Miliony władowane w kampanie, marketing wirusowy na ogromną skalę, gigant atakuje drugiego giganta… i co? 1.72%? I to z połknięciem poprzednich wersji? Nie brzmi jak ogromny wyczyn…

p.s. A ja dalej kibicuje mojemu cichemu faworytowi 😉
p.p.s Czekam na felieton Pawła o MS Web Office, wszak on jest uzależniony od docsów 🙂

Categories
main mozilla po polsku tech

Spotkanie Mozillowców w Warszawie

Z okazji wydania Firefoksa 3.5, organizujemy nieoficjalne spotkanie Mozillowców w Warszawie 🙂

Termin: Piątek, 3 lipca, 2009

Miejsce: pub Euforia, Złota 11, na tyłach domów centrum

Formuła: spotykamy się o 19:00, pijemy kto co lubi, gadamy o sieci i standardach i projektach Mozilli.

Zapraszam wszystkich zainteresowanych!!! 🙂

p.s. jeśli wybierasz się, daj proszę znać, będzie mi łatwiej zarezerwować miejsce wiedząc ile osób przyjdzie 🙂

Categories
main mozilla po polsku tech

Firefox 3.5 wydany!

W nawiązaniu do poprzeniego wpisu… To już oficjalne! Firefox 3.5 jest już publicznie dostępny, przetestowany i stabilny!

20090630_firefox_3.5fZapraszam do pobrania i zapoznania się z informacjami o wydaniu oraz do obejrzenia statystyk pobierania na żywo, a jutro, o 20:50 polskiego czasu nastąpi Shiretoko Shock Weave – moment w którym cała społeczność Mozilli w jednym momencie poinformuje na sieciach społecznościowych o tym wydaniu 🙂

Chciałbym przy okazji nieskromnie zwrócić uwagę czytelników na niesamowitą robotę jaką wykonuje w Polsce zespół Aviary.pl, a w szczególności lider zespołu – Hubert Gajewski oraz lider lokalizacji Firefoksa – Marek Stępień. To dzięki tej pracy polska lokalizacja jest tak wysokiej jakości! 🙂

Categories
main mozilla po polsku tech

Firefox 3.5 – wydanie dziennikarskie vs. wydanie Mozilli

Podobnie jak w przypadku wydania Firefoksa 3,  wydanie Firefoksa 3.5 wzbudza duży rozgłos medialny. 🙂

Dla nas, uczestników projektu Mozilla to moment wytchnienia. Wszystko co zrobiliśmy przez rok zostało właśnie skompilowane, umieszczone na serwerach i jest aktualnie testowane przez społeczność testerów z całego świata. 74 wydania językowe, 3 platformy, kilkaset nowych funkcji, wszystko to musi zostać dokładnie przetestowane zanim uznamy, że ta właśnie wersja kodu źródłowego stanie się finalnym wydaniem Firefoksa.

Ze względu na naszą otwartą naturę projektu, wszystkie kompilacje są publicznie dostępne na serwerach i już od rana dziennikarze pobierają te kompilacje i ogłaszają, że to wydanie finalne.

Miałem przyjemność udzielać krótkich wywiadów dotyczących wydania dzisiaj i za każdym razem tłumaczyłem specyfikę działania naszego projektu i konsekwencje tego dla wydań.

Mechanizm działa tak:

Kompilacja, która leży na serwerach od rana jest właśnie testowana. Jeśli przejdzie proces finalnych testów to zostanie ona uznana za stabilną i wydana. Jeśli zostanie znaleziony poważny błąd, i menedżer wydania zdecyduje, że blokuje on wydanie, to zostanie on poprawiony, źródła zostaną przekompilowane i proces testowania powtórzony.

Prośba

Jeśli ktoś ściąga wydanie zanim pojawi się o nim informacja na naszych stronach to pobiera wydanie jeszcze nie przetestowane. To może być wydanie finalne, ale nie musi. Proszę, wszyscy którzy piszecie o “wydaniach znalezionych na serwerach” – informujcie ludzi o ryzyku związanym z pobieraniem takiego wydania. To ważny element budowania świadomości użytkowników i to ważne, aby oni sami wybierali czy chcą podjąć ryzyko.