Bash Completion

Jag drog nyss in en ny installation av Ubuntu 12.10 och av okänd anledning var inte bash completion (eller autocompletion) funkis. Visade sig att i /etc/bash.bashrc var följande rader utkommenterade, vilket jag ändrade och sedan var allt grönt igen.

# enable bash completion in interactive shells
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

Jag använder oftast ihop med sudo aptiTAB instTAB progrTAB, men det finns även maven och gradle completions!

Not Invented Here, nu som lib!

Sprang idag över följande kanonsköna lib: NIH Utility Library (libnih). Från beskrivningen:

libnih is a small library for C application development containing functions that, despite its name, are not implemented elsewhere in the standard library set.

libnih is roughly equivalent to other C libraries such as glib, except that its focus is on a small size and intended for applications that sit very low in the software stack, especially outside of /usr.

It expressly does not reimplement functions that already exist in libraries ordinarily shipped in /lib such libc6, and does not do foolish things like invent arbitrary typedefs for perfectly good C types.

Spela in skrivbordet

Jag har tidigare använt XVidCap för att spela in (delar av) det som syns på min skärm. Det har alltid fungerat fint men idag ville det inte fungera som det skulle och jag tvingades testa något nytt. Tur var det för “Desktop Recorder” (aka recordMyDesktop) är ett kanonverktyg. Kommer garanterat användas flera gånger (vid inspelning av buggar t ex). Finns även panoreringsstöd, dvs att inspelade ytan följer med musen.

Screenshot of Record My Desktop

Desktop Recorder

Vettig Maven JSLint-plugin

Äntligen en ordentlig maven-plugin som kör jslint på javascript-koden. Version 2.0.2 har bättre dokumentation än 2.0.1. Här är en snippet från en pom:

<project ...>
	<build>
		<plugins>
			<plugin>
				<groupid>com.googlecode.jslint4java</groupid>
				<artifactid>jslint4java-maven-plugin</artifactid>
				<version>2.0.2</version>
				<executions>
					<execution>
						<id>lint</id>
						<phase>compile</phase>
						<goals>
							<goal>lint</goal>
						</goals>
						<configuration>
							<sourcefolders>
								<sourcefolder>${basedir}/src/main/webapp/js</sourcefolder>
							</sourcefolders>
							<failonerror>true</failonerror>
							<options>
								<browser>true</browser>
								<forin>true</forin>
								<fragment>true</fragment>
								<undef>true</undef>
								<nomen>true</nomen>
								<plusplus>true</plusplus>
								<predef>Ext,jQuery</predef>
								<sloppy>true</sloppy>
								<vars>true</vars>
								<white>true</white>
							</options>
						</configuration>
					</execution>
				</executions>
			</plugin>
</plugins></build></project>

Eclipse Application & Ubuntu/Gnome

Jag har blivit vän med Unity (när det inte krashar) genom att Compiz Config (ccsm) fortfarande tillåter mig göra allt jag vill. Efter ett par månaders användande av så skall det sägas att Gnome 3 känns som en mer slimmad och snyggare upplevelse än Unity (notifications fungerar riktigt bra, gillart skarpt), men också mer låst för tweakande.

Hur som helst, efter att man dragit in sina egna versioner av saker så ser det lite roligare ut att få upp fina ikoner för programmen man kör. Jag glömmer dock alltid var man gör detta och detta är min minnesanteckning för detta. :)

fredrik@wendt-machine:~$ cat >> .local/share/applications/eclipse-jee.desktop
[Desktop Entry]
Name=Eclipse JEE
Exec=/opt/eclipse-jee/eclipse
Icon=/opt/eclipse-rcp/icon.xpm
Type=Application
Screenshot showing Eclipse Icon in application launcher

Eclipse-ikon i programstartaren

Cake Sharing Public License

Jag stötte på en ny licens idag på jobbet – den används för ett internt verktyg. Klockren! :)

