Markdown Templates for README files on GitHub

Posted on 7. März 2014 Comments

Every time I upload a new project on GitHub I find myself writing almost an identicially structured README.md file in Markdown. So I thought I could make some templates for the next times. Right now I only have one for mobile apps and websites with GitHub Pages, but there’s more to come.

Also I found that quite a lot of projects have very unstructured and ugly READMEs. It’s always nice to get a quick overview over a project, especially when they don’t have a website. So maybe someone can use this.

flattr this!

ArgoUML 3.4 unter Ubuntu 12.04

Posted on 6. März 2014 Comments

ArgoUML ist ein Open Source Tool zum Erstellen von UML Diagrammen.Leider ist es Standardmässig nicht in den Ubuntu Paketquellen enthalten, ich habe aber eine .deb-Datei gefunden, mit der man das Programm installieren kann: Original / lokale Kopie.

 

sudo dpkg -i argouml_0.34-1~getdeb1_all.deb

Eine Alternative ist z.B. StarUML

flattr this!

Windows 8 Log-Out Bildschirm bleibt aufgrund eines Abmeldeskripts hängen

Posted on 26. Februar 2014 Comments

Um sicher zu gehen, dass die Benutzer ihre USB Sticks nicht vergessen haben wir ein Skript entworfen, das prüft, ob noch ein USB Stick, Speicherkarten oder DVDs im PC stecken. Dieses ruft dann eine .hta Datei(ist historisch halt so gewachsen..) auf, die den Benutzer auffordert, den USB Stick doch bitte mitzunehmen. Das klappte auch wunderbar unter Windows XP und Windows 7.

Seit die neuen PCs mit einer SSD und Windows 8 ausgestattet sind, ist der violette LogOut Screen so schnell da, dass man diese Meldung nicht mehr sehen kann. Da das Skript aber auf eine Benutzereingabe wartet, hängt nun der ganze PC beim Herunterfahren. Nun habe ich diverse Dinge versucht, inklusive Tasks, die beim Herunterfahren ausgeführt werden etc. Nichts hat geholfen. Dann bin ich auf den folgenden Tipp gestoßen. Man muss Windows nur sagen, dass die Skripte über den Log-Out angezeigt werden sollen.

Dies kann man ebenfalls im Editor für lokale Gruppenrichtlinien machen (gpedit.msc). Dazu klickt man auf Benutzerkonfiguration/Administrative Vorlagen/System/Skripts und wählt dann den Punkt Anweisungen in Abmeldeskripts während des Abmeldens anzeigen aus. Der Haken ist standardmässig bei nicht konfiguriert gesetzt. Setzt man ihn auf aktiviert funktioniert es.

device-test-anzeigen

flattr this!

Threema statt WhatsApp nach Übernahme durch Facebook? Was sonst? Eine Auflistung von Alternativen

Posted on 20. Februar 2014 Comments

Das generelle Problem mit Messengern auf Smartphones:

  1. Sofern sie nicht quelloffen sind, kann man nicht feststellen, ob sie ihre Berechtigungen nur für den angegebenen Zweck nutzen und die Apps können nicht von unabhängigen Experten transparent auf Sicherheitslücken untersucht werden. Ich bin gerade bei diesem kritischen Thema daher generell einfach mal skeptisch.
  2. Selbst wenn der Quellcode vorliegt, muss man noch darauf vertrauen, dass die binären Dateien, die aus den App Stores geladen werden auch denen entsprechen, die der (vertrauenswürdige) Entwickler erstellt und hochgeladen hat. Oder man muss jede App selbst aus dem Quelltext heraus kompilieren, was ein unrealistischer Aufwand ist(s. Gentoo).
  3. Der Serverbetreiber kann Verbindungsdaten(Meta-Daten) speichern, selbst wenn er die Nachrichten an sich vermeintlich nicht lesen kann. Auch wenn er sagt, dass er das nicht tut, könnte er z.B. von Geheimdiensten dazu gezwungen werden. Auch in vermeintlich neutralen Ländern.
  4. Es gibt genügend Sicherheitslücken für die mobilen Betriebsysteme(Android, iOS, Blackberry, etc). Das heißt, dass die Nachrichten im Zweifelsfall vor der Verschlüsselung abgefangen werden, z.B. durch die Eingabe des Textes in die Tastatur.

