Ansible & Vagrant „FAILED => SSH encountered an unknown error during the connection.“

Wenn ansible sich beim installieren einer Vagrant box nicht connecten will, dann kann das an dem user liegen.

Zum testen kann man versuchen sich mit

ansible all -vvva "/bin/echo hello"

zu verbinden.

ESTABLISH CONNECTION FOR USER: <irgendwas != vagrant>

Diese Zeile sagt einem, dass man sein Vagrantfile erweitern sollte : )

config.vm.provision :ansible do |ansible|
    ansible.extra_vars = { ansible_ssh_user: 'vagrant' }
    ansible.playbook = "ansible/site.yml"
end

Vagrant und Linux Mint NFS: mount.nfs: access denied by server while mounting

Es gibt mehrere mögliche Ursachen
1) nfs muss auf dem host und auf dem client installiert sein
2) das home-verzeichnis des users ist verschlüsselt und deswegen erlaubt das nfs-kernel-server nicht das exportieren des verzeichnisses.
3) firewall ist aktiv auf dem host

Lösung war in meinem Fall einfach das Projekt aus dem verschlüsselten Home zu verschieben.

sudo mkdir /projects
sudo chown `whoami`:`whoami` /projects
mv vagrant/ /projects/
cd /projects/vagrant
vagrant up

und fertig

The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

mount -o 'vers=3,udp' 192.168.33.1:'/home/tomas/vagrant/pico/vagrant' /vagrant

Stdout from the command:

Stderr from the command:

stdin: is not a tty
mount.nfs: access denied by server while mounting 192.168.33.1:/home/tomas/vagrant/pico/vagrant

Kanban Tools im Vergleich

Vorweg möchte ich betonen, dass ich mit keinem Tool kooperativ in Verbindung stehe. Zudem möchte ich hier lediglich meine persönliche Meinung zum Ausdruck bringen. Sollte ich irgendwo einen Fehler gemacht haben, was Inhalt / Fakten angeht, dann bitte ich um eine kurze Notiz und ich werde umgehend korrigieren.

Kanban wird immer populärer und ein paar Tools sind erst kürzlich auf den Markt gekommen. Es wird Zeit für einen Vergleich der unterstützenden Tools. Manche sind direkt für Kanban konzipiert und entwickelt worden und manche können mit etwas erfindergeist so eingesetzt werden, damit Sie einen Kanban-Flow im Unternehmen gut unterstützen.

Auf meiner Recherche nach guten Vergleichen zu Kanban Tools sind entweder nur wenige verschiedene Tools enthalten oder die Anforderungen nicht genau die, die ich an die Tools hatte.

Kanban soll bei uns im Unternehmen einen Entwicklungsprozess mit 11 Entwicklern, Grafikern, Designern, Projektmanagement und C-Level unterstützen.

Perspektivisch sollen 50+ Mitarbeiter mit dem Tool arbeiten können.

Alle Tools, die mir in die Quere gekommen sind habe ich verglichen. Manchmal habe ich die Analyse für ein tool abgebrochen, wenn es einen bestimmten Blocking-Point zu einem Tool gegeben hat, der für unsere Zwecke ein Ausschlußkriterium war. Z.B. gab es ein Tool was oft abgestürzt ist. Nicht so gut für produktive Zwecke.

Ein sehr bekanntes Tool habe ich nicht getestet: Das Jira Add-On von Atlassian: Greenhopper. Jira ist ein gutes Tool und wir haben mit der On-Demand instanz von Atlassian viel gearbeitet. Es war mir jedoch zu überladen mit Funktionen, die wir nicht brauchten und ist irgendwann einfach nicht mehr so günstig, wie es das mit den ersten Mitarbeitern und wenigen Add-Ons noch ist. Ziel war es ein leichtgewichtiges Tool zu finden, welches Jira für uns ersetzt. Mit Jira, Bamboo, Greenhopper und noch ein paar Add-Ons und 50 Mitarbeitern ist man hier nämlich schnell bie vielen 100 Euro / Monat, was man mit einer modernen SaaS Konstruktion auch anbieterunabhängiger und günstiger bewerkstelligen kann.

