hoch

adb - Kopieren von Dateien auf ein Android Smartphone - auch ohne OS

Ich habe da so ein Samsung Galaxy Irgend-Bla Smartphone mit Octa Core CPU und Schlagmichtot-Features … das bekommt seit 2 Jahren kein Update. Beim Versuch, das Android 5.02 zu aktualisieren, heisst die Meldung stets: ich bin auf dem aktuellen Stand.

Ich lach mich tot! Nein, ist es nicht. Eine Android Version 5 - das tut schon beim Lesen weh - Shame on you SAMSUNG!!

Höchste Zeit, das Ding mit einem massiv aktuelleren Custom ROM zu versorgen. TWRP wurde installiert und ich habe die Custom ROM LineageOS und Gapps draufkopiert. Dann die Installation ausgeführt.

Dann kam aber ein kleines Missgeschick: ich wollte die Installation wiederholen und habe das System in TWRP nochmal gewiped… OOPS: damit war das Betriebssystem weg, wie auch meine für die erste Installation draufkopierten Images. Das Smartphone kann man dann weder booten und auch nicht neu installieren. (OK, ich gebs zu: ich habe an der Stelle auch etwas geflucht :-))

So geht es aber weiter:

(1)
Das Telefon wurde in TWRP gebootet - dann per USB mit dem PC verbunden.

(2)
Man braucht adb (adb und fastboot wären Begriffe, um die Suchmaschine deiner Wahl zu füttern). Das hatte Tool ich bereits.

(3)
In der Konsole kann man schauen, ob das Smartphone gefunden wird:


C:\Program Files (x86)\Minimal ADB and Fastboot>adb devices
List of devices attached
4100706845537121 recovery

Yep. Ein “recovery” ist da - das ist das Smartphone.

(4)
Danach kann man beliebige Dateien zum Smartphone kopieren.

Syntax:

adb push [lokale Quelle] [Ziel am Smartphone]

Einfach die lokale Datei mit kompletten Pfad wählen (Hint: mit der Tab Taste schlägt die Konsole Datien und Verzeichnisse vor - so kann man den gesamten Dateinamen schnell komplettieren).
Als Ziel wähle ich /sdcard/ auf dem Smartphone.


C:\Program Files (x86)\Minimal ADB and Fastboot>adb push D:\Apps\Android\_data\Galaxy-alpha\lineage-14.1-20171130-UNOFFICIAL-sltexx-beta9.zip /sdcard/
[100%] /sdcard/lineage-14.1-20171130-UNOFFICIAL-sltexx-beta9.zip

C:\Program Files (x86)\Minimal ADB and Fastboot>adb push D:\Apps\Android\_data\Galaxy-alpha\open_gapps-arm-7.1-nano-20180324.zip /sdcard
[100%] /sdcard/open_gapps-arm-7.1-nano-20180324.zip

Anm.: dem ein oder anderen aufmerksamen Leser mag das LineageOs 14 auffallen, obwohl Version 15 aktuell ist … Version 15 gibt es noch nicht für mein Gerät.

(5)
Nun kann man in TWRP die Installation starten, indem man die Dateien aus dem /sdcard/ Verzeichnis wählt.
2018-03-25-twrp-dateien-in-sdcard-verzeichnis.jpg

weiterführende Links:

  1. Wikipedia: TWRP
  2. TWRP (en)
  3. Axels Webseite: Hilfe zu adb
  4. xda-developers Forum: Minimal ADB and Fastboot (en)
  5. lineageOs Roms (en)
  6. openGapps Google Apps packages (en)
Artikel weiterempfehlen: Google + Facebook

20 Jahre Opensource - Check an unserem Institut

20 Jahre OpenSource … und ich habe bei meinem Arbeitgeber (Institut für Medizinische Lehre der Universität Bern; ca. 70 Mitarbeiter) einmal grob überflogen, was ich da so aus meiner bescheidenen Perspektive so sehe. Nachfolgende Liste entstand, OHNE dass ich in den Teams deren Tools erfragt habe. Gut möglich, dass eine vollständige Liste doppelt so lang würde: es fehlen Werkzeuge verschiedener Teams genau so wie Desktop-Applikationen (das ginge mit dem Firefox Webbrowser ja schon los).

Ich wage dennoch zu behaupten: ohne Opensource ginge an unserem Institut nicht mehr sehr viel.

Betriebssysteme
etwa 97% unserer über 100 Server verwenden ein Linux. Bei uns sind im Einsatz
* CentOS - https://www.centos.org/
* Debian - https://www.debian.org/
* Ubuntu - https://www.ubuntu.com/

