<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>awesome — jd:/dev/blog</title><description>Posts tagged &quot;awesome&quot; on jd:/dev/blog.</description><link>https://julien.danjou.info/</link><item><title>The bad practice in FOSS projects management</title><link>https://julien.danjou.info/blog/foss-projects-management-bad-practice/</link><guid isPermaLink="true">https://julien.danjou.info/blog/foss-projects-management-bad-practice/</guid><description>During the OpenStack summit a few weeks ago, I had the chance to talk to some people about my experience on running open source projects. It turns out that after hanging out in communities and contrib</description><pubDate>Thu, 09 Jun 2016 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;During the OpenStack summit a few weeks ago, I had the chance to talk to some people about my experience on running open source projects. It turns out that after hanging out in communities and contributing to many projects for years, I may be able to provide some hindsight and an external eye to many of those who are new to it.&lt;/p&gt;
&lt;p&gt;There are plenty of resource explaining how to run an open source projects out there. Today, I would like to take a different angle and emphasize what you should not &lt;em&gt;socially&lt;/em&gt; do in your projects. This list comes from various open source projects I encountered these past years. I&apos;m going to go through some of the bad practice I&apos;ve spotted, in a random order, illustrated by some concrete example.&lt;/p&gt;
&lt;h2&gt;Seeing contributors as an annoyance&lt;/h2&gt;
&lt;p&gt;When software developers and maintainers are busy, there&apos;s one thing they don&apos;t need: more work. To many people, the instinctive reactions to external contribution is: damn, more work. And actually, it is.&lt;/p&gt;
&lt;p&gt;Therefore, some maintainers tend to avoid that surplus of work: they state they don&apos;t want contributions, or make contributors feel un-welcomed. This can take a lot of different forms, from ignoring them to being unpleasant. It indeed avoids the immediate need to deal with the work that has been added on the maintainer shoulders.&lt;/p&gt;
&lt;p&gt;This is one of the biggest mistake and misconception of open source. If people are sending you more work, you should do whatever it takes to feel them welcome so they continue working with you. They might pretty soon become the guys doing the work you are doing instead of you. Think: retirement!&lt;/p&gt;
&lt;p&gt;Let&apos;s take a look at my friend Gordon, who I saw starting as a Ceilometer contributor in 2013. He was doing great code reviews, but he was actually giving me more work by catching bugs in my patches and sending patches I had to review. Instead of being a bully so he would stop making me rework my code and reviews his patches, &lt;a href=&quot;http://lists.openstack.org/pipermail/openstack-dev/2013-May/008975.html&quot;&gt;I requested that we trust him even more by adding him as a core reviewer&lt;/a&gt;. time contribution.&lt;/p&gt;
&lt;p&gt;And if they don&apos;t do this one-time contribution, they won&apos;t make it two. They won&apos;t make any. Those projects may have just lost their new maintainers.&lt;/p&gt;
&lt;h2&gt;Letting people only do the grunt work&lt;/h2&gt;
&lt;p&gt;When new contributors arrive and want to contribute to a particular project, they may have very different motivation. Some of them are users, but some of them are just people looking to see how it is to contribute. Getting the thrill of contribution, as an exercise, or as a willingness to learn and start contributing back to the ecosystem they use.&lt;/p&gt;
&lt;p&gt;The usual response from maintainers is to push people into doing grunt work. That means doing jobs that have no interest, little value, and probably no direct impact on the project.&lt;/p&gt;
&lt;p&gt;Some people actually have no problem with it, some have. Some will feel offended to do low impact work, and some will love it as soon as you give them some sort of acknowledgment. Be aware of it, and be sure to high-five people doing it. That&apos;s the only way to keep them around.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/content/images/03/computer-coding.jpg&quot; alt=&quot;computer-coding&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Not valorizing small contributions&lt;/h2&gt;
&lt;p&gt;When the first patch that comes in from a new contributor is a typo fix, what developers think? That they don&apos;t care, that you&apos;re wasting their precious time with your small contribution. And nobody cares about bad English in the documentation, don&apos;t they?&lt;/p&gt;
&lt;p&gt;This is wrong. See my first contributions to &lt;a href=&quot;https://github.com/home-assistant/home-assistant/commit/36cb12cd157b22bdc1fa28b700ca0fb751cca7a4&quot;&gt;home-assistant&lt;/a&gt; and &lt;a href=&quot;https://github.com/marijnh/Postmodern/commit/ec537f72393e1032853b78e0b7b4d0ff98632a02&quot;&gt;Postmodern&lt;/a&gt;: I fixed typos in the documentation.&lt;/p&gt;
&lt;p&gt;I contributed to &lt;a href=&quot;http://orgmode.org&quot;&gt;Org-mode&lt;/a&gt; for a few years. &lt;a href=&quot;http://repo.or.cz/org-mode.git/commit/a153f5a31dffbc6b78a8c5d8d027961abe585a38&quot;&gt;My first patch to orgmode&lt;/a&gt; was about fixing a docstring. Then, I sent 56 patches, fixing bugs and adding fancy features and also wrote a few external modules. To this day, I&apos;m still #16 in the top-committer list of Org-mode who contains 390 contributors. So not that would call a small contributor. I am sure the community is glad they did not despise my documentation fix.&lt;/p&gt;
&lt;h2&gt;Setting the bar too high for new comers&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/content/images/03/too-high.png&quot; alt=&quot;too-high&quot; /&gt;&lt;/p&gt;
&lt;p&gt;When new contributors arrive, their knowledge about the project, its context, and the technologies can vary largely. One of the mistakes people often make is to ask contributors too complicated things that they cannot realize. That scares them away (many people are going to be shy or introvert) and they may just disappear, feeling too stupid to help.&lt;/p&gt;
&lt;p&gt;Before making any comment, you should not have any assumption about their knowledge. That should avoid such situation. You also should be very delicate when assessing their skills, as some people might feel vexed if you underestimate them too much.&lt;/p&gt;
&lt;p&gt;Once that level has been properly evaluated (a few exchanges should be enough), you need to mentor to the right degree your contributor so it can blossom. It takes time and experience to master this, and you may likely lose some of them in the process, but it&apos;s a path every maintainer has to take.&lt;/p&gt;
&lt;p&gt;Mentoring is a very important aspect of welcoming new contributors to your project, whatever it is. Pretty sure that applies nicely outside free software too.&lt;/p&gt;
&lt;h2&gt;Requiring people to make sacrifices with their lives&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/content/images/03/balance-stones.jpg&quot; alt=&quot;balance-stones&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This is an aspect that varies a lot depending on the project and context, but it&apos;s really important. As a free software project, where most people will contribute on their own good will and sometimes spare time, you must not require them to make big sacrifices. This won&apos;t work.&lt;/p&gt;
&lt;p&gt;One of the worst implementation of that is requiring people to fly 5 000 kilometers to meet in some place to discuss the project. This puts contributors in an unfair position, based on their ability to leave their family for a week, take a plane/boat/car/train, rent an hotel, etc. This is not good, and everything should be avoided to &lt;em&gt;require&lt;/em&gt; people to do that in order to participate and feel included in the project and blend in your community. Don&apos;t get me wrong: that does not me social activities should be prohibited, on the contrary. Just avoid excluding people when you discuss any project.&lt;/p&gt;
&lt;p&gt;The same apply to any other form of discussion that makes it complicated for everyone to participate: IRC meetings (it&apos;s hard for some people to book an hour, especially depending on the timezone they live in), video-conference (especially using non-free software), etc.&lt;/p&gt;
&lt;p&gt;Everything that requires people to basically interact with the project in a synchronous manner for a period of time will put constraints on them that can make them uncomfortable.&lt;/p&gt;
&lt;p&gt;The best medium is still e-mail and asynchronous derivative (bug trackers, etc), as it is asynchronous and allow people to work at their own pace at their own time.&lt;/p&gt;
&lt;h2&gt;Not having an (implicit) CoC&lt;/h2&gt;
&lt;p&gt;Codes of conduct seem to be a trendy topic (and a touchy subject), as more and more communities are opening to a wilder audience than they used to be – which is great.&lt;/p&gt;
&lt;p&gt;Actually, all communities have a code of conduct, being written with black ink or being carried in everyone&apos;s mind unconsciously. Its form is a matter of community size and culture.&lt;/p&gt;
&lt;p&gt;Now, depending on the size of your community and how you feel comfortable applying it, you may want to have it composed in a document, e.g. like &lt;a href=&quot;https://www.debian.org/code_of_conduct&quot;&gt;Debian did&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Having a code of conduct does not transform your whole project community magically into a bunch of carebears following its guidance. But it provides an interesting point you can refer to as soon as you need. It can help throwing it at some people, to indicate that their behavior is not welcome in the project, and somehow, ease their potential exclusion – even if nobody wants to go that far generally, and that&apos;s it&apos;s rarely that useful.&lt;/p&gt;
&lt;p&gt;I don&apos;t think it&apos;s mandatory to have such a paper on smaller projects. But you have to keep in mind that the implicit code of conduct will be derived from &lt;em&gt;your&lt;/em&gt; own behavior. The way your leader(s) will communicate with others will set the entire social mood of the project. Do not underestimate that.&lt;/p&gt;
&lt;p&gt;When we started the &lt;a href=&quot;http://launchpad.net/ceilometer&quot;&gt;Ceilometer&lt;/a&gt; project, we implicitly followed the &lt;a href=&quot;https://www.openstack.org/legal/community-code-of-conduct/&quot;&gt;OpenStack Code of Conduct&lt;/a&gt; before it even existed, and probably set the bar a little higher. Being nice, welcoming and open-minded, we achieved a descent score of diversity, having up to 25% of our core team being women – way above the current ratio in OpenStack and most open source projects!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/content/images/03/friends-beach.jpg&quot; alt=&quot;friends-beach&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Making people not English native feeling like outsider&lt;/h2&gt;
&lt;p&gt;It&apos;s quite important to be aware of that the vast majority of free software project out there are using English as the common language of communication. It makes a lot of sense: it&apos;s a commonly spoken language, and it seems to do the job correctly.&lt;/p&gt;
&lt;p&gt;But a large part of the hackers out there are not native English speakers. Many are not able to speak English fluently. That means the rate at which they can communicate and run a conversation might be very low, which can make some people frustrated, especially native English speaker.&lt;/p&gt;
&lt;p&gt;The principal demonstration of this phenomena can be seen in social events (e.g. conferences) where people are debating. It can be very hard for people to explain their thoughts in English and to communicate properly at a decent rate, making the conversation and the transmission of ideas slow. The worst thing that one can see in this context is an English native speaker cutting people off and ignoring them, just because they are talking too slowly. I do understand that it can be frustrating, but the problem here is not the non-native English speaking, it&apos;s the medium being used that does not make your fellow on the same level of everyone by moving the conversation orally.&lt;/p&gt;
&lt;p&gt;To a lesser extent, the same applies to IRC meetings, which are by relatively synchronous. Completely asynchronous media do not have this flaw, that&apos;s why they should also be preferred in my opinion.&lt;/p&gt;
&lt;h2&gt;No vision, no delegation&lt;/h2&gt;
&lt;p&gt;Two of the most commonly encountered mistakes in open source projects: seeing the maintainer struggling with the growth of its project while having people trying to help.&lt;/p&gt;
&lt;p&gt;Indeed, when the flow of contributor starts coming in, adding new features, asking for feedback and directions, some maintainers choke and don&apos;t know how to respond. That ends up frustrating contributors, which therefore may simply vanish.&lt;/p&gt;
&lt;p&gt;It&apos;s important to have a vision for your project and communicate it. Make it clear for contributors what you want or don&apos;t want in your project. Transferring that in a clear (and non-aggressive, please) manner, is a good way of lowering the friction between contributors. They&apos;ll pretty soon know if they want to join your ship or not, and what to expect. So be a good captain.&lt;/p&gt;
&lt;p&gt;If they chose to work with you and contribute, you should start trusting them as soon as you can and delegate some of your responsibilities. This can be anything that you used to do: review patches targeting some subsystem, fixing bugs, writing docs. Let people own an entire part of the project so they feel responsible and care about it as much as you do. Doing the opposite, which is being a control-freak, is the best shot at staying alone with your open source software.&lt;/p&gt;
&lt;p&gt;And no project is going to grow and be successful that way.&lt;/p&gt;
&lt;p&gt;In 2009, when Uli Schlachter sent &lt;a href=&quot;http://article.gmane.org/gmane.comp.window-managers.awesome.devel/1746/match=uli+schlachter&quot;&gt;his first patch to awesome&lt;/a&gt;, this was more work for me. I had to review this patch, and I was already pretty busy designing the new versions of awesome and doing my day job! Uli&apos;s work was not perfect, and I had to fix it myself. More work. And what did I do? A few minutes later, I &lt;a href=&quot;http://article.gmane.org/gmane.comp.window-managers.awesome.devel/1747/match=uli+schlachter&quot;&gt;replied to him&lt;/a&gt; with a clear plan of what he should do and what I thought about his work.&lt;/p&gt;
&lt;p&gt;In response, Uli sent patches and improved the project. Do you know what Uli does today? He manages the awesome window manager project since 2010 instead of me. I managed to transmit my vision, delegate, and then retired!&lt;/p&gt;
&lt;h2&gt;Non-recognition of contributions&lt;/h2&gt;
&lt;p&gt;People contribute in different ways, and it&apos;s not always code. There&apos;s a lot of things around a free software projects: documentation, bug triage, user support, user experience design, communication, translation…&lt;/p&gt;
&lt;p&gt;It took a while for example to &lt;a href=&quot;http://debian.org&quot;&gt;Debian&lt;/a&gt; to recognize that their translators could have the status of Debian Developer. &lt;a href=&quot;http://openstack.org&quot;&gt;OpenStack&lt;/a&gt; is working in the same direction by trying to &lt;a href=&quot;https://wiki.openstack.org/wiki/NonATCRecognition&quot;&gt;recognize non-technical contributions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As soon as your project starts attributing badges to some people and creating classes of different members in the community, you should be very careful that you don&apos;t forget anyone. That&apos;s the easiest road to losing contributors along the road.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://julien.danjou.info/content/images/03/heart-sign.jpg&quot; alt=&quot;heart-sign&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Don&apos;t forget to be thankful&lt;/h2&gt;
&lt;p&gt;This whole list has been inspired by many years of open source hacking and free software contributions. Everyone&apos;s experience and feeling might be different, or malpractice may have been seen under different forms. Let me know and if there&apos;s any other point that you encountered and blocked you to contribute to open source projects!&lt;/p&gt;
</content:encoded><category>open-source</category><category>openstack</category><category>awesome</category><category>debian</category><category>emacs</category></item><item><title>FOSDEM 2016, recap</title><link>https://julien.danjou.info/blog/fosdem-2016-recap/</link><guid isPermaLink="true">https://julien.danjou.info/blog/fosdem-2016-recap/</guid><description>Last week-end, I was in Brussels, Belgium for the FOSDEM, one of the greatest open source developer conference.</description><pubDate>Sat, 06 Feb 2016 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Last week-end, I was in Brussels, Belgium for the &lt;a href=&quot;http://fosdem.org&quot;&gt;FOSDEM&lt;/a&gt;, one of the greatest open source developer conference. I was not sure to go there this year (I already skipped it in 2015), but it turned out I was requested to do a talk in the shared &lt;a href=&quot;https://fosdem.org/2016/schedule/track/lua/&quot;&gt;Lua&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://fosdem.org/2016/schedule/track/gnu_guile/&quot;&gt;GNU Guile&lt;/a&gt; devroom.&lt;/p&gt;
&lt;p&gt;As a long time &lt;a href=&quot;http://lua.org&quot;&gt;Lua&lt;/a&gt; user and developer, and a follower of &lt;a href=&quot;http://www.gnu.org/software/guile/&quot;&gt;GNU Guile&lt;/a&gt; for several years, the organizer asked me to run a talk that would be a link between the two languages.&lt;/p&gt;
&lt;p&gt;I&apos;ve entitled my talk &quot;How awesome ended up with Lua and not Guile&quot; and gave it to a room full of interested users of the awesome window manager 🙂.&lt;/p&gt;
&lt;p&gt;We continued with a panel discussion entitled &quot;&lt;a href=&quot;https://fosdem.org/2016/schedule/event/future_guile_lua/&quot;&gt;The future of small languages Experience of Lua and Guile&lt;/a&gt;&quot; composed of Andy Wingo, Christopher Webber, Ludovic Courtès, Etiene Dalcol, Hisham Muhammaad and myself. It was a pretty interesting discussion, where both language shared their views on the state of their languages.&lt;/p&gt;
&lt;p&gt;It was a bit awkward to talk about Lua &amp;amp; Guile whereas most of my knowledge was years old, but it turns out many things didn&apos;t change. I hope I was able to provide interesting hindsight to both community. Finally, it was a pretty interesting FOSDEM to me, and it was a long time I didn&apos;t give talk here, so I really enjoyed it. See you next year!&lt;/p&gt;
</content:encoded><category>talks</category><category>awesome</category><category>lua</category><category>lisp</category></item><item><title>Ten years as a Debian developer</title><link>https://julien.danjou.info/blog/ten-years-as-a-debian-developer/</link><guid isPermaLink="true">https://julien.danjou.info/blog/ten-years-as-a-debian-developer/</guid><description>Ten years ago, I joined the Debian project as a developer.</description><pubDate>Fri, 24 Feb 2012 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Ten years ago, I joined the &lt;a href=&quot;http://www.debian.org&quot;&gt;Debian&lt;/a&gt; project as a developer.&lt;/p&gt;
&lt;p&gt;At that time, I was 18 and in my first year at university, hanging out with the &lt;a href=&quot;http://tuxfamily.org&quot;&gt;TuxFamily&lt;/a&gt; system administrators, which included 3 french Debian developers (sjg, igenibel and creis).&lt;/p&gt;
&lt;p&gt;I was learning Debian packaging while working on &lt;a href=&quot;http://vhffs.org&quot;&gt;VHFFS&lt;/a&gt;, and decided to package one or two non-yet-packaged software for Debian. My friends pushed me into the &lt;a href=&quot;http://nm.debian.org&quot;&gt;NM process&lt;/a&gt;, and &lt;a href=&quot;https://nm.debian.org/nmstatus.php?email=acid@hno3.org&quot;&gt;less than 2 months later&lt;/a&gt; I was a Debian developer. One have to admit that back in the days, the NM process was really fast if you were able to reply to the questions quickly. :-) I think I became the youngest developer among Debian&apos;s ones.&lt;/p&gt;
&lt;p&gt;That was my first steps in a Free Software project, and it was really exciting.&lt;/p&gt;
&lt;p&gt;In 10 years, I&apos;ve been doing a lot of different things for Debian. Sure, I&apos;ve been using it all the years long, but let&apos;s recap a bit what I did, from what I recall.&lt;/p&gt;
&lt;p&gt;My first Debian only project was &lt;a href=&quot;http://packages.debian.org/apt-build&quot;&gt;apt-build&lt;/a&gt; around 2003, and later &lt;a href=&quot;http://packages.debian.org/rebuildd&quot;&gt;rebuildd&lt;/a&gt; in 2007.&lt;/p&gt;
&lt;p&gt;I built the &lt;a href=&quot;https://alioth.debian.org/projects/pkg-xen/&quot;&gt;Xen packaging team&lt;/a&gt; in 2005, I&apos;ve been a Stable Release Manager for a year in 2006, and did heavy bug squashing to release Etch that same year.&lt;/p&gt;
&lt;p&gt;I also was an &lt;a href=&quot;https://nm.debian.org/whoisam.php&quot;&gt;Application Manager in 2006&lt;/a&gt; and managed the application of 2&lt;br /&gt;
Debian developers (&lt;a href=&quot;https://nm.debian.org/nmstatus.php?email=joseparrella%40cantv.net&quot;&gt;Jose Parrella&lt;/a&gt; and &lt;a href=&quot;https://nm.debian.org/nmstatus.php?email=debian%40damianv.com.ar&quot;&gt;Damián Viano&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;I admit I&apos;ve been less active in Debian after 2007, mainly because I was busy working on &lt;a href=&quot;http://awesome.naquadah.org&quot;&gt;awesome&lt;/a&gt;, &lt;a href=&quot;http://www.gnu.org/software/emacs/&quot;&gt;GNU Emacs&lt;/a&gt; and others software.&lt;/p&gt;
&lt;p&gt;Since 2011, I joined the &lt;a href=&quot;http://alioth.debian.org/projects/openstack/&quot;&gt;OpenStack packaging team&lt;/a&gt; and I&apos;m working on OpenStack on a (almost) daily basis.&lt;/p&gt;
&lt;p&gt;I don&apos;t know how many packages I touched, managed or updated, but that should be one or two hundreds. I still maintain &lt;a href=&quot;http://qa.debian.org/developer.php?login=acid&quot;&gt;53 of them&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;After all, the adventure has been really pleasant, and I had the chance to work with and meet fabulous and smart people. I always liked this project and what it&apos;s trying to do.&lt;/p&gt;
&lt;p&gt;After all these years, I&apos;m definitively staying! See you in another 10 years, folks! :)&lt;/p&gt;
</content:encoded><category>debian</category><category>openstack</category><category>emacs</category><category>awesome</category></item><item><title>Various news: what happend during summer</title><link>https://julien.danjou.info/blog/various-news/</link><guid isPermaLink="true">https://julien.danjou.info/blog/various-news/</guid><description>It&apos;s been a while since I blogged about something. So here&apos;s a bunch of things I&apos;ve done the last month.  Holidays Well, I&apos;ve been in holidays one week. :-P  awesome There have been a huge number of c</description><pubDate>Tue, 22 Sep 2009 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;It&apos;s been a while since I blogged about something. So here&apos;s a bunch of things I&apos;ve done the last month.&lt;/p&gt;
&lt;h2&gt;Holidays&lt;/h2&gt;
&lt;p&gt;Well, I&apos;ve been in holidays one week. :-P&lt;/p&gt;
&lt;h2&gt;awesome&lt;/h2&gt;
&lt;p&gt;There have been a huge number of changes between 3.3 (released in June) and 3.4 (almost relesed). I wrote a small but very useful object layer on top of Lua, which adds a class/object system a bit like &lt;a href=&quot;http://www.gtk.org&quot;&gt;gobject&lt;/a&gt;. I&apos;ve also replaced all the hooks by per-class/object signals. Finally, the awesome Lua basement are cleaner than they were before, and the extendability is improved. How nice.&lt;/p&gt;
&lt;p&gt;We&apos;re trying to release 3.4 (rc2 should be out soon), but the development pace is a bit slower than a year before. We&apos;re basically almost 2 months late on what was our previous release rate. Not a big deal however.&lt;/p&gt;
&lt;p&gt;I&apos;ve started working on 3.5 slowly. It gonna get amazing new features too. :-)&lt;/p&gt;
&lt;h2&gt;Google Summer Of Code 2009&lt;/h2&gt;
&lt;p&gt;I&apos;ve mentored Mariusz Ceier on &lt;a href=&quot;http://xcb.freedesktop.org&quot;&gt;XCB&lt;/a&gt; GSoC. He worked on adding Xinput2 and XKB extensions. And he managed to do this. His work should be imported ASAP, the discussion has started on XCB maling list last week.&lt;/p&gt;
&lt;p&gt;In exchange, Google offered me (and to every mentor) an awful blue t-shirt! Thanks Google! :-P&lt;/p&gt;
</content:encoded><category>awesome</category><category>lua</category><category>x11</category></item><item><title>Taking the other direction</title><link>https://julien.danjou.info/blog/taking-the-other-direction/</link><guid isPermaLink="true">https://julien.danjou.info/blog/taking-the-other-direction/</guid><description>I&apos;ve started to develop awesome more than 18 months ago, and somehow I feel it&apos;s time to stop a bit and think where we come from and where we are going to.</description><pubDate>Wed, 15 Apr 2009 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I&apos;ve started to develop &lt;a href=&quot;http://awesome.naquadah.org&quot;&gt;awesome&lt;/a&gt; more than 18 months ago, and somehow I feel it&apos;s time to stop a bit and think where we come from and where we are going to.&lt;/p&gt;
&lt;h2&gt;The motivation&lt;/h2&gt;
&lt;p&gt;I never though I&apos;d be written a window manager one day. That seems kinda stupid when you see how many window manager there&apos;s around.&lt;/p&gt;
&lt;p&gt;As many people, I&apos;ve tested and have been using tons of window manager: &lt;a href=&quot;http://www.windowmaker.info&quot;&gt;Window Maker&lt;/a&gt;, &lt;a href=&quot;http://www.fluxbox.org&quot;&gt;Fluxbox&lt;/a&gt;, etc.&lt;/p&gt;
&lt;p&gt;In August 2007, I was using &lt;a href=&quot;http://www.fvwm.org&quot;&gt;fvwm&lt;/a&gt; since 2004 and was quite happy with it. I used the famous &lt;a href=&quot;http://www.fvwm-crystal.org&quot;&gt;fvwm crystal&lt;/a&gt; as a configuration starter and then rewrote lots of stuff. Digging into &apos;&apos;fvwm&apos;&apos; configuration files was boring, and since I&apos;m lazy, I never really configured it to fit entirely my needs.&lt;/p&gt;
&lt;p&gt;The thing is that, in July 2007, my workstation died. I bought a new one based on the &lt;em&gt;amd64&lt;/em&gt; architecture. Too bad, with this new box, &lt;em&gt;fvwm&lt;/em&gt; decided that it will not longer runs and was segfaulting almost every time I logged in.&lt;/p&gt;
&lt;p&gt;I was &lt;strong&gt;really&lt;/strong&gt; upset. Another failure in the window manager world. So I decided to get the yearly ride of testing many window managers. I went on the no more developed stuff like the *boxes, ion3, etc… but well, I did not like them, there were not powerful enough, too bugged or upstream was insane.&lt;/p&gt;
&lt;p&gt;Then I found &lt;a href=&quot;http://www.xmonad.org&quot;&gt;xmonad&lt;/a&gt;. The Haskell configuration file format made my cry. I did not want to learn Haskell, it seemed too obfuscated to me. At that time it was even not packaged for &lt;a href=&quot;http://www.debian.org&quot;&gt;Debian&lt;/a&gt;, so I gave up. But I found&lt;/p&gt;
&lt;h2&gt;The jdwm&lt;/h2&gt;
&lt;p&gt;I just added a &apos;j&apos; in front of &lt;em&gt;dwm&lt;/em&gt; and started to hack it days and nights to add many feature I missed, like multi-head, etc… On 5th September 2007, I created a git repository to host my code.&lt;/p&gt;
&lt;h2&gt;That&apos;s gonna be… awesome.&lt;/h2&gt;
&lt;p&gt;Five days later, on 10th September, I finally found a name for my new pet: &lt;strong&gt;awesome&lt;/strong&gt;, borrowed from &lt;a href=&quot;http://en.wikipedia.org/wiki/Barney_Stinson&quot;&gt;Barney Stinson&lt;/a&gt; who heavily uses and abuses this word.&lt;/p&gt;
&lt;h3&gt;The 1.x branch&lt;/h3&gt;
&lt;p&gt;The first releases until December were noted 1.x. It was just a better &lt;em&gt;dwm&lt;/em&gt; with a simple flat configuration file.. The configuration file used &lt;a href=&quot;http://www.hyperrealm.com/libconfig/&quot;&gt;libconfig&lt;/a&gt;, but it was a very poor choice. And I was not able to put in into Debian because of &lt;a href=&quot;http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=441200&quot;&gt;name clash&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;The 2.x branch&lt;/h3&gt;
&lt;p&gt;The 2.x branch came in January 2008 with a brand new configuration file format based on &lt;a href=&quot;http://www.nongnu.org/confuse/&quot;&gt;libconfuse&lt;/a&gt;, which was a bit more powerful. Many concepts and features that have been added in this branch are still used in the current 3.x branch.&lt;/p&gt;
&lt;p&gt;At this time, between December 2007 and April 2008, the community was growing smoothly.&lt;/p&gt;
&lt;p&gt;But as I said, awesome 2 was based on a flat configuration file. That raised a problem very soon: users expectation were growing and the development team (me and a couple of regular contributors) was unable to cope with them.&lt;/p&gt;
&lt;p&gt;One of the event that started to change my mind was the support for titlebars.&lt;/p&gt;
&lt;p&gt;When I&apos;ve added titlebar support, it was minimal. It was on top of a window, with the window title. Dot. Then I&apos;ve started to add a lot of options, like the application icon drawing, the position (left, right, bottom) etc.&lt;/p&gt;
&lt;p&gt;And then users started to ask for more, like: &quot;add titlebar on windows only when the window is floating&quot;.&lt;/p&gt;
&lt;p&gt;That&apos;s ok, but that&apos;s complicated: that&apos;s again &lt;strong&gt;another&lt;/strong&gt; option to do some stuff conditionally. And then, why don&apos;t add titlebar on windows when ?&lt;/p&gt;
&lt;h3&gt;The 3.x branch&lt;/h3&gt;
&lt;h4&gt;Why&lt;/h4&gt;
&lt;p&gt;At that time, around April 2008, I&apos;d totally stopped development. I was trying to find a solution which was simple and powerful. But after 2 weeks of thinking, I was not able to find anything else than: use a real language for configuration.&lt;/p&gt;
&lt;p&gt;So, I&apos;ve started prototyping awesome 3 using &lt;a href=&quot;http://www.lua.org&quot;&gt;Lua&lt;/a&gt;. The choice was not obvious, and despite the problem &lt;em&gt;Lua&lt;/em&gt; might suffer, it&apos;s one of the easiest language to integrate into an existing application.&lt;/p&gt;
&lt;p&gt;But, let&apos;s go a little back: in January 2008, Arnaud Fontaine contacted me because he was interested to use &lt;em&gt;awesome&lt;/em&gt; as one of its school project. He decided to port &lt;em&gt;awesome&lt;/em&gt; from &lt;em&gt;Xlib&lt;/em&gt; to &lt;em&gt;&lt;a href=&quot;http://xcb.freedesktop.org&quot;&gt;XCB&lt;/a&gt;&lt;/em&gt;, a modern asynchronous X library.&lt;/p&gt;
&lt;p&gt;His work took some time, but in May 2008, Arnaud did finished to port git master version of &lt;em&gt;awesome&lt;/em&gt; to use &lt;em&gt;XCB&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Consequently, I decided to start a new major branch, using &lt;em&gt;XCB&lt;/em&gt; instead of &lt;em&gt;Xlib&lt;/em&gt; (no change for users in this regard) and &lt;em&gt;Lua&lt;/em&gt; instead of our previous flat configuration file format.&lt;/p&gt;
&lt;h4&gt;Development&lt;/h4&gt;
&lt;p&gt;It took me a while to get from here to there, but in September 2008, it was ready. We had a simple Lua API, and the XCB port was working perfectly.&lt;/p&gt;
&lt;p&gt;It took us some time to release and have something totally working, because we had to work on &lt;em&gt;XCB&lt;/em&gt; and contribute back to the project. It was really not ready to use by an application, but we did great work in this area and it&apos;s now really fine.&lt;/p&gt;
&lt;h4&gt;We&apos;re still here&lt;/h4&gt;
&lt;p&gt;Releases continue to happens, 3.1 around December 2008, and 3.2 around March 2009. 3.3 should be here in June.&lt;/p&gt;
&lt;p&gt;One of the drawback we had, is that we moved many stuff from C to Lua. Why? Because writing things in Lua is quicker and easier to maintain than C, and makes thing more configurable for the user.&lt;/p&gt;
&lt;p&gt;For example, the layout algorithm used to organize window were written in C until 3.2 came out. At that time, users had no choice than using a set of predefined layout to organize their windows.&lt;/p&gt;
&lt;p&gt;Starting with 3.2, if they have minimal knowledge about geometry, they can start writing a layout function organising windows on the screen.&lt;/p&gt;
&lt;p&gt;But this kind of API changes was a bit rough for users, since they had to port some part of their configuration file to the new API. The thing is that the project was still a &lt;em&gt;teenager&lt;/em&gt; at that time, not really knowing were it will go. But I&apos;m happy to announce that API breakage are more and more rare (so far only one minor between 3.2 and 3.3), and anyway always for the Good.&lt;/p&gt;
&lt;p&gt;But I admit that it built a bad reputation around &lt;em&gt;awesome 3.x&lt;/em&gt; during its first month of existence.&lt;/p&gt;
&lt;h2&gt;Future direction&lt;/h2&gt;
&lt;p&gt;I am currently working on 3.3 development. We have still many things to do. Time passing, we get more idea, and more users. And more users bring more ideas. We also have many more contributors, and some guys are even taking maintainer-ship of some code area.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;My post title is &quot;Taking the other direction&quot; because I feel this way.&lt;/p&gt;
&lt;p&gt;I&apos;ve got that feeling that some approaches in projects like GNOME are sometimes bad. Please don&apos;t misread me, I know we are not playing in the same yard.&lt;/p&gt;
&lt;p&gt;When adding a key shortcut for starting an application makes you dig into &lt;em&gt;gconf&lt;/em&gt;, I wonder how this is a win for the user.&lt;/p&gt;
&lt;p&gt;Well, it&apos;s probably a win for the end-user, but I surely am not one of them. And I don&apos;t intend to target them with my software, anyway.&lt;/p&gt;
&lt;p&gt;And now, when I hear things like GNOME 3.0 and the &quot;&lt;a href=&quot;http://live.gnome.org/GnomeShell%5D&quot;&gt;desktop shell&lt;/a&gt;&quot; approach, that makes me smile. Guys, it was time, but have luck. What I see from here, is that any desktop control interface is wrong somehow, and that there&apos;s no approach that can fulfill all users wishes.&lt;/p&gt;
&lt;p&gt;I think that we, the awesome development team (no pun intended) took the direction of building a frame-work window manager rather than a solution written in marble.&lt;/p&gt;
&lt;p&gt;We (partially) solved the issue of UI ergonomic by not writing one and allowing the user to write his own. I don&apos;t say that&apos;s easy to do for most of users, but it&apos;s doable.&lt;/p&gt;
&lt;p&gt;And I think it&apos;s worth it: I use window managers since I use Linux, around 1998. If something like &apos;&apos;awesome&apos;&apos; came 5 years ago, I&apos;d be using it so far, because you can write &lt;em&gt;Fluxbox&lt;/em&gt; or &lt;em&gt;WindowMaker&lt;/em&gt; using &lt;em&gt;awesome&lt;/em&gt; in a hundred of Lua code. And you can write your own version of it. And it starts in less than 3 seconds, supporting almost all standard desktop specification (ICCCM, EWMH, XDG, system tray, message notification, D-Bus, etc), whereas many of the window mangers do not.&lt;/p&gt;
&lt;p&gt;You can even write and play &lt;a href=&quot;http://awesome.naquadah.org/apidoc/modules/invaders.html&quot;&gt;space invaders&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally, I&apos;m happy about the the road we took so far, and hope we will continue into that direction. The rants I read about our project are not that big, compared to the kudos we received.&lt;/p&gt;
</content:encoded><category>awesome</category></item><item><title>OpenOffice is better as a pager than as a text processor</title><link>https://julien.danjou.info/blog/openoffice-better-as-a-pager/</link><guid isPermaLink="true">https://julien.danjou.info/blog/openoffice-better-as-a-pager/</guid><description>Since several month, awesome users have reported a bug with OpenOffice.org. When using OOo and clicking on a menu, or using the mouse wheel to read a document, the currently selected tag (desktop).</description><pubDate>Wed, 11 Feb 2009 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Since several month, &lt;a href=&quot;http://awesome.naquadah.org&quot;&gt;awesome&lt;/a&gt; users have reported a bug with &lt;a href=&quot;http://www.openoffice.org&quot;&gt;OpenOffice.org&lt;/a&gt;. When using OOo and clicking on a menu, or using the mouse wheel to read a document, the currently selected tag (desktop) will change automagically to another one.&lt;/p&gt;
&lt;p&gt;I&apos;ve digged into awesome and found that awesome received a _NET_CURRENT_DESKTOP request. As defined by &lt;a href=&quot;http://standards.freedesktop.org/wm-spec/wm-spec-latest.html#id2550663&quot;&gt;EWMH&lt;/a&gt;,&lt;br /&gt;
this kind of request are sent by a pager to change the active desktop.&lt;/p&gt;
&lt;p&gt;That was weird. Nobody is using a pager here. So, I just kicked my gdb out, attached it to OOo, breaking on &lt;em&gt;XSendEvent&lt;/em&gt; call. And I got it:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Breakpoint 1, XSendEvent (dpy=0x1a00080, w=483, propagate=0, event_mask=1572864, event=0x7fff1fd70d70)
   at ../../src/SendEvent.c:46
