Heute Abend eine nette Überraschung - meine Kopfhörer gehen am Macbook nicht mehr.
Leider hat mich Google nur bedingt weitergebracht. Deshalb hier die Lösung für alle die keine Lust haben eine Stunde herumzuprobieren.
Systemeinstellung > Ton > Ausgabe
Dann das WICHTIGE: Kopfhörer einstecken
Erst dann sieht man sieht man als Gerät die Kopfhörer. Mein Problem: Ein anderes Programm hatte hier noch ein Gerät eingerichtet und die Ausgabe auf dieses Gerät gesetzt. Setzt man die Ausgabe wieder auf Kopfhörer kann man sofort wieder seine Musik geniesen.
Alles andere hilft nicht - Reboot, PRAM-Reset, etc. etc. alles nutzlos. So einfach kann es sein, wenn man weiß wie es geht :-(
Noch ein Tip zum Schluß. Wenn man das Programm löscht, daß die ärgerlichen Audiodevices erzeugt hat, sollte man wissen, daß man nach dem Löschen einen Reboot durchführen muß. Erst dann sind die Devices verschwunden (und können uns nicht mehr ärgern).
Ich bin Physiker und Softwareentwickler und teile gern mit Euch Artikel zu Themen wie Softwareentwicklung, Technik und Wissenschaft
Dienstag, 12. Januar 2016
Rest Service mit Perl und Dancer
Wenn man heute einen Informationservice über das WEB zur Verfügung
stellt, verwendet man meist REST-Services.
Wie man das implementiert, dazu gibt es viele Tutorials im Netz. Allerdings beziehen sich die meisten auf Java. Wie ist das aber mit anderen Programmiersprachen? Wenn man nicht einen eigenen Server im Netz betreibt, wir es schwierig mit Java. Einfache Hostingangebote für ein paar Euro im Monat bieten keinen Javaserver an. Die Verwendung von Skriptsprachen wie Perl, PHP oder Python ist jedoch fast immer möglich.
Deshalb möchte ich hier zeigen, wie man REST und Perl miteinander verheiratet. Wir werden sehen: Es ist unglaublich einfach! Besonders intereressant ist es, dieses Verfahren mit einer einfachen Java-Implementierung des gleichen Problems zu vergleichen. Dazu plane ich noch zwei weitere Artikel.
Wie man das implementiert, dazu gibt es viele Tutorials im Netz. Allerdings beziehen sich die meisten auf Java. Wie ist das aber mit anderen Programmiersprachen? Wenn man nicht einen eigenen Server im Netz betreibt, wir es schwierig mit Java. Einfache Hostingangebote für ein paar Euro im Monat bieten keinen Javaserver an. Die Verwendung von Skriptsprachen wie Perl, PHP oder Python ist jedoch fast immer möglich.
Deshalb möchte ich hier zeigen, wie man REST und Perl miteinander verheiratet. Wir werden sehen: Es ist unglaublich einfach! Besonders intereressant ist es, dieses Verfahren mit einer einfachen Java-Implementierung des gleichen Problems zu vergleichen. Dazu plane ich noch zwei weitere Artikel.
Donnerstag, 7. Januar 2016
Mapnik 2.2 Inkompatibilitäten
Ich hatte letzte Woche ein Problem, daß mal wieder schön demonstriert:
- was passiert, wenn man seinen Vorurteilen vertraut, statt die Dinge wirklich zu überprüfen
- wie mühsam es sein kann, mit Open Source Produkten zu arbeiten
- wie man viele Stunden Zeit verlieren kann, wenn beide Dinge zusammen kommen
Montag, 14. Dezember 2015
Ding Dong Klingel reparieren
Ding
Dong Klingeln sind schön - solange bis das Kling-Klog verstummt. Dann
öffnet man die Klingel und stellt fest, daß diverse lockere Teile drin
sind, die irgendwie nicht mehr funktionieren.
Man
denkt kein Problem. Baut die paar Teile auseinander und stellt sich
plötzlich die Frage: Wie zum Teufel funktioniert eigentlich so eine Ding
Dong Klingel? Keine Ahnung!
Also Google fragen. Leider Fehlanzeige.
Bei der Suche nach "Ding Dong Klingel reparieren" kommen viele Treffer, so wie meist, aber nichts brauchbares.
Dienstag, 15. April 2014
Optimierung durch Entity Abstraktion - Teil I Datenbankdesign
Beim Datenbankdesign hat man oft hauptsächlich die Daten vor Augen. Es
wird geprüft, ob die Daten Redundanzen enthalten. Wenn ja, führt man die
üblichen Normalisierungen durch. An die Implementierung denkt man in
der Regel dabei noch nicht oder nur selten. Meistens nimmt man an, daß
sich aus den richtigen Datenstrukturen in der Datenbank die passenden
Datenstrukturen für die Implementierung einfach ergeben. Dass das nur
die halbe Wahrheit ist, möchte ich in diesem Artikel zeigen.
Ich arbeite für eine bekannte Wetterseite. Aus diesem Umfeld möchte ich auch das Beispiel entlehnen. Es geht um Wetterberichte. Diese erhalten wir als XML Dateien. Es gibt z.Z. ca. 20 verschiedene Wetterberichte. Für meine Überlegungen reichen drei Typen aus und die stelle ich hier auch nur vereinfacht dar.
Da wäre zunächst der Kurzwetterbericht wetterbericht_kurz.xml mit folgender Struktur:
Ich arbeite für eine bekannte Wetterseite. Aus diesem Umfeld möchte ich auch das Beispiel entlehnen. Es geht um Wetterberichte. Diese erhalten wir als XML Dateien. Es gibt z.Z. ca. 20 verschiedene Wetterberichte. Für meine Überlegungen reichen drei Typen aus und die stelle ich hier auch nur vereinfacht dar.
Die Wetterdaten
Da wäre zunächst der Kurzwetterbericht wetterbericht_kurz.xml mit folgender Struktur:
1: <?xml version="1.0" encoding="UTF-8"?>
2: <wt_kurz>
3: <datumzeit>
4: <datum>2013-11-10</datum>
5: <zeit>12:00:00 </zeit>
6: </datumzeit>
7: <titel>Langwetter Nachrichten</titel>
8: <ueberschrift>Wetterbericht fuer Bayern, Sonntag 15. Juli, 12:00 Uhr</ueberschrift>
9: <kopfzeile>Im Westen regnerisch, im Osten anfangs noch warm</kopfzeile>
10: <ueberschrift_wt_text>Das Wetter in Bayern:</ueberschrift_wt_text>
11: <wt_text>Hier steht jetzt der Wettertext ... blalalalallala</wt_text>
12: <ueberschrift_wt_naechste_tage>Die weiteren Aussichten bis Donnerstag:</ueberschrift_wt_naechste_tage>
13: <wt_naechste_tage>und auch in den kommenden Tagen viel Wetter .... </wt_naechste_tage>
14: <fuss>MeteoInfo: Meteorologe vom Dienst: Tel: 089 / 123456</fuss>
15: </wt_kurz>
Freitag, 7. Juni 2013
Probleme mit dem tabindex beim IE lösen
Beim IE 8 verhält sich der Tabindex nicht wie bei Chrome 27 und Firefox 18. Normalerweiser erwartet man, daß bei der Kennzeichnung eines HTML Elements z.B. Inputfeld mit tabindex="1" der erste TAB genau auf dieses Element springt. Macht der IE nicht.
Lösung:
Man fängt mittels keydown die Tabtaste ab und setzt sie explizit auf das HTML Element.
Die Variable tabFocusHandle ist global und wird mit false nach dem Laden der Seite initialisiert. Ist nicht besonders schön. Vielleicht hat jemand eine bessere Lösung.
Lösung:
Man fängt mittels keydown die Tabtaste ab und setzt sie explizit auf das HTML Element.
Die Variable tabFocusHandle ist global und wird mit false nach dem Laden der Seite initialisiert. Ist nicht besonders schön. Vielleicht hat jemand eine bessere Lösung.
$(document).keydown(function(event) {
var keyCodeSelectedButton = event.keyCode || event.which;
var tabButtonCode = 9;
if (tabFocusHandle == true && keyCodeSelectedButton == tabButtonCode) {
var naviElement = $('[tabindex="1"]');
naviElement.focus();
tabFocusHandle = false;
return false; // bei true geht er gleich einen Tab weiter, was wir ja nicht wollen
}
});
Mittwoch, 10. April 2013
JBoss Logfiles geschickt durchsuchen
Zeitliche Abschnitte filtern
Manchmal will man nur einen bestimmten zeitlichen Abschnitt eines Logfiles durchsuchen. Gerade bei sehr umfangreichen Logdaten ist es manchmal sehr interessant, das Geschehen in einem bestimmten Zeitraum zu untersuchen.Dazu kann man sehr wirkungsvoll das nachfolgenden Perl Skript einsetzen. Hier wird das Geschehen am 9.4.13 ab 15:00 - 16:00 herausgesucht
1: perl -e'
2: open FH, "server.log" or die "err open $!\n"; $line=1;
3: while(<FH>){
4: if(/^2013-04-09 15:/){
5: if(!$first){
6: { $first = $line; }
7: else
8: { $last = $line; }
9: }
10: $line++;}
11: print `sed -n "$first,${last}p" server.log` if $first;
12: '
Warum reicht hier nicht einfach ein 'grep' nach dem Datum mit Uhrzeit?
Treten irgendwelche Exceptions in der Zeit auf oder auch andere Outputs mit Zeilenumbruch auf, werden diese vom grep ignoriert.
Gerade bei großen Logfiles kann es schon sehr zeitsparend sein, erst einen zeitlichen Bereich herauzusuchen und dann mit 'grep' o.ä. nach Detailproblemen zu suchen.
Exceptions filtern
Angenommen man hat viele Java Exceptions, die im server.log nur sehr unübersichtlich sind, kann man sich mit nachfolgendem Skript helfen.Die Haupt-Exceptions werden speziell mit '===========' gekennzeichnet.
1: grep -n Exception: server.log |
2: perl -ne '
3: if(/^\d+\:2013-/g)
4: {print "===================================\n\n$_\n";}
5: else
6: {print "$_\n";}' | more
Beispiel:
1: ===================================
2: 214:2013-04-09 00:00:02,808 ERROR [org.hibernate.ejb.AbstractEntityManagerImpl] (DefaultQuartzScheduler_Worker-0) Unable to mark for rollback on PersistenceException:
3: 215:java.lang.IllegalStateException: [com.arjuna.ats.internal.jta.transaction.arjunacore.inactive] [com.arjuna.ats.internal.jta.transaction.arjunacore.inactive] The transaction
4: is not active!
5: 380:java.lang.IllegalStateException: [com.arjuna.ats.internal.jta.transaction.arjunacore.inactive] [com.arjuna.ats.internal.jta.transaction.arjunacore.inactive] The transaction
6: is not active!
7: ===================================
8: 508:2013-04-09 00:00:02,845 ERROR [org.jboss.aspects.tx.TxPolicy] (DefaultQuartzScheduler_Worker-0) javax.ejb.EJBTransactionRolledbackException: org.hibernate.exception.GenericJ
9: DBCException: Cannot open connection
10: 510:java.lang.IllegalStateException: [com.arjuna.ats.internal.jta.transaction.arjunacore.inactive] [com.arjuna.ats.internal.jta.transaction.arjunacore.inactive] The transaction
11: is not active!
Abonnieren
Posts (Atom)