Archiv

Archiv für die Kategorie ‘Coding’

File Thingie – Syntax-Highlighting mit Ace-Editor

20. März 2017 Keine Kommentare

Als webbasierter Dateimanager kommt bei mir nach wie vor aufgrund seiner Einfachheit bevorzugt File Thingie zum Einsatz (Download Version 2.5.7). Diesen nutze ich auch gerne, um mal kurz was am Code bestimmter Dateien zu ändern, wenn ich grade keinen FTP-Zugang zum Server habe. Aber leider besteht der Standard-Editor nur aus einem Textfeld, und die im vorigen Beitrag angesprochenen Editor-Plugins wollte ich nicht nutzen, da ich WYSIWYG-Editoren nicht mag und für Code auch gar nicht gebrauchen kann.

Mit Ace gibt es aber auch einen reinen Code-Editor mit sehr gutem Funktionsumfang wie Syntax Highlighting für mehr als 110 Sprachen, verschiedene Themes sowie jede Menge weiterer Anpassungsmöglichkeiten. Dieser muss allerdings erst in File Thingie integriert werden. Nachfolgend möchte ich die dafür nötigen Änderungen aufzeigen.

Anforderungen
– Alle in File Thingie zur Bearbeitung freigegebenen Dateitypen sollen mit Ace dargestellt werden.
– Es soll je nach geöffneter Datei die korrekte Sprache für Syntax Highlighting geladen werden.
– Möglichst wenig Änderungen an der Funktionsweise von File Thingie selbst

Umsetzung
Zuerst müssen in der config.php die Dateitypen festgelegt werden, welche mit File Thingie bearbeitet werden sollen. Dafür sind an 2 Stellen Anpassungen erforderlich:

$ft["settings"]["FILETYPEBLACKLIST"] = ""; // File types that are not allowed for upload.

Nicht vom Kommentar irritieren lassen, diese Option gilt nicht nur für den Upload, sondern die hier eingegebenen Dateitypen werden generell nicht angezeigt.

$ft["plugins"]["edit"] = array(
  "settings" => array(
    "editlist" => "txt html htm css php js xml",
    "converttabs" => FALSE
  )
);

Danach geht es weiter mit der Datei edit.plugin.php im plugins-Verzeichnis. Der Editor in File Thingie ist eine einfache textarea. Diese kann von Ace aber nicht direkt verarbeitet werden. Ace ist für die Nutzung mit Containern wie div oder pre ausgelegt. Daher ist es erforderlich, ein neues div anzulegen.

In dieser Datei ist zusätzlich noch die Ermittlung des Dateityp erforderlich. Dazu wird ein zusätzliches verstecktes Eingabefeld angelegt, in welchem nur die Dateiendung der aktuell geladenen Datei gespeichert wird.

// Make form or show lock message.
$split_file = explode(".",$_REQUEST['file']);
$file_ext = $split_file[sizeof($split_file)-1];
$str .= '<form id="edit" action="'.ft_get_self().'" method="post">
  <div>
    <textarea cols="76" rows="20" name="filecontent" id="filecontent">'.$filecontent.'</textarea>
    <div name="ace_editor" id="ace_editor">'.$filecontent.'</div>
  </div>
  <div>
    <input type="hidden" name="file_ext" id="file_ext" value="'.strtolower($file_ext).'"</>
    <input type="hidden" name="file" id="file" value="'.$_REQUEST['file'].'" />
    <input type="hidden" name="dir" id="dir" value="'.$_REQUEST['dir'].'" />
    <input type="hidden" name="act" value="savefile" />
    <button type="button" id="save">'.t('Save').'</button>
    <input type="submit" value="'.t('Save &amp; exit').'" name="submit" />
    <input type="submit" value="'.t('Cancel').'" name="submit" />
    <input type="checkbox" name="convertspaces" id="convertspaces"'.($ft['plugins']['edit']['settings']['converttabs'] == TRUE ? ' checked="checked"' : '').' /> <label for="convertspaces">'.t('Convert spaces to tabs').'</label>
    <div id="savestatus"></div>
  </div>
</form>';				  

