<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Acky</title>
	<atom:link href="http://www.acky.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.acky.de</link>
	<description>Apple, WordPress, Produktivität, Stift &#38; Papier</description>
	<lastBuildDate>Wed, 19 Jun 2013 19:24:37 +0000</lastBuildDate>
	<language>de-DE</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Automatische Links zu Suchmaschinen mittels Shortcode in WordPress</title>
		<link>http://www.acky.de/2013/06/automatische-links-zu-suchmaschinen-mittels-shortcode-in-wordpress/</link>
		<comments>http://www.acky.de/2013/06/automatische-links-zu-suchmaschinen-mittels-shortcode-in-wordpress/#comments</comments>
		<pubDate>Wed, 19 Jun 2013 11:48:27 +0000</pubDate>
		<dc:creator>Acky</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[shortcode]]></category>
		<category><![CDATA[snippet]]></category>
		<category><![CDATA[suche]]></category>

		<guid isPermaLink="false">http://www.acky.de/?p=384137</guid>
		<description><![CDATA[Der Artikel beschreibt die Einbindung eines eigenen Shortcodes in WordPress, mit dem eine automatische Suche nach den umschlossenen Wörtern in einer Suchmaschine oder der eigenen Site verlinkt wird. <a href="http://www.acky.de/2013/06/automatische-links-zu-suchmaschinen-mittels-shortcode-in-wordpress/">Weiterlesen &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p>Letzthin stellte Sven auf <a href="http://alpha.app.net">app.net</a> folgende Frage:</p>

			<div class="tmb_adn_frame">
				<div class="tmb_adn_post">
					<a href="http://alpha.app.net/opendev" target="_blank" class="tmb_adn_user">
						<img src="https://d2rfichhc2fb9n.cloudfront.net/image/5/9cwNmI-Y4XnSNGf1mdxx4N7jM5t7InMiOiJzMyIsImIiOiJhZG4tdXNlci1hc3NldHMiLCJrIjoiYXNzZXRzL3VzZXIvZDYvYjkvMzAvZDZiOTMwMDAwMDAwMDAwMC5qcGciLCJvIjoiIn0" alt="@opendev" class="tmb_adn_user_image"></a><div class="tmb_adn_post_body">
						<a href="http://alpha.app.net/opendev" target="_blank" class="tmb_adn_user_link">
							opendev						</a><span itemscope="https://app.net/schemas/Post">Liebe Wordpress-Admins, ich suche ein simples, ressourcenschonendes Plugin um folgendes zu verwirklichen: Wenn ich [customtag1]xyz[/customtag1] eingebe, erscheint im fertigen Artikel z.B. ein Link zu Google mit Suche nach xyz. Irgendjemand, der Rat wei&#223;?</span>						
						<div class="tmb_adn_meta">
							<a href="https://alpha.app.net/opendev/post/6725008" target="_blank" class="tmb_adn_post_date">
								13. June 2013							</a>
														via <a href="https://alpha.app.net" target="_blank">
								Alpha							</a>
													</div>
					</div>
				</div>
			</div>
			

<p>Für so etwas benötigt man nicht zwingend ein Plugin, ein paar Zeilen in der <code>functions.php</code> des Themes tun es auch. Dazu erstellt man einen eigenen <a href="http://codex.wordpress.org/Shortcode_API">Shortcode</a>. In diesem Fall benötigt man einen <a href="http://codex.wordpress.org/Shortcode_API#Enclosing_vs_self-closing_shortcodes">umschließenden Shortcode</a>.</p>

<p><span id="more-384137"></span></p>

<p>Meine ursprünglich auf ADN <a href="https://alpha.app.net/acky/post/6727517">gepostete Version</a> enthielt nur Google als fest eingestellte Suchmaschine. In der Zwischenzeit habe ich den Code etwas erweitert:</p>

<div id="gist5797878" class="gist">
      <div class="gist-file">
        <div class="gist-data gist-syntax">



  <div class="file-data">
    <table cellpadding="0" cellspacing="0" class="lines highlight">
      <tr>
        <td class="line-numbers">
          <span class="line-number" id="file-wp_shortcode_sel-php-L1" rel="file-wp_shortcode_sel-php-L1">1</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L2" rel="file-wp_shortcode_sel-php-L2">2</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L3" rel="file-wp_shortcode_sel-php-L3">3</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L4" rel="file-wp_shortcode_sel-php-L4">4</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L5" rel="file-wp_shortcode_sel-php-L5">5</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L6" rel="file-wp_shortcode_sel-php-L6">6</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L7" rel="file-wp_shortcode_sel-php-L7">7</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L8" rel="file-wp_shortcode_sel-php-L8">8</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L9" rel="file-wp_shortcode_sel-php-L9">9</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L10" rel="file-wp_shortcode_sel-php-L10">10</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L11" rel="file-wp_shortcode_sel-php-L11">11</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L12" rel="file-wp_shortcode_sel-php-L12">12</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L13" rel="file-wp_shortcode_sel-php-L13">13</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L14" rel="file-wp_shortcode_sel-php-L14">14</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L15" rel="file-wp_shortcode_sel-php-L15">15</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L16" rel="file-wp_shortcode_sel-php-L16">16</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L17" rel="file-wp_shortcode_sel-php-L17">17</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L18" rel="file-wp_shortcode_sel-php-L18">18</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L19" rel="file-wp_shortcode_sel-php-L19">19</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L20" rel="file-wp_shortcode_sel-php-L20">20</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L21" rel="file-wp_shortcode_sel-php-L21">21</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L22" rel="file-wp_shortcode_sel-php-L22">22</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L23" rel="file-wp_shortcode_sel-php-L23">23</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L24" rel="file-wp_shortcode_sel-php-L24">24</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L25" rel="file-wp_shortcode_sel-php-L25">25</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L26" rel="file-wp_shortcode_sel-php-L26">26</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L27" rel="file-wp_shortcode_sel-php-L27">27</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L28" rel="file-wp_shortcode_sel-php-L28">28</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L29" rel="file-wp_shortcode_sel-php-L29">29</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L30" rel="file-wp_shortcode_sel-php-L30">30</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L31" rel="file-wp_shortcode_sel-php-L31">31</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L32" rel="file-wp_shortcode_sel-php-L32">32</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L33" rel="file-wp_shortcode_sel-php-L33">33</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L34" rel="file-wp_shortcode_sel-php-L34">34</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L35" rel="file-wp_shortcode_sel-php-L35">35</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L36" rel="file-wp_shortcode_sel-php-L36">36</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L37" rel="file-wp_shortcode_sel-php-L37">37</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L38" rel="file-wp_shortcode_sel-php-L38">38</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L39" rel="file-wp_shortcode_sel-php-L39">39</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L40" rel="file-wp_shortcode_sel-php-L40">40</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L41" rel="file-wp_shortcode_sel-php-L41">41</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L42" rel="file-wp_shortcode_sel-php-L42">42</span>
          <span class="line-number" id="file-wp_shortcode_sel-php-L43" rel="file-wp_shortcode_sel-php-L43">43</span>
        </td>
        <td class="line-data">
          <pre class="line-pre"><div class="line" id="file-wp_shortcode_sel-php-LC1"><span class="cp">&lt;?php</span></div><div class="line" id="file-wp_shortcode_sel-php-LC2">&nbsp;</div><div class="line" id="file-wp_shortcode_sel-php-LC3"><span class="cm">/*</span></div><div class="line" id="file-wp_shortcode_sel-php-LC4">&nbsp;</div><div class="line" id="file-wp_shortcode_sel-php-LC5"><span class="cm">Usage: [sel engine=ddg|bing|google]word1 word2 ...[/sel]   </span></div><div class="line" id="file-wp_shortcode_sel-php-LC6"><span class="cm"> </span></div><div class="line" id="file-wp_shortcode_sel-php-LC7"><span class="cm">&quot;ddg&quot;: DuckDuckGo   </span></div><div class="line" id="file-wp_shortcode_sel-php-LC8"><span class="cm">&quot;bing&quot;: Bing   </span></div><div class="line" id="file-wp_shortcode_sel-php-LC9"><span class="cm">&quot;google&quot;: Google   </span></div><div class="line" id="file-wp_shortcode_sel-php-LC10"><span class="cm">&quot;&quot;: Site Search (Default)</span></div><div class="line" id="file-wp_shortcode_sel-php-LC11">&nbsp;</div><div class="line" id="file-wp_shortcode_sel-php-LC12"><span class="cm">*/</span></div><div class="line" id="file-wp_shortcode_sel-php-LC13">&nbsp;</div><div class="line" id="file-wp_shortcode_sel-php-LC14"><span class="k">function</span> <span class="nf">search_engine_links</span> <span class="p">(</span> <span class="nv">$atts</span><span class="p">,</span> <span class="nv">$content</span> <span class="o">=</span> <span class="k">null</span> <span class="p">)</span> <span class="p">{</span></div><div class="line" id="file-wp_shortcode_sel-php-LC15">	</div><div class="line" id="file-wp_shortcode_sel-php-LC16">	<span class="nb">extract</span><span class="p">(</span><span class="nx">shortcode_atts</span><span class="p">(</span><span class="k">array</span><span class="p">(</span></div><div class="line" id="file-wp_shortcode_sel-php-LC17">		<span class="s2">&quot;engine&quot;</span> <span class="o">=&gt;</span> <span class="s1">&#39;&#39;</span></div><div class="line" id="file-wp_shortcode_sel-php-LC18">	<span class="p">),</span> <span class="nv">$atts</span><span class="p">));</span></div><div class="line" id="file-wp_shortcode_sel-php-LC19">	</div><div class="line" id="file-wp_shortcode_sel-php-LC20">	<span class="k">switch</span> <span class="p">(</span><span class="nv">$engine</span><span class="p">)</span> <span class="p">{</span></div><div class="line" id="file-wp_shortcode_sel-php-LC21">		<span class="k">case</span> <span class="s2">&quot;ddg&quot;</span><span class="o">:</span> <span class="c1">// DuckDuckGo</span></div><div class="line" id="file-wp_shortcode_sel-php-LC22">			<span class="nv">$search_str</span> <span class="o">=</span> <span class="s2">&quot;https://duckduckgo.com/?q=&quot;</span><span class="p">;</span></div><div class="line" id="file-wp_shortcode_sel-php-LC23">			<span class="k">break</span><span class="p">;</span></div><div class="line" id="file-wp_shortcode_sel-php-LC24">		<span class="k">case</span> <span class="s2">&quot;bing&quot;</span><span class="o">:</span> <span class="c1">// Bing</span></div><div class="line" id="file-wp_shortcode_sel-php-LC25">			<span class="nv">$search_str</span> <span class="o">=</span> <span class="s2">&quot;http://www.bing.com/search?q=&quot;</span><span class="p">;</span></div><div class="line" id="file-wp_shortcode_sel-php-LC26">			<span class="k">break</span><span class="p">;</span></div><div class="line" id="file-wp_shortcode_sel-php-LC27">		</div><div class="line" id="file-wp_shortcode_sel-php-LC28">		<span class="k">case</span> <span class="s2">&quot;google&quot;</span><span class="o">:</span> <span class="c1">// Google</span></div><div class="line" id="file-wp_shortcode_sel-php-LC29">			<span class="nv">$search_str</span> <span class="o">=</span> <span class="s2">&quot;http://www.google.de/search?q=&quot;</span><span class="p">;</span></div><div class="line" id="file-wp_shortcode_sel-php-LC30">			<span class="k">break</span><span class="p">;</span></div><div class="line" id="file-wp_shortcode_sel-php-LC31">		<span class="k">default</span><span class="o">:</span> <span class="c1">// your own WP site, replace with your own domain</span></div><div class="line" id="file-wp_shortcode_sel-php-LC32">			<span class="nv">$search_str</span> <span class="o">=</span> <span class="s2">&quot;http://www.acky.de/?s=&quot;</span><span class="p">;</span></div><div class="line" id="file-wp_shortcode_sel-php-LC33">			<span class="k">break</span><span class="p">;</span></div><div class="line" id="file-wp_shortcode_sel-php-LC34">	<span class="p">}</span></div><div class="line" id="file-wp_shortcode_sel-php-LC35">	</div><div class="line" id="file-wp_shortcode_sel-php-LC36">	<span class="k">return</span> <span class="s1">&#39;&lt;a href=&quot;&#39;</span> <span class="o">.</span> <span class="nv">$search_str</span> <span class="o">.</span> <span class="nx">do_shortcode</span><span class="p">(</span><span class="nb">urlencode</span><span class="p">(</span><span class="nv">$content</span><span class="p">))</span> <span class="o">.</span> <span class="s1">&#39;&quot;&gt;&#39;</span> <span class="o">.</span> <span class="nx">do_shortcode</span><span class="p">(</span><span class="nv">$content</span><span class="p">)</span> <span class="o">.</span> <span class="s1">&#39;&lt;/a&gt;&#39;</span><span class="p">;</span></div><div class="line" id="file-wp_shortcode_sel-php-LC37"><span class="p">}</span></div><div class="line" id="file-wp_shortcode_sel-php-LC38">&nbsp;</div><div class="line" id="file-wp_shortcode_sel-php-LC39"><span class="k">if</span> <span class="p">(</span> <span class="nb">function_exists</span><span class="p">(</span><span class="s1">&#39;add_shortcode&#39;</span><span class="p">)</span> <span class="p">)</span> <span class="p">{</span></div><div class="line" id="file-wp_shortcode_sel-php-LC40">	<span class="nx">add_shortcode</span><span class="p">(</span><span class="s1">&#39;sel&#39;</span><span class="p">,</span> <span class="s1">&#39;search_engine_links&#39;</span><span class="p">);</span></div><div class="line" id="file-wp_shortcode_sel-php-LC41"><span class="p">}</span></div><div class="line" id="file-wp_shortcode_sel-php-LC42">&nbsp;</div><div class="line" id="file-wp_shortcode_sel-php-LC43"><span class="cp">?&gt;</span><span class="x"></span></div></pre>
        </td>
      </tr>
    </table>
  </div>

        </div>

        <div class="gist-meta">
          <a href="https://gist.github.com/madnil/5797878/raw/b254d75cd7735165ca4053b653fb14d540e41794/wp_shortcode_sel.php" style="float:right">view raw</a>
          <a href="https://gist.github.com/madnil/5797878#file-wp_shortcode_sel-php" style="float:right; margin-right:10px; color:#666;">wp_shortcode_sel.php</a>
          <a href="https://gist.github.com/madnil/5797878">This Gist</a> brought to you by <a href="https://github.com">GitHub</a>.
        </div>
      </div>
</div>


<p>Die grundsätzliche Benutzung ist identisch geblieben:</p>

<pre><code><a href="http://www.acky.de/?s=Wort1+Wort2+Wort3...">Wort1 Wort2 Wort3...</a>
</code></pre>

<p>Zusätzlich kann jetzt mit dem Argument <code>engine</code> die Suchmaschine festgelegt werden:</p>

<pre><code><a href="http://www.acky.de/?s=Wort1+Wort2+Wort3...">Wort1 Wort2 Wort3...</a>
</code></pre>

<p>Momentan sind <a href="https://duckduckgo.com">DuckDuckGo</a>, <a href="http://bing.com">Bing</a> und Google im Code enthalten. Ist keine Suchmaschine angegeben, wird auf der eigenen Webseite gesucht. Für letzteres muss lediglich die eigene Domain angepasst werden.</p>

<p>Natürlich kann der Code auch andersweitig nach eigenen Anforderungen und Vorlieben angepasst bzw. ergänzt werden. Für eine Suchmaschine muss dann nur die Abfrage-URL herausgefunden und im Block <code>switch</code> eingetragen werden. So etwas kennt man ja z. B. von <a href="http://support.alfredapp.com/features:web-search">Alfred und dessen benutzedefinierten Suchen im Web</a>.</p>

<p>Wer nicht unbedingt an seiner <code>functions.php</code> herumfummeln möchte, kann den Code auch über das nützliche Plugin <a href="http://wordpress.org/plugins/toolbox/">Toolbox</a> von Sergej Müller einbinden. Wie das geht steht in dessen <a href="http://playground.ebiene.de/toolbox-wordpress-plugin/">Dokumentation</a>.</p>
<p><small>© Acky - All rights reserved / Alle Rechte vorbehalten<br />ID: <a href="http://www.acky.de/2013/06/automatische-links-zu-suchmaschinen-mittels-shortcode-in-wordpress/">fd8b3b9e8c07e3444c224b4961fded88</a></small></p>]]></content:encoded>
			<wfw:commentRss>http://www.acky.de/2013/06/automatische-links-zu-suchmaschinen-mittels-shortcode-in-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Push Mitteilungen zu iOS Geräten für eigene Skripte</title>
		<link>http://www.acky.de/2013/06/push-mitteilungen-zu-ios-geraeten-fuer-eigene-skripte/</link>
		<comments>http://www.acky.de/2013/06/push-mitteilungen-zu-ios-geraeten-fuer-eigene-skripte/#comments</comments>
		<pubDate>Fri, 07 Jun 2013 09:34:47 +0000</pubDate>
		<dc:creator>Acky</dc:creator>
				<category><![CDATA[Skripte]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[push]]></category>

		<guid isPermaLink="false">http://www.acky.de/?p=384091</guid>
		<description><![CDATA[Push ist eine schöne Sache, wenn man zeitnah über einen aktuellen Status informiert werden möchte. Betreibt man, so wie ich, einen Mac, der rund um die Uhr irgendwelche Aufgaben erledigt, sind solche Mitteilungen zu einem Mobilgerät eine praktische Angelegenheit. Welcher &#8230; <a href="http://www.acky.de/2013/06/push-mitteilungen-zu-ios-geraeten-fuer-eigene-skripte/">Weiterlesen &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p>Push ist eine schöne Sache, wenn man zeitnah über einen aktuellen Status informiert werden möchte. Betreibt man, so wie ich, <a href="http://www.acky.de/2012/11/ein-mac-mini-als-server-und-spielwiese/">einen Mac</a>, der rund um die Uhr irgendwelche Aufgaben erledigt, sind solche Mitteilungen zu einem Mobilgerät eine praktische Angelegenheit.</p>

<p><span id="more-384091"></span></p>

<p>Welcher Prozess durchlaufen werden muss, damit ein iOS App überhaupt Push Nachrichten empfangen kann, zeigt folgendes Diagramm:</p>

<p class="pic"><img src="http://www.acky.de/wp-content/uploads/2013/06/Push-Mitteilungen-Init-440x320.png" width="440" height="320" alt="Diagramm: Registrierung von Push Mitteilungen für iOS" title="Push Mitteilungen" class="aligncenter" /></p>

<ol>
<li>Die App fragt beim Benutzer nach, ob dieser Push Mitteilungen erhalten möchte.</li>
<li>iOS bittet den <em>Apple Push Notification Service</em>, kurz APNS, um ein eindeutiges Token (eine Adresse, zu der die Nachrichten gepusht werden).</li>
<li>Der APNS sendet das Token an die App.</li>
<li>Die App leitet dieses Token an den Server<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> des Entwicklers/Hersteller der App weiter.</li>
<li>Wann immer es benötigt wird, sendet dieser Server eine Push Nachricht zum APNS.</li>
<li>Der APNS leitet die Nachricht zum iOS Gerät weiter. Ping!</li>
</ol>

<h2>Vorgehensweise</h2>

<p>Um Push Mitteilungen in eigenen Skripten zu benutzen, benötigt man also eine App, welche die Nachrichten empfangen kann, und eine vom Herausgeber bereitgestellte API, damit man auf dessen Server zugreifen kann:</p>

<p class="pic"><img src="http://www.acky.de/wp-content/uploads/2013/06/Push-Mitteilungen-vom-Skript.png" width="428" height="300" alt="Diagramm: Push Mitteilungen vom Skript gesendet" title="Push Mitteilungen vom Skript" class="aligncenter" /></p>

<p>Ich verwende hierzu die App <a href="http://www.prowlapp.com">Prowl</a><sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup>. Ich besitze diese schon seit ihrem Release im Juli 2009 und der Dienst hat bisher immer zuverlässig funktioniert<sup id="fnref:3"><a href="#fn:3" rel="footnote">3</a></sup>.</p>

<h2>Grundsätzliches</h2>

<p>Für die Benutzung benötigt man ein Konto bei Prowl. Nach der Registrierung auf der <a href="http://www.prowlapp.com">Webseite</a> kann man  unter dem Reiter <em>API Keys</em> den persönlichen API Schlüssel abgreifen, der für den Zugriff benötigt wird.</p>

<p>Glücklicherweise ist es nicht unbedingt nötig, sich durch die API Dokumentation zu kämpfen. Zahlreiche Entwickler haben <a href="http://www.prowlapp.com/api.php#libraries">Bibliotheken</a> zur Verfügung gestellt, die man je nach Bedarf und Anwendungsfall benutzen kann. Für einfache Skripts genügt es aber einen HTTPS Aufruf über cURL abzusetzen. Die Syntax sieht folgendermaßen aus:</p>

<pre><code>curl -s https://api.prowlapp.com/publicapi/add [Parameter]
</code></pre>

<p>Die Parameter sind in der API in der Sektion <a href="http://www.prowlapp.com/api.php#add">add</a> gut erklärt. Die wichtigen sind:</p>

<ul>
<li>apikey</li>
<li>application</li>
<li>event</li>
<li>description</li>
</ul>

<p>Jeder Parameter wird mit der Option <code>-F</code> übergeben. Dadurch werden die Daten als Form mit der POST Methode gesendet. Das erklärt auch, warum man auf der Prowl Webseite unter dem eigenem Konto per Webform eine Push Nachricht absenden kann.</p>

<h2>Hallo Welt</h2>

<p>Für einen ersten Test öffnet man ein Terminal-Fenster und sendet mit dem folgenden Befehl<sup id="fnref:4"><a href="#fn:4" rel="footnote">4</a></sup> einen wohl bekannten Text:</p>

<pre><code>curl -s https://api.prowlapp.com/publicapi/add \
     -F "apikey=APIKEY" \
     -F "application=Terminal" \
     -F "event=Test" \
     -F "description=Hallo Welt"
</code></pre>

<p>Für den Platzhalter <em>APIKEY</em> muss natürlich der eigene API Schlüssel eingetragen werden. Nach dem Abschicken wird im Terminal als Rückgabe der Inhalt einer kurzen XML Datei angezeigt. Dieser beinhaltet entweder <code>success</code> oder <code>error</code>. Bei Erfolg sollte das iOS Gerät natürlich auch die Nachricht empfangen.</p>

<p>Es wird übrigens auch die Anzahl der verbleibenden API Aufrufe ausgegeben, da es hier ein Limit gibt:</p>

<blockquote>
  <p>The Prowl servers have a rate limit of 1000 notifications per hour from an IP address.</p>
</blockquote>

<p>An diese Grenze dürfte man aber wohl kaum stoßen.</p>

<h2>Anwendung</h2>

<p>Im einfachsten Fall packt man den obigen Befehl in ein Bash Skript (<code>skript1.sh</code>) und übergibt die Mitteilung als Parameter:</p>

<pre><code>#!/bin/bash

curl -s https://api.prowlapp.com/publicapi/add \
     -F "apikey=APIKEY" \
     -F "application=`hostname`" \
     -F "event=Download beendet" \
     -F "description=$1"
</code></pre>

<p>Der Aufruf erfolgt dann mit <code>pfad/zu/skript1.sh "Nachricht"</code>.</p>

<p>So ein Skript lässt sich z. B. auch in Hazel einbinden, das als Übergabeparameter den Namen einer Datei enthält.</p>

<p class="pic"><img src="http://www.acky.de/wp-content/uploads/2013/06/Push-Mitteilungen-Hazel.png" width="646" height="244" alt="Einbindung eines Skripts in Hazel" title="Push Mitteilungen Hazel" class="aligncenter" /></p>

<p>Möchte man eine Push Mitteilung aus Applescript (<code>skript2.scpt</code>) heraus senden, kann diese mit <code>do shell script</code> eingebunden werden:</p>

<pre><code>set msg to "Neue Mail"

do shell script "curl -s https://api.prowlapp.com/publicapi/add -F 'apikey=APIKEY' -F 'application=Mail' -F 'description=" &amp; msg &amp; "'"
</code></pre>

<p>Das Beispiel zeigt auch, wie man die eigentliche Nachricht als Variable übergibt. Bindet man dieses Applescript z. B. als Aktion in eine Regel der OS X Mail App ein, bekommt man abhängig von der eingestellten Bedingung eine Push Nachricht<sup id="fnref:5"><a href="#fn:5" rel="footnote">5</a></sup>.</p>

<p>Eine interessanter Optionsparameter ist <code>url</code>. Prowl kann zu dieser Adresse nach einer Rückfrage oder unmittelbar weiterleiten. Damit lassen sich Informationen an Apps übermitteln, die ein <a href="http://handleopenurl.com/scheme">URL Schema</a> unterstützen. Das folgende Skript (<code>skript3.sh</code>) öffnet auf dem iOS Gerät den app.net Client <em>hAppy</em> um einen neuen Post mit dem gesendeten Text zu erzeugen:</p>

<pre><code>#!/bin/bash

MSG=$(php -r "echo rawurlencode('$1');")

curl -s  https://api.prowlapp.com/publicapi/add \
     -F "apikey=APIKEY" \
     -F "application=hAppy" \
     -F "description=Post erzeugen" \
     -F "url=happy://create?text=$MSG"
</code></pre>

<p>Der als Parameter übergebene Text beim Aufruf des Skripts wird in Zeile 2 mit Hilfe von etwas PHP encodiert.</p>

<p>Der Aufruf erfolgt z. B. mit <code>pfad/zu/skript3.sh "hAppy ist klasse!"</code>.</p>

<p>Die 3 Beispiel-Skripte können als <a href="http://www.acky.de/wp-content/uploads/2013/06/PushSkripte.zip">ZIP Archiv</a> heruntergeladen werden.</p>

<h2>Fazit</h2>

<p>Push Mitteilungen können sehr einfach von eigenen Skripten erzeugt werden. Für die Übermittlung und den Empfang ist man aber auf einen externen Dienst und dessen App angewiesen. Dieser unterliegt dann den üblichen Vorbehalten wie möglicher Schließung, Verfügbarkeit oder Datenschutz. Hat man damit kein Problem kann man seiner eigenen Phantasie freien Lauf lassen. Möglichkeiten für die Anwendung gibt es wie Sand am Meer.</p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:1">
<p>Punkt 4 ist übrigens ein Knackpunkt für manche Entwickler. Der Betrieb bzw. Miete eines eigenen Servers für die Push Nachrichten kostet verhältnismäßig viel Geld, da dieser in Abhängigkeit von der Benutzeranzahl der App entsprechende Resourcen benötigt.&#160;<a href="#fnref:1" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:2">
<p>Eine weitere App wäre <a href="https://pushover.net">Pushover</a>, die es auch für Android gibt. Diese habe ich aber (noch) nicht getestet.&#160;<a href="#fnref:2" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:3">
<p>Auch wenn die App selber nicht besonders schön anzusehen ist.&#160;<a href="#fnref:3" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:4">
<p>Zur besseren Verständlichkeit wurde der eigentlich einzeilige Befehl mit Zeilenumbrüchen versehen.&#160;<a href="#fnref:4" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:5">
<p>Das ist nur ein Beispiel <img src='http://www.acky.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> &#160;<a href="#fnref:5" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>
<p><small>© Acky - All rights reserved / Alle Rechte vorbehalten<br />ID: <a href="http://www.acky.de/2013/06/push-mitteilungen-zu-ios-geraeten-fuer-eigene-skripte/">7ae667bbacef5eb5ba9bce7c4dc67a6e</a></small></p>]]></content:encoded>
			<wfw:commentRss>http://www.acky.de/2013/06/push-mitteilungen-zu-ios-geraeten-fuer-eigene-skripte/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Draft</title>
		<link>http://www.acky.de/2013/03/draft/</link>
		<comments>http://www.acky.de/2013/03/draft/#comments</comments>
		<pubDate>Thu, 14 Mar 2013 15:14:20 +0000</pubDate>
		<dc:creator>Acky</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[online]]></category>
		<category><![CDATA[text]]></category>

		<guid isPermaLink="false">http://www.acky.de/?p=136136</guid>
		<description><![CDATA[Draft weckt zunächst den Eindruck einer einfachen Online-Schreibmaschine mit [Markdown][2] Unterstützung. Allerdings offenbaren sich beim genauerem Hinsehen ein paar interessante Zusatzfeatures. <a href="http://www.acky.de/2013/03/draft/">Weiterlesen &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://draftin.com/">Draft</a> weckt zunächst den Eindruck einer einfachen Online-Schreibmaschine mit <a href="http://daringfireball.net/projects/markdown/">Markdown</a> Unterstützung. Allerdings offenbaren sich beim genauerem Hinsehen ein paar interessante Zusatzfeatures. So besitzt es eine Versionierung und die Möglichkeit des gemeinsamen Arbeitens an einem Dokument. Dabei werden die Änderungen protokolliert, sind einfach nachvollziehbar und können auch abgelehnt werden.</p>

<p><span id="more-136136"></span></p>

<p>Die Oberfläche ist übersichtlich und ablenkungsfrei aufgebaut. Während des Schreibens befindet sich in der linken oberen Ecke das <em>Menü</em>, das erst bei einem Klick darauf ausfährt. In der rechten oberen Ecke sorgt der <em>Mark Draft</em> Button für ein schnelles Sichern von Zwischenständen, während rechts unten die Anzahl der geschriebenen Wörter angezeigt wird. Im übrigen wird ein Dokument im Hintergrund permanent gespeichert.</p>

<p>Über das Menü lassen sich geschriebene Texte in der Vorschau begutachten sowie als Text oder HTML exportieren. Draft bedient sich hierbei der Hilfe von <a href="https://www.filepicker.io">Filepicker.io</a>, so dass man die Datei auch direkt in Clouddiensten wie Dropbox oder Evernote ablegen kann. Über den gleichen Mechanismus steht auch der Import von existierenden Texten zur Verfügung.</p>

<p>Wie schon eingangs erwähnt lassen sich Dokumente auch mit anderen teilen. Diese erhalten eine E-Mail mit einem <em>geheimen</em> Link, um auf das Dokument zugreifen zu können. Interessanterweise wird auch die Möglichkeit geboten, den Text von einem professionellem Lektor gegen Bezahlung gegenlesen zu lassen.</p>

<p>Ich benutze Draft bereits seit einiger Zeit während der Beta Phase und bin von Funktion und Design sehr angetan. Laut den Worten des Entwicklers Nathan Kontny ist das aber erst der Anfang:</p>

<blockquote>
  <p>This is just the start. I&#8217;ve got some really neat things coming up. The early feedback on a not yet released feature to Draft has been: &#8220;Whoa.&#8221;</p>
</blockquote>

<p>Ich bin gespannt!</p>


<a href='http://www.acky.de/2013/03/draft/draft_main/' title='Draft: Übersichtsseite'><img width="200" height="200" src="http://www.acky.de/wp-content/uploads/2013/03/Draft_Main-200x200.png" class="attachment-thumbnail" alt="Draft: Übersichtsseite" /></a>
<a href='http://www.acky.de/2013/03/draft/draft_versionierung/' title='Draft: Versionierung'><img width="200" height="200" src="http://www.acky.de/wp-content/uploads/2013/03/Draft_Versionierung-200x200.png" class="attachment-thumbnail" alt="Drafts: Versionierung" /></a>
<a href='http://www.acky.de/2013/03/draft/draft_editor/' title='Draft: Texteingabe'><img width="200" height="200" src="http://www.acky.de/wp-content/uploads/2013/03/Draft_Editor-200x200.png" class="attachment-thumbnail" alt="Draft: Texteingabe" /></a>

<p><small>© Acky - All rights reserved / Alle Rechte vorbehalten<br />ID: <a href="http://www.acky.de/2013/03/draft/">4d56b2da40579ac4b3f7791d1fab7d74</a></small></p>]]></content:encoded>
			<wfw:commentRss>http://www.acky.de/2013/03/draft/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ein &quot;Auf app.net teilen&quot; Button für selbstgehostete WordPress Blogs</title>
		<link>http://www.acky.de/2013/03/einen-auf-app-net-teilen-button-fuer-selbstgehostete-wordpress-blogs/</link>
		<comments>http://www.acky.de/2013/03/einen-auf-app-net-teilen-button-fuer-selbstgehostete-wordpress-blogs/#comments</comments>
		<pubDate>Wed, 13 Mar 2013 15:14:28 +0000</pubDate>
		<dc:creator>Acky</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[adn]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[share]]></category>

		<guid isPermaLink="false">http://www.acky.de/?p=131242</guid>
		<description><![CDATA[Diese Woche fand ich im Internet ein kleines Bookmarklet, mit der man über JavaScript den Link und Titel der momentan aufgerufenen Webseite auf app.net teilen kann. Das ganze habe ich in eine einfache Zeile PHP Code für WordPress Blogs verbaut. <a href="http://www.acky.de/2013/03/einen-auf-app-net-teilen-button-fuer-selbstgehostete-wordpress-blogs/">Weiterlesen &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p>Diese Woche fand ich im Internet ein kleines <a href="http://www.componentix.com/blog/27/appnet-bookmarklet-to-share-the-current-webpage">Bookmarklet</a>, mit der man den Link und Titel der momentan aufgerufenen Webseite auf app.net teilen kann.</p>

<p>Beim näheren Hinsehen fiel mir auf, dass die JavaScript-Funktion mit einer URL arbeitet:</p>

<pre><code>https://alpha.app.net/intent/post?text=
</code></pre>

<p>Über einen GET Parameter wird einfach im Browser ein neuer Post unter alpha.app.net erzeugt. Falls man gerade nicht angemeldet ist, wird vorher der Login abgefragt.</p>

<p><span id="more-131242"></span></p>

<p>Das ganze habe ich in eine einfache Zeile PHP Code für WordPress Blogs verbaut, die folgendermaßen aussieht:</p>

<pre><code>&lt;a href="https://alpha.app.net/intent/post?text=[&lt;?php echo rawurlencode(get_the_title()) ?&gt;](&lt;?php echo rawurlencode(get_permalink()) ?&gt;)"&gt;&lt;img src="&lt;?php echo get_stylesheet_directory_uri(); ?&gt;/images/share_appnet.jpg" height="24" width="74" alt="Artikel auf app.net teilen" /&gt;&lt;/a&gt;
</code></pre>

<p>Kern des Codes ist eine Grafik in Retinaauflösung, die ich mir selbst zusammengbastelt habe. Der Pfad zeigt mittels <code>get_stylesheet_directory_uri()</code> auf ein Unterverzeichnis meines Child Themes, wo ich die Grafik abgelegt habe.</p>

<p>Die Grafik ist Umgeben von einem Link, der aus dem oben genannten Link zu Alpha und als Textparameter dem Titel <code>get_the_title()</code> und Permalink <code>get_permalink()</code> des Artikels zusammengesetzt ist.</p>

<p>Das Snippet fügt man nun in der Template Datei seines WordPress Themes ein, die einen einzelnen Artikel ausgibt. In Waipoua von Elmastudio bringt man es am besten in der Datei <code>share.php</code> unter.</p>

<p>Das Snippet ist so einfach, dass es auch ungeübten Blogbetreibern gelingen sollte, es einzubauen. Die von mir erstellte Grafik könnt ihr bei Bedarf natürlich gerne verwenden. Viel Erfolg!</p>

<p><strong>Update vom 4.6.2013</strong>: Um Schwierigkeiten mit Sonderzeichen zu vermeiden, habe ich den obigen Code mit der &#8220;rawurlencode&#8221; Funktion erweitert. Desweiteren werden Text und URL jetzt mittels Markdown als Inline Link formatiert, so dass die URL keinen zusätzlichen Zeichenplatz benötigt.</p>
<p><small>© Acky - All rights reserved / Alle Rechte vorbehalten<br />ID: <a href="http://www.acky.de/2013/03/einen-auf-app-net-teilen-button-fuer-selbstgehostete-wordpress-blogs/">fb92954b6fe5cae572b4c1cb210044aa</a></small></p>]]></content:encoded>
			<wfw:commentRss>http://www.acky.de/2013/03/einen-auf-app-net-teilen-button-fuer-selbstgehostete-wordpress-blogs/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Dokumente von iWork für iOS zu Windows übertragen</title>
		<link>http://www.acky.de/2013/02/dokumente-von-iwork-fuer-ios-zu-windows-uebertragen/</link>
		<comments>http://www.acky.de/2013/02/dokumente-von-iwork-fuer-ios-zu-windows-uebertragen/#comments</comments>
		<pubDate>Mon, 11 Feb 2013 16:05:04 +0000</pubDate>
		<dc:creator>Acky</dc:creator>
				<category><![CDATA[Produktivität]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[dropbox]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[iwork]]></category>
		<category><![CDATA[tipp]]></category>
		<category><![CDATA[trickkiste]]></category>

		<guid isPermaLink="false">http://www.acky.de/?p=3022</guid>
		<description><![CDATA[Unter iOS iWork Dokumente als PDF oder jeweils im Word-, Excel- bzw. PowerPoint-Format an Windows übergeben <a href="http://www.acky.de/2013/02/dokumente-von-iwork-fuer-ios-zu-windows-uebertragen/">Weiterlesen &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p>Ein Kollege fragte mich heute nach <a href="https://itunes.apple.com/de/app/pages/id361309726?mt=8">Pages für iOS</a>. Im Wesentlichen ging es ihm darum, ob er auf dem iPad erstellte Dokumente mit Word weiterverarbeiten kann. Dazu muss man noch wissen, dass er kein Mac Anwender ist, sondern Windows benutzt, welches Dokumente in der iCloud nicht direkt unterstützt<sup id="fnref:5"><a href="#fn:5" rel="footnote">1</a></sup>.</p>

<p>Die Anwendungen von <a href="http://www.apple.com/de/iwork/">iWork</a> für iOS bieten eigentlich keinen &#8220;Export&#8221;, was durch das Sandboxing von Apple begründet ist. Allerdings existiert die Möglichkeit der Weitergabe an eine andere App. Netterweise hat Apple es vorgesehen, dass unter iOS iWork Dokumente zusätzlich zum nativen Format auch als PDF oder jeweils im Word-, Excel- bzw. PowerPoint-Format übergeben werden können. Somit ergibt sich dann folgender Workflow in iOS 6:</p>

<p><span id="more-3022"></span></p>

<ol>
<li>In Pages, Numbers oder Keynote für iOS im Menü <em>Werkzeuge</em> den Punkt <em>Freigabe &amp; Drucken</em> auswählen.</li>
</ol>

<p class="pic"><img src="http://www.acky.de/wp-content/uploads/2013/02/pages_ios_werkzeuge-281x320.jpg" width="281" height="320" alt="iWork für iOS Menü Werkzeuge" title="iWork für iOS Menü Werkzeuge" class="aligncenter" /></p>

<ol>
<li>Im nächsten Menü <em>In anderer App öffnen</em> auswählen.</li>
</ol>

<p class="pic"><img src="http://www.acky.de/wp-content/uploads/2013/02/pages_ios_freigabe-281x320.jpg" width="281" height="320" alt="iWork für iOS Menü Freigabe und Drucken" title="iWork für iOS Menü Freigabe und Drucken" class="aligncenter" /></p>

<ol>
<li>Im folgenden Fenter das Format <em>Word</em>, <em>Excel</em> oder <em>PowerPoint</em> wählen.</li>
</ol>

<p class="pic"><img src="http://www.acky.de/wp-content/uploads/2013/02/pages_ios_format-386x320.jpg" width="386" height="320" alt="Pages für iOS Format wählen" title="Pages für iOS Format wählen" class="aligncenter" /></p>

<ol>
<li>Jetzt kommt der eigentliche Trick. Durch das Auswählen einer App eines Cloudspeichers wie z. B. Dropbox, wird das Dokument dort hochgeladen und kann auf einem PC direkt geöffnet werden.</li>
</ol>

<p class="pic"><img src="http://www.acky.de/wp-content/uploads/2013/02/pages_ios_app_auswählen-246x320.jpg" width="246" height="320" alt="iWork für iOS App auswählen" title="iWork für iOS App auswählen" class="aligncenter" /></p>

<p>Es ist übrigens auch möglich seinen eigenen Cloudspeicher wie z. B. <a href="http://owncloud.org">ownCloud</a> zu verwenden. Hierzu muss das Dokument im Punkt 2 nur mit dem Menüpunkt <em>Auf WebDAV kopieren</em> oder an den <a href="https://itunes.apple.com/de/app/owncloud/id543672169?mt=8">iOS Client für ownCloud</a> übergeben werden.</p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:5">
<p>Natürlich kann man über icloud.com und einem Webbrowser auf die Dokumente zugreifen. Das ist aber eher umständlich.&#160;<a href="#fnref:5" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>
<p><small>© Acky - All rights reserved / Alle Rechte vorbehalten<br />ID: <a href="http://www.acky.de/2013/02/dokumente-von-iwork-fuer-ios-zu-windows-uebertragen/">cd9d3f943467e58d07da8c59ecca07b5</a></small></p>]]></content:encoded>
			<wfw:commentRss>http://www.acky.de/2013/02/dokumente-von-iwork-fuer-ios-zu-windows-uebertragen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Shell Skripte mit sudo und grafischer Passwortabfrage</title>
		<link>http://www.acky.de/2013/02/shell-skripte-mit-sudo-und-grafischer-passwortabfrage/</link>
		<comments>http://www.acky.de/2013/02/shell-skripte-mit-sudo-und-grafischer-passwortabfrage/#comments</comments>
		<pubDate>Tue, 05 Feb 2013 17:17:15 +0000</pubDate>
		<dc:creator>Acky</dc:creator>
				<category><![CDATA[Skripte]]></category>
		<category><![CDATA[applescript]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[passwort]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://www.acky.de/?p=3010</guid>
		<description><![CDATA[Unter OS X kann man mittels sudo einen Befehl im Terminal ausführen, der die Rechte eines Administrator verlangt. Ein Beispiel hierfür ist in meinem letzten Artikel zu sehen. Fügt man so einen Befehl in ein Shell Skript ein, welches man &#8230; <a href="http://www.acky.de/2013/02/shell-skripte-mit-sudo-und-grafischer-passwortabfrage/">Weiterlesen &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p>Unter OS X kann man mittels <code>sudo</code> einen Befehl im Terminal ausführen, der die Rechte eines Administrator verlangt. Ein Beispiel hierfür ist in meinem <a href="http://www.acky.de/2013/01/im-finder-zeigen-und-oeffnen-mit-funktionieren-nicht-in-mountain-lion/">letzten Artikel</a> zu sehen.  Fügt man so einen Befehl in ein Shell Skript ein, welches man z. B. nach Bedarf manuell starten möchte, wird er zwangsläufig nicht ausgeführt, weil keine Passwortabfrage erfolgt.</p>

<p>Unter OS X gibt es eine einfache &#8220;bordeigene&#8221; Möglichkeit, um Benutzereingaben mit einem UI, also grafisch, abzufragen: AppleScript. Netterweise kann man so ein AppleScript auch in einem Shell Skript mit dem Befehl <code>osascript</code> aufrufen. Setzen wir das ganze also mal zusammen.</p>

<p><span id="more-3010"></span></p>

<p>Die grafische Abfrage erfolgt wie erläutert mit einem zweizeiligen AppleScript:</p>

<pre><code>tell application "System Events" to display dialog "Password:" default answer "" with hidden answer
text returned of result
</code></pre>

<p>Wenn man das im AppleScript-Editor ausführt, bekommt man als Antwort das eingegebene Passwort als String. Das muss jetzt nur noch in eine Shell Variable übergeben werden:</p>

<pre><code>PW="$(osascript -e 'tell application "System Events" to display dialog "Password:" default answer "" with hidden answer' -e 'text returned of result' 2&gt;/dev/null)"
</code></pre>

<p>Mit dem Paramter <code>-e</code> wird jeweils eine AppleScript Befehlszeile eingeleitet. Am Ende sorgt der Zusatz <code>2&gt;/dev/null</code> für ein Abfangen eventueller Fehler.</p>

<p>Das Passwort kann nun mit der Variablen <code>$PW</code> weiter verarbeitet werden. Um beim eingangs erwähnten Beispiel zu bleiben, würde das in der folgenden Zeile so aussehen:</p>

<pre><code>echo "$PW" | sudo -S killall -KILL appleeventsd
</code></pre>

<p>Der Parameter <code>-S</code> bei <code>sudo</code> bewirkt, dass das erforderliche Passwort aus der Variablen gelesen wird.</p>
<p><small>© Acky - All rights reserved / Alle Rechte vorbehalten<br />ID: <a href="http://www.acky.de/2013/02/shell-skripte-mit-sudo-und-grafischer-passwortabfrage/">2076895b338f8c1045f0b6413ccd6854</a></small></p>]]></content:encoded>
			<wfw:commentRss>http://www.acky.de/2013/02/shell-skripte-mit-sudo-und-grafischer-passwortabfrage/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>&quot;Im Finder zeigen&quot; und &quot;Öffnen mit&quot; funktionieren nicht in Mountain Lion</title>
		<link>http://www.acky.de/2013/01/im-finder-zeigen-und-oeffnen-mit-funktionieren-nicht-in-mountain-lion/</link>
		<comments>http://www.acky.de/2013/01/im-finder-zeigen-und-oeffnen-mit-funktionieren-nicht-in-mountain-lion/#comments</comments>
		<pubDate>Mon, 28 Jan 2013 15:56:05 +0000</pubDate>
		<dc:creator>Acky</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[finder]]></category>
		<category><![CDATA[osx]]></category>

		<guid isPermaLink="false">http://www.acky.de/?p=3000</guid>
		<description><![CDATA[In der aktuellen Version von OS X 10.8.2 gibt es einen nervenden Bug, der die Interaktion zwischen Programmen betrifft. So funktioniert z. B. das &#8220;Im Finder anzeigen&#8221; eines Eintrags der Safari Download-Liste nicht oder &#8220;Öffnen mit&#8230;&#8221; in Transmit. Generell sind &#8230; <a href="http://www.acky.de/2013/01/im-finder-zeigen-und-oeffnen-mit-funktionieren-nicht-in-mountain-lion/">Weiterlesen &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p>In der aktuellen Version von OS X 10.8.2 gibt es einen nervenden Bug, der die Interaktion zwischen Programmen betrifft. So funktioniert z. B. das &#8220;Im Finder anzeigen&#8221; eines Eintrags der <a href="http://www.acky.de/2012/02/neues-verhalten-in-der-safari-downloadliste-bug-oder-feature/">Safari Download-Liste</a> nicht oder &#8220;Öffnen mit&#8230;&#8221; in Transmit. Generell sind alle Programme betroffen, die für die Übergabe mit einer <a href="http://www.openradar.me/12424662">bestimmten Funktion</a> arbeiten. Aufgefallen sind mir Safari, Transmit, TextMate, iPhoto und Boxen der Mitteilungszentrale.</p>

<p>Um das System wieder zum ordnungsgemäßen Laufen zu bringen kann man sich aus- und wieder einloggen, was aber etwas umständlich ist. Der folgende Terminal-Befehl führt schneller zum gleichen Ziel. Er beendet den &#8220;Apple Events Daemon&#8221;, der für den Bug verantwortlich ist:</p>

<pre><code>sudo killall -KILL appleeventsd
</code></pre>

<p>Wegen dem Befehl <code>sudo</code> wird nach dem Benutzerpasswort gefragt. Der Daemaon wird automatisch neu gestartet, wenn er wieder gebraucht wird.</p>

<p>Bleibt zu hoffen, dass der Bug in Version 10.8.3 bereits bereinigt wurde.</p>
<p><small>© Acky - All rights reserved / Alle Rechte vorbehalten<br />ID: <a href="http://www.acky.de/2013/01/im-finder-zeigen-und-oeffnen-mit-funktionieren-nicht-in-mountain-lion/">777d330b66e5aae207052d6439bfa144</a></small></p>]]></content:encoded>
			<wfw:commentRss>http://www.acky.de/2013/01/im-finder-zeigen-und-oeffnen-mit-funktionieren-nicht-in-mountain-lion/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title><![CDATA[⇒ Der günstige Weg zum Mac]]></title>
		<link><![CDATA[http://www.happybuddha1975.de/mein-weg-zum-mac-13-enno/]]></link>
		<comments>http://www.acky.de/2012/12/der-guenstige-weg-zum-mac/#comments</comments>
		<pubDate>Thu, 27 Dec 2012 11:21:12 +0000</pubDate>
		<dc:creator>Acky</dc:creator>
				<category><![CDATA[Diverses]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[wert]]></category>

		<guid isPermaLink="false">http://www.acky.de/?p=2991</guid>
		<description><![CDATA[Enno: Außerdem hatte ich bei einem – wait for it – Mitstudenten gesehen, dass auch 4 Jahre alte MacBooks durchaus noch ihren Dienst zu verrichten wissen. Inklusive dem für Apple-Produkte typischerweise hohen Wiederverkaufswert wäre der Kauf eines MacBooks am Ende &#8230; <a href="http://www.acky.de/2012/12/der-guenstige-weg-zum-mac/">Weiterlesen &#8594;</a><a href="http://www.acky.de/2012/12/der-guenstige-weg-zum-mac/" rel="bookmark" title="Permanent link to 'Der günstige Weg zum Mac'" class="glyph">★</a>
]]></description>
				<content:encoded><![CDATA[<p>Enno:</p>

<blockquote>
  <p>Außerdem hatte ich bei einem – wait for it – Mitstudenten gesehen, dass auch 4 Jahre alte MacBooks durchaus noch ihren Dienst zu verrichten wissen. Inklusive dem für Apple-Produkte typischerweise hohen Wiederverkaufswert wäre der Kauf eines MacBooks am Ende sogar wesentlich günstiger im Vergleich zu den Windows-Pendants.</p>
</blockquote>

<p>Das ist ein überaus gültiger Punkt, der bei Preisvergleichen selten erwähnt wird.</p>
<p><a href="http://www.acky.de/2012/12/der-guenstige-weg-zum-mac/" rel="bookmark" title="Permanent link to 'Der günstige Weg zum Mac'" class="glyph">★</a></p>
<p><small>© Acky - All rights reserved / Alle Rechte vorbehalten<br />ID: <a href="http://www.acky.de/2012/12/der-guenstige-weg-zum-mac/">cafd7f3378631b7bc92216633e227a22</a></small></p>]]></content:encoded>
			<wfw:commentRss>http://www.acky.de/2012/12/der-guenstige-weg-zum-mac/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title><![CDATA[⇒ Mountain Lion Server Tutorials]]></title>
		<link><![CDATA[http://www.mountainlionserver.com]]></link>
		<comments>http://www.acky.de/2012/12/mountain-lion-server-tutorials/#comments</comments>
		<pubDate>Wed, 12 Dec 2012 13:50:20 +0000</pubDate>
		<dc:creator>Acky</dc:creator>
				<category><![CDATA[Diverses]]></category>

		<guid isPermaLink="false">http://www.acky.de/?p=2981</guid>
		<description><![CDATA[Charles Edge and Brian Stucki: When setting up a server, getting it right early can save a lot of headache later. We&#8217;ve put together these tutorials to get you started in setting up a server. Danke! ★ © Acky - &#8230; <a href="http://www.acky.de/2012/12/mountain-lion-server-tutorials/">Weiterlesen &#8594;</a><a href="http://www.acky.de/2012/12/mountain-lion-server-tutorials/" rel="bookmark" title="Permanent link to 'Mountain Lion Server Tutorials'" class="glyph">★</a>
]]></description>
				<content:encoded><![CDATA[<p>Charles Edge and Brian Stucki:</p>

<blockquote>
  <p>When setting up a server, getting it right early can save a lot of headache later.  We&#8217;ve put together these tutorials to get you started in setting up a server.</p>
</blockquote>

<p>Danke!</p>
<p><a href="http://www.acky.de/2012/12/mountain-lion-server-tutorials/" rel="bookmark" title="Permanent link to 'Mountain Lion Server Tutorials'" class="glyph">★</a></p>
<p><small>© Acky - All rights reserved / Alle Rechte vorbehalten<br />ID: <a href="http://www.acky.de/2012/12/mountain-lion-server-tutorials/">be441b0a9e9e4ab77be0a6a5dcd5328e</a></small></p>]]></content:encoded>
			<wfw:commentRss>http://www.acky.de/2012/12/mountain-lion-server-tutorials/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Benutzerdefinierte Suchen mit Alfred</title>
		<link>http://www.acky.de/2012/12/benutzerdefinierte-suchen-mit-alfred/</link>
		<comments>http://www.acky.de/2012/12/benutzerdefinierte-suchen-mit-alfred/#comments</comments>
		<pubDate>Fri, 07 Dec 2012 13:53:57 +0000</pubDate>
		<dc:creator>Acky</dc:creator>
				<category><![CDATA[Produktivität]]></category>

		<guid isPermaLink="false">http://www.acky.de/?p=2952</guid>
		<description><![CDATA[Alfred gehört seit geraumer Zeit zu den unentbehrlichen Werkzeugen auf meinem Mac. Unter seinen vielen Ausstattungsmerkmalen befindet sich auch das Festlegen von eigenen Suchen. Über eine Tastenkombination kann man damit bequem bei einer Webseite bzw. Dienst nach verschiedenen Stichwörtern suchen. &#8230; <a href="http://www.acky.de/2012/12/benutzerdefinierte-suchen-mit-alfred/">Weiterlesen &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.alfredapp.com/">Alfred</a> gehört seit geraumer Zeit zu den unentbehrlichen Werkzeugen auf meinem Mac. Unter seinen vielen Ausstattungsmerkmalen befindet sich auch das Festlegen von eigenen Suchen. Über eine Tastenkombination kann man damit bequem bei einer Webseite bzw. Dienst nach verschiedenen Stichwörtern suchen.</p>

<p><span id="more-2952"></span></p>

<p>Die Definition erfolgt im Reiter <em>Features</em> der Einstellungen von Alfred. Die anzugebene URL erhält man meist, in dem man eine entsprechende Suche im Browser durchführt und von der Ergebnisseite die Adressezeile kopiert. Das gesuchte Stichwort muss dann nur noch durch den Platzhalter <code>{query}</code> ersetzt werden.</p>

<p class="pic"><img src="http://www.acky.de/wp-content/uploads/2012/12/Alfred_suche_definieren.png" width="552" height="324" alt="Alfred: Suche definieren" title="Alfred: Suche definieren" class="aligncenter" /></p>

<p>Praktisch ist die Weitergabe der benutzerdefinierten Suchen. Alfred bietet hierfür den Export in ein <em>URL Schema</em> an. Dies ist nichts anderes als eine Adresse, die mit <code>alfredapp://</code> beginnt und die man in seinem Browser in der Addresszeile ausführen kann. Ist Alfred installiert wird die benutzerdefinierte Suche nach einem Bestätigungsfenster automatisch angelegt.</p>

<p class="pic"><img src="http://www.acky.de/wp-content/uploads/2012/12/Alfred_suche_installieren.png" width="411" height="147" alt="Alfred: Suche installieren" title="Alfred: Suche installieren" class="aligncenter" /></p>

<p>Natürlich lässt sich die Tastenkombination auch noch nachträglich den eigenen Vorlieben angleichen.</p>

<p>Ich habe hier mal exemplarisch drei Beispiele aus meinem Fundus ausgewählt. Beim Kopieren darauf achten, die ganze Zeile zu  erwischen.</p>

<p><strong>LEO Übersetzung Englisch/Deutsch</strong> sucht bei LEO nach der Übersetzung eines deutschen oder englischen Begriffs oder Phrase:</p>

<pre><code>alfredapp://customsearch/LEO%20Englisch%2FDeutsch/leo/ascii/url=http://dict.leo.org/ende?lp=ende&amp;lang=de&amp;searchLoc=0&amp;cmpType=relaxed&amp;sectHdr=on&amp;spellToler=&amp;search={query}
</code></pre>

<p><strong>Pinboard</strong> sucht nach Lesezeichen bei Pinboard (<a href="https://twitter.com/willjhopkins/status/276119771886534656">via</a>):</p>

<pre><code>alfredapp://customsearch/Pinboard/pb/ascii/url=https://pinboard.in/search/?query={query}&amp;mine=Search+Mine   
</code></pre>

<p><strong>PHP Schnellreferenz</strong> sucht bei php.net nach der eingegebenen Funktion:</p>

<pre><code>alfredapp://customsearch/PHP%20Quick%20Reference/php/ascii/url=http://de.php.net/manual-lookup.php?pattern={query}&amp;lang=de&amp;scope=quickref   
</code></pre>

<p><a href="http://support.alfredapp.com/features:custom-search-examples">Weitere Beispiele</a> findet man auf der Webseite von Alfred.</p>
<p><small>© Acky - All rights reserved / Alle Rechte vorbehalten<br />ID: <a href="http://www.acky.de/2012/12/benutzerdefinierte-suchen-mit-alfred/">f83aaf73af5d3a6a608500d36b94324f</a></small></p>]]></content:encoded>
			<wfw:commentRss>http://www.acky.de/2012/12/benutzerdefinierte-suchen-mit-alfred/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