CAKE SHARING PUBLIC LICENSE
---------------------------
By using and installing this tool (hereby referred to as TOOL)
the USER (i.e a user of this TOOL) acknowledges:
- to always offer the CONTRIBUTORS (see list below) of TOOL cake/ice
cream/sweets (hereby referred to as SWEETS) whenever USER offer
someone else SWEETS in work-related environments (hereby referred
to as WORK SWEETS)
- to remind other USERs who are serving WORK SWEETS about this
agreement if they are not aware of it or have forgotten.
Redistribution of TOOL requires this license to be included.
In the case of redistribution, the effective CONTRIBUTORS is
the union of all CONRTIBUTORS from dependant software.
Contributing to TOOL requires the contributor to name herself/himself
in contribution list.

CONTRIBUTORS (so far):
...

Fantastisk utvecklarvår i Göteborg 2012!

Aldrig förr har utvecklarcommunityn i Göteborg varit så sprudlande som den är nu, iaf om du frågar mig! Till att börja med har vi minst tre rejäla konferenser, tyvärr inte fyra då Nordic Ruby går av stapeln i Stockholm i år. Hur som helst – ovanpå det har vi ju javaforum, nforum och alla user groups på Meetup, liksom SweNug, Alt.net, OWASP och en mängd andra aktiviteter som t ex Göteborgs Agilister och allt som anordnas av DataFöreningen Sverige (DFS).

Att vi har detta utbud i Göteborg tycker jag är kanon! Det ger varje utvecklare en möjlighet att välja själv, att inte bara vara tvingad till att stirra blint på en leverantörs erbjudanden, bara en teknik, bara en grupp – dvs inte bara smalna av och ramla in i “samma gamla hjulspår”, utan verkligen har en möjlighet att bredda sin insikt, kompetens och sitt nätverk.

Det som är än mer glädjande är att i all denna “konkurrens” så har verkligen de flesta user grupper jag varit i kontakt med satt just utvecklarna i första rummet. Det finns ett litet undantag som sätter sina egna ekonomiska intressen före utvecklarna i user groupen och försöker kontrollera informationen som når utvecklarna, istället för att låta medlemmarna själva bestämma vad de tycker. Jag gissar att detta blir uppenbart så småningom och att en ny grupp bildas spontant – som är till primärt för utvecklare, inte ett bolags ekonomiska intressen.
(Min uppfattning är att utvecklare är intelligenta, självständiga individer som är helt kompetenta nog att ta egna informerade beslut, inte få “så här skall du tycka och göra” nedtryckt i halsen. Nåväl, det lär som sagt självregleras inom tid.)

Så, without further ado: här är min lista på vårens toppar i Göteborg 2012!

Konferenser

WebCoast, 16-18 mars, Lindholmen Science Park (en unconference)
Software Passion Summit, 19-20 mars, Clarion Hotel Post (Centralstationen)
Scandinavian Developer Conference, 16-17 april, Svenska mässan (Korsvägen)
dev:mobile, 12 juni, Folkets hus (Järntorget)

User Groups etc

(Dessa har ju återkommande möten och byter emellanåt plats – därav blir datum/adress inte så intressant.)

OpenJDK session at JFokus, Stockholm

OpenJDK logotype

Yesterday evening some 30 people met to talk about OpenJDK. Apart from one unlucky fellow that asked for “pointers on how to move from Java 5 to Java 6″, it was mostly political and community related issues discussed. The only technical topic discussed was really the (awkful) build system.

Access to properties like in java fx

The first topic that came up was a question whether Java SE (or rather “Java the language”) would get property access added, like that available in JavaFX. No one could really answer, the person asking for it was asked to join the mailing list(s) and ask for this feature.

Build infrastructure/system

Next up was the question if Oracle/OpenJDK are working on improving the build system, as well as restructuring the code base to make it easier to find your way in it. It’s apparently quite hard to navigate and find the parts your looking for.

Historically, we were told, Java started out as a code base for Solaris. Then there were some thing added for some other OS, and another, and another and so – it was never really a multiplatform layout set out from the beginning.

Photo of Dalibor TopicOne suggestion was to make a “mocked OS”, which mocks everything out and makes for a good reference point when you want to start out support for a new platform. “Look at Windows” Dalibor Topić replied with some laughter following within the group. A more serious reply was to look at how the new Mac OS port is being handled. As I understood it, currently it lives by its own (in branches?) since Oracle has not decided to step up and support that platform yet. If it matures enough and reaches a quality level high enough for adoption, then Oracle might take on supporting it. Regardless, people wanting to port OpenJDK to a new platform can look at how this all works out.