Zu guter Letzt muss in der Datei ft2.php der Ace-Editor eingebunden, aktiviert und der Inhalt des neuen Editor-div in die „alte“ textarea übertragen werden, damit die Änderungen auch gespeichert werden. Die textarea selbst wird ausgeblendet, damit nicht zwei Eingabebereiche ausgegeben werden. Zusätzlich wird geprüft, um welchen Dateityp es sich handelt, um die Syntax Highlighting Regeln für die entsprechende Sprache zu laden.

	<style type="text/css">
	  @import "css/ft.css";
    <?php echo implode("\r\n", ft_invoke_hook('add_css'));?>
	</style>
    <style type="text/css" media="screen">
      .ace_editor {
        position: relative !important;
        border: 1px solid lightgray;
        margin: auto;
        height: 600px;
        width: 800px;
      }
    </style>
    </head>
<body>

	<?php echo $str;?>
  <?php echo ft_make_scripts_footer();?>
  <?php echo implode("\r\n", ft_invoke_hook('destroy'));?>
<script src="./js/ace-builds/src/ace.js" type="text/javascript" charset="utf-8"></script>
<script>
  var editor = ace.edit("ace_editor");
  editor.setTheme("ace/theme/twilight");
  var file_ext = document.getElementById("file_ext").value;
  switch(file_ext) {
    case "php":
      editor.session.setMode("ace/mode/php");
      break;
    case "js":
      editor.session.setMode("ace/mode/javascript");
      break;
    case "htm":
    case "html":
      editor.session.setMode("ace/mode/html");
      break;
    case "css":
      editor.session.setMode("ace/mode/css");
      break;
    case "xml":
      editor.session.setMode("ace/mode/xml");
      break;
    default:
      editor.session.setMode("ace/mode/text");
  }
  var textarea = $('textarea[name="filecontent"]').hide();
  editor.getSession().setValue(textarea.val());
  editor.getSession().on('change', function(){
    textarea.val(editor.getSession().getValue());
  });
  editor.setPrintMarginColumn(false);
  </script>
</body>
</html>

Die erforderlichen Dateien für Ace kann man von der Webseite beziehen und beispielsweise im Unterverzeichnis js ablegen (wie im Code dargestellt). Möchte man weitere Dateitypen zur Bearbeitung freigeben, müssen die neuen Endungen wieder in der config.php freigegeben und in der ft2.php als neuer case ergänzt werden.

WordPress Fehlermeldungen nach Update auf Version 4.6

21. August 2016 Keine Kommentare

Grade das neue Update auf WordPress Version 4.6 installiert und feststellen müssen, dass anschließend Fehler-/Warnmeldungen auf der Seite und im Admin-Panel angezeigt werden. In der wp-config.ini nachgesehen, ob hier falsche Einstellungen vorliegen, aber daran lag es schonmal nicht:

@ini_set('display_errors', 0);
define('WP_DEBUG', false);

Nach etwas Suchen bin ich dann aber auf WordPress.org fündig geworden. Im Ticket #37680 wurde der Fehler erfasst und auch ein funktionierender Workaround veröffentlicht.

Nach den vorgeschlagenen Änderungen an der Datei load.php ist das Problem behoben. Mit dem nächsten Update auf 4.6.1 soll der Wordaround auch offiziell verteilt werden, aber bis dahin kann es noch ein paar Tage dauern.

Alternativ kann man auf seinem Server auch in der php.ini die Nutzung von ini_get_all() aktivieren, sofern man die Möglichkeit hat. Hier auf Pytal kann man die Einstellungen nicht eigenständig ändern, sondern ist auf den Serverbetreiber angewiesen.

Mehrere Verzeichnisse in einzelne Archive verpacken

7. Januar 2015 1 Kommentar

Stapelverarbeitung ist ne feine Sache. Die Anforderung war gleichermaßen einfach wie lästig, sollte man sie händisch durchführen müssen: Auf einem Gruppenlaufwerk liegen viele Dateien in verschiedenen Verzeichnissen. Aus Platzgründen kam nun die Idee auf, diese Unterlagen verzeichnisweise zu komprimieren, um Platz zu sparen. Jedes Verzeichnis eine ZIP-Datei mit gleichem Namen. Bei mehreren Hundert Verzeichnissen eine sehr undankbare Aufgabe, wenn man sich nicht zu helfen weiß.

Die kostenlose Lösung heißt 7-Zip, ein schnelles und einfaches Kompressionsprogramm. Das Vorhaben ginge zwar auch mit WinZIP oder WinRAR, diese standen aber nicht zur Verfügung, wohingegen 7-Zip auch als Portable zu erhalten ist.

Man erstellt sich also mit dem Editor eine Batch-Datei (*.bat) und kopiert die folgende Zeile hinein:

for /d %%X in (*) do "c:\Program Files\7-Zip\7z.exe" a -tzip "%%X.zip" "%%X\

Wenn statt Verzeichnissen Dateien einzeln gepackt werden sollen, sieht der Befehl wie folgt aus:

for %%X in (*) do "c:\Program Files\7-Zip\7z.exe" a -tzip "%%X.zip" "%%X"

In der jetzigen Form muss die Batch-Datei im selben Hauptverzeichnis liegen wie die Verzeichnisse / Dateien, welche komprimiert werden sollen. Evtl. muss noch der Installationspfad zu 7-Zip angepasst werden.

Laufzeit einer Festplatte mit smartmontools feststellen

3. Januar 2015 Keine Kommentare

Mein Kontakt mit Linux hält sich abseits des Smartphones stark in Grenzen, für gewöhnlich nutze ich es nur, wenn mir der Einsatz von Windows noch umständlicher erscheint. So wie heute… ich habe mir bei Amazon eine „neue“ IDE-Festplatte bestellt, der man schon nach dem Auspacken ansehen konnte, dass sie so neu nicht sein kann. Also interessierte mich, wie lange das gute Stück denn bisher schon seinen Dienst verrichten durfte.

Da Festplatten über ein System namens Self-Monitoring, Analysis and Reporting Technology (abgekürzt SMART oder auch S.M.A.R.T.) verfügen, ist das Wo gar nicht so schwer, aber das Wie kann einen schon eher beschäftigen. Für Windows gibt es viele Programme, welche die SMART-Informationen auslesen und auswerten können. Dumm nur, wenn kein Windows zur Verfügung steht.

Ich nutze eigentlich nur noch ein Notebook, da kann ich mit dieser Festplatte schon mal nichts werden. Ein USB-Adapter wäre zwar schnell angeschlossen, aber über USB kommt man leider nicht an die SMART-Daten ran. Bleibt also nur der Rechner, für den die Festplatte bestimmt ist: ein HP e-PC c10. Mit einem P3 mit 1 GHz und ganzen 256 MB RAM nicht unbedingt zum Angeben geeignet, aber dafür schön klein ^^

Als Live-System habe ich mir SystemRescueCD ausgesucht, hauptsächlich da es schon fertig gebrannt im Regal lag, aber auch, weil es recht geringe Ansprüche an die Hardware stellt. Man kann auf der alten Kiste sogar die grafische Oberfläche starten, wenn man möchte, braucht man für das Vorhaben aber nicht. Wichtig ist aber, dass smartmontools installiert ist.

Also CD rein, booten und auf Betriebsbereitschaft warten. Zuerst benötigt man die Info, wie die Laufwerke denn heißen:

root@sysresccd /root % lshw -short

H/W path      Device      Class       Description
=================================================
                          system      e-Vectra
/0                        bus         HP System Board
/0/0                      memory      64KiB BIOS
/0/4                      processor   Pentium III (Coppermine)
/0/4/5                    memory      32KiB L1 cache
/0/4/6                    memory      256KiB L2 cache
/0/13                     memory      256MiB System Memory
/0/13/0                   memory      256MiB DIMM SDRAM Synchronous
/0/100                    bridge      82810E DC-133 (GMCH) Graphics Memory Controller Hub
/0/100/1                  display     82810E DC-133 (CGC) Chipset Graphics Controller
/0/100/1e                 bridge      82801AA PCI Bridge
/0/100/1e/2   enp1s2      network     3c905C-TX/TX-M [Tornado]
/0/100/1f                 bridge      82801AA ISA Bridge (LPC)
/0/100/1f.1               storage     82801AA IDE Controller
/0/100/1f.2               bus         82801AA USB Controller
/0/100/1f.3               bus         82801AA SMBus Controller
/0/100/1f.5               multimedia  82801AA AC'97 Audio Controller
/0/1          scsi0       storage     
/0/1/0.0.0    /dev/sda    disk        20GB ST320410A
/0/1/0.0.0/1  /dev/sda1   volume      18GiB Windows NTFS volume
/0/2          scsi1       storage     
/0/2/0.0.0    /dev/cdrom  disk        SCSI CD-ROM
/0/3          scsi2       storage     
/0/3/0.0.0    /dev/sdb    disk        1031MB SCSI Disk
/0/3/0.0.0/1  /dev/sdb1   volume      983MiB Windows FAT volume

Da man nun den Namen der Festplatte kennt, mit dem man sie ansprechen kann, kann es auch schon losgehen:

root@sysresccd /root % smartctl -i /dev/sda

smartctl 6.3 2014-07-26 r3976 [i686-linux-3.10.60-std441-i586] (local build)
Copyright (C) 2002-14, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Seagate U6
Device Model:     ST320410A
Serial Number:    5FG02MCC
Firmware Version: 3.31
User Capacity:    20,404,101,120 bytes [20.4 GB]
Sector Size:      512 bytes logical/physical
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ATA/ATAPI-6 (minor revision not indicated)
Local Time is:    Sat Jan  3 20:10:50 2015 UTC
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

Sofern das Laufwerk SMART-Unterstützung hat und diese aktiviert ist, kann es weitergehen:

root@sysresccd /root % smartctl -A /dev/sda

smartctl 6.3 2014-07-26 r3976 [i686-linux-3.10.60-std441-i586] (local build)
Copyright (C) 2002-14, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000f   066   058   025    Pre-fail  Always       -       63482118
  3 Spin_Up_Time            0x0003   098   098   000    Pre-fail  Always       -       0
  4 Start_Stop_Count        0x0032   100   100   020    Old_age   Always       -       1
  5 Reallocated_Sector_Ct   0x0033   100   100   036    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000f   078   060   030    Pre-fail  Always       -       77625164
  9 Power_On_Hours          0x0032   088   088   000    Old_age   Always       -       11065
 10 Spin_Retry_Count        0x0013   100   100   097    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   098   098   020    Old_age   Always       -       2608
194 Temperature_Celsius     0x0022   035   051   000    Old_age   Always       -       35
195 Hardware_ECC_Recovered  0x001a   100   253   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0010   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x003e   200   194   000    Old_age   Always       -       6
200 Multi_Zone_Error_Rate   0x0000   100   253   000    Old_age   Offline      -       0
202 Data_Address_Mark_Errs  0x0032   100   253   000    Old_age   Always       -       0

Mich interessierte hier Eintrag 9 Power_On_Hours, welcher die bisherige Laufzeit in Stunden beinhaltet. Es gibt aber auch Hersteller, die an Position 9 einen anderen Zähler vorsehen: Power_On_Minutes. In diesem Fall wird der Wert in Minuten angegeben. Bei Maxtor-Festplatten wird unter Power_On_Minutes direkt die Stunden und Minuten angegeben, dieser Zähler nullt wohl aber bei 1000 Stunden, weshalb diese Angabe nicht immer zuverlässig ist. Daher muss noch ein Schritt weiter gegangen werden, um auf Nummer sicher zu gehen.

root@sysresccd /root % smartctl -t short /dev/sda

smartctl 6.3 2014-07-26 r3976 [i686-linux-3.10.60-std441-i586] (local build)
Copyright (C) 2002-14, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Short self-test routine immediately in off-line mode".
Drive command "Execute SMART Short self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 1 minutes for test to complete.
Test will complete after Sat Jan  3 20:27:31 2015

Use smartctl -X to abort test.

Dieser Befehl startet einen Schnelltest der Festplatte, die voraussichtliche Dauer steht in der Ausgabe. Man kann auch einen Langtest starten, dieser dauert aber gern mal bis zu 30 Minuten, uns reicht der kurze aber aus.
Nach Ablauf der angegebenen Zeit kann das Ergebnis des Tests wie folgt abgefragt werden:

root@sysresccd /root % smartctl -l selftest /dev/sda

smartctl 6.3 2014-07-26 r3976 [i686-linux-3.10.60-std441-i586] (local build)
Copyright (C) 2002-14, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed without error       00%     11066         -
# 2  Extended offline    Completed without error       00%     11065         -
# 3  Short offline       Completed without error       00%     11065         -

Fazit: Die getestete Festplatte hat bereits 11066 Betriebsstunden auf dem Buckel.

Und wem die geringe Größe komisch vorkommt…natürlich hab ich keine 20 GB Platte bei Amazon bestellt, aber als mir der Gedanke kam, die Vorgehensweise in diesem Beitrag festzuhalten, hatte ich die geprüfte Platte schon wieder ausgebaut und für die Rücksendung eingetütet, denn sie hatte sportliche 51831 Betriebsstunden, was mir für eine vermeintlich neue Festplatte dann doch zu viel war. Also hab ich das ganze Prozedere noch mal kurz mit der alten Festplatte durchgeführt, die vorher in dem Rechner war.

File Thingie – Ein web-basierter Dateimanager auf PHP-Basis