Nichtsdestotrotz möchte ich hier einige WhatsApp Alternativen aufzählen.

Threema

Threema wird in Deutschland gerade(Februar 2014) als die Alternative zu WhatsApp gehandelt, weil Facebook es für 19 Milliarden Dollar gekauft hat. Als allererstes möchte ich diesen Artikel von Fefes Blog empfehlen. Die Schweiz ist keineswegs so neutral, wie man sie immer wahrnimmt. Außerdem kann wie erwähnt keiner  überprüfen, was in Threema vor sich geht. Es gibt zwar gute Hinweise von vertrauenswürdigen Leuten, dass Threema die besten Intentionen hat, aber sichergehen kann man erst, wenn man den Quellcode sehen kann, so dass eine genügend große Anzahl von Experten, die Sicherheit bestätigen oder zumindest einordnen kann. Cool ist allerdings, dass man die Schlüssel per QR-Code vergleichen kann, und somit nicht auf den (potentiell manipulierbaren oder von bösen Betreibern gefälschten)  öffentlichen Schlüssel des Betreibers vertrauen muss. Nichtsdestotrotz ist dies seit fast einem Jahr mein Favorit, weil alles andere eben auch nicht quelloffen und noch weniger vertrauenswürdig ist. Die Verschlüsselung kann angeblich mehr oder weniger unabhängig überprüft werden.

 

Viber

Viber ist eine App von Talmon Marco. So wirklich weiß aber keiner, was da vor sich geht. Auch diese App ist nicht quelloffen. Seit ein paar Tagen(Februar 2014)  gehören sie zu Rakuten, einer japanischen Firma. Vorteil von Viber gegenüber fast allen anderen Messengern ist, dass es auch richtige Telefonie (so wie Skype) gibt. Außerdem gibt’s Viber auch für andere Platformen wie Bada, Blackberry, Windows Phone, Nokia Handys und sogar Windows für den Computer.

 

Kik

Kik ist wohl relativ beliebt bei deutschen Teenagern, hat aber dasselbe Vertrauensproblem wie alle anderen: niemand weiß, was in der App vorgeht und was sie mit den Berechtigungen anstellt.

 

Hike

Hike ist ebenfalls nicht quelloffen und wenig vetrauenswürdig. Dafür aber für sehr viele Platformen verfügbar

 

Line

Line ist wie Viber beliebt, weil auch Gespräche in guter Audio Qualität möglich sind. Allerdings ist auch diese App nicht sonderlich vertrauenswürdig. Wie fast alle Apps kommt auch diese mit bunten Stickern und allerlei Extras.

 

BBM

Black Berry Messages sind bei Blackberry Nutzern schon lange bekannt. Man bekommt eine ID und kann dann Nachrichten von Blackberry zu Blackberry schicken. Seit es mit Blackberry Ltd(ehemals RIM) bergab geht, haben sie neue Wege gesucht, sich zu vermarkten und BlackBerry Messages auch für Android und iOS freigegeben. Natürlich closed source und über Blackberry Server. Mal wieder nicht besonders vertrauenswürdig. update: Joshua hat da noch interessante Details ausgegraben, bei dem Blackberry der Regierung von Indien die Schlüssel überlässt. Die Nachrichten sind also nicht Ende-zu-Ende verschlüsselt.

 

Und welche wirkliche Alternative gibt es dann?

 

Heml.is

Heml.is ist für mich der vielversprechenste Messenger. Unglücklichweise ist er noch nicht fertig. Er soll quelloffen sein und Standard Kryptografie benutzen. Eine private spezielle Serverstruktur verhindert das Sammeln von Metadaten von außen. Das kann gut oder schlecht sein, je nachdem,ob man den Betreibern glaubt. Allerdings ist das Sammeln von Metadaten von Betreibern ein Problem, was in der Natur von Messengern liegt. Die Leute sind aber in der Szene bekannt(z.B. durch Pirate Bay oder Flattr) und gelten im Allgemeinen als vertrauenswürdig. Sobald die App erscheint, gibt es hier natürlich ein Update. Außerdem wird endlich mal auch Wert auf’s Design gelegt.

 

