Um einen Text doppelt zu unterstreichen kann man in MathJax folgendes Makro definieren um sich die Arbeit zu vereinfachen:
MathJax.Hub.Config({ TeX: { Macros: { du: ["\\underline{\\underline{#1}}", 1] } } } );
Um einen Text doppelt zu unterstreichen kann man in MathJax folgendes Makro definieren um sich die Arbeit zu vereinfachen:
MathJax.Hub.Config({ TeX: { Macros: { du: ["\\underline{\\underline{#1}}", 1] } } } );
Hat man im WordPress ein Menü, welches man mittels wp_nav_menu anzeigt und möchte die Elemente drehen. So kann man folgenden Filter verwenden:
function daschmi_reverse_menu($menu, $options) { return array_reverse($menu); }
Das Menü bindet man dann wie folgt ein:
add_filter('wp_nav_menu_objects', 'daschmi_reverse_menu'); wp_nav_menu(array('theme_location' => 'header-menu')); remove_filter('wp_nav_menu_objects', 'daschmi_reverse_menu');
Aufgabenstellung war das Drucken von PDF Dokumenten die automatisiert auf einem Netzlaufwerk abgelegt werden. Letztendlich habe ich es über ein kleines C# Programm gelöst welches den Acrobat aufruft, das Dokument druckt und anschließend löscht.
Im Beispiel werden alle Dokumente gedruckt, die im Ordner „U:\PRINT\“ abgelegt werden. Dem Programm können zwei Parameter übergeben werden, einmal der Pfad zum Acrobat Reader und einmal der Ordner der überwacht werden soll.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Threading; using System.Diagnostics; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { String strAcrobat = @"C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe"; String strPath = @"C:\Users\Daniel\Desktop\PRINT\"; if (args.Length == 2 && !String.IsNullOrEmpty(args[0])) strAcrobat = args[0]; if (args.Length == 2 && !String.IsNullOrEmpty(args[1])) strPath = args[1]; do { while (!Console.KeyAvailable) { string[] arFiles = Directory.GetFiles(strPath); foreach (String strFile in arFiles) { Console.WriteLine("Drucke :" + strFile); ProcessStartInfo procStartInfo = new ProcessStartInfo(strAcrobat, " /p /h " + strFile); procStartInfo.RedirectStandardOutput = true; procStartInfo.UseShellExecute = false; procStartInfo.CreateNoWindow = true; System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.StartInfo = procStartInfo; proc.Start(); proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; if (proc.HasExited == false) { proc.WaitForExit(10000); } proc.EnableRaisingEvents = true; proc.Close(); KillAdobe("AcroRd32"); Console.WriteLine("Lösche :" + strFile); Console.WriteLine(""); File.Delete(strFile); } } } while (Console.ReadKey(true).Key != ConsoleKey.Escape); } // static void Main(string[] args) private static bool KillAdobe(string name) { foreach (Process clsProcess in Process.GetProcesses().Where(clsProcess => clsProcess.ProcessName.StartsWith(name))) { clsProcess.Kill(); return true; } return false; } // private static bool KillAdobe(string name) } }
Damit man mit dem Apple Notification Server kommunizieren kann, muss man jedes Jahr ein Zertifikat erstellen. Dazu muss man den Privaten Schlüssel und das Zertifikat exportieren und wie folgt umwandeln.
Exportierte .p12 Dateien in .pem Dateien umwandeln:
openssl pkcs12 -clcerts -nokeys -out cert.pem -in cert.p12 openssl pkcs12 -nocerts -out key.pem -in key.p12
Passwort aus Key entfernen:
openssl rsa -in key.pem -out key-nopwd.pem
Dateien kombinieren:
cat cert.pem key-nopwd.pem > apn.pem
Kommunikation testen:
openssl s_client -connect gateway.push.apple.com:2195 -cert cert.pem -key key-nopwd.pem
Apple hat das unverschlüsselte HTTP Protokoll mit dem Update auf iOS 9.0 standardmäßig deaktiviert und es sind nur noch HTTPS Anfragen zulässig. Weiterhin werden nur noch bestimmte Verschlüsselungsalgorithmen von Apple als sicher eingestuft und erlaubt.
Apple erläutert diesen Schritt hier.
Mittels folgendem Eintrag in der plist Datei eines XCode Projektes sind aber weiterhin HTTP Anfragen möglich:
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key><true/> </dict>