4. Januar 2013 2 Kommentare

Es kann sehr störend sein, wenn man nicht jederzeit via FTP auf seinen Webspace zugreifen kann. Tagsüber sitze ich hinter einem Proxy, der nur HTTP Verbindungen zulässt. Und ohne eigenen WebFTP-Server meide ich derartige Angebote auch lieber, wer kann schon mit Sicherheit sagen, was mit den Zugangsdaten passiert, die man auf solchen Seiten eingibt.

Um dieses Manko ein wenig zu entschärfen, habe ich mich daher nach einem Script umgesehen, welches es mir ermöglichen soll, alle relevanten Dateien (html, php, css, xml, etc.) auf dem Server direkt im Browser zu bearbeiten. Ein CMS kommt bisher nicht zum Einsatz (WordPress mal ausgenommen, aber darin verwalte ich nicht meine eigenen Scripte). Und ich muss sagen, ich bin überrascht, wie schwer es ist, ein passendes Helferlein zu finden.

Online Dateimanager gibt es zu Hauf, aber viele davon lassen sich nicht auf dem eigenen Server installieren, sondern wollen wieder wie schon WebFTP die Zugangsdaten von einem wissen. Und sehr viele der verbleibenden Lösungen lassen sich nicht auf das root-Verzeichnis des Servers anwenden, sondern bringen ihre eigene, geschlossene Verzeichnisstruktur mit. Ich will aber keine ausgeklügelte Multi-User Unterstützung, sondern einfach nur jederzeit Zugriff auf alle meine Daten.

Fündig geworden bin ich schließlich mit File Thingie. Dabei handelt es sich um einen kleinen, überschaubaren Dateimanager mit Editier-Funktionalität und der Möglichkeit, ZIP-Archive zu entpacken. Und er muss nicht mal im Root-Verzeichnis abgelegt werden, sondern kann in einem beliebigen Unterverzeichnis seine Dienste verrichten.

In der config.php müssen zuvor aber noch ein paar Änderungen vorgenommen werden: Benutzername und Passwort sollten vergeben werden, Anpassung des Standardverzeichnisses, Bearbeiten der Blacklists und letztlich unter den Plugin Settings die Ergänzung weiterer zugelassener Dateiendungen für den Editor.

Wer möchte, kann sich auch einen WYSIWYG-Editor hinzufügen. Im Installationspaket enthalten sind bereits Plugins für TinyMCE, CKEditor und FCKEditor, eigene Plugins können aber ebenfalls hinzugefügt werden.

Eine einfache, eingebaute Möglichkeit für Syntax Highlighting im normalen Texteditor gibt es hingegen leider nicht… oder ich hab sie bisher nur noch nicht gefunden, denn ein WYSIWYG-Editor hilft mir in den meisten Fällen nicht weiter.

Update:
Da das Projekt auf den offiziellen Seiten nicht mehr erreichbar ist, hier die letzte Version zum Download: File Thingie 2.5.7

Excel – Blattschutz aufheben bei unbekanntem Passwort

3. Januar 2013 23 Kommentare

Grade in die Situation gekommen, ein altes Makro sezieren zu müssen. Bei der Gelegenheit ist mir aufgefallen, dass ich in der Datei vor ca. 4 Jahren einen Blattschutz mit Passwort eingerichtet habe. Und wie es der Zufall so will, viel mir selbiges natürlich auch nicht mehr ein.

Also musste schnell eine Lösung her, und die lieferte mir Google überraschend schnell. Ich hätte gedacht, dass die Schutzmechanismen von Office etwas ausgeklügelter wären, aber man kann den Blattschutz mit einem kleinen Makro sehr leicht und relativ schnell aushebeln.

Eine Videoanleitung dazu habe ich bei Youtube gefunden und spare mir daher an dieser Stelle die weiteren schriftlichen Ausführungen und verweise einfach auf das Tutorial.

 
Und hier noch der benötigte Makro-Code, einfach als Modul in dem Dokument speichern, dessen Blattschutz man entfernen möchte, und anschließend auf dem Blatt ausführen.