(gdb) bt
#0  XSendEvent (dpy=0x1a00080, w=483, propagate=0, event_mask=1572864, event=0x7fff1fd70d70)
   at ../../src/SendEvent.c:46
#1  0x00007f8c0ab4193f in vcl_sal::WMAdaptor::switchToWorkArea ()
  from /usr/lib/openoffice/basis3.0/program/libvclplug_genlx.so
#2  0x00007f8c0aafdbd8 in X11SalFrame::Show ()
  from /usr/lib/openoffice/basis3.0/program/libvclplug_genlx.so
#3  0x00007f8c1378623c in Window::Show ()
  from /usr/lib/openoffice/program/../basis-link/program/libvcllx.so
#4  0x00007f8c13785f40 in Window::Show ()
  from /usr/lib/openoffice/program/../basis-link/program/libvcllx.so
#5  0x00007f8c1372cb54 in FloatingWindow::StartPopupMode ()
  from /usr/lib/openoffice/program/../basis-link/program/libvcllx.so
#6  0x00007f8c1373c877 in ?? () from /usr/lib/openoffice/program/../basis-link/program/libvcllx.so
#7  0x00007f8c1373ccf2 in ?? () from /usr/lib/openoffice/program/../basis-link/program/libvcllx.so
#8  0x00007f8c1373ce84 in ?? () from /usr/lib/openoffice/program/../basis-link/program/libvcllx.so
#9  0x00007f8c13795e7f in ?? () from /usr/lib/openoffice/program/../basis-link/program/libvcllx.so
#10 0x00007f8c13797e74 in ?? () from /usr/lib/openoffice/program/../basis-link/program/libvcllx.so
#11 0x00007f8c13796748 in ?? () from /usr/lib/openoffice/program/../basis-link/program/libvcllx.so
#12 0x00007f8c0aafe6f8 in X11SalFrame::HandleMouseEvent ()
  from /usr/lib/openoffice/basis3.0/program/libvclplug_genlx.so