Verschlüsselung
* Mit https verschlüsselte Webseiten und applikationsinterne Kommunikation verwendet OpenSSL - https://www.openssl.org/
* wir haben Wrapper um das Backup-Werkzeug Dupicity im Einsatz - http://duplicity.nongnu.org/
* unsere Server verschlüsseln lokal ihre Daten mit GnuPG https://gnupg.org/ -
* SecureShell (SSH) für den selektiven Zugriff auf unsere Server per Shell, Filezilla oder getunnelte Zugriffe auf Datenbanken - https://www.openssh.com/
* Mittels Shibboleth können sich Accounts fremder Provider bei uns einloggen - https://www.shibboleth.net/
* Stunnel - Verschlüsselte Verbindung bei unverschlüsselten Protokollen - https://www.stunnel.org/

Virtualisierung
* Unsere Virtualisierungsserver arbeiten mit KVM - https://www.linux-kvm.org/
* Als Verwaltungssoftware für virtuelle Server verwenden wir OpenNebula, welches mit EU Fördergeldern unterstützt wurde - https://opennebula.org/
* Der Festplatten Cluster wird mit Ceph betrieben - https://ceph.com/
* lokale Instanzen von Virtualbox - https://www.virtualbox.org/

Softwareverteilung
* Puppet - https://puppet.com/
* Foreman - https://theforeman.org/

Programmiersprachen, Computing
* Javascript/ NodeJS - https://nodejs.org/
* OpenCpu - https://www.opencpu.org/
* Perl - https://www.perl.org/
* PHP - http://php.net/
* Python - https://www.python.org/
* R - https://www.r-project.org
* Ruby - https://www.ruby-lang.org

In Projekten sind div. kostenfreie Frameworks im Einsatz, darunter
* AngularJS - https://angularjs.org/
* Apache FOP Project - https://xmlgraphics.apache.org/fop/
* Bootstrap - http://getbootstrap.com/
* Fatfree PHP Framework - https://fatfreeframework.com
* FontAwesome (Iconset) - https://fontawesome.com/
* jQuery https://jquery.com/
* PureCSS - https://purecss.io/
* Ruby On Rails - http://rubyonrails.org/
* Symphony PHP Framework - https://symfony.com/

Entwicklertools
* Apache Studio https://directory.apache.org/studio/
* Mysql Workbench https://www.mysql.com/products/workbench/
* DBeaver - https://dbeaver.jkiss.org/
* Git - https://git-scm.com/
* Netbeans IDE - https://netbeans.org/
* Xamarin - https://www.xamarin.com/

Datenbanken
* CouchDB - https://couchdb.apache.org/
* OpenLDAP - https://www.openldap.org/
* Elasticsearch - https://www.elastic.co/
* Myslq - https://www.mysql.com/
* MariaDB - https://mariadb.org/
* Postgres - https://www.postgresql.org/
* Resin - https://resin.io/
* SqLite - https://sqlite.org/

Webserver
* Apache Httpd - https://httpd.apache.org/
* Nginx - https://www.nginx.com/
* HA-Proxy - http://www.haproxy.org/

Logging/ Monitoring
* CollectD - https://collectd.org/
* Grafana - https://grafana.com/
* Graylog https://www.graylog.org/
* Monit - https://mmonit.com/monit/
* Munin - http://munin-monitoring.org/
* Nagios - https://www.nagios.org/
* Sensu - https://sensuapp.org/

webbasierte Werkzeuge
* Alchemy CMS - https://alchemy-cms.com/
* Concrete5 - https://www.concrete5.org/
* Dokuwiki - https://www.dokuwiki.org/
* GitLab - https://about.gitlab.com/
* Ilias - https://www.ilias.de/
* Umfragen Limesurvey - https://www.limesurvey.org/de
* Webstatistik Mattomo - https://matomo.org/
* OpenProject - https://www.openproject.org/
* Raumplanung https://mrbs.sourceforge.io/
* Wordpress - https://de.wordpress.com/

Datenablagen, Datenaustausch
* Samba - https://www.samba.org/
* Nextcloud - https://nextcloud.com/

Ergänzt werden diese Tools durch eigene Entwicklungen: diverse Werkzeuge schreiben wir zusätzlich selbst.

Artikel weiterempfehlen: Google + Facebook

Html5 Audio Events beobachten

Es entsteht gerade eine weitere Demo Seite zu Html 5 Audio:
Nach Eingabe einer beliebigen Audio URL wird diese als Source eines Audio Tags verwendet.
An dieses Audio Tag werden alle dokumentierten Events angeklebt und man kann bei den Interna eines Audio Tags zuschauen und wann welche Events abgesetzt werden.

Sie erscheinen zum einen rechts als Log (mit Zeitangabe in Millisekunden seit Laden der Seite). Damit kann man z.B. messen, wie lange ein Audio laden muss, bis es abgespielt werden kann (readyState=4).

Unten ist die Liste aller Events, die bei Absetzen hervorgehoben werden … und nach und nach schwächer verfärbt sind.

2018-02-28-audiodebugger.jpg

weiterführende Links:

  1. Demo-Seite: Html5 Audio debugger
Artikel weiterempfehlen: Google + Facebook