Sub Blattschutz_Entfernen()
  On Error Resume Next
  For i = 65 To 66
   For j = 65 To 66
    For k = 65 To 66
     For l = 65 To 66
      For m = 65 To 66
       For n = 65 To 66
        For o = 65 To 66
         For p = 65 To 66
          For q = 65 To 66
           For r = 65 To 66
            For s = 65 To 66
             For t = 32 To 126

ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & Chr(l) & Chr(m) & _
Chr(n) & Chr(o) & Chr(p) & Chr(q) & Chr(r) & Chr(s) & Chr(t)

             Next t
            Next s
           Next r
          Next q
         Next p
        Next o
       Next n
      Next m
     Next l
    Next k
   Next j
  Next i
  MsgBox "Der Blattschutz sollte jetzt deaktiviert sein."
End Sub

Funktioniert mit Excel 2003 ganz hervorragend, nach knappen 2 Minuten konnte ich das Dokument wieder vollständig nutzen und bearbeiten. Laut Video soll das Makro auch in Excel 2007 nutzbar sein.

Excel – Inhalte als Plain Text einfügen

17. August 2012 Keine Kommentare

Wer oft mit Excel arbeitet, dürfte das folgende Problem nur zu gut kennen. Man kopiert Daten aus der einen Tabelle, fügt sie in der nächsten ein und siehe da, die Formatierung ist hinüber. Also entweder manuell nachbessern oder aber Bearbeiten => Inhalte einfügen… verwenden.

Dieses Fenster erscheint, wenn man innerhalb von Excel Daten kopiert. Bei mir kommt das täglich beruflich vor. Und da es sehr nervig sein kann, sich jedes mal durch das Menü zu klicken, hab ich mir die Funktion Werte einfügen auf die Symbolleiste gezogen.

Mit dieser kleinen Anpassung kann man schon ein gutes Stück schneller arbeiten. Aber was tun, wenn Daten von einer externen Anwendung in Excel eingefügt werden sollten, beispielsweise ein Link aus dem Browser. Werte einfügen funktioniert in diesem Fall nicht. Also erstmal wieder Bearbeiten => Inhalte einfügen…

Excel blendet ein völlig anderes Menü auf, sobald die Zwischenablage Daten enthält, die nicht aus einer Excel-Tabelle stammen. Leider gibt es für diesen Fall keine vorgefertigte Funktion, die man sich einfach so auf die Symbolleiste legen kann. Aber hier kann man mit einem Makro Abhilfe schaffen. Und da man diese Funktion ständig brauchen kann, wird sie auch gleich gloabl verfügbar gemacht.

Es wird also in der PERSONAL.XLS ein Modul angelegt und darin folgender Makro-Code gespeichert:

Sub AlsTextEinfuegen()
   ActiveSheet.PasteSpecial Format:="Text", Link:=False, DisplayAsIcon:=False
End Sub

Das war es im Grunde auch schon. Das Makro macht genau das selbe, was man vorher manuell erledigt hat. Es fügt beliebige Inhalte aus der Zwischenablage als reinen Text ein. Jetzt kann man dem Makro wahlweise eine Tastenkombination zuweisen oder es auf die Symbolleiste legen. Ich habe letzteres gemacht.

Das Symbol hab ich gleich neben Werte einfügen abgelegt, somit sind beide immer schnell zu erreichen. Solange der Anpassen-Modus noch aktiv ist, kann mit einem Rechtsklick auf das Symbol selbiges geändert werden und dem Symbol auch ein Makro zugewiesen werden.

Jetzt hat man 2 Buttons in der Symbolleiste, mit deren Hilfe man deutlich schneller und komfortabler Inhalte ohne Formatierung einfügen kann.

 
Btw… um in Word das gleiche Ergebnis zu erzielen, muss folgender Makro-Code genutzt werden:

Sub AlsTextEinfuegen()
    Selection.PasteAndFormat (wdFormatPlainText)
End Sub

Gespeichert wird das Makro in der Normal.dot, was der PERSONAL.XLS entspricht. Angelegt wird diese nach dem selben Schema, erstmal ein Dummy-Makro erstellen und dann wie oben beschrieben fortfahren.

PERSONAL.XLS(B) – Die Excel Arbeitsmappes für globale Makros

17. August 2012 4 Kommentare

Makros können einem das tägliche Arbeiten mit Excel ein gutes Stück vereinfachen. Einige Makros sind anwendungsspezifisch und daher nur in einer bestimmten Datei nutzbar, andere hingegen sind universell einsetzbar. Da liegt es Nahe, diese auch global für alle geöffneten Dateien verfügbar zu machen, ohne den Code in jede Datei kopieren zu müssen oder immer eine zusätzliche Datei geöffnet zu haben, die man ansonsten für die Arbeit gar nicht benötigt.