Telegram

Telegram ist ein Messenger, der zwar quelloffen ist und Verschlüsselung benutzt aber von führenden Sicherheitsexperten als kritisch eingestuft wurde. Dazu kommt, dass sie ein selbst gebautes Protokoll benutzen, mitsamt fragwürdiger Verschlüsselungswahl. Und die Verschlüsselung funktioniert auch nur, wenn beide Teilnehmer online sind, was bei mobilen Geräten ja eigentlich fast nie der Fall ist.

 

Surespot

Surespot wäre theoretisch ein guter Kandidat. Es ist quelloffen, benutzt Standard Kryptografie und ist relativ verbreitet. Durchgesetzt hat es sich allerdings noch nicht. Ich denke es liegt vor allem auch am Design. Da könnten sie echt mal nachbessern.

Außerdem werden hier Kontakte nicht automatisch über das Auslesen des Telefonbuchs hinzugefügt. Das ist datenschutztechnisch zwar von Vorteil, endete aber bei mir damit, dass ich genau einen Kontakt in der Liste habe, weil alle anderen die App nach kurzem Ausprobieren wieder gelöscht haben, weil sie – so schien es – keiner ihrer Freunde installiert hatte. Das heißt man muss über andere Kanäle(ironischweise wird das wohl WhatsApp und Facebook sein) einen Benutzernamen erfragen. Das mag man sehen wie man will, die Usability leidet sicher drunter, dafür ist der Datenschutz super.

Von einem kryptographischen Standpunkt gibt es aber noch ein kleines Manko, was Threema elegant gelöst hat. Man muss den surespot Betreibern vertrauen die richtigen öffentlichen Schlüssel herauszugeben. Theoretisch ist hier von Anbieterseite eine Man-in-the-Middle(MITM) Attacke möglich. Bei Threema gibt es für einen solchen Kontakt nur den orangen Button, verifiziert(grün) wird er erst, wenn man den Fingerprint/Hash des Schlüssels über QR-Code vergleicht. Da gibt es aber auch schon ein Pull-Request für, scheint also eine Frage der Zeit zu sein.

update: In den Kommentaren wurde angemerkt, dass Design ja Geschmackssache sei. Ja, das stimmt. Ich persönlich finde das Design nicht gut, der geneigte Leser möge sich aber selbst überzeugen(!). Ich werde nochmal kurz erklären, was ich meine. Statt sich an den de-facto Standard zu halten, dass Nachrichten von Gesprächspartner mit einer Sprechblase von links und seine Eigenen mit einer Sprechblase von rechts kommen, wird der empfangene Text einfach nur eingerückt und das sieht einfach ungewohnt aus. Mit minimalistisch hat das wenig zu tun. Selbst wenn man sich ihre Website anguckt, hat man(und ich denke nicht, dass ich hier alleine bin) tatsächlich das Gefühl, dass die Jungs es zwar technisch drauf haben, aber wirklich die Hilfe von einem Designer gebrauchen könnten.

update: Die Website wurde aktualisiert und sieht jetzt einigermaßen gut aus.

 

Whistle.im

Whistle.im ist mal ein deutsches Produkt. Allerdings ist es nur für Android und PC verfügbar und weißt jetzt schon Sicherheitslücken auf. Lieber erstmal die Finger von lassen.

 

 

update:

TextSecure

Wer es bis hier her geschafft hat zu lesen könnte belohnt werden, denn seit der Version 2.0 unterstützt die ursprünglich als SMS App geplante TextSecure auch Push Nachrichten über die Datenleitung. Sollte das gegenüber kein  (aktuelles) TextSecure installiert haben, wird die Nachricht als (ggf. kostenpflichtige) SMS versandt. Das kann man aber auch ausstellen. SMS werden dabei grün, normale Nachrichten blau dargestellt. Das Design ist angenehm und nicht überladen. Die Kryptographie ist eine Weiterentwicklung vom allgemein anerkannten OTR. Und zwar nicht von irgendwelchen Leuten weiterentwickelt, sondern von dem Experten-Team von Moxie, der seine Firma WhisperSystems an Twitter verkaufte, die dann den Quellcode von TextSecure und RedPhone(einer Art sicheren Skype) veröffentlichten. Außerdem ist es die Standard SMS(und jetzt Messaging) App von der Android Alternative CyanogenMod, die weltweit geschätzte 10 Millionen Benutzer hat. Die betreiben auch einen extra Server dafür, der aber mit den WhisperSystems Servern föderiert, wer weiß, was da noch für coole Projekte draus entstehen.

