New Google Analytics Dashboard Layout: the opposite of a dashboard?

New Dashboard – less useful

Old Dashboard – more useful

This question in the Google Analytics help forum with the title „New Layout: the opposite of a dashboard?“ nails down my opinion about the new Google Analytics. While I generally like the new glossy design which google rolls out throughout all of their apps I feel that the new Analytics dashboard is a huge step backwards especially in terms of usability. It seems Google in this specific case has not understood how people use analytics.

While researching I also came across this article where they say that this feature was ‚lost‘ and they are ‚working on it‘ (my favorite quote of every company’s support crew 😉 ).

To summarize: I really hope that the old dashboard will make it into the new Analytics, otherwise I will use the old version as long as possible. If you feels so too, please tweet, vote or take part in the discussions to make GA useful again.

 

 

Veröffentlicht unter Allgemein, Software-Development | Verschlagwortet mit , , | Kommentare deaktiviert für New Google Analytics Dashboard Layout: the opposite of a dashboard?

What are pros and cons for url structure of a SaaS multi tenant web-app regarding scalability / load-balancing?

I just posted the question above on Quora in hope to get some answers.

I would like to know the pros and cons of choosing a URL structure for a multi tenant web-application. I also think that this could impact scalability of the site when traffic grows.
The dimensions of the application I see are two main things:
– mini-apps
– customers can register per application
– the load/traffic hotspots can be for both (e.g. there could be one customer using very many resources and there could be also a mini-app which uses much more resources than other mini-apps. So we need to be able to route traffic to different machines / parts of the cluster, depending on the traffic patterns of either users and/or apps.

I thought about the following:

Approach 1:

Main domains for each app, for guest users / anonymous:
http://apps.nameofourwebapp.com/nameOfMiniApp1
http://apps.nameofourwebapp.com/nameOfMiniApp2

Once the customer is registered I thought about:
http://yourcompanyxyz.apps.nameofourwebapp.com/nameOfMiniApp1
http://yourcompanyxyz.apps.nameofourwebapp.com/nameOfMiniApp2

Approach 2:

The other way round I could also imagine:
http://nameOfMiniApp1.nameofourwebapp.com/
http://nameOfMiniApp1.nameofourwebapp.com/yourcompanyxyz

What are the advantages and disadvantages of both approaches especially with regards to scaling / load-balancing?

Does allow Approach 1 easier routing of traffic to different machines per customer (e.g. via Amazon Route53) than Approach 2?

If you have any thoughts on this question feel free to add an answer on this Quora question. Thanks.

Veröffentlicht unter Software-Development | Verschlagwortet mit , , , , | Kommentare deaktiviert für What are pros and cons for url structure of a SaaS multi tenant web-app regarding scalability / load-balancing?

How to use OAuth 2.0 authentication with Google’s GDATA Client Java Client Library

This article is for users who are using the Google Data Java Client Library (a.k.a. „gdata-java-client“) together with the Google API Client Library for Java (a.k.a. „google-api-java-client“).

For our app we started the  integration with Google Spreadsheets today and we were running into a problem related to authentication. The issue is that the Spreadsheet API is still based on the „older“ GDATA API but we wanted to to already use OAuth 2.0 for authentication which is part of Google’s new Client API for JAVA. Both APIs can co-exist besides each other as you can read in this migration guide.

The problem we faced was that the „older“ GDATA JAVA API for the SpreadSheet API has only methods for OAuth 1.0 or at least I wasn’t able to find any documentation and source code examples which showed how to use it with OAuth 2.0. I could only find examples of OAuth 1.0. The difference between OAuth 1.0 and OAuth 2.0 is that OAuth 2.0 only returns you an accessToken and rely fully on SSL, which frees you from signing and encryption stuff, while OAuth 1.0 returns you also a token_secret . In OAuth 1.0 you need to pass both things to each API call.

The problem was that the API does not seem to have any methods which only takes the accessToken. All methods I found require you to  pass things like OAuthParameters and OAuthSigner objects which are OAuth 1.0 related.
Thus the question was:
How can I tell my SpreadsheetService object to use my previously obtained OAuth 2.0 accessToken.

Solution:
I found the solution a bit between the lines here. It says that you need can set a special HTTP-Header (Authorization: Bearer ACCESS_TOKEN)

Java Code Example:

import com.google.gdata.client.spreadsheet.SpreadsheetService;

SpreadsheetService service = new SpreadsheetService("yourAppName");
service.setHeader("Authorization", "Bearer " + accessToken);
URL metafeedUrl = new URL("https://spreadsheets.google.com/feeds/spreadsheets/private/full");
SpreadsheetFeed feed = service.getFeed(metafeedUrl, SpreadsheetFeed.class);

List spreadsheets = feed.getEntries();
for (int i = 0; i < spreadsheets.size(); i++) {
SpreadsheetEntry entry = spreadsheets.get(i);
System.out.println("\t" + entry.getTitle().getPlainText());
}

Note: This code snippet assumes you received your accessToken using the new Google Java API as shown in this example.

After doing this the API call went through without problems and returned me a list of spreadsheets.

I hope that helps some people until google makes this more clear in their documentation or adds examples. Right now I found the documentation a bit confusion with all the different authentication mechanisms possible with the APIs. I also posted my solution here on StackOverflow.

Veröffentlicht unter Software-Development | Verschlagwortet mit , , , , , , , | Kommentare deaktiviert für How to use OAuth 2.0 authentication with Google’s GDATA Client Java Client Library

Weihnachtsgeschenkidee 2011 – Ein Ticayo zum ticken.

Jedes Jahr die Frage nach einem ausgefallenen Weihnachtsgeschenk für Freunde und Familie oder auch für Mitarbeiter und Kunden.

Dieses Jahr könnte die Antwort lauten: Ein Ticayo. Ticayo?
Das Ticayo ist ein nachhaltig im Erzgebirge produziertes Geschicklichkeitsspielzeug aus Holz. Dabei geht es darum, die an einem Strick befestigte Holzkugel so zu schwingen, dass sie wieder auf dem Holzstab landet bzw. sie wieder mit dem Holzstab aufgefangen werden kann.

Ausgedacht von guten Freunden von Tictoys, ist es seit diesem Jahr auf dem Markt und wartet darauf von euch „getickt“ zu werden. Ich habe selber 2 Ticayos und es entfacht eine regelrechte Sucht, immer besser zu werden. Auf Youtube kann man sich auch diverse Tricks auf Video ansehen und nachmachen.
Wem es gefällt, bitte rebloggen, und weitersagen oder selbst verschenken 🙂

Ticayo - rot

 

Jetzt auch in einer limitierten Winteredition verfügbar.

 

Veröffentlicht unter Allgemein | Verschlagwortet mit , , | Kommentare deaktiviert für Weihnachtsgeschenkidee 2011 – Ein Ticayo zum ticken.

How to add new gems to jruby in an Equinox OSGI Environment (or how to set jruby.home)

After I burned the midnight oil yesterday to debug into a problem I was having with getting the fastercsv gem to work with JRuby in my OSGI environment I decided to write a post about it and how I finally got it working.The solution is not super clean but it works and at least it helped me to understand some of the inner workings of how JRuby determines file locations and classpaths and uses classloaders to load files….and that all that is different in an OSGI Environment.

The problem

  • i want to use the fastercsv gem using require ‚fastercsv‘ in the jruby script i am calling using a ’new ScriptingContainer(…)‚ instance
  • jruby always errored out telling me that it can’t find the required gem
  • I have read JRuby 1.1.6: Gems-in-a-jar and lots of other blogs about it but it didn’t help so far

My Setup

  • custom web-application build from multiple OSGI-bundles and using the embedded Jetty server
  • there is one ’scripting‘ bundle where all code related to Java-scripting is included (e.g. JRuby)
  • in this ’scripting‘ bundle there is a lib-folder containing my jRuby-complete.jar which is added to the local classpath of that bundle (jruby-complete is NOT in my targetplatform and is not started as an OSGI-bundle here, but I use it inside my own OSGI bundle.
  • my OSGI Container is Eclipse Equinox (Equinox SDK Version 3.5m4)

The solution

The reason why all existing information out there didn’t really work for me was because I am using JRuby in an OSGI environment and the main difference is that classloading in OSGI environments is different, as each bundle has its own classloader. It seems that JRuby uses the wrong classloader when using ScriptingContainer so that it determines a wrong path of jruby.home environment.

Also the way I added the fastercsv gem to my system is a bit unusual and hacky, but I will improve this once I find a better way which is my next step. I have create installed the gem as described here (i didn’t create a jar) but I have copied the gem in my jruby-complete.jar (rename jar to zip, unpack, put fastercsv into the gems folder, zip it and rename it to jar again). That is hacky but I did that because JRuby is trying to find the gems in jruby.home which is by default in /META-INF/jruby.home inside the jruby-complete.jar.

In my opinion that would be enough actually so that JRuby can determine my new gem, but because of my OSGI container it was using the wrong classloader to load the file so JRuby ended up detemining a wrong ‚jruby.home‘ path. You can test this yourself by setting a breakpoint and debugging the method org.jruby.runtime.load.LoadService.init(List). There is a line

String canonNormal = new File(jrubyHome).getCanonicalPath();

In my case this path resolved to the current directory which was my Eclipse installation directory of the eclipse binary, but basically it was the wrong path. The path which was constructed there doesn’t even exist, and that’s the reason why my fastercsv gem could not be found.

We don’t need the path of the current directory – we need the the path of the current bundle which contains the jruby-complete.jar.

One solution was to set an environment variable (-Djruby.home=“/absolute/path/to/my/jruby-installation“) but I didn’t want to do that as I also had to unpack the jruby jar for that purpose, and I also don’t want to maintain another environment variable for each different server.

Later I found out that there is OSGiScriptingContainer which should take care of that and resolves jruby.home for the current bundle. But unfortunately I am running an old version of Eclipse Equinox and I got a NoClassDefFoundException as the class BundleReference was missing. An update of Eclipse Equinox in my target platform would have helped probably but I don’t want to upgrade now. So I had to find another solution.

My solution was to check the source of  OSGiScriptingContainer to find out what is actually going on there and I saw that they have a special way to determine the ‚jruby.home‚ in order to get an absolute path to the actual jruby-complete.jar which is used as a basis for all other lookups where relative paths are used (e.g. path like classpath:/…). The code which I have borrowed comes from OSGiFileLocator.java.

Long story short:
In order to let my ScriptingContainer use the correct jruby.home in my environment I have used the following code:

// SETTING JRUBY.HOME path
// Copyright notice:Code partly borrowed from org.jruby.embed.osgi.utils.OSGiFileLocator.getFileURL(URL)
// pretty hacky way abusing reflection
// might only work and is only required for Eclipse Equinox OSGI Environment
// we do it because we cannot use jruby's OSGiScriptingContainer.
// we couldn't use it because we are probably running on a old
// Equinox version which doesn't have the class BundleReference yet
// TODO upgrade Equinox to be able to use OSGiScriptingContainer to hopefully remove the code below
 
URL url = Activator.getContext().getBundle().getResource("/META-INF/jruby.home");
URLConnection conn = url.openConnection();
Method method = conn.getClass().getMethod("getFileURL");
method.setAccessible(true);
URL url2 = (URL)method.invoke(conn);
String path = url2.getPath();
if (path.endsWith("/")) path = path.substring(0, path.length() - 1); // remove trailing slash
 
System.setProperty("jruby.home", path);
 
container =  new ScriptingContainer(LocalContextScope.THREADSAFE, LocalVariableBehavior.GLOBAL);

After that change jruby got the correct path to jruby.home which was point to the real absolute path of my jruby-complete.jar so that all lookups for the gems where using the correct path.

e.g. /Users/me/development/workspace/.metadata/.plugins/org.eclipse.pde.core/synesty/org.eclipse.osgi/bundles/463/1/.cp/META-INF/jruby.home

Note, that you should be aware that this code is very specific for equinox osgi, a very hacky approach. It should only serve for educational purposes and should give you a hint in which direction to investigate if you are also having problems with jruby being unable to find your gems even though you are sure that it is there and you have already banged your head on the wall too many times 😉 …

Using OSGIScriptingContainer is much cleaner, but as I spent hours figuring this out here, I am sharing this with you anyway. Once I have a better solution I’ll try to update this post.

My next step will be to figure out how I could use the gems-in-a-jar approach to just add new gems to the classpath instead of repackaging the jruby-complete.jar.

Veröffentlicht unter Software-Development | Verschlagwortet mit , , , , , , , | 132 Kommentare

Erste praktische Erfahrungen mit der Scopevisio Onlinebuchhaltung

Scopevisio ist eine Buchhaltungssoftware im Software-as-a-Service (SaaS) Modell.

Allerdings ist dieser Dienst noch sehr neu und hat meiner Meinung noch viele Kinderkrankheiten. Ich möchte im Folgenden meine Erfahrungen seit Februar 2011 hier schildern und vor allem die Tricks und Workarounds teilen, über die man wahrscheinlich zwangsläufig stolpert und die man ohne den Support von Scopevisio nur schwer selbst lösen kann.

Positiv:
+ integriertes Homebanking, und damit sehr einfaches Buchen der Kontotransaktionen (ideal bei IST-Versteuerung)
+ integriertes ELSTER und Umsatzsteuervoranmeldung fürs Finanzamt.

Aus den beiden oben genannten Gründen hab ich mich für diese Lösung entschieden, da ich dafür eine einfache und unkomplizierte Lösung suchte. Und ich wollte etwas, was auch auf MacOSX läuft.

Negativ:
– die Auswahl an möglichen Geschäftsvorfällen zum Buchen ist unvollständig und basiert auf SKR03, aber nicht komplett. Angeblich haben erfahrene Steuerexperten diese Liste zusammengestellt. Fakt ist, dass ich laufend irgendwas nicht finde oder nicht weiss wie ich etwas buchen soll (z.B. Fortbildungskosten für ein Fernstudium)

– Buchen von Bank auf Barkasse erfordert einen Workaround.

– Abruf der Kontotransaktionen für das Kreditkartengeschäftskonto klappen bei mir nicht (kann auch an der Bank liegen. Support von Visio hat sich das Problem angeschaut, arbeiten aber irgendwie mit einem externen Onlinebanking-Experten, der sich das mal anschauen will…)

– momentan gibt es einen Fehler, bei dem einige Kontotransaktionen doppelt auftauchen, obwohl diese faktisch nur einmal existieren. Der Support empfiehlt abzuwarten und in der Zwischenzeit nur eine der beiden Transaktionen zu buchen.

 

Support Anfragen:
Anschliessend möchte ich noch eine Frage/Antwort-Liste mit meinen Supportanfragen und den dazugehörigen Antworten beginnen, die ich weiterhin aktualisiere. Die Fragen und Antworten habe ich etwas gekürzt.

Frage: Wie buche ich eine einzelne Kontotransaktion auf meine Barkasse?
Antwort Scopevisio Support : …für die Umbuchung von Bank auf Kasse bietet sich derzeit folgender Workaround an: Buchen>Ausgaben>Ausgaben durchlaufend (gebucht wird auf Bank oder Verrechnungskonto je nachdem) Buchen>Einnahmen>Einnahmen durchlaufend (gebucht wird auf Kasse).
(Anmerkung von mir: Diese beiden Geschäftsvorfälle müssen erst noch in der Konfiguration aktiviert werden. Diese sind per Default deaktiviert.)

Frage 10.03.2011 17:39:30:…ich habe eine seltsame Sache beim abbruchen und verbuchen der Kontotransaktionen. Und zwar taucht im Scopevision Small Business eine Transaktion 2 mal auf. Der Buchungstext ist jeweils anders.  Wenn ich nun aber bei meiner Bank die Kontoauszuege anschaue, dann taucht diese Transaktion nur einmal auf.  Nun hab ich diese 2 mal im Scopevisio, kann sie aber nur 1mal verbuchen.
Antwort Scopevisio Support 11.03.2011 10:36:18: …wir haben uns das von Ihnen gemeldete Problem angeschaut und werden dieses im Laufe der nächsten Tage beheben, voraussichtlich bis Ende nächster Woche. Bitte verbuchen Sie bis dahin jeweils nur eine Position…

Frage 01.03.2011 17:35:50: wie verbuche ich Fortbildungskosten (Konto 6821 im SKR04 Kontenrahmen)? Ich habe Studiengebuehren fuer mein Fernstudium, und meine Steuerberaterin hat gesagt, dass ist Konto 6821. Ich finde in ihrem Programm nichts passendes
Antwort Scopevisio Support 09.03.2011 15:30:54: …vielen Dank für Ihre Mail und die damit verbundene Anfrage.  Ich muss Ihnen leider mitteilen, dass wir zur Zeit in der Small Business keinen passenden Geschäftsvorfall zur Verfügung stellen. Wir haben Ihre Anforderung aufgenommen und werden diese in zukünftigen Releases berücksichtigen…

 

Update 14.04.2011:
Frage vom 05.04.2011: „ich habe eine KontoTransaktion von -XXX EUR auf meinem Geschaeftskonto. Dies ist die Abbuchung meiner Kreditkartenrechnung.
Dahinter verbergen sich allerdings verschiedene Positionen aus verschiedenen Rechnungen.
Wie kann ich diese eine Transaktion auf mehrere Buchungen aufteilen, so dass auch klar wird, dass sich diese Buchungen auf diese Transaktion beziehen?“

Antwort:
„ich muss Ihnen leider mitteilen, dass Sie diese Transaktion händisch auf die einzelnen Positionen verteilen müssen. Sie sollten per Belegtext den Vorgang unterstützen.

Die Realisierung von Splittbuchungen in der Small Business ist in absehbarer Zeit nicht vorgesehen.

Frage vomm 18.05.: „ich bekomme fuer mein Buro von der Foerderbank XYZ eine Foerderung (DE-MINIMIS).
Wie verbuche ich die? Im SKR03 gibt es dafuer Konto 2743 Investitionszuschüsse. Welchem Geschäftsvorfall entspricht das in Scopevisio?“

Antwort Scopevisio Support: „Leider muss ich Ihnen mitteilen, dass wir für Förderungen keinen entsprechenden Geschäftsvorfall in der Small Business haben. Wir werden Ihre Anforderung aufnehmen und diese in zukünftigen Releases berücksichtigen.“

Veröffentlicht unter Allgemein | Verschlagwortet mit , , , , , , | 99 Kommentare

How to add source attachments to jar files from Eclipse Target Platform / Plug-in Dependencies

For eclipse users who are debugging the following message might be familiar:

The JAR of this class file belongs to container ‚Plug-in Dependencies‘ which does not allow modifications to source attachments on its entries.

This always happens when Eclipse cannot find the source code for a plugin bundle which is part of your target platform but the target platform does not contain a accordant source bundle. This for example happend to me today with the embedded Jetty (org.mortbay.jetty_5.1.14.v200806031611.jar) inside the Eclipse Equinox OSGI platform which makes up my target platform.

When debugged and wanted to go into any class inside a jetty package I always got the message that it is a class from Plugin-Dependencies and the source attachment cannot be modified.

I solved it like this:

  1. Switch to the Plugins View in Eclipse ( Window / Show View / Plugins)
  2. locate the bundle org.mortbay.jetty
  3. right click on that bundle and select „Import as“ -> „Binary Project with linked content“

Now that Bundle shows up in your Package Explorer as a new Eclipse project, in my caseorg.mortbay.jetty.

Now right click on that new project in the package explorer and goto ‚Properties / Java Build Path / Libraries‘. You see the the jetty jar file there and if you expand this entry you can edit the ‚Source Attachment‘ as usual. I pointed it to the downloaded Jetty Source code located in a completely different folder than my target platform which I am using for my project.

Have posted this answer also here on Stackoverflow.

41 Kommentare

Import tab-delimited file into Mathematica and create a Plot of 2 columns

For my master thesis which is basically about graph theory and community identification in graphs/networks I purchased a copy of Mathematica to help me with creating plots and other visualizations of my data. While I am learning Mathematica step by step every day, I want to share some of my learnings as I have noticed that there is not too much information in blogs although the internal documentation is pretty good. But sometimes I miss the „learn by examples“-way as you can find it in lots of software development blogs. Here we go…

This blog post is about how to import a CSV or tab-delimited file into mathematica and how to work with the data.
You can also  download the related Mathematica notebook of this blogpost.

The file looks like this:

x y
3 9
4 16
5 25
10 100
9 81
8 64
6 36
7 49
1 1
2 4

1. Extracting x and y values from data
also see http://reference.wolfram.com/mathematica/tutorial/GettingAndSettingPiecesOfMatrices.html

1. Import the file into a variable called data

data = Import["~tmp/my-tab-delimited-file.txt", "Table", "HeaderLines" -> 1]
Out: {{3, 9}, {4, 16}, {5, 25}, {10, 100}, {9, 81}, {8, 64}, {6, 36}, {7, 49}, {1, 1}, {2, 4}}
The "HeaderLines" -> 1 is responsible for skipping the first line, if that contains headers for each column. 

2. get xvalues from the first column
xvals = data[[All, 1]]
Out: {3, 4, 5, 10, 9, 8, 6, 7, 1, 2}

3. get yvalues from the 4th column.
yvals = data[[All, 2]]
Out: {9, 16, 25, 100, 81, 64, 36, 49, 1, 4}

Now assume you have a file where the first column contains the x-value and the second column contains the y-value and you want to create a plot of this.

ListPlot[Table[	{data[[n, 1]], data[[n, 2]]},
  		{n, Length[data[[All, 1]]]}]
 		, AxesLabel -> {"my x axis", "my y-axis"}]

This will create a plot where the x-value is taken from the first column and the y-value from the second column.
When I first tried to do that I made the mistake and tried this:

ListPlot[{data[[All, 1]], data[[All, 2]]}
 		, AxesLabel -> {"my x axis", "my y-axis"}]

But this will create two separate plots (in two different colors) and it will assume that data[[All,1]] are the y-values for the first plot (color 1) and data[[All,2]] are the y-values for the second plot (color 2) which is wrong.

Ok, ListPlot created you a nice plot with points. Now we want to have a line-plot where each point is connected by a line.
The easiest way is to just change it from ListPlot to ListLinePlot:

ListLinePlot[Table[	{data[[n, 1]], data[[n, 2]]},
  		{n, Length[data[[All, 1]]]}]
 		, AxesLabel -> {"my x axis", "my y-axis"}]

This creates lines but if the order of your x-values in your file is not sorted (e.g. ordered ascending) then this will just display a chaotic bunch of lines. We need to sort your data by the x-values (first column of your file) to have a proper line plot. So before rendering the ListLinePlot apply the following before:

sorted = Sort[data]
Out: {{1, 1}, {2, 4}, {3, 9}, {4, 16}, {5, 25}, {6, 36}, {7, 49}, {8,
  64}, {9, 81}, {10, 100}}

ListLinePlot[Table[	{sorted[[n, 1]], sorted[[n, 2]]},
  		{n, Length[sorted[[All, 1]]]}]
 		, AxesLabel -> {"my x axis", "my y-axis"}]

This should give you a proper ListLinePlot where the lines are going from low x-values to high x-values.


Veröffentlicht unter Science | Verschlagwortet mit , , , , | 141 Kommentare

Nie wieder einen iPod schenken!

Ich, als bisher grosser Apple-Fan, bin es seit dem Wochenende nur noch beschränkt. Am Wochenende musste ich feststellen, dass Apple Produkte nicht kinderleicht zu bedienen sind, wie von mir immer gepredigt, und zwar als wir den iPod nano 5G meiner Freundin installieren wollten, nur um dort Songs drauf zu bekommen.

Der intuitive erste Versuch meiner Freundin war einfach Songs per USB auf den iPod zu kopieren über den Windows Explodierer. Das klappt natürlich nicht…Apple möchte, dass man iTunes verwendet. Ok, iTunes runtergeladen und installiert. Dann ging die Scheisse erst richtig los. iTunes erkannte den iPod, wollte aber, dass man den iPod erst registriert, bevor man ihn benutzen kann…wtf??!! ok, also angefangen, das Registrierungsformular auszufüllen, auch ohne zu verstehen, warum Apple meine Adresse braucht, obwohl ich nur Musik hören möchte.

Aber am Schluss kam der Knaller: „Zahlungsmethode auswählen“…wie bitte?! Kreditkarte oder ClickIrgendwasPay. Ohne das kann man die Registrierung nicht abschliessen. Man lasse sich mal auf der Zunge zergehen: Apple möchte meine komplette Adresse haben, und meine Kreditkartennummer, nur damit ich Musik, die ich schon besitze auf deren MP3 Player laden kann. Ok, auch diesem sinnlosen Zwang haben wir uns unterworfen, um endlich Mucke auf den pod zu kriegen und Apple’s Wunsch zu erfüllen, potentielle iTunes Kunden zu werden.

Mittlerweile ist inkl. Auspacken des iPods schon fast ne Stunde rum. Aber der Mist hört nicht auf. Wir sind nun registriert und müssen nun die Songs auf der Festplatte in iTunes importieren. Dieser Prozess legte den Rechner für mehrere Stunden nahezu lahm und machte ihn unbenutzbar, denn iTunes muss WMA-Dateien irgendwie konvertieren. Fuer den 2006er Laptop meiner Freundin war das zu viel. Frustriert haben wir parallel zu einer CPU-Auslastung von 100% damit begonnen endlich die bereits importierten Songs auf den iPod zu laden. Das ging dann wenigstens recht einfach und intuitiv. Aber auch die Bedienung von iTunes zeigte, dass eine bisherige WinAmp-Nutzerin , die alle Songs selbst in Verzeichnissen auf der Festplatte organisiert, mit iTunes nur schlecht zurecht kommt, denn iTunes nutzt ausschliesslich die ID3-Tags, welche in den MP3 Dateien gespeichert sind. Wenn diese Daten, aber nicht gut gepflegt sind, hat man in iTunes keine guten Möglichkeiten, zu sehen um welchen Interpreten es sich handelt, denn im iTunes haben dann ganz viele Songs „Unbekannter Interpret“ und „Unbekannter Titel“. Bei WinAmp, konnte man wenigstens noch die Dateinamen anzeigen lassen, und wusste was man gerade hört.

Fazit:
ca. 2h bis zum ersten Song auf dem iPod, jede Menge Frust und früher war das einfacher…
Wäre die Bedienung des iPods an sich nicht so kinderleicht und intuitiv, dann würde ich niemandem je wieder einen iPod empfehlen. Das Thema Ersteinrichtung und Usability für Durchschnittsnutzer, welche bisher einfaches kopieren per USB gewohnt waren, hat Apple grundlegend falsch gemacht und  vergrault schon zu Beginn mit ihren dämlichen Zwängen, nur um potentielle iTunes Store Kunden zu gewinnen.

Auf jeden Fall werden wir jetzt mal schauen, ob wir eine Möglichkeit finden, auch ohne iTunes, einfach wie gewohnt Songs auf den iPod zu bekommen… da scheints schon einiges zu geben. Ich frag mich echt langsam, was bei Apple los ist. Auch der ganz neue iPod nano geht ja mal überhaupt nicht, denn der ist viel zu klein und damit für normale Hände fast nicht bedienbar. Ich hatte erst den bestellt, aber dann wieder zurückgeschickt und bei Amazon noch das alte längliche Model bekommen.

Veröffentlicht unter Allgemein | Verschlagwortet mit , , , | 3 Kommentare

Connection Failed with jconsole and Eclipse locally (macosx)

Thanks to Oli’s Blog entry about the same problem I had when I wanted to monitor my java program locally. The java class was started from within eclipse and then I started jconsole from command line.
jconsole properly showed me my java class but when I pressed connect it told me „Connection failed“ after some seconds.
Solution: add the following to your VM arguments in your eclipse run/debug configuration:

-Djava.rmi.server.hostname=localhost

Veröffentlicht unter Software-Development | Verschlagwortet mit , | 5 Kommentare