Chrome / Chromium : App Verknüpfung auf Desktop anlegen

Wenn man mit Google Chrome oder Chromium einen direkten App-Starter auf dem Desktop anlegen möchte ist das unter Windows sehr einfach. Klickt auf das Menü-Item oben rechts (die drei Punkte) -> Weitere Tools -> Zu Desktop hinzufügen.

App-Starter Chrome / Chromium
App-Starter Chrome / Chromium


Unter Windows hatte ich damit nie Probleme, unter Linux muss man hier leider etwas Hand anlegen bzw. man macht es gleich selbst ;-)

Erstellt eine Datei mit dem Name eurer Anwendung unter ~/Schreibtisch/ z.B.
touch ~/Schreibtisch/heise.desktop

Dann fügt das in die Datei ein.
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Exec=/usr/bin/chromium-browser --app=https://www.heise.de/
Name=Heise
Icon=/home/USERNAME/icon.png


Unter Icon sollte natürlich ein gültiges Icon definiert sein. Wo ihr das speichert ist egal Hauptsache euer User hat Zugriff.
Hier gibts noch ein paar Infos dazu : .desktop-Dateien

Dieser Weg hat einige Vorteile. Die gewünschte Website ist unabhängig von anderen chrome/chromium prozessen. Man kann also den Browser schließen ohne die Anwendung zu beeinrächtigen. Bei Video Streaming usw. ist es auch ganz nett das die Adressleisten und Tabs nicht vorhanden sind uvm. einfach mal ausprobieren.

Jenkins : Nach Update Fehler 503

Problem : Nach einem Update des Jenkins Servers erhält man nur noch einen Fehler 503 mit dem Hinweis "Service Unavailable"
jenkins error 503
Lösung : Bei mir war der Grund eine veraltete JAVA SDK diese lag noch in Version 7 vor, für das aktuelle Jenkins wird JAVA SDK 8 benötigt.
Abfragen der aktuell installierten Versionen :
dpkg -l | grep oracle-java
Also mal schnell java 8 installiert und alles hat wieder funktioniert.

java 8 unter debian 8 installieren : how-to-install-oracle-java-8-in-debian

python : Key Press Event

Man möchte in einem Python Script einen Key Event abfangen. Das geht recht gut über curses

Beispiel :
#!/usr/bin/env python

import curses
stdscr = curses.initscr()
curses.cbreak()
stdscr.keypad(1)

stdscr.addstr(0,10,"Hit 'q' to quit")
stdscr.refresh()

key = ''
while key != ord('q'):
    key = stdscr.getch()
    stdscr.addch(20,25,key)
    stdscr.refresh()
    if key == curses.KEY_UP: 
        stdscr.addstr(2, 20, "Up")
    elif key == curses.KEY_DOWN: 
        stdscr.addstr(3, 20, "Down")

curses.endwin()


Hier gefunden :
stackoverflow.com - allyourcode
Referenz - Python 3.5 - curses

VB.NET 2015 : Vorlagen Manager für Office Anwendungen

Ich habe mal wieder eine kleine Fingerübung in VB.NET gemacht, rausgekommen ist ein Vorlagen Manager für alle Arbeitsgruppen Vorlagen unabhängig von der Anwendung. Ob das Sinn macht oder nicht ist egal es war mal wieder eine gute Übung für mich. Wenn man zur Laufzeit Elemente erstellen möchte gibt es einiges zu beachten. In meinem Beispiel erstelle ich eine TabPage im TabControl und füge ein ListView Element hinzu.

Formular
Vorlagen_Manager

Benötigt
Imports System.IO
Deklaration für den Pfad in der Klasse:
Dim varPath As New DirectoryInfo("pfad zu den Arbeitsgruppen Vorlagen")
Sub für das erstellen zur Laufzeit :
Private Sub AddTabPage()
    Dim tempPage As TabPage
    Dim LView As ListView
    For Each oSubDir As DirectoryInfo In varPath.GetDirectories
        tempPage = New TabPage(oSubDir.Name)
        LView = New ListView()
        With LView
                .Dock = DockStyle.Fill
                .View = View.Details
                .Name = "lvw_" & oSubDir.Name
                .GridLines = True
        End With
        tempPage.Controls.Add(LView)
        AddHandler LView.DoubleClick, AddressOf OpenFile_DoubleClick
        AddHeader(LView)
        If oSubDir.GetFiles.Count > 0 Then
                tab_ctl.TabPages.Add(tempPage)
                GetFilesFromFolder(oSubDir, LView)
        End If
    Next