Gibt es nur noch ein Problem: es gibt noch keine iOS Version. Die soll nämlich zusammen mit RedPhone als Whisper veröffentlicht werden und das ist wohl auch für Android geplant. Bis dahin gilt: wenn man nur Freunde mit Android Handys hat, ist TextSecure wohl die beste Alternative.

Und weil ich prinzipiell ein großer Fan von Dezentralisierung bin möchte ich noch eben Kontalk erwähnen. Zur Zeit benutzen sie wohl noch ein eigenes Protokoll, es soll aber auf das erprobte XMPP umgestellt werden. Das erste Problem ist, dass es keinen Client für iOS oder andere Platformen gibt. Außerdem ist es in diesem Falle so, dass jeder einen Server betreiben kann und ihn den Kontalk Netzwerk zur Verfügung stellt. So wie ich das verstanden habe aber nicht im Sinne von XMPP, sondern eher als Loadbalacing Server hinter einem Proxy. Das bringt wieder datenschutztechnische Probleme mit sich im Hinblick auf Meta Daten. Außerdem werben sie mit dem Hashen der Telefonnummer. Nun ist das Hashen über einen begrenzten Bereich an möglichem Klartext aber prinzipbedient eher eine Verschleierung, als dass es tatsächlichen Gewinn bringt. Ich zitiere hier das Threema FAQ:

Bitte beachten Sie: aufgrund der relativ wenig möglichen Zahlenkombinationen von Telefonnummern können Hashes davon theoretisch per Brute-Force-Attacke (= Durchprobieren aller Möglichkeiten) entschlüsselt werden. Dies ist prinzipbedingt und kann nicht anders gelöst werden (die Verwendung von Salts wie beim Hashing von Passwörtern funktioniert für so einen Datenabgleich nicht).

 

Andere Alternativen, die hier nicht erwähnt wurden.

ChatOn, Joyn, ICQ, eBuddy, Skype, Facebook Messenger, SMS Apps, IM+, Google Hangouts, Kakao Talk, iMessage, Snapchat, WeChat, mySMS, MessageMe, XMPP Apps(Xabber, ChatSecure, etc), myEnigmaHoccerXO, upptalk, tango.me, chiffry, enjoystr, uvm

Andere Alternativen findet ihr auch auf Droid-Break und bei Wikipedia.

flattr this!

Bester Flappy Bird Klon für Android: Flappy Cow

Posted on 13. Februar 2014 Comments

Nicht erst seit Entwickler Dong Nguyen sein populäres Spiel Flappy Bird vom Markt genommen hat, tauchen vor allem in Androids Google Play Store zahlreiche Klone mit allerlei Getier auf. Ich habe ein paar ausprobiert und fand Flappy Cow am besten.

Die Kuh könnte man schon von Space Cowboy kennen; jetzt als Superman verkleidet umfliegt sie Spinnen und Rohre. Es gibt einen Highscore, Medallien(ich hab schon Bronze geschafft :) ) und häufig Updates.

Ein perfektes Spiel für die Langeweile zwischendurch. Seit Version 1.7 gibt es auch einen Pause Button, falls man mal unterbrochen wird.

Ausserdem ist die App Open Source und liegt auf GitHub

Download Flappy Cow im Google Play Store

edit: Aufgrund von einer seltsamen Google Policy (und Apple auch für iOS) darf in den Namen der Apps nicht mehr das Wort Flappyvorkommen. Die App heisst im Play Store jetzt Flutter Cow.

Disclaimer: Ich kenne den Entwickler.

flattr this!

Minimal Open Source Flashlight

Posted on 1. Januar 2014 Comments

Nachdem OI Flashlight bei mir nicht funktioniert habe ich gestern Nacht kurzerhand entschloßen mal AIDE auszuprobieren und mir meine eigene Taschenlampen App zu schreiben. Stellt sich raus, dass das garnicht so schwer ist. Der Developer Account bei Google kostet $25 und ist super einfach zu bedienen. Details folgen noch.