IcedTea was mentioned of course, but I really don’t remember the reference to it, or the point made. :-)

OpenJDK contributors

Next question was out of pure interest from someone that wanted to know who, outside of Oracle, that contribute to the project these days.

  • Linux, BSD communities initially
  • Canonical, IBM recently
  • SAP contributed hotspot fixes, AMD for their CPUs
  • and academics/individuals

How do you contribute to OpenJDK?

Photo of Yara SengerThis was brought up by a Brazillian JUG organiser Yara Senger, and was discussed for quite a long time. Her focus, as I understood it, was to make sure to engage not only the top coders of the community, but people at all levels and most importantly people that have advanced from the “beginner” level. Some people made subtle points saying that not everyone might be up for the task – this is not your everyday Java bean your going to write …

On a more concrete level, Cecilia Borg, said that this is something they are in fact looking into and their current take is to try to engage the community via the user groups. The London JUG apparently has made some substantial work here, with code review programs, efforts on automating the manual tests that needs to be carried out for OpenJDK releases, and also the “adopt a JCP” program.

Photo of Cecilia Borg
“NetBeans did a good job [with engaging the community]” and lowering the barrier on getting involved and onboard.

Several times, it was said that “we need to provide a virtualbox image where everything’s set up” in order to move away from new comers spending time on simply trying to get it to actually build, and focus on getting “real” work done instead.

JEP for RIPE-MD

Photo of Leif-Jöran OlssonLeif-Jöran Olsson (ljo, from eXist-db fame) asked if there is work planned or going on for adding more non-proprietary cryptographic algorithms (such as RIPE-MD) now that MD5 sums for instance to an increasing level is being seen as non-reliable.  This led to a brief introduction on JEPs – JDK Enhancement Proposals (much like Python’s PEPs I assume – this was new to me). It was not clear to me who is allowed to add JEPs. But the discussion also led to the next topic:

How does one become a committer?

This is actually well documented under the Bylaws headline on openJDK website.

And that was 60 minutes of OpenJDK discussions.

Kodhumor

Sprang förbi http://www.javacodegeeks.com/2011/07/funny-source-code-comments.html?m=1 som bland annat bjöd på:

//When I wrote this, only God and I understood what I was doing
//Now, God only knows

vilket_är_lättast_AttLäsaTyckerDu

Jag har skaffat mig en åsikt: det_är_lättare_att_läsa_vanlig_text_så_här, änAttLäsaDetNärDetStårSammanSkrivetUtanNågonWhiteSpace. De flesta känner till att vi mnäskionr kan lsäa ord unta srröte poerblm bara start- och slutbokstaven står på rätt plats. FrsöökGröaSmmaaSakMedDtetaTxbtelcok. Så, jag har skaffat mig åsikten att underscore är en bra idé att använda i t ex namn på test(metoder). I JavaScript brukar de flesta testramverk erbjuda följande mönster:

TestCase("Nu testar vi logiken i UserManager", {
    "lägga till en användare": function() {
        var before = this.userManger.getUserCount();
        this.userManager.addUser("Fredrik", "Wendt");
        var after = this.userManger.getUserCount();
        assertThat(after, equals(before + 1));
    }
});

Det är då ganska lätt att se vad som gått fel när en rapport säger:

In Suite "Nu testar vi logiken i UserManager", the test "lägga till en användare" failed.

I Java kan vi inte använda blanktecken som del av identifierare. I Java 7 kan man iaf använda 1_000_000 för att skriva ut en miljon, yay! Men det löser inte problemet med att få läsbara namn på test(metoderna). Understreck till räddning!

Ett problem som följer med understreck är att Eclipse rätt ur lådan inte stödjer att hoppa inom identifierare som innehåller just understreck: ctrl+höger hoppar alltså till slutet av hela identifieraren. Med AnyEditTools (finns på Eclipse Marketplace) blir detta problem ett minne blott, och man får också hjälp att konvertera mellan Camel Case och Underscores. Perfekt julklapp! :)