{"id":998,"date":"2014-02-20T00:00:05","date_gmt":"2014-02-19T23:00:05","guid":{"rendered":"http:\/\/blog.kolatzek.org\/wblog\/?p=998"},"modified":"2014-06-26T10:45:12","modified_gmt":"2014-06-26T08:45:12","slug":"icecoder","status":"publish","type":"post","link":"https:\/\/blog.kolatzek.org\/wblog\/998\/icecoder","title":{"rendered":"ICEcoder"},"content":{"rendered":"<h1>*{coder} &#8211; ein freier Online-HTML-Editor<\/h1>\n<p>Text-basierte Dateien haben den gro\u00dfen Vorteil, dass sie mit jedem Text-Editor (wie Notepad, vim aber auch MS Word) bearbeitet werden k\u00f6nnen. In den wenigsten F\u00fcllen ist ein solches Werkzeug ausreichend. Komfort-Funktionen wie <em>Syntax-Highlighting<\/em>, <em>Code Snippets<\/em>, <em>Autocomplete<\/em> oder <em>Syntax-Pr\u00fcfung<\/em> nehmen einem Entwickler viel Arbeit ab und erlauben die Konzentration auf das Wesentliche. Es ist somit nicht wirklich verwunderlich, dass Profis spezielle Programme verwenden oder bestimmte Pr\u00e4ferenzen haben. Solche Werkzeuge k\u00f6nnen recht teuer sein. Es gibt sie aber auch &#8211; Open Source seit Dank &#8211; gratis.<\/p>\n<p><!--more--><\/p>\n<h2>Live und online<\/h2>\n<p>Kein Webentwickler w\u00fcrde in einem lebenden System arbeiten, doch es gibt Szenarien, die einen Online-Eingriff rechtfertigen. Dies kann die Entwicklung von klickbaren Design-Vorschl\u00e4gen sein, die Fehlersuche im Staging-Bereich (auf einem vergleichbar ausgestatteten Server), die Entwicklung von sonstigen Prototypen oder Anpassungen vor der Freigabe der Seite. Bei offline-Editoren &#8211; auf dem Rechner des Entwicklers heimisch &#8211; muss jede Datei\u00e4nderung automatisch auf den Server gespiegelt werden. Ist der Laptop gerade nicht verf\u00fcgbar, wird die Handhabung schwierig. An dieser Stelle kn\u00fcpft der Online-Editor <a href=\"http:\/\/icecoder.net\/\"><strong>ICEcoder<\/strong><\/a> von Matt Pass an. Es ist eine Webanwendung, die einige Open-Source-Bibliotheken verwendet und zu einem Projektmanagement-Tool mit einem leistungsstarken Editor verbindet. Es ist nicht so minimalistisch, wie <a href=\"https:\/\/github.com\/scripted-editor\/scripted\">Scripted<\/a> und l\u00e4sst sich wesentlich besser mit der Maus bedienen. Im Gegensatz zu <a href=\"http:\/\/www.xosystem.org\/home\/applications_websites\/xosystem_website\/xoside_EN.php\">XOSIDE<\/a> wird es weiter entwickelt und ist am ehesten mit <a href=\"http:\/\/brackets.io\/\">Brackets<\/a> vergleichbar &#8211; wenn auch nicht der Zahl der Funktionen nach.<\/p>\n<h3>Die Voraussetzungen<\/h3>\n<p>Auf der Benutzerseite wird ein moderner Browser mit Javascript-Unterst\u00fctzung erwartet. Es muss nicht der neueste Chrome sein, &#8222;IE &gt;= 9&#8220; w\u00e4re hingegen angebracht. Theoretisch ist auch die Verwendung auf dem Tablet m\u00f6glich, gestaltet sich in der Praxis jedoch meist als sehr umst\u00e4ndlich und tr\u00e4ge.<\/p>\n<p>Auf der Serverseite wird PHP 5.3+ erwartet. Wichtig sind auch die Zugriffsrechte, die &#8211; weil vom Apache her gelesen und geschrieben wird &#8211; beim Systembenutzer desselben Webservers liegen m\u00fcssen: die zu bearbeitenden Ordner und Dateien sollten vom Apache als Benutzer oder von seiner Gruppe geschrieben werden k\u00f6nnen (was aus Sicherheitsgr\u00fcnden in einem Live-System nie der Fall sein sollte). (<em>Weitere frei zu gebenden Ordner befinden sich im Installationsverzeichnis von ICEcoder selbst: &#8218;backups&#8216;, &#8218;lib&#8216; und &#8218;test&#8216;.<\/em>) Notfalls sollte man an diese zwei Zeilen denken:<\/p>\n<pre><code>chmod g+rwX DateiOderVerzeichnis\r\nchgrp www-data DateiOderVerzeichnis\r\n<\/code><\/pre>\n<p>&#8230; wobei <em>www-data<\/em> der Name der Apache-Gruppe aus <em>APACHE_RUN_GROUP<\/em> ist. Damit \u00e4ndert der Besitzer oder der Administrator unter Unixen die Berechtigungen.<\/p>\n<h3>Die Installation<\/h3>\n<p>Die Routine beschr\u00e4nkt sich auf das Entpacken des heruntergeladenen <a href=\"http:\/\/icecoder.net\/download-zip\">ZIP-Archivs<\/a> oder das Clonen des <a href=\"https:\/\/github.com\/mattpass\/ICEcoder\">Repos<\/a> per<\/p>\n<pre><code>git clone https:\/\/github.com\/mattpass\/ICEcoder.git\r\n<\/code><\/pre>\n<p>in ein Verzeichnis Ihrer Wahl. Es sollte <strong>kein<\/strong> Unterverzeichnis vom DocumentRoot der zu bearbeitenden Seite sein. Ein passender Eintrag in der Konfiguration von Apache macht dieses Werkzeug f\u00fcr alle Dom\u00e4nen verf\u00fcgbar. Gl\u00fcckliche Debian\/Ubuntu-Admins legen zu diesem Zweck diese Einstellungsdatei unter \/etc\/apache2\/conf.d\/ICEcoder.conf ab:<\/p>\n<pre><code>    Alias \/_coder \/Pfad\/zu\/ICEcoder\/\r\n    &lt;Directory \/Pfad\/zu\/ICEcoder\/&gt;\r\n            AuthType Basic\r\n            AuthName \"Login zum Editor\"\r\n            AuthUserFile \/Pfad\/zur\/Passwortdatei\r\n            Require valid-user\r\n    &lt;\/Directory&gt;\r\n<\/code><\/pre>\n<p>f\u00fcr die Nutzer aus einer .htpasswd-Datei oder:<\/p>\n<pre><code>    Alias \/_coder \/Pfad\/zu\/ICEcoder\/\r\n    &lt;Directory \/Pfad\/zu\/ICEcoder\/&gt;\r\n            AuthType Basic\r\n            AuthName \"Login zum Editor\"\r\n            AuthPAM_Enabled On\r\n            AuthPAM_FallThrough Off\r\n            AuthBasicAuthoritative Off\r\n            AuthUserFile \/dev\/null\r\n            Require valid-user\r\n    &lt;\/Directory&gt;\r\n<\/code><\/pre>\n<p>im Falle von Authentifizierung der echten Unix-User.<\/p>\n<p>Damit wird der ICEcoder (nach einem Neustart des Webservers) unter dem absoluten Pfad <strong>\/_coder\/<\/strong> erreichbar. Es ist doppelt vor Missbrauch gesch\u00e4tzt:<\/p>\n<ul>\n<li>Durch Apaches Basic-Authentfizierung und<\/li>\n<li>Durch ein Passwort, dass man beim ersten Start des ICEcoders festlegen soll. (<em>Zum Deaktivieren &#8211; s.u.<\/em>)<\/li>\n<\/ul>\n<p>(Nat\u00fcrlich sind auch andere Authentifizierungsmodi m\u00f6glich. Die Passwort-basierende Authentifizierung sollte immer \u00fcber eine sichere Verbindung laufen.) Wer keinen Mi\u00dfbrauch durch Bugs in PHP oder ICEcoder bef\u00fcrchtet, setzt ein schlichtes<\/p>\n<pre><code>Alias \/_coder \/Pfad\/zu\/ICEcoder\/\r\n<\/code><\/pre>\n<p>ein. Denn auch die IP-basierte Zugangsbeschr\u00e4nkungen lassen sich in der Software selbst regeln. Man kann auch ohne die Authentifizierung im ICEcoder arbeiten oder diese f\u00fcr den Multiuserbetrieb umschalten. Dazu Editiert man die selbsterkl\u00e4rende Datei<\/p>\n<pre><code>lib\/config___settings.php\r\n<\/code><\/pre>\n<p>im Pfad des ICEcoders.<\/p>\n<h2>Bin ich schon drin?<\/h2>\n<p>Ist man einmal im Reich des ICEcoders angekommen, sieht man links die Ordnerstruktur des DocumentRoot entsprechender Dom\u00e4ne, rechts den Editor mit Platz f\u00fcr viele Reiter. Bevor man mit den Ordnern und Dateien hantiert, lohnt ein Blick in die Einstellungen. Diese befinden sich &#8211; recht unscheinbar &#8211; oben rechts, zwischen dem Fragezeichen der Hilfe und dem Vollbild-Icon. Das kleine graue Zahnrad \u00f6ffnet ein modales Dialog-Fenster mit Informationen zur Installation und einigen Einstellungen. Darunter sind die Vorgaben f\u00fcr das Aussehen des Editors (&#8222;theme&#8220;), Zeilenumbruch (&#8222;line wrapping&#8220;), Einr\u00fcckung (&#8222;indent type&#8220; und &#8222;indent size&#8220;) sowie die Schriftgr\u00fc\u00dfe. Unter &#8222;assisting&#8220; w\u00e4hlt man die Einstellungen f\u00fcr die kleinen Helfer wie: Sichtbarkeit der Tabulatoren oder Tastenkombination f\u00fcr Auto-Complete. Im &#8222;security&#8220;-Bereich l\u00e4sst sich das Passwort \u00e4ndern, IP-Zugriffssperre einrichten oder einzelne Verzeichnisse vom Zugriff herausnehmen.<\/p>\n<h3>Die Verzeichnisstruktur<\/h3>\n<p>Im linken Bereich findet man eine sch\u00f6ne hierarchische Auflistung aller Dateien und Ordner. Interessant ist die Funktionalit\u00e4t des Explorers: Das Umbenennen, das L\u00f6schen oder das \u00f6ffnen ist per Icon oberhalb aber auch per Kontextmen\u00fc m\u00f6glich, welches sich per Klick mit der rechten Maustaste auf eine Datei \/ einen Ordner \u00f6ffnet. Ein Upload oder Download funktioniert nur per Men\u00fc. Wer sich voll und ganz auf das Coden konzentrieren will, kann den Dateiexplorer-Bereich ausblenden lassen, indem er auf das Vorh\u00e4ngeschloss klickt. (Eine passende Voreinstellung <strong>locked nav<\/strong> befindet sich in den Einstellungen.)<\/p>\n<h3>Editor &amp; more<\/h3>\n<p>Der Editor bietet viele interessante Funktionen eines Profi-Werkzeugs. Da w\u00e4ren:<\/p>\n<ul>\n<li>die Zeilennummerierung<\/li>\n<li>das Syntax-Highlighting (Stil in den Einstellungen w\u00e4hlbar)<\/li>\n<li>das Auf- und Zuklappen syntaktischer Einheiten (f\u00fcr DOM-\u00c4ste, if&#8217;s und Schleifen)<\/li>\n<li>die Syntax-Pr\u00fcfung (Vorsicht Falle! In HTML-Dateien nur HTML-Pr\u00fcfung, in JS-Dateien nur Javascript, in eingen Browsern erst nach dem \u00f6ffnen der Datei bzw. nach dem De- und erneuten Aktivieren von &#8222;Code assist&#8220; per Checkbox oberhalb des Editors)<\/li>\n<li>die Suche und das Ersetzen in allen, gerade offenen oder ausgew\u00e4hlten Dateien<\/li>\n<li>die Autovervollst\u00e4ndigung per <strong>STRG+Leerzeichen<\/strong> (eine Liste der zur Verf\u00fcgung stehenden Erg\u00e4nzungsm\u00f6glichkeiten wird im Zweifelsfall zur Auswahl angezeigt)<\/li>\n<\/ul>\n<p>Einige Tastenkombinationen machen das Leben leichter. Die <strong>ESC<\/strong>-Taste wird z.B. ihrem Namen gerecht: sie kommentiert die ausgew\u00e4hlte Stelle bzw. die Zeile, in der man sich befindet passend aus. <strong>STRG+ALT+1<\/strong> umh\u00fcllt den ausgew\u00e4hlten Text mit &lt;h1&gt; , <strong>STRG+ALT+i<\/strong> in ein &lt;i&gt;. Alle Kombinationen werden in der Hilfe (das wei\u00dfe Fragezeichen im grauen Kreis neben dem Icon der Einstellungen) erkl\u00e4rt.<\/p>\n<h4>Darf es ein wenig mehr sein?<\/h4>\n<p>Richtig Spa\u00df macht es erst, wenn einem viel Arbeit abgenommen wird. Das erreicht ICEcoder, indem er einige Plugins zur Verf\u00fcgung stellt. Am (per Voreinstellung) linken Rand taucht beim Dr\u00fcberfahren ein schwarzer vertikaler Balken auf. Das &#8222;<strong>+\/-<\/strong>&#8222;-Zeichen \u00f6ffnet das modale Dialogfenster mit einer noch recht \u00fcberschaubaren Liste von Erweiterungen auf.<\/p>\n<ul>\n<li><strong>Adminer<\/strong> ist ein leichtgewichtiger phpMyAdmin-Ersatz<\/li>\n<li>&#8222;<strong>CSS Beatify<\/strong>&#8220; macht per Klick auf das Plugin-Icon in der Plugin-Leiste aus einem CSS-Spaghetti im aktuell ge\u00f6ffneten CSS-Dokument einen ordentlichen Satz von Regeln<\/li>\n<li><strong>Emmet<\/strong> &#8211; das ehemalige &#8222;Zen Coding&#8220; d\u00fcrfte jedem Webentwickler hinreichend bekannt sein. Es wandelt <a href=\"http:\/\/docs.emmet.io\/cheat-sheet\/\">CSS-Path-\u00e4hnliche K\u00fcrzel<\/a> per <strong>STRG+E<\/strong> in ein sch\u00f6n strukturiertes HTML. &#8222;<em>lorem41<\/em>&#8220; wird dabei zum 41 Worte langen &#8222;Lorem ipsum&#8220; F\u00fcll-Text.<\/li>\n<li>der <strong>Farbselektor<\/strong> springt in CSS-Dateien dem Benutzer gerne zur Seite, in dem es kontextsensitiv die Farbe anzeigt und ein Farbauswahldialog bereitstellt<\/li>\n<li>das &#8222;<strong>Terminal<\/strong>&#8220; bietet eine TTY-Emulation an, die f\u00fcr kleine Aufgaben am Dateisystem ausreichend ist. (\u00f6ffnet ein neues Fenster und startet im Pfad des Plugins im ICEcoder, statt im DocumentRoot.)<\/li>\n<li>&#8222;<strong>Zip It!<\/strong>&#8220; Zipt auf Wunsch einzelne (im Explorer-Bereich ausgew\u00e4hlte) Ordner und legt sie in den &#8222;backup&#8220;-Ordner der ICEcoder-Installation ab, wo auch die halbst\u00e4ndlich erstellten Vollbackups des DocRoots ihren Platz finden.<\/li>\n<li>&#8222;<strong>SVG Edit<\/strong>&#8220; wirkt noch etwas unausgereift bzw. scheint Browser-abh\u00e4ngig zu reagieren und kann deshalb nicht ruhigen Gewissens empfohlen werden.<\/li>\n<li>&#8222;<strong>Window keys<\/strong>&#8220; hat nur f\u00fcr ICEcoder-Entwickler eine besondere Bedeutung<\/li>\n<li><strong>ICErepo<\/strong> erlaubt den Abgleich mit einem Github-Rpositorium<\/li>\n<\/ul>\n<h2>Wie kann ich mich Einbringen?<\/h2>\n<p>Open Source ist ein Geben und ein Nehmen. Das zunehmend inflation\u00e4r verwendete englische Wort bei solchen Programmen lautet &#8222;donate&#8220;. \u00dcber ein Freibier w\u00fcrde sich Matt sicher freuen, doch auch Tests und Bugfixes nimmt er gerne auf Github entgegen. F\u00fcr alle Entwickler stellt ICEcoder ein <a href=\"http:\/\/icecoder.net\/manual#api\">JavaScript-API<\/a> im Browser und die PHP-Unterst\u00fctzung auf dem Server bereit. Dem Forken steht also nichts im Wege!<\/p>\n<p>Dieser Artikel ist lizenziert unter: <a href=\"https:\/\/creativecommons.org\/licenses\/by-sa\/3.0\/deed.de\">CC-BY-SA 3.0<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>*{coder} &#8211; ein freier Online-HTML-Editor Text-basierte Dateien haben den gro\u00dfen Vorteil, dass sie mit jedem Text-Editor (wie Notepad, vim aber auch MS Word) bearbeitet werden k\u00f6nnen. In den wenigsten F\u00fcllen ist ein solches Werkzeug ausreichend. Komfort-Funktionen wie Syntax-Highlighting, Code Snippets, Autocomplete oder Syntax-Pr\u00fcfung nehmen einem Entwickler viel Arbeit ab und erlauben die Konzentration auf das [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_sitemap_exclude":false,"_sitemap_priority":"","_sitemap_frequency":"","ocean_post_layout":"","ocean_both_sidebars_style":"","ocean_both_sidebars_content_width":0,"ocean_both_sidebars_sidebars_width":0,"ocean_sidebar":"","ocean_second_sidebar":"","ocean_disable_margins":"enable","ocean_add_body_class":"","ocean_shortcode_before_top_bar":"","ocean_shortcode_after_top_bar":"","ocean_shortcode_before_header":"","ocean_shortcode_after_header":"","ocean_has_shortcode":"","ocean_shortcode_after_title":"","ocean_shortcode_before_footer_widgets":"","ocean_shortcode_after_footer_widgets":"","ocean_shortcode_before_footer_bottom":"","ocean_shortcode_after_footer_bottom":"","ocean_display_top_bar":"default","ocean_display_header":"default","ocean_header_style":"","ocean_center_header_left_menu":"","ocean_custom_header_template":"","ocean_custom_logo":0,"ocean_custom_retina_logo":0,"ocean_custom_logo_max_width":0,"ocean_custom_logo_tablet_max_width":0,"ocean_custom_logo_mobile_max_width":0,"ocean_custom_logo_max_height":0,"ocean_custom_logo_tablet_max_height":0,"ocean_custom_logo_mobile_max_height":0,"ocean_header_custom_menu":"","ocean_menu_typo_font_family":"","ocean_menu_typo_font_subset":"","ocean_menu_typo_font_size":0,"ocean_menu_typo_font_size_tablet":0,"ocean_menu_typo_font_size_mobile":0,"ocean_menu_typo_font_size_unit":"px","ocean_menu_typo_font_weight":"","ocean_menu_typo_font_weight_tablet":"","ocean_menu_typo_font_weight_mobile":"","ocean_menu_typo_transform":"","ocean_menu_typo_transform_tablet":"","ocean_menu_typo_transform_mobile":"","ocean_menu_typo_line_height":0,"ocean_menu_typo_line_height_tablet":0,"ocean_menu_typo_line_height_mobile":0,"ocean_menu_typo_line_height_unit":"","ocean_menu_typo_spacing":0,"ocean_menu_typo_spacing_tablet":0,"ocean_menu_typo_spacing_mobile":0,"ocean_menu_typo_spacing_unit":"","ocean_menu_link_color":"","ocean_menu_link_color_hover":"","ocean_menu_link_color_active":"","ocean_menu_link_background":"","ocean_menu_link_hover_background":"","ocean_menu_link_active_background":"","ocean_menu_social_links_bg":"","ocean_menu_social_hover_links_bg":"","ocean_menu_social_links_color":"","ocean_menu_social_hover_links_color":"","ocean_disable_title":"default","ocean_disable_heading":"default","ocean_post_title":"","ocean_post_subheading":"","ocean_post_title_style":"","ocean_post_title_background_color":"","ocean_post_title_background":0,"ocean_post_title_bg_image_position":"","ocean_post_title_bg_image_attachment":"","ocean_post_title_bg_image_repeat":"","ocean_post_title_bg_image_size":"","ocean_post_title_height":0,"ocean_post_title_bg_overlay":0.5,"ocean_post_title_bg_overlay_color":"","ocean_disable_breadcrumbs":"default","ocean_breadcrumbs_color":"","ocean_breadcrumbs_separator_color":"","ocean_breadcrumbs_links_color":"","ocean_breadcrumbs_links_hover_color":"","ocean_display_footer_widgets":"default","ocean_display_footer_bottom":"default","ocean_custom_footer_template":"","ocean_post_oembed":"","ocean_post_self_hosted_media":"","ocean_post_video_embed":"","ocean_link_format":"","ocean_link_format_target":"self","ocean_quote_format":"","ocean_quote_format_link":"post","ocean_gallery_link_images":"on","ocean_gallery_id":[],"footnotes":""},"categories":[8],"tags":[11,26,48,74,84,126],"class_list":["post-998","post","type-post","status-publish","format-standard","hentry","category-software","tag-apache","tag-css","tag-html","tag-opensource","tag-plugin","tag-web","entry"],"_links":{"self":[{"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/posts\/998","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/comments?post=998"}],"version-history":[{"count":9,"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/posts\/998\/revisions"}],"predecessor-version":[{"id":1033,"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/posts\/998\/revisions\/1033"}],"wp:attachment":[{"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/media?parent=998"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/categories?post=998"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/tags?post=998"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}