Getestet habe ich nach folgenden Kriterien

  1. Kosten / Monat (bei 50 Mitarbeitern)
  2. Dateianhang möglich bei Tasks
  3. Rechtemanagement
  4. Multiuser assignement
    1. Mehrere User für ein Ticket arbeiten lassen
  5. Vertikale Sublanes möglich
  6. Horizontal Swim Lanes möglich
  7. Email Notification
  8. SSL
  9. IM integration
  10. GitHub Integration
  11. First Impression / Usability
  12. App für Iphone / Android verfügbar
  13. Reporting Tools integriert oder über Add-On verfügbar
  14. Content Richness eines Tasks
  15. CSV Import möglichkeit
  16. RSS Feed
  17. WiP Limit-Unterstützung für Lanes

Folgende Tools habe ich verglichen:

  1. Agile Zen
  2. Kanbanery
  3. smartQ
  4. Kanbanpad
  5. flow.io
  6. Kanbantool unlimited
  7. Trello
  8. Leankit Basic bis 25 User
  9. Leankit Team
  10. Kanbanero
  11. Scrumy
  12. Asana
  13. Kanbanflow
  14. Kanbanflow Premium
  15. Symphonical

Die ausführliche Testtabelle kann ich interessierten gerne zur Verfügung stellen. Einfach einen Kommentar oder eine PN hinterlassen.
Die wesentlichen Pro / Cons möchte ich aber hier für einen schnellen Überblick zusammenfassen. Ich beschränke mich auf Attribute, die ein Produt entgegen der Konkurrenz stark differenzieren, mache also nur die Unterschiede deutlich, um der Übersichtlichket Rechnung zu tragen:

  1. Agile Zen
    1. – Kein Multiuser assignment
    2. – Keine horizontalen Lanes
  2. Kanbanery
    1. + Gutes Look and Feel
    2. – Keine horizontalen Lanes
  3. smartQ
    1. – teuer
  4. Kanbanpad
    1. – Etwas langsames UI
    2. – Service ab und zu down während der Tests
  5. flow.io
    1. – wirkt alt
  6. Kanbantool unlimited
    1. + Horizontale Swimlanes
    2. – Kein Multiuser assignement
    3. – wirkt alt
  7. Trello
    1. + günstig
    2. + große Community
    3. + gutes UI
    4. – keine horizontalen Swimlanes
  8. Leankit Basic (bis 25 User) / Leankit Team
    1. – teuer
  9. Kanbanero
    1. – Kein Rechtemanagement
    2. – Farben fehlen
    3. – Noch keine Attachements (Sollen  bald kommen)
  10. Scrumy
    1. – wirkt unseriös
  11. Asana
    1. – Scheinbar keine Unterstützung für das Kanban-Konzept
  12. Kanbanflow
    1. – keine Attachements
    2. – kein multiuser assignment
  13. Kanbanflow Premium
    1. – no github integration
    2. – etwas teurer
    3. – keine hor lanes
  14. Symphonical
    1. + hor lanes / very flexible
    2. + preis
    3. + design
    4. + Vertauschen von Dimensionen möglich
    5. – advertisments
    6. – no analysis
    7. – no github

Fazit

Von allen Tools empfehle ich Trello und Symphonical. Wir haben uns für Trello entschieden. Symphonical ist etwas mächtiger und kann mehr UseCases bedienen durch seine Flexibilität die Diemensionen der Matritzen zu tauschen und horizontale Lanes abzubilden. Jedoch sieht man in Google Trends sehr schön, dass eine extrem breite Basis mittlerweile auf Trello setzt. Das impliziert zwar nicht direkt eine bessere Entwicklungsgeschwindigket. Jedoch ist man in einer größeren Community of besser aufgehoben was Probleme mit Spezialfällen angeht. So gibt es z.B. zwei sehr schöne Plugins für Trello, die WiP-Limits und Scrum Story Points ermöglichen.

Eclipse and Android Project compilation fails with: Error parsing XML: no element found

Ein paar Lösungen findet man hierzu schon im Netz. Aber warum genau passiert das?

Wenn man schon eine Weile entwickelt, dann tendiert man dazu das eigene Projekt über Short-Cuts zu steuern. Z.b.: STRG-F11 zum Starten des Projekts. Dann kommt man aber schnell dahin, dass plötzlich gar nichts mehr geht und plötzlich nur noch .out-Dateien gebaut werden.

Weiterlesen

Synchronisieren per rsync und zertifikatsbasierter Authentifizierung

Synchronisieren via rsync kann einfach und hübsch sein!