update: Ich habe eine Version für Smartphones mit Android < 4.0 hochgeladen. Je nach Androidversion wird automatisch die richtige App ausgewählt.

Screenshot
   

Market Link

Google Play

Get it on Google Play

Github

APK SHA1SUM(15 Jan 2014/v 1.0.2)

$adb pull /data/app/de.repat.mosf-2.apk
$sha1sum de.repat.mosf-2.apk
  • c5b311b6d85ab1f4e3e99fe3bdcfc4f104a4a375 for 4.0+
  • 1db8ad27f07f60dc843eefb3df6a7ee35f1fd880 for < 4.0

Droid-Break

flattr this!

Nullstellenberechnung in Lua

Posted on 16. Dezember 2013 Comments

Nachdem ich 2011 schonmal ein paar Methoden zur numerischen Nullstellenberechnung in MATLAB online gestellt hatte, hier nur dieselben Beispiele in Lua. Ich habe mit Lua gerade erst angefangen und eigentlich erstmal  zur Übung nur den Code übersetzt. Der Code ist natürlich auf GitHub. Eine gute Lua Referenz ist Learn Lua in 15 Minutes von @tylerneylon.

Wie im letzten Beispiel habe ich diese Funktion benutzt:

Außer bei Newton(da braucht man noch die Ableitung) sieht das dann in Lua so aus.

function f(x)
  return x^6-x-1
end

Zusätzlich habe ich noch die Genauigkeit Eta global festgesetzt:

eta = 0.00001

Bisektion

function bisection(a,b)
  local i = 0

  if (f(b)*f(a)<0) then
    while (math.abs(b-a)>eta) do
      if (f((a+b)/2)*f(a)>0) then
        a = ((a+b)/2)
      else
        b = ((a+b)/2)
      end
      i = i + 1
    end
    return ((a+b)/2)
  end
end

Newtonverfahren

function newton(x)
  local i = 0
  local diff = 1
  while (diff>eta) do
    nullstelle = x
    t1, t2 = f(x)
    x = x - (t1/t2)
    i = i+1
    diff = math.abs(x-nullstelle)
  end
  return x
end

function f(x)
  return x^6-x-1, 6*x^5-1
end

Regula Falsi

function regula_falsi(a,b)
  local i = 0
  local diff = 1
  if (f(b)*f(a)<0) then
    nullstelle = a
     while (diff > eta) do
      x = (a*f(b)-b*f(a))/(f(b)-f(a));
      if (f(x)<0) then
        a = x
      else
        b = x
      end
      diff = math.abs(x-nullstelle)
      nullstelle = x
      i = i+1
    end
  end
  return nullstelle
end

Sekantenverfahren

function secant(a,b)
  local i = 0
  while(math.abs(b-a)>eta) do
    nullstelle = b
    b = b-f(b)*(b-a)/(f(b)-f(a))
    a = nullstelle
    i = i+1
  end
  return ((a+b)/2)
end

flattr this!

10 best Android apps for the paranoid

Posted on 15. Dezember 2013 Comments

So I compiled a few apps that even the most paranoid people would feel safe to use. Privacy is mostly enforced through encryption but beware: if you don’t use encryption correctly by e.g. chosing a week password, it’s totally useless.

 

TextSecure(GP)

TextSecure encrypts your text messages(SMS) locally. Also, if your partner also has TextSecure, you can encrypt the messages, so not even the carrier could intercept them.

textsecure

Cost: free

RedPhone(GP)

RedPhone is basically an open source Skype replacement with even better encryption. It’s dead simple to use. If a contact in your phonebook also uses RedPhone, you will be asked if you want to upgrade to a secure call.

redphone

Cost: free

 

Google Authenticator(GP)

Whether it’s your bank, your WordPress blog, github, Dropbox or facebook. Two factor authentication with One Time Passwords(OTPs) is getting popular! With this app, you will not only need your password to login, but a code from your smartphone that’s generated and valid for 30 seconds. Just in case your phone gets stolen or lost, make sure to print out extra backup code. Don’t want them laying around your house? Use the next app!

