Feeds |
Friendly Machine: Hey Drupal, You Forgot Something
The most basic function of a content management system is the ability to create a page. However, this fundamental activity of website building is often an unexpected hassle for new Drupal users. Yeah, I'm talking about the lack of a built-in rich text editor.
I know there are some strong feelings in the Drupal community about this, but let me try to persuade you that whatever the philosophical or technical reasons for not including a default editor, they're hurting adoption of Drupal and needlessly creating a usability issue for those who are evaluating the platform.
What Happened To MeMost of the reasons I have heard for not including a default editor involve respecting user choice. This is a fine sentiment, but let me illustrate the problems it can create when someone is evaluating Drupal.
First, a little context. I've been building websites since 2000. Although I'm a competent coder and have slogged my way through a custom module or two, I've never really enjoyed that aspect of building a site and come more from a design and marketing perspective. I have an MBA, not a degree in computer science, and that's the lens I look through when thinking about websites.
A few years ago, an organization I work for had a site that had grown increasingly difficult to manage so we decided to take a look at content management systems. We were working in a .NET environment and had both DotNetNuke and Umbraco on the list, but we also wanted to consider the "Big 3" PHP platforms - WordPress, Joomla and Drupal.
It fell to me to evaluate these platforms, write up a recommendation and do a brief demo of the top two choices. I started with Joomla because my boss had heard great things about it. I installed it and added a few pages, tweaked some configuration options - you know, took it out for a test drive. I repeated this process one by one until I came to the last platform, Drupal.
The install seemed to go smoothly...so far, so good. I went to create a page and...hold on a second. I think something went wrong in the install. Where is the text editor? Maybe I need to turn something on?
Ten minutes of clicking through the admin pages.
OK, time for Google.
Oh, I see! You need a module called WYSIWYG. Strange that they don't include that. All of the others did. Well, no big deal. Modules don't seem too hard to install.
Ten Minutes Pass...WYSIWYG is installed! Now let's create that page!
Uh...no editor. What the hell? Back to Google.
Looks like I need to add the actual editor. Wow, there are a lot of choices. Also a lot of debate on which one is best. Guess I'll just go with TinyMCE. People seem to like it.
Whew! That was a bit of work but finally I've got an editor in there - let's make a page!
Wait...why can't I add an image? Where is the upload? Oh. I have to install another module.
Check that, two modules - IMCE and IMCE Wysiwyg Bridge.
Are you *!?#ing kidding me? All of this to make a basic page!?
A Few Things to ConsiderBefore you tell me how stupid it was of me to not do A or B, consider that my experience is not that uncommon. You see, the Drupal community is dominated by developers, really good developers who embrace complexity and who love nothing more than to muck about with code and get their hands dirty. Installing and configuring a few modules is nothing. Actually it's kind of fun, right?
Unfortunately, there are a large number of people involved in building websites who don't feel this way.
There is a common complaint about the quality of Drupal themes and they are often contrasted unfavorably with WordPress themes. Have you ever considered the possibility that Drupal usability may be playing a role? How can this be, you ask?
Web designers are very influential in the CMS decision making process in many firms and certainly among consultants. They generally just want things to work. If a content management system is a hassle for them, they will naturally tend not to recommend it. Instead, they will choose a CMS that will allow them to spend more time working on the parts of their job they love - designing themes, for example.
The marketing department also likes to have a lot of input into the website. After all, in the large majority of cases, the website is a marketing platform. How do you think they feel about a CMS that seems hard to use right out of the gate?
A Unforced ErrorWhen Drupal 7 was nearing release, I read about all of the usability improvements that were on the way. Finally, I thought, Drupal will get a text editor by default!
Obviously, that didn't happen and it remains a blemish on what are some really great improvements to usability. In fact, had an editor been included by default, I honestly think that Drupal 7 would compare very well to WordPress 3 with regard to usability.
Now, some folks might mention using an installation profile that includes an editor. That's not really a solution when you think about it. People who are new to Drupal are going to download the default install or perhaps from Acquia (also, very surprisingly, no editor). Installation profiles are generally for people who are already familiar with Drupal and are looking for a time saver.
An analogy I think is appropriate is with product packaging. Think about Apple and how they package their products and how that affects the buyer's experience with the product. The first 20-30 minutes a person spends with a CMS is very similar. The product speaks to the user. Some may marvel at the flexibilty and power of Drupal. Many others may try to create a simple page and wander off in frustration thinking, "Drupal is too hard."
It doesn't have to be that way.
Can't We All Just Get Along?Obviously, I didn't give up on Drupal during that evaluation process and have since become an ardent supporter. But I've always wondered why - virtually alone among all the CMS platforms - Drupal continues to omit a default text editor.
I would like to appeal to the Drupal community for two things.
First, please support the inclusion of a default text editor in future versions. CK Editor, YUI, TinyMCE - it doesn't really matter. Just pick something. It can always be switched out later. Including an editor by default will go a long way toward making a good first impression with new users.
Second, let me say how much I respect Drupal developers and the amazing CMS they have built. I only ask that you leave a little room at the table for some of the other important stakeholders that may not always feel heard within the community. I'm talking about the designers, the marketers, information architects, copywriters and even executive decision makers who work together to build great websites. There are more of us out here than you may think. And we would like a default editor, please. It will make the job of selling Drupal to new users much easier.
And that's a good thing for everyone, don't you think?
James Duncan: Why Zack went medium format
Zack Arias has been bitten by the medium format bug and for good reason. The images that a medium format digital back can put out are amazing. I’ve long been a fan of Zack’s work and look forward to seeing where he goes next now that he’s working slower and bigger.
Linked by James Duncan Davidson.
Christian Perrier: 2012 update 8 for Debian Installer localization
- Kannada compeltes level 1 for the first time
- Asturian, Bosnian complete level 1
- Indonesian completes level 2
- Progress for Dzongkha in level 2
- Progress for Indonesian and Turkish in level 1
- 32 languages 100%: ar ast bg bs cs de el eo es fa fr gu hi it ja kk km kn ko mr nb nl pl pt ru sk sr sv ta th uk zh_CN
- 3 languages 99%: si te tr>
- 1 language 98%: id
- 1 language 97%: eu
- 2 languages 96%: be he
- 5 languages 95%: bn dz et ro zh_TW
- 2 languages 94%: da ga
- 3 languages 93%: hu is lo
- 1 language 92%: sl
- 2 languages 91%: pa vi
- others are 90% or below
Status for D-I level 2 (packages that have localized material that may appear during default installs, such as iso-codes, tasksel, etc.):
- 23 languages 100%: bg cs da de eo es fa fr he id is it ja kk nl pl pt ru si sk tr uk zh_CN
- 4 languages 99%: be sl sv th
- 6 languages 98%: ast dz ca eu pt_BR ro
- 1 language 96%: nb
- 2 langauges 95%: el fi
- 5 languages 94%: ar gl hr vi zh_TW
- 6 languages 92%: bn bs hu ko ne sr
- 9 languages 91%: ga gu ka km lt mk mr ta te
- others are 90% or below
Status for D-I level 3 (packages that have localized material that may appear during non-default installs, such as win32-loader)
- 30 languages 100%: be bg bs ca cs de el eo es fa fi fr ga gl he is it ja kk nb nl pl pt ru sk sr sv th tr zh_CN
- 2 languages 98%: hu uk
- others are 90% or below
Christian Perrier: Debian Installer fully translated into Kannada
No, this is not about D-I being translated into the variants of English and French spoken with a funny accent in a very big country located north of the United States of America, where they play ice hockey against mooses, wearing red policemen suits, with fur hats and drinking maple syrup.
Kannada is the official language of the state of Karnataka, in southern India. The state that has Bangalore, the IT-leading city in India as capital.
Kannada is spoken by about 45 million people, roughly the population of Spain.
And, since yesterday, thanks to a local group lead by Vikram Vincent, Debian Installer is fully translated to Kannada.
As of now, this is the nth complete language of India along with Gujarati (46M speakers as first language), Hindi (180M, though some references mention 550M), Marathi (68M) and Tamil (62M).
Other supported languages of India are Telugu (99% translated, 70M), Bengali (95%, 71M plus 110M in Bangladesh), Punjabi (91%, 28M) and Malayalam (86%, 36M).
As you see, translators in India are really incredibly active and the free software community over there deserves some big light. We don't have many opportunities to meet up as traveling is not easy for contributors in India because, among other problems, of visa regulations for Indian citizens in many so-called western countries. So, really, I wanted to thank them again for this work.
Acquia: Drupal Gardens adds content access control, image tools, bulk operations, and more!
This is the 21st in our series of Drupal Gardens 'What's New' posts, and we think this one is especially worth celebrating. Need to restrict valuable content on your site to only privileged users? Want to crop, rotate or resize uploaded images in your posts? Wish you could click to perform bulk delete or other operations on lists of users, content or media? Long for better control over how comments are displayed on your site? With this release, we've got you covered.
A lot went into making these features simple, but powerful. For content access control, we started with the powerful Taxonomy Access Control module, and worked with maintainer Jess (xjm) to make it easier to assign access permissions with an alternative user interface. In addition, we created the TAC Redirect 403 module that allows custom upsell pages for different categories of restricted content. For cropping, rotating and resizing image media we created the Media: image editing module. For bulk operations we added the Views Bulk Operations module and worked with maintainer Bojan Živanović (bojanz) to simplify the UI. For comment customization, we created the Comment Goodness module. As usual, the patches and modules developed for these features were donated back to drupal.org so the entire community can benefit. We hope you find them useful!
*/ */The Drupal Gardens service was updated on Jan. 30th with the following new features and enhancements:
- Crop, rotate, and resize images in the WYSIWYG editor
Content editors can use the WYSIWYG editor to rotate, crop, and scale images on the fly. To learn more, see Crop, rotate, and scale embedded images.
- Customize how comments are displayed
Now you can sort comments per content type and customize commenting labels. For a YouTube-like comment experience, you can sort comments by ‘Newer first’ which also moves the comment form to the top of the comment stream. To learn more, see Customizing comments and sorting.
- Eliminate repetitive site administration tasks with bulk operations
For Basic subscription plans or higher, save time and eliminate repetitive administrative tasks by extending your views with Views Bulk Operations. With this feature you can select multiple items in a view (e.g. content, users, media, etc) and click to bulk delete, bulk publish, and more. To learn more, see Applying bulk actions to view items
- Restrict access to your site's content to privileged users.
For Professional subscription plans or higher, Drupal Gardens provides fine-grained access control to your site’s content using Taxonomy-based access control. With this feature, you can define access control rules describing which users (by role) can view, edit, or delete content. Then you can apply these access control rules to any content you want. Optionally, you can allow some users to see a teaser of the content, but then redirect them to another web page when they try to view the full version of content in order to upsell them or provide information about how they can get access to your premium content. To learn more, see Restricting access to site content.
- For a complete list of what's new, including updates to Drupal modules and bug fixes, see the release notes.
Justin Mason: Links for 2012-02-03
Politics.ie – Labour Senator takes to twitter to defend comments, insults all around him : In which Ben Walsh memorably takes on racist/right-wing comments from a Labour senator, and gets told to “go back to D4″. ho ho
(tags: twitter funny ireland politics)Éire Trea May Be the World’s First Irish-Eritrean Food Truck – SFoodie : Brilliant. ‘The menu lists dishes like battered sausages, Irish curry with chips — Irish curry tastes similar to Japanese curry, Hyland says — and shepherd’s pie alongside chicken doro-wat or vegetable stew served over injera bread. They’ve attempted a couple of fusion experiments, such as shiro (ground-chickpea stew) nachos, and have a few more ideas they’re playing around with, but it’s still early days.’ (via Ben)
(tags: curry irish eritrean food battered-sausages food-trucks)
Bryan Pendleton: Julian Sanchez reacts to Cory Doctorow's speech
(If you haven't already read or watched or listened to Cory Doctorow's speech yet, well, what are you waiting for?)
Julian Sanchez is a very interesting author. He works for the Cato Institute and writes for Reason magazine. I don't always agree with everything he says but I find his essays to be well-considered, well-written, and thought-provoking.
Sanchez has written an excellent follow-up article to Doctorow's speech: On the Enforcement Fantasy.
What is "the enforcement fantasy", according to Sanchez?
The misapprehension that technology is going to stay still long enough for traditional, targeted law enforcement approaches to effectively limit the scope and scale of copying.Sanchez's main point, I believe, is to support Doctorow's observation that regulation must be rooted in the practical and the realistic, and to try to re-direct the discussion toward effective regulation of desired behavior in a context that comprehends the onward march of technology:
We have a legal structure for incentivizing creativity that makes copying and public performance the key points of regulatory intervention. There isn’t some deep moral reason that it’s these points and not others. There are lots of other ways to enjoy creative works without paying the creator, after all...
We decided to regulate copying instead, because copying was a lot easier and cheaper to regulate when we wrote the copyright statutes.
...
But the thing we decided to regulate because it was rare and expensive is now as cheap and ubiquitous as all the other stuff we didn’t regulate because it was cheap and ubiquitous. The good news is, most people are still glad to pay for the content they really like, if it’s provided in a convenient form and at a reasonable price, even when they can (or did!) easily copy it free.
I'm pleased to see people continuing to study and discuss the issues, and trying to advance the debate in useful ways.
Andrew Pollock: [life] Zoe at 21 months
Wow, a lot happens in 3 months. I'm sure I've missed something...
I think the biggest achievement would be toilet training. Zoe's been using the toilet for some time now, but still wearing diapers, and just after Christmas (when she was sick and vomited on the carpet) we figured we had nothing to lose, so we ditched the diapers. I can count on the fingers of one hand the number of accidents she's had since then. I'm really happy to have this out of the way so early. Using a toilet away from home is still more of a challenge, but she seems to have very good bladder control, and fairly predictable bowel movements.
Speaking of sick, she was the sickest she's ever been around Christmas time. It coincided with her top canines finally coming through. She had a cold, which progressed into an ear infection, and she had this dreadful persistent dry cough, which then progressed into a dreadful productive wet cough. You knew she was really sick because she was extremely cuddly and lethargic.
Since around that time, her sleep has gone completely to hell. We've had some really bad nights where she'll wake up after a couple of hours of going down for bed, or for a while, she was reliably waking up at 4am and taking a good couple of hours to settle back down. Lately she's been sleeping through again, but waking up at 6am instead of the usual 7-7:30am. We bought a clock that changes colour at programmable times, so we're trying to train her that if she wakes up and the clock isn't green yet, she should try and go back to sleep. Not a huge amount of success there yet.
Christmas itself was good, but fairly quiet because Zoe was sick. Sarah managed to get a fabulous photo with Santa, which just fills me joy every time I look at it. We had some friends around for Christmas dinner, and Zoe vomited all over her new Cabbage Patch Kid doll and I think she threw up a couple more times between that day and the day after, so that wasn't much fun.
She's becoming more and more independent. "Zoe do it" is the most frequent thing out of her mouth, but fortunately she still accepts help as well.
We've also been getting plenty of sneak previews of the Terrible Twos. Fortunately they're pretty short-lived, but it's definitely going to be a challenge to my patience.
We'd been intending to keep Zoe rear-facing in the car until she was 2, which is the current recommendation over here, but I caved in recently when she was getting in the car and refusing the sit down (she'd stand up facing forwards and it was next to impossible to rectify the situation). After she did this to me a few times when I took her out in the car, I had enough and turned the car seat around. It's improved things a bit, but she still has her moments.
We also changed her day care, from the one day a week at a home day care, to two days a week at a commercial place. We were becoming more and more unhappy with the existing day care, and so decided to move her. It's a lot more money, but after just a week, we were seeing a noticeable change (for the better) in Zoe's response to going to day care, and she seemed to have picked up a bunch of new skills as well (sitting crossing her legs, holding a crayon like a pencil). The place she's in now is pretty new and very shiny. There's a couple of kids in her class that she knows from the local park, so overall it's looking like money well spent and definitely a change for the better.
Zoe had her first hair cut last weekend, and it was fairly uneventful. We went to this cute place in Palo Alto called Snipits, which was ludicrously expensive and I'd only ever take Zoe there for her first haircut. There was another kid there who was screaming bloody murder, and I think that unsettled Zoe more than anything else, so she was a bit uncomfortable to start with, but once the hairdresser put an Elmo DVD on, it was all good.
Sarah's Mum is coming over to visit for a couple of weeks in a couple of weeks time, so Zoe will be very happy to see her Nana. They're going to go on a cruise out of New Orleans down to Mexico and part of the Caribbean. Unfortunately I'm too busy at work at the moment to burn a week, so I'll just take a four-day weekend and check out New Orleans with them when they get back from the cruise.
Lisandro Damián Nicanor Pérez Meyer: The license mess with serial port Qt-based libs
So I have found two libs which seemed to have the above mentioned features: QExtSerialPort and QSerialPort.
QExtSerialPort seems to be the most recommended lib in the web. It features polled and signal-based functionality; it uses Qt's standard types inheriting QIODevice. But it does not states the license in any file within the source code. The original project page at SourceForge says it's in public domain. And the newer project page at Google code says it's under the new BSD license. I have asked in the mailing list for a clarification. So far nothing has changed (although in further threads the authors showed some willing to change this). And then I got to the point of finding a bug, but I don't want to spend time to track it down and make a patch without a clear license.
QSerialPort it's another lib with more or less the same features as QExtSerialPort. It's main LICENSE file says it's under the LGPL2, but licensecheck will say that the present files are LGPL3. Also, on reviewing the code, I found some minor stuff that could be improved. Well, I could contact the author and see if [s]he would receive the patches... but his site seems down. And I could not find a real-person's name in the code so far :-/
So I made a last attempt to try to get QExtSerialPort in a suitable license. If it doesn't suceed, I think I'll have to start writing one myself. The downside: I only use Linux, so there will be no multiplatform features unless someone else contributes it. Of course, if you have another option or any idea to share, I'll be happy to know it :-)
By the way, this should be my first post on Planet Debian in english, so hello planet!
Mike C. Fletcher: What to play with?
I'm hoping to have a few weeks to work on my own projects before I dive into working on other people's projects again (that might not pan out, but I'm hoping), so, here's a brain-dump of what I'm considering playing with:
- write a simple, generic shader-based legacy-free scenegraph engine (basically transplant the modern parts from OpenGLContext and leave behind the old crud, then translate the core into C/C++)
- turn Sillescope into an Android app (that shouldn't take too long, I just got annoyed at the GLES limitations last time and stopped 1/2 way)
- learn Haskell (though the "Haskell for Python Programmers" article honestly left me thinking "this is dumb" much of the time)
- contribute to a game engine (maybe Ogre, maybe 0AD)
- add a GLES binding to PyOpenGL
- play with PyPy now that I have a machine that compile it
- build a basic HTML5 Canvas or WebGL game engine
- update and modernize StarPy (I think no, as I have spent the last 18 months on VoIP and Django)
- update Django-jqm with latest JQuery Mobile, provide a JQM admin interface (again, not likely, just spent the last 18 months in Django)
Any other suggestions? I'm not currently concerned about utility or practicality, just fun things with which to spend a few weeks to recharge my programming-enjoyment batteries.
Juho Vepsäläinen: Blog Highlights of '11
I think blogging is slowly starting show its advantages. Just a while ago I needed to solve certain Django specific problem. After googling around I happened to find the solution at my blog. In essence this blog serves as a kind of auxiliary memory of mine. As a side benefit some other people might find my ramblings useful too. This in turn might lead to new chances. Blogging is definitely a good way to market yourself if you're into that sort of thing.
There has been some talk on whether or not blogging is dying. The basic premise is that social mediums such as Facebook and Twitter are eating its popularity. That's probably partially true. I believe blogs will remain to have some influence. After all you'll need something to discuss and tweet about. Most importantly blogs are more permanent by nature. It's easier to refer back to some concrete blog post than some obscure Twitter conversation ages ago. Different mediums serve different purposes.
Now that I got the intro bit out of the way, let's take a look at the year. Quite a few things happened. While at it I'll try to outline some possible ideas for the next one. It's not like I'm running out of ideas. On the contrary. There's still plenty of material left I need to get out there sooner or later.
Read more »
Mediacurrent: When disaster strikes, strike it back
I knew the moment my laptop didn't wake from sleep mode something was amiss. Having retired to my office safe haven for the evening I just wanted to wrap up a few items, log my time and call it a night - the basic end to any Drupal developer's day. My Macbook, however, had other plans.
It was the quintessential nightmare for those of use who live on our computers, a dream we often visualize as worse-case situations but often do nothing to lessen the pain of actualities: a complete computer crash with limited hope of a reboot. But despite the Macabre vibe usually surrounding such thoughts, it's something that doesn't always have to be the ultimate disaster.
Jan Materne: Java-Cron-Jobs with Spring and Quartz
We have several Jobs running the business. At the moment they are implemented as Spring-driven TimerTasks. But the next job should be run only nightly and a cron-like configuration syntax would be fine.
So I found Quartz and had to integrate that. For getting familiar with Quartz+Spring I wrote a small proof of concept.
The job implementation is just a POJO with a public void method. It should not throw any exception. The bean can be configured via usual Spring DI:
public class MyBean { private String message; public void doIt() { System.out.println("Hello World: " + message); } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }So fine. But how to test? For this PoC a very simple test is ok – just wait for some Quartz run and check the output manually:
import static org.junit.Assert.assertNotNull; import org.junit.AfterClass; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class QuartzTest { @Test public void context() { System.out.println("Starting Spring and within that: Quartz"); ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-config.xml"); assertNotNull(ctx); } @AfterClass public static void sleep() throws InterruptedException { System.out.println("Wait for job output"); Thread.sleep(8000); System.out.println("ready"); } }When using Spring, we have to provide the configuration.
First I define my Job-bean
After that I configure Quartz:
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" scope="singleton"> <property name="triggers"> <list> <!-- trigger list --> <ref bean="job1" /> </list> </property> </bean>The binding between job and Quartz is done via a configured CronTriggerBean.
<bean id="job1"> <property name="cronExpression" value="0/2 * * * * ?" /> <property name="jobDetail"> <bean> <property name="name" value="job1" /> <property name="group" value="nightlyJobs" /> <!-- Delegieren auf unsere Bean und unsere Methode --> <property name="targetObject" ref="myBean" /> <property name="targetMethod" value="doIt" /> <property name="concurrent" value="false" /> </bean> </property> </bean>This CronTriggerBean defines two values:
1. cronExpression specifies when to run the job. An explanation about that syntax can be found at http://www.quartz-scheduler.org/documentation/quartz-1.x/tutorials/crontrigger.
2. jobDetail specifies a JavaBean with information about the job. But we dont have to write this Bean, we just can configure the generic one from Spring:
- name and group for controlling the execution via control interfaces
- targetObject and targetMethod for the delegation to our JobBean
- specify if this job should run in concurrent mode (where concurrent means in one VM!)
Building this sample with Maven is easy. You’ll need just following dependencies:
- org.springframework::spring-core::3.0.5.RELEASE
- org.springframework::spring-context::3.0.5.RELEASE
- org.springframework::spring-context-support::3.0.5.RELEASE
- org.springframework::spring-tx::3.0.5.RELEASE
- org.quartz-scheduler::quartz::1.8.5
- junit::junit::4.9::{scope=test}
As far as I read you can’t use Quartz 2.x because Spring 3 doesnt support that. But I havent tried it.
When running you’ll get this output:
Starting Spring and within that: Quartz ... logs from Spring ... infos from SLF4J INFO: Starting Quartz Scheduler now Wait for job output Hello World: TEST Hello World: TEST Hello World: TEST Hello World: TEST Hello World: TEST readyFSF Blogs: Stop ACTA in Europe, February 11th
Last week we told you of the ongoing move in Europe against ACTA — now coordinated protests are taking place across Europe on February 11th, and here's how you can get involved.
Read 'Signed, not sealed' and contact your country's Members of the European Parliment
Get involved!- Join the ACTA group on reddit where protests are being organized.
- Read Stop ACTA in German or Stop ACTA in English.
- Check out the ACTA Protest wiki for information on starting or joining a protest in your area.
If you're not in Europe, please help spread the word to people who are. Defeating it in Europe is the first step to ending it once and for all.
For a refresher on why ACTA threatens free software, see http://www.fsf.org/campaigns/acta and the impact of ACTA on medicines.
Thank you for speaking up against ACTA,
Matt, Josh and John
Stop ACTA in Europe, February 11th
Last week we told you of the ongoing move in Europe against ACTA — now coordinated protests are taking place across Europe on February 11th, and here's how you can get involved.
Read 'Signed, not sealed' and contact your country's Members of the European Parliment
Get involved!- Join the ACTA group on reddit where protests are being organized.
- Read Stop ACTA in German or Stop ACTA in English.
- Check out the ACTA Protest wiki for information on starting or joining a protest in your area.
If you're not in Europe, please help spread the word to people who are. Defeating it in Europe is the first step to ending it once and for all.
For a refresher on why ACTA threatens free software, see http://www.fsf.org/campaigns/acta and the impact of ACTA on medicines.
Thank you for speaking up against ACTA,
Matt, Josh and John
Joey Hess: more on ghc filename encodings
My last post missed an important thing about GHC 7.4's handling of encodings for FileName. It can in fact be safe to use FilePath to write a command like rm. This is because GHC internally uses a special encoding for FilePath data, that is documented to allow "arbitrary undecodable bytes to be round-tripped through it". (It seems to do this by encoding the undecodable bytes as very high unicode code points.) So, when presented with a filename that cannot be decoded using utf-8 (or whatever the system encoding is), it still handles it, and using the resulting FilePath will in fact operate on the right file. Whew!
Moral of the story is that if you're going to be using GHC 7.4 to read or write filenames from a pipe, or a file, you need to arrange for the Handle you're reading or writing to use this special encoding too. I use this to set up my Handles:
import System.IO import GHC.IO.Encoding import GHC.IO.Handle fileEncoding :: Handle -> IO () fileEncoding h = hSetEncoding h =<< getFileSystemEncodingEven if you're only going to write a FilePath to stdout, you need to do this. Otherwise, your program will crash on some filenames! This doesn't seem quite right to me, but I hesitate to file a bug report. (And this is not a new problem in GHC anyway.) If I did, it would have this testcase:
# touch "me¡" # LANG=C ghc Prelude> :m System.Directory Prelude System.Directory> mapM_ putStrLn =<< getDirectoryContents "." me*** Exception: <stdout>: hPutChar: invalid argument (invalid character)Since git-annex reads lots of filenames from git commands and other places, I had to deal with this extensively. Unfortunatly I have not found a way to read Text from a Handle using the fileSystemEncoding. So I'm stuck with slow Strings. But, it does seem to work now.
PS: I found a bug in GHC 7.4 today where one of those famous Haskell immutable values seems to get well, mutated. Specifically a [FilePath] that is non-empty at the top of a function ends up empty at the bottom. Unless IO is done involving it at the top. Really. Hope to develop a test case soon. Happily, the code that triggered it did so while working around a bug in GHC that is fixed in 7.4. Language bugs.. gotta love em.
Bartosz Feński: Feński’s law
Compilation of Linux kernel takes about an hour.
Assuming you’re using recent kernel and usual hardware available on the market at that time.
Thank you for your attention.
Appnovation Technologies: Date Localization
I am working on a multilingual site which requires me to localize the date format for each enabled language.
Here are the available languages and their date formats:
* Spanish(es) - j de F, Y
* German(de) - j. F Y
* Japanese(ja) - Y年n月j日
In order to achieve this, I have enabled date_locale and its dependencies(date_api, locale).
Here are the steps that I took in order to localize the date format:
1) Navigate to "Site Configuration" > "Date and time" > "Formats" > "Add Format".
2) Create the custom format for Spanish and Japanese languages.
Hibernate 4.0.1 pom.xml for
I have been avoiding using Hibernate for a while now. I have been using alternatives such as the reference implementations eclipselink or openjpa. But I have to keep up to date for our JBoss training sessions where the more developer focused training sessions often cover examples of using JBoss for EJBs. If you using JBoss then its safe to just use the contents of the <jboss-home>/clients directory and know its compatible with the version of JBoss you are running. If you using maven then check them into your local repo.
JBoss and HibernateIf you prefer a more light-weight approach to using hibernate and like maven then getting compatible version for the various libraries in the pom.xml can be a little tricky. Here is the pom.xml extract for Hibernate 4.0.1 release. Note this is for Hibernate only. If you pull in the -all dependency you will end up with JGroup and Infiband jars which are for multicating and cluser management. Not needed by most developers.
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.0.1.Final</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>4.2.0.Final</version> </dependency> <dependency> <groupId>org.hibernate.common</groupId> <artifactId>hibernate-commons-annotations</artifactId> <version>4.0.1.Final</version> <classifier>tests</classifier> </dependency> <dependency> <groupId>org.hibernate.javax.persistence</groupId> <artifactId>hibernate-jpa-2.0-api</artifactId> <version>1.0.1.Final</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>4.0.1.Final</version> </dependency> <dependency><groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.0.0.GA</version>
<scope>provided</scope>
</dependency> <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.4</version>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>3.1.0.CR2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.4</version>
</dependency> Logging and Hibernate 4.0.1 Hibernate makes use of the simple logging framework for Java (slf4j) and jboss-logging to allow you to use your favourite logging backend. You can leave out the last 3 dependencies if you don't want logging or just change the last entry to use the appropriate jar for your logging backend.
Christian Grobmeier: The 10 rules of a Zen programmer
On a rainy morning I found myself sitting on the desk thinking about efficient working. Before I started as a freelancer I had some days were I worked lots but could look only back on a worse outcome.
I started with Zen practice back in 2006. What clearly came to my mind before a good while was: the old Zenmasters alredy knew before hundreds of years, how today programmers should work. Even when I don’t like these “be a better programmer” posts, I want to outline some of my thoughts from that morning. It shall serve me as a reminder, but if you have some ideas about it, feel free to comment.
1. FocusIf you have decided to work on a task, do it as good as you can. Don’t start multiple things at the same time. Do only one thing at one time. You’ll not become quicker, just you work multithreaded. If you work multithreaded you’ll become exhausted, make more errors and loose time to jump from one task to another. This is not only about programming, this is a general tip.
Kodo Sawaki says: if you need to sleep, sleep. Don’t plan your software when you try to sleep. Just sleep. If you code, code. Don’t dream away – code. If you are so tired that you cannot program, sleep. Even known multitaskers like Stephan Uhrenbacher meanwhile have decided to work singlethreaded. I have made a similar experience to Stephan and finally I wrote Time & Bill, a time tracking tool. Goal was to track my time so easily that I even do it for small tasks like a phonecall. Now I can create a few stopwatches at the beginning of the day and track my time with only one click. The outcome was a desaster: sometimes I just worked a few minutes on a task until I moved on to the next one. Now I am better. Similar to the Pomodoro technique I plan a few time slots and concentrate on them. No chatting, no sleeping, no checking out of a new great game on the Appstore.
2. Keep your mind cleanBefore you work on your software, you need to clean up your memory. Throw away everything in your mind for the time being. If you have trouble with something, don’t let it influence you. It is mostly the case that trouble will go away. If the trouble is so heavy that you can’t let it go, don’t work. Try to clear things up. But when you start working, let the outer world shape away.
Something exciting on the mailinglist? Leave it there. You can follow the exciting stuff again – later. Shutdown what fills your mind with shit: close Twitter, Facebook, your E-Mails. You should even mute the ringing of you mobile and leave it in your pocket. You can say it is similar to item #1, focus. But there is one more restriction: don’t use that tools before work or at lunch. They connect you with the outer world and probably bring up some new trouble or things which require you attention.
Think like this: at most times your mind is pretty clean when you wake up at the morning. If it is not, some sports helps (I do long distance running). If you feel clean and refreshed, go to work and work as good as you can. When you leave your work then you can fill up your mind with clutter. You’ll see it is not so much fun if you have a full working day behind you. Twitter and Co are consuming much of your energy. Do not think: it is just a minute. It is not.
You know it already.
3. Beginners mind.Remember the days were you were a beginner. Or memorize, if you still are one. You have never learned enough. Think of yourself as you were a beginner, every day. Always try to see technologies from a beginners mind. You can accept corrections to your software better and leave the standard path if you need it more easily. There are some good ideas even from people who don’t have your experience.
Was there ever a software build twice, the same way? Even if you copy software it is somehow different.
4. No Ego.Some programmers have a huge problem: their own ego. But there is no time for developing an ego. There is no time for being a rockstar.
Who is it who decides about your quality as programmer? You? No. The others? Probably. But can you really compare an Apple with a Banana? No. You are an individual. You cannot compare your whole self with another human being. You can only compare a few facettes.
A facette is nothing what you can be proud of. You are good at Java? Cool. The other guy is not as good as you, but better with bowling. Is Java more important than bowling? It depends on the situation. Probably you earn more money with Java, but the other guy might have more fun in life because of his bowling friends.
Can you really be proud because you are a geek? Programmers with ego don’t learn. Learn from everybody, from the experienced and from the noobs at the same time.
Kodo Sawaki once said: you are not important.
Think about it.
5. There is no career goal.If you want to gain something and don’t care about your life “now”, you have already lost the game. Just act as good as you can, without looking at the goal you might reach after a long time.
Working for 20 years to become a partner? Why aren’t you working as hard as possible just because it is fun? Hard working can be fun. A day without work is a day without food is a Zen saying.
There is no need to start happiness after 20 years. You can be happy right now, even when you are not a Partner or don’t drive a Porsche. Things change to easily. You can get sick. You can get fired. You can burn out (if you follow all these items I guess likeliness is low).
Until these bad things happen, just work as good as you can and have fun with doing it. No reason to look at the gains of the collegs. No reason to think about the cool new position which you didn’t get.
After all, you will reach something. You’ll end up with nice memories, maybe a good position – and 20 excellent years. Every day is a good day.
If you ever come to the point were you think that working at your company is no fun at all you must leave immediately. NEVER stay at a company which does take away the happiness in your live. Of course, this is only possible in the rich countries, were people have the choice to go away. But if you are living in such an good environment, do it. Go away without regret. You have no time to waste, you are probably dead tomorrow.
When you have no career goal going away is easy.
6. Shut up.If you don’t have anything to say, don’t waste the time of your colleagues. This doesn’t make you look wimpy. Everyday you work you need to try not getting on someones else nerves. Imagine if everybody would try this – what a great working place would that be? Sometimes it is not possible. Try hard, you will like it.
If you don’t develop an ego it is pretty easy to shut up and care on the things you have something to tell. Don mix up your ego with your “experience” and always remember: you are a beginner. If somebody has a good idea, support the idea.
7. Mindfulness. Care. Awareness.Yes you are working. But at the same time you are living and breathing. Even when you have some hard times at work you need to listen to the signs of your body. You need to learn about the things which are good for you. This includes everything, including basic things like food. You need to care for yourself and for everything in your environment – because after all, the water you drink is the water which runs in the river. Because you are living only for yourself. You live alone and you’ll die alone. World goes on, even without you.
Avoid working situations you don’t like. Avoid working for free if it means you will have no fun and keeps you away from your bed. Let go what doesn’t make you happy. Working for free sounds is just theory? Consider the people doing Open Source in their prime time. If you have subscribed to some projects mailinglist you probably know what heat there is (sometimes). If you don’t have fun with that – stop doing it. I know a bunch of people who work in an Open Source environment they don’t like. Again with Time & Bill I have tracked the time I spend in 0pen Source projects and was surprised how much time I loose there – esp. on projects I didn’t like so much.
Having this in mind, some people think they are only happy when they have prime time and can spend the evening with an xbox and some beer. While this is a good idea from time to time, it is not necessary that the whole time in your life is “fun”. If you can avoid situations you don’t like, avoid them (like I said above). But sometimes there is need to something really shitty. Like for example manually copy/pasting stuff from your managers Excel sheet into phpmyadmin. This can take you days, and it is really boring. It is no fun, but sometimes you need to do such stuff. You cannot always quit your job when you got a boring task. Zen Monks are not to shy with their work too. They get up at 4am (sometimes earlier, sometimes later, depends on the convent) and start meditation and work (they even consider work meditation practice). They have stuff to do like cleaning the toilets. Or working in the garden. Or as a Tenzo, they cook. They do it with all the care they can get. Whatevery they do, they do it without suffering and they are (or should be) happy, because every second, even the second where they are cleaning toilets, is a second of their life.
That being said: stop crying, if you need to copy/paste excel. Just do it. Don’t waste your energy with such things, they will pass. Become the best excel copy/paster out there instead.
If you suffer a heart attack, people will probably say: “uh yes, he really worked too much, he even worked for me for free at night”. Nobody can guide you to the other world. This last step is taken by us alone. You cannot exchange anything in this world. Not even a fart. So it is up to you to take care, in every second. If you die, you die. But when you live you live. There is no time to waste.
“Care” is a huge word in zen buddhism (and I think in every form of buddhism). I cannot express everything which needs to be said. it is difficult to understand the different meanings of “care”. Propably you are better with the word “awareness”. You must be aware of what you do, in every second of your life. You must be mindful in your life. Otherwise you waste it. But, of course, it is up to you to do so, if you like.
8. There is no BossYes, there is somebody who pays you. There is somebody who tells you what needs to be done. And he can fire you. But this is no reason to give up your own life or to become sick of your work. Finally your Boss has no control about you. It can even be doubted that you have control about you – but don’t lets go down this path.
Back to your Boss: he can make your life worse if you allow him to do so. But there is a way out. Say “No” if you need to do something which makes you sick or is against your ethics. What will happen? In worst case he will fire you. So what? If you live in western nations and if you are a coder (which is very likely when you read this) you’ll get another job.
I don’t mean to say “No” to tasks like copying CSV Data to HTML. I am speaking of 80 hours weeks and you feel your body breaks. Or if you feel that your kids could need some attention too. Or if you are forced to fire people just because your Boss doesn’t like them. Or if you are a consultant and get the job to develop software for nuclear plants (some might say it is perfectly fine to work for nuclear power companies – it is against my ethics and serves as an example) or for tanks. You can say “No”.
9. Do something elseA programmer is more than a programmer. You should do something which has nothing to do with computers. In your primetime, go sailing, fishing, diving. Do meditation, martial arts or play Shakuhachi. Whatever you do, do it with all the power you have (left). Like you do at your worktime. Do it seriously. A hobby is not just a hobby, it’s expression of who you are. Don let anybody fool you, when he says hobbies are not important. Nowadays we can effort having hobbies. I have recorded several CDs and wrote fantasy books (the latter one unpublished, I must practice more). These things have made me to the person I am now, and finally they have led me to Zen and this blog post. These days I practice Zen Shakuhachi. It is a very important aspect to my daily life.
10. There is nothing special.A flower is beauty. But it’s just a beauty flower – nothing more. There is nothing special around it. You are a human who can program. Maybe you are good. There is nothing special around you. You are of the same kind as I am or all the others on this planet.
You need to go in the loo and you need to eat. Of course you need to sleep. After (hopefully) a long time you will die and everything you have created will be lost. Even pyramids get lost, after a long time. Do you know the names of the people who build up a pyramid? And if you do, is it important that you know? It’s not. Pyramids are there, or not. Nothing special.
Same goes to your software. The bank is earning money with your software. After you leave, nobody remembers you. There is nothing wrong around it. It is the flow of time. Nothing you should be worried about it. If you are living after the first 9 rules, you’ll see that this last project was a good and funny project. Now it’s simply time to go on and concentrate on something else.
If your comapany closes because of financial problems, no problem. Live will go on. There is no real need for a xbox, a car or something else. Most people on this planet live in deepest poorness. They don’t care on a xbox, because they would be glad to get some food or even water.
So… why exactly are you special? Because you had the luck to be born in the western territory? Because you can code? No, there is nothing special around it. You can let go you ego and live freely. Enjoy the colors and the smell of flowers around. Don’t be too sad when the winter comes and don’t be too happy when spring comes back. It is just a flow. Keep it in mind when somebody denies your application. Because the company is not so special that you need to be worried about the job.
DisclaimerI am not a Zen monk. I am just practicing and learning. Please ask your local Zen monk if you feel there is something you need to understand deeper. Of course I can try to answer on this blog, but well, I am just a beginner. Anyway I am glad about your comment and if you would send a tweet with this pages url if you liked this post. Thanks for reading!