rsync -ah --partial --progress --rsh "ssh -i .hidden/pk.pem" /localdir/file.tar remote-user@IP:/remote-dir/file.tar
-a (--archive archive mode; equals -rlptgoD: rekursiv, links, permissions, zeiten, groups, owner, device files)
-h human readable
--partial upload wieder aufnehmen können
--progress so siehts schick aus:
file.tar
889.14M   4%  503.47kB/s   10:05:41

Mit Android Intents auf ankommende SMS reagieren

Über Intents kann man sehr einfach mit Android Events systemweit propagieren oder sich an die Schnittstellen anderer Programme dranhängen. Sofern diese Intents nach außen anbieten.

Bei SMS Empfang kann das sehr leicht demonstriert werden, da Android hier schon Intents anbietet, die man über das Manifest dem eigenen Programm bekannt machen kann.

<receiver android:name=".SMSReceiver">
    <intent-filter android:priority="100">
        <action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
    </intent-filter>
</receiver>

Mit der androir:priority kann hier die Reihenfolge festgelegt werden. 100 bedeutet dabei, dass diese Verarbeitung als erstes einsetzt.

Als nächstes benötigen wir lediglich noch eine Klasse, die von BroadcastReceiver erbt, um auf das Event reagieren zu können.

/**
 * @author JustMe
 *
 */

public class SMSReceiver extends BroadcastReceiver {
   
    private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
        private static final String TAG = "SMSBroadcastReceiver";

    public SMSReceiver() {
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onReceive(Context arg0, Intent intent) {
        try
            {
                Log.i(TAG, "We are in onReceive");
            }
        catch(Exception e){
            Toast.makeText(arg0, e.getMessage(), Toast.LENGTH_LONG);
        }
    }

}

Your Project contains Error(s), please fix them before running your Application

Manchmal gibt es Fehler in Eclipse, die nicht mit dem Quellcode an sich zu tun haben. Dann befindet sich ein rotes Ausrufezeichen am Projekt aber an keiner einzigen Quelldatei.

Hier hilft dann ganz gerne ein Blick in die Problem View

  1. Window –> Show View –> Problems

Jetzt muss das Problem nur noch gelöst werden : )

Eigenen Traffic ausschließen auf einem WordPress-Blog per Cookie

Einfach eine Datei im WordPress-Home anlegen (z.b. kickme.html) mit folgendem Inhalt:
<html>

<head>
<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-XXXXXXXX-X']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>
</head>

<body onLoad="javascript:_gaq.push(['_setVar', 'kickme']);">
this is for kicking the traffic
</body>
</html>

Diese Datei dann im Browser aufrufen.

Jetzt habt Ihr ein Cookie angelegt, welches bei jedem Seitenaufruf mitgeschickt wird und den Value kickme übergibt.

In Analytics müsst Ihr noch einstellen, dass es aufgrund dieses Cookie-Values filtern soll.

  1. Verwaltung -> Profile -> Filter
  2. Neuer Filter
  3. Name eingeben: z.b. kickme
  4. Benutzerdefiniert -> Ausschließen -> Filterfeld: Benutzerdefiniert
  5. Filtermuster: kickme
  6. Groß- und Kleinschreibung: Nein

Schon fertig : )

ListView: Scrollbare Listen mit eigenem ArrayAdapter und Datenmodell

Listen findet man in allen Android Apps. Sie sind ein gutes Mittel, Informationen schnell zugänglich darzustellen und Anleitungen für Android, Scrollbare Listen zu erstellen gibt es schon viele. Doch ich konnte keine so schnell finden, die mir einfach und kurz meinen Anwendungsfall erklärt.

Was wir hier machen

  1. Eine List-View in eine bestehende Activity einfügen
  2. Ein eigenes Row-Layout anlegen
  3. Einen eigenen ArrayAdapter erstellen
  4. Den ArrayAdapter mit der View verbinden
Spannend ist besonders, dass wir keinen klassischen ArrayAdapter verwenden, dieser Kann nur mit String-Arrays umgehen. Wir bauen uns unser eigenes Objekt, welches wir mit eigenen Methoden auf die Events reagieren lassen können.
Zuerst erstellen wir in res/layout eine contact_row_layout.xml. Diese wird später das Aussehen einer Zeile definieren, die in der Liste angezeigt wird…

Weiterlesen