#13 0x00007f8c0ab040c2 in X11SalFrame::Dispatch ()
  from /usr/lib/openoffice/basis3.0/program/libvclplug_genlx.so
#14 0x00007f8c0ab31625 in SalX11Display::Yield ()
  from /usr/lib/openoffice/basis3.0/program/libvclplug_genlx.so
#15 0x00007f8c0ab356f3 in ?? () from /usr/lib/openoffice/basis3.0/program/libvclplug_genlx.so
#16 0x00007f8c0ab2df1f in SalXLib::Yield () from /usr/lib/openoffice/basis3.0/program/libvclplug_genlx.so
#17 0x00007f8c135b050e in Application::Yield ()
  from /usr/lib/openoffice/program/../basis-link/program/libvcllx.so
#18 0x00007f8c135b0587 in Application::Execute ()
  from /usr/lib/openoffice/program/../basis-link/program/libvcllx.so
#19 0x00007f8c17517e80 in ?? () from /usr/lib/openoffice/program/../basis-link/program/libsofficeapp.so
#20 0x00007f8c135b4b24 in ?? () from /usr/lib/openoffice/program/../basis-link/program/libvcllx.so
#21 0x00007f8c135b4bc5 in SVMain () from /usr/lib/openoffice/program/../basis-link/program/libvcllx.so
#22 0x00007f8c1754ca6c in soffice_main ()
  from /usr/lib/openoffice/program/../basis-link/program/libsofficeapp.so