Für genau diesen Fall gibt es die PERSONAL.XLS (ab Office 2007 PERSONAL.XLSB). Sie wird automatisch im Hintergrund geladen, wenn Excel geöffnet wird. Somit gibt es zwar kein Fenster für diese Datei, durch das man auf die Arbeitsblätter zugreifen könnte, aber die Makros sind dennoch jederzeit aufrufbar.

Hinweis: Alle nachfolgenden Erläuterungen beziehen sich auf Office 2003!

 
Anlegen der PERSONAL.XLS

Die Datei sollte durch Excel angelegt werden. Hierzu wird einfach ein beliebiges Dummy-Makro aufgezeichnet. Extras => Makro => Aufzeichnen…

Im Feld Makro speichern in: muss Persönliche Makroarbeitsmappe ausgewählt sein.

Anschließend eine beliebige Aktion aufzeichnen, beispielsweise das Einfärben einer Spalte und die Aufzeichnung beenden. Nun Excel beenden und die Sicherheitsabfrage mit Ja bestätigen.

Fertig. Nachdem Excel erneut geöffnet wurde, ist das Dummy-Makro jederzeit ausführbar.

 
Und nun ein sinnvolles Makro erstellen

Je komplexer ein Makro sein soll, umso geringer die Wahrscheinlichkeit, dass es sich mit dem Rekorder erstellen lässt. Also öffnet man mit ALT + F11 den VBA-Editor. In der linken Baumstruktur befindet sich ein Eintrag für die Datei PERSONAL.XLS. Dieser am besten als erstes einen ordentlichen Namen geben: Rechte Maustaste => Eigenschaften von … und dann unter Projektname die Beschriftung ändern.

Da bereits ein Dummy-Makro erzeugt wurde, hat Excel ein Modul angelegt, welches den Code des Makros enthält. Diesen kann man nun mit beliebigem eigenen Code ersetzen.

 
Speicherort herausfinden

Je nach verwendeter Office Version und Systemkonfiguration kann sich der Speicherort der PERSONAL.XLS unterscheiden. Es gibt aber einen schnellen Weg, dennoch an den Speicherpfad zu gelangen. Dazu öffnet man wieder den VBA-Editor.

  1. Excel öffnen
  2. Mit ALT + F11 den VBA Editor öffnen
  3. Mit STRG + G den Direktbereich öffnen
  4. Mit STRG + A den gesamten Inhalt des Direktbereich markieren
  5. ?Application.StartupPath eingeben
  6. Mit ENTER bestätigen

Jetzt bekommt man den Pfad der PERSONAL.XLS angezeigt. In meinem Fall ist das

D:\Dokumente und Einstellungen\Schmidt.M\Anwendungsdaten\Microsoft\Excel\XLSTART

oder kurz und universell nutzbar

%APPDATA%\Microsoft\Excel\XLSTART

SD-Karte für den ersten Start des Raspberry Pi vorbereiten

28. Juni 2012 Keine Kommentare

Auf der Projekt-Webseite gibt es in der Download Sektion einige vorgefertigte Linux-Distributionen zum herunterladen, die ohne weitere Eingriffe auf dem Raspberry Pi lauffähig sind. Bisher sind das Debian „squeeze“, Arch Linux ARM und QtonPi. Aus der Liste verschwunden, aber in der Wiki noch gelistet ist auch der Fedora Remix.

Darüber hinaus gibt es auch noch ein paar nicht offiziell gelistete, aber dennoch erfolgreich portierte Distributionen. Für viele interessant sind vor allem die XBMC Ports für den RPi, Raspbmc (derzeit als RC3) und OpenELEC. Letztere gibt es zwar scheinbar noch nicht als fertiges Image zum Download, aber nach dem was man bisher so lesen kann soll OpenELEC derzeit stabiler und flüssiger laufen als Raspbmc. Der zusätzliche Aufwand, um es auf die SD-Karte zu bringen, zahlt sich also am Ende aus.

Aber wie kommen die Distributionen überhaupt auf die SD-Karte? Auf der Projekt-Seite wird für Linux-Nutzer auf dd verwiesen. Windows Benutzer sollen das Programm Win32DiskImager verwenden. Grafische, selbsterklärende Oberfläche, damit sollte es ein leichtes sein, das fertige Image auf die SD-Karte zu bekommen.