google-authenticator

Cost: free

 

EDSLite(GP)

EDSLite works much like truecrypt for your computer. You can create containers, where you can store your Pins, Tans, Backup OTP Backup Codes and more. Because TrueCrypt can read those containers you can just save them to your Dropbox and keep them in sync with your computer. If you don’t like Dropbox, maybe the next app is for you.

edslite

Cost: free

 

ownCloud(GP/FD)

ownCloud is an app that works with your owncloud installation. You can download your private cloud and host it from home on a Rapberry Pi or chose a hosted solution in a data center that you trust.

owncloud

Cost: 0.79€

 

F-Droid

So, from where should you download all these apps? Trust Google or Amazon that the binaries you’re getting are what the developers uploaded? f-droid.org is another alternative app store that you might consider to trust. The apps are all open source and you can probably even get a couple of apps for free that would cost a few cents in the Google Play Store.

Cost: free

 

Threema(GP/Website)

Threema is probably the best app available for secure encrypted messaging; it works very much like Whatsapp. The servers are in Switzerland. The only downturn is: it’s not open source. But: you can verify that the encryption works correctly. If you just add a contact with his/her Threema ID, the contact appears read. If you sync your phonebook with Threema(your phone number is only transmitted as a hash) and Threema recognizes a contact, it’s getting orange. And if you meet your contact in person and scan his QR-code, the contact finally turns green. This is the most paranoid messaging app I’ve seen.

threema

Cost: 1.60€

 

k-9 Mail(GP/FD)

If you want to send only encrypted emails, this is for you. Together with the APG app, it’s super easy to send encrypted and receive/decrypt emails.

k9mail

Cost: free

 

Built-in Android encryption

With Android 4.x on you can encrypt your whole device. Make sure you chose and remember a good password or PIN.

Cost: free

 

NoteCipher(GP/FD)

Evernote is great for keeping your notes in sync. But if you want to keep them secret, you might want to consider using this app. Every entry is encrypted via sqlcipher with AES 256.

notecipher

Cost: free

 

More stuff

  • Heml.is looks promising but has been under development for quite some time now. Hope to hear more soon.
  • Telegram is another open source messaging app. The encryption only works, when both participants are online, so be careful.
  • Droid-Break has a lot more high quality open source apps

 

GP: Google Play, FD: F-Droid, Pictures from play.google.com

flattr this!

Show Pictures in a Form on a Table with Report in APEX

Posted on 10. Dezember 2013 Comments

The table is called WPDBD_TEIL. The primary key is TID. In WPDBD_TEIL there is a column called BILD(german: picture/image) from type BLOB.

First click on your form and keep the name of the picture in mind. In this case, it’s P9_BILD.
report_bild

Then go to your report, click on edit for the whole report and use the following code

apex_editreport

select "TID", 
"TNAME",
"PREIS",
decode(nvl(dbms_lob.getlength("BILD"),0),0,null, '<img height="100px" width="100px" src="'||apex_util.get_blob_file_src('P9_BILD',TID)||'" />') "BILD"
from "#OWNER#"."WPDBD_TEIL"

If you’d open the report now, you only get the HTML Code. So you have to change the way APEX displays the entry. So go to the report, click on BILD and change Display as Text to Report Standard Column

 

edit_bildstandardreportcolumn

 

The form I used was the following.

formreport

Also, in the last page of creating the form, you have to chose your own primary key, not the ROWID.

 

primarykeyapexform

 

flattr this!

How to compile async for scala with sbt

Posted on 6. Dezember 2013 Comments

SBT is the build tool for Scala, much like Maven or Ant is for Java. Scalas async library uses it for compiling. You could just it from the source or compile it into a handy .jar file. That’s where SBT comes in. The Scala version I used it 2.10.3, SBT in version 0.13.0 and async in 0.9.0. The build.sh in the repository didn’t work for me.

Clone the lastest version of the GitHub repository: https://github.com/scala/async

git clone https://github.com/scala/async.git

Then download and install sbt from scala-sbt.org. For Ubuntu 12.04 I just used the .deb package.

wget http://repo.scala-sbt.org/scalasbt/sbt-native-packages/org/scala-sbt/sbt/0.13.0/sbt.deb