#23 0x000000000040105b in main ()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I started digging more into the code, and this is what I finally found in &lt;em&gt;salframe.cxx&lt;/em&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;        // #i45160# switch to desktop where a dialog with parent will appear
        if( mpParent &amp;amp;&amp;amp; mpParent-&amp;gt;m_nWorkArea != m_nWorkArea )
            GetDisplay()-&amp;gt;getWMAdaptor()-&amp;gt;switchToWorkArea(mpParent-&amp;gt;m_nWorkArea );
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Beautiful! It even has a comment with a IssueZilla bug number. Let&apos;s go and see where it comes from.&lt;/p&gt;
&lt;p&gt;After 10 minutes of research to find that fucking IZ, I finally found the link to the &lt;a href=&quot;http://www.openoffice.org/issues/show_bug.cgi?id=45160&quot;&gt;issue #45160&lt;/a&gt;. The bug is IMHO not related to OOo but to a window manager doing poor job.&lt;/p&gt;
&lt;p&gt;I&apos;ve found that an awesome user already reported an bug… err, wait, I mean an issue as &lt;a href=&quot;http://www.openoffice.org/issues/show_bug.cgi?id=96684&quot;&gt;issue #96684&lt;/a&gt; (remember there&apos;s no bug in OOo, only issues) and I commented about it.&lt;/p&gt;
&lt;p&gt;It seems OOo developers have agreed to fix that bug eventually.&lt;/p&gt;
</content:encoded><category>x11</category><category>awesome</category></item></channel></rss>