End Sub
Um das erstellte Listview auch mit einem onKlick oder wie in meinem Fall DoppelKlick zu versehen wird AddHandler benötigt.
Dieser verweist in meiner Sub auf die Funktion OpenFile_DoubleClick
Private Sub OpenFile_DoubleClick(ByVal sender As Object, ByVal e As EventArgs)
        Dim lv As ListViewItem = CType(sender, ListView).FocusedItem
        Dim App As String = UCase(lv.SubItems(1).Text.ToString)
        Dim Template As String = lv.SubItems(2).Text.ToString
        Dim var_proc_start As String
        Select Case App
            Case "WO"
                var_proc_start = "winword.exe"
            Case "EX"
                var_proc_start = "excel.exe"
            Case "PP"
                var_proc_start = "powerpnt.exe"
            Case Else
                var_proc_start = Nothing
        End Select
        If Not (var_proc_start Is Nothing) Then
            Process.Start(Chr(34) & OfficePfad & var_proc_start & Chr(34), "/N " & Chr(34) & Template & Chr(34))
        End If
    End Sub
Hier werden die Header für das ListView Element geschrieben
Private Function AddHeader(ByVal Lstview As Object)
  Dim HEAD1, HEAD2, HEAD3 As ColumnHeader
  HEAD1 = New ColumnHeader
  HEAD2 = New ColumnHeader
  HEAD3 = New ColumnHeader
  With HEAD1
          .Text = "Vorlage"
          .TextAlign = HorizontalAlignment.Left
          .Width = 650
  End With
  With HEAD2
          .Text = "Typ"
          .TextAlign = HorizontalAlignment.Center
          .Width = 50
  End With
  With HEAD3
          .Text = "Pfad"
          .TextAlign = HorizontalAlignment.Left
          .Width = 5
  End With
  With Lstview
          .Columns.Add(HEAD1)
          .Columns.Add(HEAD2)
          .Columns.Add(HEAD3)
  End With
End Function
Datei Typ ermitteln :
Private Function Get_File_Type(ByVal File As FileInfo)
        Dim FTYPE As String
        Select Case File.Extension
            Case ".dotx"
                FTYPE = "WO"
            Case ".xltx"
                FTYPE = "EX"
            Case ".potx"
                FTYPE = "PP"
            Case Else
                FTYPE = "NA"
        End Select
        Return FTYPE
    End Function
Dateien in das Listview Element eintragen :
Private Sub GetFilesFromFolder(ByVal Folder As DirectoryInfo, ByVal oLiVi As Object)
        For Each File As FileInfo In Folder.GetFiles
            If File.Name.Substring(0, 1) = "~" Then
                Exit Sub
            End If
            Dim Item As New ListViewItem(File.Name)
            Item.SubItems.Add(Get_File_Type(File))
            Item.SubItems.Add(File.FullName)
            oLiVi.Items.Add(Item)
        Next
    End Sub
Form Load :
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
   AddTabPage()
End Sub


Es gibt bestimmt schönere Weg oder auch andere die besser wären, wenn das so ist schreibts mir in die Kommentare. Ich bin bis jetzt zufrieden es funktioniert ;-)


Bash : Folder an ein Array übergeben

Alle Unterordner eines Ordners durchnummeriert anzeigen.

path=/home
array=()
while IFS= read -r -d $'\0'; do
        array+=("$REPLY")
done < <(find ${path} -maxdepth 1 -type d ! -name '.*' ! -wholename ${path} -print0 )
cnt=1
for item in "${array[@]}"
do 
        echo "${cnt}) -> ${item}" 
        ((cnt++))
done

Bash : Parameter sauber an Skript übergeben

Parameter sauber an Skript übergeben mit getopts.

# definiere mögliche Parameter
# ------------------------------------------------

while getopts s:f:h opts; do
        case ${opts} in
                s) var1=${OPTARG} ;;
                f) var2=${OPTARG} ;;
                h) show_help ;;
        esac
done


Erklärung :
In diesem Beispiel gibt es 3 Parameter s,f und h , wenn -s angegeben wird muss ein Inhalt folgen. Also script.sh -s wirft den Fehler aus
Diese Option erfordert ein Argument -- s
das selbe würde auch auftreten wenn f ohne Inhalt angegeben wird. Das wird definiert indem bei getopts ein : hinter dem parameter steht (s:f:) bei h steht kein : hinter dem Buchstaben somit wird dieser Parameter leer aufgerufen also nur mit -h.

you want to know more :
mkssoftware.com docs getopts
wiki.bash-hackers.org - howto - getopts_tutorial
“Das einzig sichere System müsste ausgeschaltet, in einem versiegelten und von Stahlbeton ummantelten Raum und von bewaffneten Schutztruppen umstellt sein.”
Gene Spafford (Sicherheitsexperte)