And install it.

sudo dpkg -i sbt.deb

Then open it in the same folder you cloned the git repository:

repat@laptop:~/asynctest/async$ sbt
Loading /usr/share/sbt/bin/sbt-launch-lib.bash
[info] Loading project definition from /home/repat/asynctest/async/project
[info] Updating {file:/home/repat/asynctest/async/project/}async-build...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Set current project to scala-async (in build file:/home/repat/asynctest/async/)
>

Maybe a couple of updates will appear here and depending on your internet connection it might actually take a while.
Once you get the > sign type compile and this will happen:

[info] Updating {file:/home/repat/asynctest/async/}async...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Compiling 15 Scala sources to /home/repat/asynctest/async/target/scala-2.10/classes...
[warn] there were 2 feature warning(s); re-run with -feature for details
[warn] one warning found
[success] Total time: 28 s, completed 06.12.2013 19:22:09

You will now have the compiled .class files in …/async/target/scala-2.10. The get the .jar do the following.

> publish
[info] Packaging /home/repat/asynctest/async/target/scala-2.10/scala-async_2.10-0.9.0-SNAPSHOT-sources.jar ...
[info] Done packaging.
[info] Wrote /home/repat/asynctest/async/target/scala-2.10/scala-async_2.10-0.9.0-SNAPSHOT.pom
[info] :: delivering :: org.scala-lang.modules#scala-async_2.10;0.9.0-SNAPSHOT :: 0.9.0-SNAPSHOT :: integration :: Fri Dec 06 19:25:16 CET 2013
[info] 	delivering ivy file to /home/repat/asynctest/async/target/scala-2.10/ivy-0.9.0-SNAPSHOT.xml
[info] Main Scala API documentation to /home/repat/asynctest/async/target/scala-2.10/api...
[warn] there were 2 feature warning(s); re-run with -feature for details
model contains 29 documentable templates
[warn] /home/repat/asynctest/async/src/main/scala/scala/async/Async.scala:11: Could not find any member to link for "scala.concurrent.Future".
[warn] /**
[warn] ^
[warn] /home/repat/asynctest/async/src/main/scala/scala/async/internal/FutureSystem.scala:9: Could not find any member to link for "scala.async.AsyncBase".
[warn] /**
[warn] ^
[warn] three warnings found
[info] Main Scala API documentation successful.
[info] Packaging /home/repat/asynctest/async/target/scala-2.10/scala-async_2.10-0.9.0-SNAPSHOT-javadoc.jar ...
[info] Done packaging.
[trace] Stack trace suppressed: run last *:publish for the full output.
[error] (*:publish) java.io.IOException: Access to URL https://oss.sonatype.org/content/repositories/snapshots/org/scala-lang/modules/scala-async_2.10/0.9.0-SNAPSHOT/scala-async_2.10-0.9.0-SNAPSHOT.pom was refused by the server: Unauthorized
[error] Total time: 12 s, completed 06.12.2013 19:25:27

I’m not sure why it stops with an error here or rather, why access is denied to that repository. Anyway, the scala-async_2.10-0.9.0-SNAPSHOT.jar file is now in …/async/target/scala-2.10.

As mentioned in the error message, you get the stacktrace with last *:publish. I leave this here so people can find it via google.

last *:publish 
java.io.IOException: Access to URL https://oss.sonatype.org/content/repositories/snapshots/org/scala-lang/modules/scala-async_2.10/0.9.0-SNAPSHOT/scala-async_2.10-0.9.0-SNAPSHOT.pom was refused by the server: Unauthorized
	at org.apache.ivy.util.url.AbstractURLHandler.validatePutStatusCode(AbstractURLHandler.java:79)
	at org.apache.ivy.util.url.BasicURLHandler.upload(BasicURLHandler.java:231)
	at org.apache.ivy.util.FileUtil.copy(FileUtil.java:150)
	at org.apache.ivy.plugins.repository.url.URLRepository.put(URLRepository.java:84)
	at org.apache.ivy.plugins.repository.AbstractRepository.put(AbstractRepository.java:130)
	at org.apache.ivy.plugins.resolver.RepositoryResolver.put(RepositoryResolver.java:234)
	at org.apache.ivy.plugins.resolver.RepositoryResolver.publish(RepositoryResolver.java:216)
	at sbt.IvyActions$$anonfun$publish$3.apply(IvyActions.scala:258)
	at sbt.IvyActions$$anonfun$publish$3.apply(IvyActions.scala:257)
	at scala.collection.TraversableLike$WithFilter$$anonfun$foreach$1.apply(TraversableLike.scala:772)
	at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
	at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:47)
	at scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:771)
	at sbt.IvyActions$.publish(IvyActions.scala:257)
	at sbt.IvyActions$$anonfun$publish$1$$anonfun$apply$1.apply$mcV$sp(IvyActions.scala:93)
	at sbt.IvyActions$$anonfun$publish$1$$anonfun$apply$1.apply(IvyActions.scala:93)
	at sbt.IvyActions$$anonfun$publish$1$$anonfun$apply$1.apply(IvyActions.scala:93)
	at sbt.IvyActions$.withChecksums(IvyActions.scala:102)
	at sbt.IvyActions$.sbt$IvyActions$$withChecksums(IvyActions.scala:97)
	at sbt.IvyActions$$anonfun$publish$1.apply(IvyActions.scala:93)
	at sbt.IvyActions$$anonfun$publish$1.apply(IvyActions.scala:87)
	at sbt.IvySbt$Module$$anonfun$withModule$1.apply(Ivy.scala:116)
	at sbt.IvySbt$Module$$anonfun$withModule$1.apply(Ivy.scala:116)
	at sbt.IvySbt$$anonfun$withIvy$1.apply(Ivy.scala:104)
	at sbt.IvySbt.sbt$IvySbt$$action$1(Ivy.scala:51)
	at sbt.IvySbt$$anon$3.call(Ivy.scala:60)
	at xsbt.boot.Locks$GlobalLock.withChannel$1(Locks.scala:98)
	at xsbt.boot.Locks$GlobalLock.xsbt$boot$Locks$GlobalLock$$withChannelRetries$1(Locks.scala:81)
	at xsbt.boot.Locks$GlobalLock$$anonfun$withFileLock$1.apply(Locks.scala:102)
	at xsbt.boot.Using$.withResource(Using.scala:11)
	at xsbt.boot.Using$.apply(Using.scala:10)
	at xsbt.boot.Locks$GlobalLock.ignoringDeadlockAvoided(Locks.scala:62)
	at xsbt.boot.Locks$GlobalLock.withLock(Locks.scala:52)
	at xsbt.boot.Locks$.apply0(Locks.scala:31)
	at xsbt.boot.Locks$.apply(Locks.scala:28)
	at sbt.IvySbt.withDefaultLogger(Ivy.scala:60)
	at sbt.IvySbt.withIvy(Ivy.scala:101)
	at sbt.IvySbt.withIvy(Ivy.scala:97)
	at sbt.IvySbt$Module.withModule(Ivy.scala:116)
	at sbt.IvyActions$.publish(IvyActions.scala:87)
	at sbt.Classpaths$$anonfun$publishTask$1.apply(Defaults.scala:1094)
	at sbt.Classpaths$$anonfun$publishTask$1.apply(Defaults.scala:1093)
	at scala.Function3$$anonfun$tupled$1.apply(Function3.scala:35)
	at scala.Function3$$anonfun$tupled$1.apply(Function3.scala:34)
	at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
	at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:42)
	at sbt.std.Transform$$anon$4.work(System.scala:64)
	at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237)
	at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237)
	at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18)
	at sbt.Execute.work(Execute.scala:244)
	at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237)
	at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237)
	at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:160)
	at sbt.CompletionService$$anon$2.call(CompletionService.scala:30)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
	at java.util.concurrent.FutureTask.run(FutureTask.java:166)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
	at java.util.concurrent.FutureTask.run(FutureTask.java:166)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:724)
[error] (*:publish) java.io.IOException: Access to URL https://oss.sonatype.org/content/repositories/snapshots/org/scala-lang/modules/scala-async_2.10/0.9.0-SNAPSHOT/scala-async_2.10-0.9.0-SNAPSHOT.pom was refused by the server: Unauthorized

flattr this!