Dumm nur, wenn das nicht klappt. Auf meinem Acer Aspire One Netbook tauchte der Kartenleser nicht in dem Auswahlfeld von Win32DiskImager auf. Und diese kleine Hürde scheinen viele nehmen zu müssen. Das könnte man zumindest vermuten, denn im Wiki gibt es extra für diesen Fall eine alternative Lösung, um das Image unter Windows auf die Karte zu bekommen. Das dafür nötige Programm nennt sich flashnul. Es handelt sich dabei um ein kleines Kommandozeilen-Tool.

(Im folgenden kam die derzeit aktuelle Version 1.0rc1 zum Einsatz)

 
Kopieren des Debian-Image auf die SD-Karte

  • Herunterladen des Debian-Image
  • Entpacken der Image-Datei aus dem ZIP-Archiv (z.B. nach c:\debian6)
  • Karte in den Kartenleser einlegen
  • Herunterladen von flashnul
  • Entpacken von flashnul aus de ZIP-Archiv (z.B. nach c:/flashnul-1rc1)
  • Kommandozeile als Admin ausführen
  • flashnul mit Parameter -p ausführen

Die SD-Karte ist in diesem Fall Laufwerk E zugeordnet, im oberen Teil der Ausgabe hat sie die Laufwerksnummer 2. Diese benötigen wir im nächsten Schritt. Wenn die Verwendung der Laufwerksnummer fehlschlägt, kann man auch den Buchstaben nutzen.

flashnul.exe 2 -L C:/debian6/debian6-19-04-2012.img

oder

flashnul.exe E: -L C:/debian6/debian6-19-04-2012.img

Es folgen ein paar Details zur SD-Karte und eine Sicherheitsabfrage, welche man mit yes beantworten muss, damit der Kopiervorgang gestartet wird. Nach Fertigstellung wird noch eine kurze Zusammenfassung, u.a. mit der max. erreichten Schreibgeschwindigkeit, angezeigt.

Das was es an Vorbereitungen. Die SD-Karte kann jetzt in den Raspberry Pi gesteckt und das System gestartet werden. Nach einer kurzen Boot-Sequenz landet man am gewohnten Shell-Login. Benutzername pi, Passwort raspberry. Es ist nicht die schlechteste Idee, diese nach der ersten Anmeldung zu ändern 😉

WordPress – Mehrere Gallerien in einem Artikel nutzen

28. Juni 2012 Keine Kommentare

Aus aktuellem Anlass, da mir bei meinem vorigen Beitrag dieses Problem begegnete: Man kann mit den Bordmitteln von WordPress die Gallerie eines Artikels anpassen, allerdings nur händisch. Ein schönes Menü mit Klick-Optionen sucht man hier vergeblich. Doch auch wenn es sicherlich komfortabler geht, verzichte ich mal auf die Installation weiterer Plugins und nutze die vorhandenen Möglichkeiten. Auf den Support-Seiten von WordPress.com gibt es eine gute Übersicht über die Möglichkeiten der Gallerien.

Aber worum geht es überhaupt? Manchmal läd man zu einem Artikel eine Vielzahl an Bildern hoch. Eins soll als Artikelbild genutzt werden und oben auf der Seite stehen, andere evtl. als Gruppe mitten im Text angezeigt werden und wieder andere Bilder zur genaueren Erleuterung im restlichen Text eingestreut sein.

Einzelne Bilder sind auch kein Problem, die kann man platzieren, wie man möchte. Aber gleichzeitig werden alle zu einem Artikel hochgeladenen Bilder auch zu einer Gallerie zusammen gefasst, welche man ebenfalls automatisch formatiert in den Artikel einbinden kann. Nur soll diese Gallerie u.U. nicht alle hochgeladenen Artikelbilder enthalten, sondern nur einige bestimmte. Und genau darum geht es mir.

Option Description Choices Default Setting
columns Number of columns used to display the images An integer greater than 0 3
link How each image will be linked file file
orderby How to order the images ID, menu_order, rand, title + ASC, DESC menu_order ASC, ID ASC
size Size of the images to display thumbnail, medium, large, full thumbnail
id The gallery will display images which are attached to that post. Any post or page ID that has images attached to it Default is to show the gallery post
include The gallery will include specific images comma separated attachment IDs* (include=”23,39,45″) N/A
exclude The gallery will exclude specific images comma separated attachment IDs* (exclude=”24,30,43″) N/A

Besonders interessant ist für mich die Möglichkeit, bestimmte Bilder mittels exclude aus der Gallerie auszuschließen oder Bilder aus anderen Artikeln mittels include der Gallerie hinzufügen zu können.