Datenbank-Optimierung - mein Highlight der Woche

Bei meiner Arbeit an der Uni Bern war ein Grossteil der Zeit in die Optimierung von Datenbank-Zugriffen geflossen. Das betraf hauptsächlich ein System für ein Portal für Dozierende und Studierende mit Stundenplänen, Kurseinschreibungen, Feeds zu etlichen Themen und nach Studienjahr getrennt, Kalendersynchronisation von personalisierten Kalendern uvm. Jenes Portal ist uralt und wurde einmal mit PHP4 entwickelt und sollte abgelöst werden. Wurde es aber nicht, sondern es wurde vor vielen Jahren mühsam unter PHP5 lauffähig gemacht, aber der Code blieb noch immer zumeist prozedural, mit vielen Includes und gespickt mit allen erdenklichen Highlights an Programmiersünden, sei es Wartbarkeit, Caching/ Performance, SQL-Injection oder Verständnis von Algorithmen und Gestaltung von Datenbankabfragen. Seit dem ersten Ablösetermin sind nun 8..9 Jahre vergangen … aber Herbst 2019 wird es endlich(!!) abgelöst. Heisst aber: bis dahin muss es weiter am Leben erhalten werden.

Es wurden 5 Applikationsteile, die “am meisten weh tun” ausgemacht und jene optimiert. Letzten Dienstag wurde es eingespielt. Doch, es hat sich gelohnt - da ist so ein markanter Abfall:

2018-02-18-dbperformance-queries-by-week.png

Man könnte meinen: da ist was kaputt. Aber nein: es funktioniert genau gleich!!
Ich hoffe, ich kann euch mit diesem Praxis-Beispiel motivieren: macht einmal eine Performance-Analyse und schaut genauer auf die Top 3!

[Read More…]

Artikel weiterempfehlen: Google + Facebook

Texte anhand einer Quelle einfärben

Meine Nachrichten-Feeds benennen die Nachrichten-Quelle und färben sie ein. Es entsteht eine “bunt” eingefärbte Quelle, bevor deren Meldungs-Überschrift genannt wird.

Und wie funktioniert es, dass “Tagesschau”, “Spiegel” oder “Heise” jeweils spezifisch eingefärbt sind?

2018-02-04-rssnews.png

Naja, der Text - also String - der Quelle wird mit einer MD5 Funktion gehasht. Dann erhält man so einen Hexcode aus einem vorgegebenen String.

Wenn man sich vom Beginn des Hex-Strings jeweils die aufeinanderfolgenden 2..3 Stellen herausgreift, kann man diese dem Anteil für rot, grün und blau zuordnen.
Damit der Hintergrund und Vordergrund relativ zueinander passen, definiere ich für beide einen eine Range von..bis. Der ermittelte Wert aus dem Hash wird relativ zum von-bis-Range für Vordergrund und Hintergrund eingeordnet.

Und das ist der zugehörige PHP-Code:

/**
 * return html code for a span with background color based on a checksum of the given text
 * @param string $sText      text that is used for checksum; if false it returns a gray box
 * @param string $sContent   optional: text to show
 * @return string
 */
function _getChecksumSpan($sText, $sContent = '') {
    if ($sText) {
        // color ranges in decimal values for RGB from ... to
        $iFgStart = 60;
        $iFgEnd = 160;

        $iBgStart = 180;
        $iBgEnd = 240;

        // divider: 3 digits of md5 will be extracted
        $iFgDivider = 16 * 16 * 16 / ($iFgEnd - $iFgStart);
        $iBgDivider = 16 * 16 * 16 / ($iBgEnd - $iBgStart);

        $sHash = md5($sText);
        $sColor = ''
                . 'color: rgba('
                . ($iFgStart + round(hexdec(substr($sHash, 0, 3)) / $iFgDivider)) . ','
                . ($iFgStart + round(hexdec(substr($sHash, 3, 3)) / $iFgDivider)) . ','
                . ($iFgStart + round(hexdec(substr($sHash, 6, 3)) / $iFgDivider)) . ','
                . '1'
                . ');'
                . 'background: rgba('
                . ($iBgStart + round(hexdec(substr($sHash, 0, 3)) / $iBgDivider)) . ','
                . ($iBgStart + round(hexdec(substr($sHash, 3, 3)) / $iBgDivider)) . ','
                . ($iBgStart + round(hexdec(substr($sHash, 6, 3)) / $iBgDivider)) . ','
                . '1'
                . ');'
        ;
    } else {
        $sColor = "color: #888; background: #ccc;";
    }
    return '<span style="' . $sColor . '; border-left: 0.8em solid; padding: 0.1em 0.4em 0.1em 0.3em ;">' . ($sContent ? $sContent : ' ') . '</span>';
}

weiterführende Links:

  1. meine RSS-Seite: Nachrichten
Artikel weiterempfehlen: Google + Facebook