echo "foobar" | pbcopy
Pipe text from commandline into clipboard
Posted on 29. April 2020 Comments
Posted on 29. April 2020 Comments
echo "foobar" | pbcopy
Posted on 29. August 2017 Comments
lsof -P -i -n | cut -f 1 -d " " | uniq
lsof – list open files
-P list port numbers instead of service names
-i list all network files
-n IP addresses instead of host names
cut – cut output
-f specifies fields, separated in the input by the field delimiter character (-d)
-d delimiter
uniq – filters out repeated lines
Posted on 2. Mai 2017 Comments
In Cafés wie Balzac oder Starbucks oder anderen öffentlichen Hotspots in Deutschland muss man sich häufig anmelden bzw. bekommt Login Daten an der Kasse. Diese muss man dann in ein captive portal eintragen, damit der Internetzugang am WiFi freigeschaltet wird. Blöd nur, wenn sich nicht einmal die Login Seite öffnet. Das könnte natürlich daran liegen, dass der DHCP Server am Router spinnt, der Laptop/Tablet/Smartphone einfach mal neugestartet werden muss oder sonst irgendein Fehler vorliegt. Speziell bei Hotsplot (z. B. bei Balzac) liegt die Login Seite allerdings im Internet, irgendwie ein Catch 22.
Das heisst, bevor der Laptop die Seite öffnen kann, muss die Adresse der Login Seite (https://hotsplots.de/login/auth.php?…) erst einmal aufgelöst werden. Blöd auch, dass im Router nur Port 80 (HTTP) freigeschaltet ist und nicht auch Port 53 (DNS). Das ist bei mobilen devices meist kein Problem, da diese über eine Mobilfunkverbindung die DNS Query absetzen. Bei Laptops wird das schon schwieriger, wenn die IP-Adresse nicht im Cache ist. Über WISPr sollte eigentlich der Browser weitergeleitet werden, kann aber wie gesagt die Seite nicht auflösen.
Lösung
1. Auf Smartphone eine Netzwerk Analyse App wie z. B. Fing herunterladen.
2. DNS Query oder z. B. ping für Login Seite (hotsplots.de) absetzen oder sonst irgendwie die IP zur Login Seite herausfinden
3. Adresse und Domain in /etc/hosts (Linux/MacOS) bzw. Reg %SystemRoot%\system32\drivers\etc\hosts (Windows)eintragen
92.51.175.170 www.hotsplots.de 172.18.10.10 www.wifionice.de
4. Login Seite aufrufen und einloggen.
Warum die Anbieter nicht einfach Port 53 freischalten?
Eine Vermutung könnte sein, dass man diese Verbindung mittels iodine nutzen könnte um kostenlos im Internet zu surfen. Ob das wirklich ein so großes Problem ist wage ich aber zu bezweifeln.
Posted on 27. Februar 2017 Comments
The popular ERP Plentymarkes let’s you send your orders via the Fulfillment by Amazon program to your customers. Amazon is just used as a logistics partner, the order doesn’t have to come via Amazon. It could e.g. be a Rakuten or eBay order. The problem that Plentymarkets didn’t address at all and is discussed in the private forums, is that Amazon chooses whatever shipping company they seem fit.
Every order has a standard shipping provider and with it comes a URL for tracking the package. Most of the vendors would implement an event procedure („Ereignisaktion“) that sends an email to the customer containing the order and the TrackingID as soon as it’s shipped. The TrackingIDs are directly imported from Amazon. Unfortunately Plentymarkets does not change the shipping provider in case it’s not the default one (which is often the case). So the customer gets wrong information.
In one of last last blogposts I introduced a PHP package to check which shipping provider a TrackingID belongs to by either scraping their website or using a regular expression and filtering for common patterns. In this blog post I want to explain how to use it to fix those orders. You will need a webserver with PHP and MySQL and a little knowledge of programming and Linux.
You can find some simplified code examples on GitHub soon.
Posted on 21. April 2016 Comments
When importing CSV (or other) files into the database, scripts (especially PHP or C-related languages), will stop if there is – for whatever reason – a NULL byte in your file because it signals end of file/string, see Null bytes related issues.
So when importing a file like that with MySQL Workbench you will get this error:
line contains NULL byte
You can solve this by using the commandline tool tr (from coreutils):
tr < file-with-nulls -d '\000' > file-without-nulls
To check if there are any null bytes in your file, use the python IDE and type in:
open('filename.ext').read().index('\0')
Thanks to Pointy from Stackoverflow
Posted on 6. August 2015 Comments
This script could be helpful to download a set of files from a webserver, that you don’t have (S)FTP access to. The input file consists of a list of filenames, one name each line.
#!/bin/bash
file=$1
WEBSERVER="http://webserver.tld/folder/"
while IFS= read -r line; do
FULLURL="$WEBSERVER$line"
wget -nc -R --spider $FULLURL
done < "$file"
At first, the first command line argument is saved into the variable file. Then the Webserver address is saved to the WEBSERVER variable. IFS stands for Internal Field Separator. It’s used to read line by line through the file in the while loop that ends in the last line. Inside of the loop, the read line is concatenated with the webserver address into FULLURL. Then, wget is used with the parameters -nc for checking if the file is not already present in the current folder, -R for downloading and –spider for checking the existence on the webserver.
You can find the script on GitHub.
Posted on 6. November 2013 Comments
MySQL Server und Header installieren:
sudo apt-get install mysql-server libmysqlclient-dev libmysql++-dev
In Eclipse C++-Projekt anlegen, Rechtsklick auf das Projekt:
Properties>C/C++-Build>Settings>Tool Settings>GCC C++ Compiler>Includes
Dort die Pfade /usr/include/mysql und /usr/include/mysql++ als Include paths eintragen.
Weiter unten unter GCC C++ Linker>Libraries>Libraries „mysqlpp“ eintragen und unter Library search paths ebenfalls /usr/include/mysql und /usr/include/mysql++.
Unter Miscellaneous dann noch bei Other objects die Datei /usr/lib/x86_64-linux-gnu/libmysqlclient.so angeben:
Beispieldatei: mysqlpptest.cpp
Posted on 6. November 2013 Comments
Vorraussetzungen
Vorbereitung
sudo apt-get update && apt-get upgrade && apt-get install build-essential autoconf libaprutil1-dev libapr1-dev cd ~/Development wget http://mirror.softaculous.com/apache/activemq/activemq-cpp/source/activemq-cpp-library-3.4.5-src.tar.gz tar -xvzf activemq-cpp-library-3.4.5-src.tar.gz cd activemq-cpp-library-3.4.5-src ./configure make
ActiveMQ-CPP
Dann mit sudo make install auf dem lokalen Rechner installieren. Damit befinden sich dann die .so-Dateien in /usr/local/lib.
In Eclipse
Beispiele
Die Projekte unter activemq-cpp-3.4.5/activemy-cpp/src/examples lassen sich jetzt kompilieren, allerdings kommt beim starten folgende Fehlermeldung:
./activeMQProducer: error while loading shared libraries: libactivemq-cpp.so.14: cannot open shared object file: No such file or directory
Der Fehler lässt sich mit folgendem Befehl beheben(credit):
export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH}
Diesen Artikel hatte ich bereits vor einem Jahr(Ende 2012) geschrieben. Vielleicht gibt es neue Versionen der benutzen Software.
Posted on 30. September 2013 Comments
There are a couple of tutorials[1] of how to install Oracles SQLDeveloper and they all say to install the sqldeveloper-XXX-no-jre.zip, in this case sqldeveloper-3.2.20.09.87-no-jre.zip. I didn’t read it because my first idea was the following and it also worked: It’s possible to download the .rpm-file and convert it with alien. You might have to install it with
sudo apt-get install alien
then
alien sqldeveloper-3.2.20.09.87-1.noarch.rpm
dpkg -i sqldeveloper_3.2.20.09.87-2_all.deb
You can then start the sqldeveloper. It will ask you for the Java Path which is usually /usr/lib/jvm/java-6-openjdk and give you some kind of error, which didn’t seem to have any impact.
repat@laptop:~$ sqldeveloper Oracle SQL Developer Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. Type the full pathname of a J2SE installation (or Ctrl-C to quit), the path will be stored in ~/.sqldeveloper/jdk /usr/lib/jvm/java-6-openjdk /opt/sqldeveloper/sqldeveloper/bin/../../ide/bin/launcher.sh: Zeile 455: /home/repat/.sqldeveloper/jdk: Datei oder Verzeichnis nicht gefunden
[1] e.g. Oracle Forum, Linux Sagas, Software in a bottle
Posted on 9. August 2013 Comments
GRUB ist ein Bootloader, der häufig für Linuxsysteme zum Einsatz kommt. Besonders praktisch ist er für Dual-Boot Systeme, wenn man z.B. noch die Windows Installation für ein paar Programme braucht und sonst auf Linux arbeitet oder auch andersherum, kann man beim Start des Computers auswählen, welches System starten soll. Oder unterschiedliche Linux Distributionen. Oder oder oder…halt auch 2 Windows Installationen. Dafür braucht es allerdings kein Linux, da man GRUB natürlich auch ohne ein Linux läuft.
In diesem Beispiel habe ich erst Windows XP und Windows 7 installiert. Wie das geht, ohne dass die beiden sich in die Quere kommen, habe ich in einem anderen Blog-Eintrag geschrieben. Diese Anleitung geht davon aus, dass XP und 7 bereits installiert sind.
1. Linux Live CD downloaden.
Ich habe Ubuntu genommen, die Live-CD bekommt man auf der Website. Einfach starten und den Live Modus auswählen.
2. GRUB 2 deinstallieren
Für dieses Beispiel werde ich GRUB 1/GRUB Legacy verwenden. Es basiert auf einer simplen Textdatei, die übersichtlich und gut editierbar ist.
sudo apt-get remove grub*
3. GRUB 1 installieren
sudo apt-get install grub
4. ext2 Partition erstellen
gparted aus dem Startmenü wählen. Bei der Installation von Windows XP und Windows 7 habe ich so viel Platz gelassen, dass man hinter den beiden Partitionen noch eine z.B. 256MB große Partition erstellen kann, aufgrund der verfügbaren Windows Tools zum Lesen bzw. Schreiben von Linux Partionen nehme ich hier ext2. Ist die Partition erstellt, gebe ich dieser Partition das boot-flag.
5. GRUB auf dieser Partition installieren
Erstmal die neu erstellte Partition mounten. Nach Windows XP(/dev/sda1) und Windows 7(/dev/sda2) ist das hier logischerweise /dev/sda3. Gemountet wird sie hier z.B. nach /mnt.
sudo mount /dev/sda3 /mnt
Jetzt kommt die eigentliche Installation, die GRUB in den MBR schreibt und damit Windows 7 dort überschreibt. Das root-directory flag gibt an, wohin GRUB die Dateien schiebt. /dev/sda ist das Gerät(!) auf dem der MBR geschrieben wird, hier also nicht die Partition angeben!
sudo grub-install --root-directory=/mnt /dev/sda
Fertig 🙂 Jetzt muss man nur noch die Datei /mnt/boot/grub/menu.lst erstellen. Man kann sich eine default Variante erstellen mit folgendem Befehl
sudo update-grub
Ihr findet dann in /boot/grub/menu.lst eine Vorlage, die man erstmal 1:1 kopieren kann in /mnt/boot/grub/menu.lst.
Um Windows XP und Windows 7 nebeneinander zu booten muss man wie im letzten Blog Artikel erklärt die hidden Flags setzen. Für Sicherungen, bei denen man ganze Festplatten sichert ist es aber nötig die hidden flags beide zu entfernen. Hierfür habe ich mir einen Dummy Eintrag gebastelt, der an dritter Stelle steht. Den Kernel gibt es natürlich auf meiner Installation nicht und sollte man versuchen diesen Eintrag zu starten gibt er eine Fehlermeldung aus. Beim Start von Windows XP muss man jeweils Windows 7 ausblenden und anders herum. Meine menu.lst sieht(im relevanten Teil) so aus:
title WindowsXP hide (hd0,1) unhide (hd0,0) root (hd0,0) makeactive savedefault chainloader +1 title Windows7 hide (hd0,0) unhide (hd0,1) root (hd0,1) makeactive savedefault chainloader +1 title Dummy unhide (hd0,0) unhide (hd0,1) root (hd0,0) kernel /boot/memtest86+.bin
Natürlich gibt es hier auch die Möglichkeit neue Einträge im GRUB hinzuzufügen. Wenn man die User aussperren möchte, legt man also ein Passwort fest. Dies am besten nicht im Klartext; Grub bietet hier allerdings nur MD5 an.
Benutzt z.B. dieses Perl Skript von mir um euer Passwort lokal in einen MD5 Hash umzuwandeln.
Dann kommt einfach dieser Eintrag hinzu
password --md5 $1$MD5HASH
6. Wechsel zwischen Windows XP und Windows 7 als default Eintrag.
Für das Umschalten zwischen Windows Installationen habe ich 2 Batchdateien erstellt: bootwinxp.bat und bootwin7.bat. Beide befinden sich in C:\Windows\system32, also im PATH. Wie man ext2 zum Schreibenrechten mountet erfahrt ihr in meinem anderen Blog-Eintrag. Ich gehe einfach mal davon aus, dass die eben erstellte GRUB-Partition auf X:\ gemountet ist. Der Einfachheit halber mache ich dort keine komplizierten Textersetzungsbefehle sondern erstelle einfach eine menu.xp und eine menu.7 Datei auf dieser Partition. Diese enthalten entweder einen anderen Wert für default in menu.lst oder eine andere Reihenfolge, d.h. jeweils Windows XP oder Windows 7 steht zuerst in der Datei(default ist standardmässig auf 0). Diese beiden Dateien überschreiben dann mit
COPY X:\boot\grub\menu.xp X:\boot\grub\menu.lst
bzw.
COPY X:\boot\grub\menu.7 X:\boot\grub\menu.lst
in bootxp.bat bzw. boot7.bat einfach nur die aktuelle menu.lst und beim nächsten Bootvorgang wird dann das jeweilige Betriebsystem gebootet. Wenn man mehrere Rechner verwaltet, kann man diese Batch Datei z.B. auch über SSH aufrufen.