<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Web-Development on Janik von Rotz</title>
    <link>https://janikvonrotz.ch/categories/web-development/</link>
    <description>Recent content in Web-Development on Janik von Rotz</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Mon, 27 Apr 2026 17:24:30 +0200</lastBuildDate>
    <atom:link href="https://janikvonrotz.ch/categories/web-development/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>More commands for the terminal navigation</title>
      <link>https://janikvonrotz.ch/2026/04/27/more-commands-for-the-terminal-navigation/</link>
      <pubDate>Mon, 27 Apr 2026 17:24:30 +0200</pubDate>
      <guid>https://janikvonrotz.ch/2026/04/27/more-commands-for-the-terminal-navigation/</guid>
      <description>&lt;p&gt;Last Friday I added the terminal navigation. In the meantime I have added a few more commands.&lt;/p&gt;&#xA;&lt;p&gt;These are the new commands:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;rg &amp;lt;pattern&amp;gt;&lt;/code&gt;: Opens the search page passes the pattern as search term.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;cd footer&lt;/code&gt;: Lists navigation items of the footer.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;quit/q&lt;/code&gt;: Close the window.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;doom&lt;/code&gt;: Play doom.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Terminal navigation</title>
      <link>https://janikvonrotz.ch/2026/04/24/terminal-navigation/</link>
      <pubDate>Fri, 24 Apr 2026 08:52:27 +0200</pubDate>
      <guid>https://janikvonrotz.ch/2026/04/24/terminal-navigation/</guid>
      <description>&lt;p&gt;Inspired by &lt;a href=&#34;https://joelvonrotz.ch/&#34;&gt;my brothers new navigation&lt;/a&gt; I created my own custom navigation. In fact it is already live on my website. Once I my brother sees it, he will roll his eyes and think &amp;ldquo;What else did I expect!&amp;rdquo;. The new navigation is a terminal prompt!&lt;/p&gt;&#xA;&lt;p&gt;Here is a recap of how I built the new navigation.&lt;/p&gt;&#xA;&lt;h2 id=&#34;specification&#34;&gt;Specification&lt;/h2&gt;&#xA;&lt;p&gt;My initial thought was to simply show a a terminal screen instead of the navigation list. What I had in mind was something like this:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;user@debian:/~$ ls&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Home/ About/ Projects/ CV/ Contact/ Archive/ Tags/ Categories/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Instead of implementing a fully fetched terminal, I wanted to start easy and only support these commands:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;cd &lt;code&gt;&amp;lt;path&amp;gt;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;ls&lt;/li&gt;&#xA;&lt;li&gt;help&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Changing into a directory should switch the page. Processing the inputs will most likely require some javascript. However, I know the no-javascript folks out there and wanted to make is sure there is a fallback to the normal navigation if javascript is disabled or not supported.&lt;/p&gt;&#xA;&lt;h2 id=&#34;mockup&#34;&gt;Mockup&lt;/h2&gt;&#xA;&lt;p&gt;Instead of prompting the entire thing, I started out with simple mockup.&lt;/p&gt;&#xA;&lt;p&gt;In my Hugo theme I updated the file &lt;code&gt;layouts/partials/header.html&lt;/code&gt; with this:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;header&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;h1&lt;/span&gt;&amp;gt;{{ .Site.Title }}&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;h1&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;nav&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;style&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        #terminal-screen {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#66d9ef&#34;&gt;background-color&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;black&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#66d9ef&#34;&gt;color&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;white&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#66d9ef&#34;&gt;font-family&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;monospace&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#66d9ef&#34;&gt;font-size&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1.1&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;em&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#66d9ef&#34;&gt;padding&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;em&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#66d9ef&#34;&gt;padding-left&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1.3&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;em&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#66d9ef&#34;&gt;margin-top&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1.5&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;em&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        #terminal-screen &lt;span style=&#34;color:#f92672&#34;&gt;input&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#66d9ef&#34;&gt;font-size&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0.8&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;em&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#66d9ef&#34;&gt;border&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;none&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#66d9ef&#34;&gt;margin&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;em&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#66d9ef&#34;&gt;background&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;black&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#66d9ef&#34;&gt;color&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;white&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#66d9ef&#34;&gt;border-bottom&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;solid&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;white&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#66d9ef&#34;&gt;border-radius&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;unset&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;form&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;input&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;focus&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#66d9ef&#34;&gt;border&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;none&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;style&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;script&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;terminal-screen&amp;#34;&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;form&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;span&lt;/span&gt;&amp;gt;user@arch:/~$ &amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;span&lt;/span&gt;&amp;gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;input&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;text&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;placeholder&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;help&amp;#34;&lt;/span&gt; /&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;form&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt;&amp;gt;Write &amp;#39;ls&amp;#39; and hit enter to list navigation items. Use &amp;#39;cd &amp;amp;lt;item&amp;amp;gt;&amp;#39; to open the link.&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;p&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {{ range .Site.Menus.main }}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;a&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;href&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;{{ .URL }}&amp;#34;&lt;/span&gt;&amp;gt;{{ .Name }}&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;a&lt;/span&gt;&amp;gt;/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {{ end }}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {{ if .Site.Params.search }}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;a&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;href&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;{{ .Site.Params.search.url }}&amp;#34;&lt;/span&gt;&amp;gt;Search&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;a&lt;/span&gt;&amp;gt;/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {{ end }}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;nav&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;header&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And in result got this:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://janikvonrotz.ch/images/terminal-navigation-mockup.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;There is no functionality, it just shows what the entire thing should look like.&lt;/p&gt;&#xA;&lt;h2 id=&#34;implementation&#34;&gt;Implementation&lt;/h2&gt;&#xA;&lt;p&gt;Maybe it could have been implemented without javascript. Some people build entire &lt;a href=&#34;https://lyra.horse/x86css/&#34;&gt;compilers with html/css&lt;/a&gt; only! But I am not one of them. My initial prompt along the with the mockup code was this one:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Update the form and the help text to be hidden. Then add javascript that reveals the form and hides the navigation items. I want to make sure that the navigation works with and without javascript.&#xA;Further add javascript to process the form input. If the user enters help then show the help text. If the user enters list then show the navigation item. If the user enters &lt;code&gt;cd &amp;lt;item&amp;gt;&lt;/code&gt; open the link of the item. The input should not care about upper and lowercase letters.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The output not ok and the code and prompt required some tweaks. I updated my mockup:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Set an &lt;code&gt;id&lt;/code&gt; on every element.&lt;/li&gt;&#xA;&lt;li&gt;Replace the &lt;code&gt;p&lt;/code&gt; tag with &lt;code&gt;span&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;And extended the prompt:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Ask to not add comments to javascript code&lt;/li&gt;&#xA;&lt;li&gt;Use attribute &lt;code&gt;hidden&lt;/code&gt; and not the style&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Then the output was good enough and I could further reine the code. The final result is: &lt;a href=&#34;https://codeberg.org/janikvonrotz/hugo-new-css-theme/src/branch/main/layouts/partials/header.html&#34;&gt;https://codeberg.org/janikvonrotz/hugo-new-css-theme/src/branch/main/layouts/partials/header.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I very much like that the javascript code and style is embedded into this file. Of course I have many ideas on how to improve this thing, but I would like to hear from you the readers. So please share your though in the comments.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hide native tabs with Tree Style tabs for Firefox</title>
      <link>https://janikvonrotz.ch/2023/03/20/hide-native-tabs-with-tree-style-tabs-for-firefox/</link>
      <pubDate>Mon, 20 Mar 2023 17:15:22 +0100</pubDate>
      <guid>https://janikvonrotz.ch/2023/03/20/hide-native-tabs-with-tree-style-tabs-for-firefox/</guid>
      <description>&lt;p&gt;As the workspace for developers has moved almost entirely into the browser, browser extensions have become an integral part for customizing the workflow. Recently, I started to the use the Tree Style addons: &lt;a href=&#34;https://addons.mozilla.org/en-US/firefox/addon/tree-style-tab/&#34;&gt;https://addons.mozilla.org/en-US/firefox/addon/tree-style-tab/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;When using this extension, the native tab bar becomes obsolete. The following part of the post is an instruction on how to hide the native tab bar (which is a bit difficult).&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Type &lt;a href=&#34;about:support&#34;&gt;about:support&lt;/a&gt; into the address bar.&lt;/li&gt;&#xA;&lt;li&gt;Look for the &lt;em&gt;Profile Folder&lt;/em&gt; entry and click on &lt;em&gt;Open folder&lt;/em&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Create a file named &lt;code&gt;chrome/userChrome.css&lt;/code&gt; in the directory:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir chrome &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; touch chrome/userChrome.css&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;&#xA;&lt;li&gt;Populate the file with the following CSS code:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#main-window&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;tabsintitlebar&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;not&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;([&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;extradragspace&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;])&lt;/span&gt; #TabsToolbar&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;toolbar-items&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;opacity&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    pointer-events: &lt;span style=&#34;color:#66d9ef&#34;&gt;none&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#main-window:&lt;span style=&#34;color:#a6e22e&#34;&gt;not&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;([&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;tabsintitlebar&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;])&lt;/span&gt; #TabsToolbar {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;visibility&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;collapse&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;!important&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;#sidebar-box&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;sidebarcommand&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;treestyletab_piro_sakura_ne_jp-sidebar-action&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; #sidebar-header {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;display&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;none&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;tab&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;margin-left&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;margin-right&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;5&#34;&gt;&#xA;&lt;li&gt;Then type [about:config] into the address bar and set &lt;code&gt;toolkit.legacyUserProfileCustomizations.stylesheets&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Restart Firefox&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Now the native tab should be hidden. To reset the change simply remove the &lt;code&gt;userCrhome.css&lt;/code&gt; file.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Convert markdown wiki Links to html links</title>
      <link>https://janikvonrotz.ch/2020/09/03/convert-markdown-wiki-links-to-html-links/</link>
      <pubDate>Thu, 03 Sep 2020 11:35:27 +0200</pubDate>
      <guid>https://janikvonrotz.ch/2020/09/03/convert-markdown-wiki-links-to-html-links/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://de.wikipedia.org/wiki/Hilfe:Links&#34;&gt;Wiki-Links&lt;/a&gt; &lt;code&gt;[[ ]]&lt;/code&gt; are not part of the markdown specification, but are often used by markdown editors such as &lt;a href=&#34;https://obsidian.md/&#34;&gt;Obsidian&lt;/a&gt;. As they are not supported by most markdown converters we need to convert the wiki links on our own.&lt;/p&gt;&#xA;&lt;p&gt;To generate beautiful documentations from my markdown files, I&amp;rsquo;m using &lt;a href=&#34;docsify.js.org/&#34;&gt;docsify&lt;/a&gt;. Docsify is a singe page application that reads and converts the content from markdown files inside a folder. It allows to plugin code in the the markdown render process via hooks. The code I&amp;rsquo;ve written to convert wiki links can be used for other platforms as well. So there is no need to use docsify in order to understand what is going on.&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s have a look on how I have converted to wiki links to html a-tags. Create a folder on the command line and have the latest &lt;code&gt;node&lt;/code&gt; version at your hand.&lt;/p&gt;&#xA;&lt;p&gt;Create JavaScript file as showed below:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;convert.js&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;convert&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;content&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// convert wiki image links&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;wikiImage&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;/!\[\[([^\]]*)\]\]/g&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;content&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;content&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;replace&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;wikiImage&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;lt;img src=&amp;#34;/assets/$1&amp;#34; \/&amp;gt;&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// convert wiki links&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;link&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;/\[\[([^\]]*)\]\]/g&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;matches&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;content&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;match&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;link&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; []&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;matches&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;match&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;matches&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;title&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;match&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;match&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;/\[\[([^\]]*)/&lt;/span&gt;)[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;href&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;anchor&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;match&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;indexOf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;#&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;anchor&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;match&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;match&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;/#([^\||\]]*)/&lt;/span&gt;)[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#75715e&#34;&gt;// Convert to docsify id&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;anchor&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;anchor&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;toLowerCase&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;replace&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;/ /g&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;-&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;match&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;indexOf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;|&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;href&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;match&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;match&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;/\[\[([^\||#]*)/&lt;/span&gt;)[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;title&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;match&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;match&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;/\|(.*)\]\]/&lt;/span&gt;)[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// build the a-tag&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;content&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;content&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;replace&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;match&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;`&amp;lt;a href=&amp;#34;/#/&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;href&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;href&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;title&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;anchor&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;?id=&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;anchor&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;title&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;lt;/a&amp;gt;`&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;content&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;module&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;exports&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;convert&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;convert.js&lt;/code&gt; export a function that expects markdown content and then converts all the wiki links.&lt;/p&gt;&#xA;&lt;p&gt;Here follows short demonstration on how to use this function.&lt;/p&gt;&#xA;&lt;p&gt;Create a markdown file in the same folder.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;content.md&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-md&#34; data-lang=&#34;md&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[[Lorem ipsum#dolor|Lorem dope]] dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est [[Lorem ipsum]] dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et [[dolore|lorem]] magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est [[#dolor|Lorem]] ipsum dolor sit amet.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And this test file as well.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;test.js&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fs&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;require&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;fs&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;convert&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;require&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;./convert&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fs&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;readFile&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;./content.md&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;utf8&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;convert&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Finally, run the test with the command &lt;code&gt;node test.js&lt;/code&gt; and you should get these results:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-txt&#34; data-lang=&#34;txt&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;a href=&amp;#34;/#/Lorem ipsum?id=dolor&amp;#34;&amp;gt;Lorem dope&amp;lt;/a&amp;gt; dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est &amp;lt;a href=&amp;#34;/#/Lorem ipsum&amp;#34;&amp;gt;Lorem ipsum&amp;lt;/a&amp;gt; dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et &amp;lt;a href=&amp;#34;/#/dolore&amp;#34;&amp;gt;lorem&amp;lt;/a&amp;gt; magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est &amp;lt;a href=&amp;#34;/#/Lorem?id=dolor&amp;#34;&amp;gt;Lorem&amp;lt;/a&amp;gt; ipsum dolor sit amet.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The links have been converted according to my custom a-tag build.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My Webapp Tech Stack</title>
      <link>https://janikvonrotz.ch/2019/07/01/2019-07-01-my-webapp-tech-stack/</link>
      <pubDate>Mon, 01 Jul 2019 11:38:43 +0200</pubDate>
      <guid>https://janikvonrotz.ch/2019/07/01/2019-07-01-my-webapp-tech-stack/</guid>
      <description>&lt;p&gt;In this post I am going to present you my personal tech stack for web development. I want to tell more about the technologies and methodologies I am using to build web applications. In that sense it would be glad if you share your stack and methodologies in the comment section.&lt;/p&gt;&#xA;&lt;h2 id=&#34;methodology&#34;&gt;Methodology&lt;/h2&gt;&#xA;&lt;p&gt;My technology-independent methodology and approach to software development:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Web apps over native apps (aka progressive web apps)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://12factor.net/&#34;&gt;The twelfe-factor app&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://de.slideshare.net/AmazonWebServices/getting-started-with-aws-lambda-and-the-serverless-cloud/29&#34;&gt;Serverless compute manifesto&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;technology&#34;&gt;Technology&lt;/h2&gt;&#xA;&lt;p&gt;For every layer of a modern web application I focus on one technology.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Language:&lt;/strong&gt; JavaScript&lt;/p&gt;&#xA;&lt;p&gt;JavaScript has become an ubiquitous programming language for web development.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;UI Framework:&lt;/strong&gt; &lt;a href=&#34;https://reactjs.org/&#34;&gt;React&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;React is the most popular user interface framework. Whereas Angular dominates the enterprise domain, React is the first choice for consumer apps.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;UI Components:&lt;/strong&gt; &lt;a href=&#34;https://material-ui.com/&#34;&gt;Material-UI&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Material-UI unites Google&amp;rsquo;s design principles and React&amp;rsquo;s versatile components. Designing components and implementing a visual design that adheres to best practices has become a major challenge. Using Material-UI components makes it trivial to build an attractive UI within a short amount of time.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Client State:&lt;/strong&gt; &lt;a href=&#34;https://www.apollographql.com/docs/react/&#34;&gt;Apollo Client&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Apollo is a &lt;a href=&#34;https://graphql.org/&#34;&gt;GraphQL&lt;/a&gt; implementation. The Apollo client makes it easy to manage the &lt;a href=&#34;https://www.apollographql.com/docs/react/essentials/local-state/&#34;&gt;local state&lt;/a&gt; of a React app.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Backend:&lt;/strong&gt; &lt;a href=&#34;https://www.apollographql.com/docs/apollo-server/&#34;&gt;Apollo Server&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Apollo provides the flexibility and versatility required for designing and implementing complex APIs. The schema language makes it easy to define a solid and coherent data model. Whereas resolvers offer the necessary flexibility to connect the schema to the business and persistence layer.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Database:&lt;/strong&gt; &lt;a href=&#34;https://www.mongodb.com/&#34;&gt;MongoDB&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The NoSQL approach has become outdated. However, if you design the schema with GraphQL there is no need in applying a schema to the database.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Platform:&lt;/strong&gt; &lt;a href=&#34;https://zeit.co/now&#34;&gt;Zeit Now&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Zeit&amp;rsquo;s Now offers serverless deployments with little overhead for configuration. It supports monorepos and makes deployments automatically globally available.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;DB Platform:&lt;/strong&gt; &lt;a href=&#34;https://mlab.com/&#34;&gt;mLab&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;mLab is the most popular MongoDB hosting platform. I especially appreciate their sandbox plan.&lt;/p&gt;&#xA;&lt;h2 id=&#34;minor-tech&#34;&gt;Minor Tech&lt;/h2&gt;&#xA;&lt;p&gt;Package manager: &lt;a href=&#34;https://yarnpkg.com&#34;&gt;yarn&lt;/a&gt;&lt;br&gt;&#xA;Auth Token: &lt;a href=&#34;https://www.apollographql.com/docs/react/essentials/local-state/&#34;&gt;JSON Web Token&lt;/a&gt;&lt;br&gt;&#xA;App Config: &lt;a href=&#34;https://github.com/motdotla/dotenv&#34;&gt;dotenv&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Autodeploy to Github Pages with Travis CI</title>
      <link>https://janikvonrotz.ch/2015/11/11/autodeploy-to-github-pages-with-travisci/</link>
      <pubDate>Wed, 11 Nov 2015 09:37:05 +0000</pubDate>
      <guid>https://janikvonrotz.ch/2015/11/11/autodeploy-to-github-pages-with-travisci/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://pages.github.com/&#34;&gt;Github pages&lt;/a&gt; are a common way to create a website for your open-source project.&#xA;Github provides a website generator tool which simply reads the README file from your repository.&#xA;The big disadvantage is that there&amp;rsquo;s no auto deployment for your this kind of website. You always have to run the generator manually.&#xA;To solve this problem we need a third-party computing engine that automatically updates our page. This is the perfect job for &lt;a href=&#34;https://travis-ci.org&#34;&gt;Travis CI&lt;/a&gt;.&#xA;Travis CI is a Github integrated continuous testing platform that runs tests for different development frameworks. It triggers a test whenever you make a commit on your Travis registered repository. We will use Travis to update our page whenever we make a commit to our repository.&lt;/p&gt;&#xA;&lt;p&gt;Now I will show you how you can setup this kind of autodeploy. This guide assumes you have a repository on Github that uses npm and gulp to create a website into a folder named &lt;code&gt;out&lt;/code&gt;. Make sure to update &amp;lt;&amp;gt; tags in the instruction steps.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;First create a &lt;code&gt;deploy.sh&lt;/code&gt; file in your repository.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This script will be executed by Travis CI later. The idea of the script is to create an &lt;code&gt;out&lt;/code&gt; folder which holds the website that is deployed to the Github page repository.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/bin/bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set -e &lt;span style=&#34;color:#75715e&#34;&gt;# exit with nonzero exit code if anything fails&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# clear and re-create the out directory&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rm -rf out &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; exit 0;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir out;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# run commands to build the website in the out folder&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;npm install -g gulp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;npm install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gulp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# go to the out directory and create a *new* Git repo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd out&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git init&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# inside this git repo we&amp;#39;ll pretend to be a new user&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git config user.name &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Travis CI&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git config user.email &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;name&amp;gt;@&amp;lt;domain&amp;gt;.com&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# The first and only commit to this new Git repo contains all the&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# files present with the commit message &amp;#34;Deploy to GitHub Pages&amp;#34;.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git add .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git commit -m &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Deploy to GitHub Pages&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Force push from the current repo&amp;#39;s master branch to the remote&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# repo&amp;#39;s gh-pages branch. (All previous history on the gh-pages branch&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# will be lost, since we are overwriting it.) We redirect any output to&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# /dev/null to hide any sensitive credential data that might otherwise be exposed.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git push --force --quiet &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;GH_TOKEN&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;@&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;GH_REF&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; master:gh-pages &amp;gt; /dev/null 2&amp;gt;&amp;amp;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As already mention this script uses npm to installs gulp and dependencies and also runs the gulp tasks that will in result create the website.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Next register your repository on: &lt;a href=&#34;https://travis-ci.org/&#34;&gt;https://travis-ci.org/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Then go to &lt;a href=&#34;https://github.com/settings/tokens&#34;&gt;https://github.com/settings/tokens&lt;/a&gt; and create a access token with default rights for Travis CI.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Now format the token like this: &lt;code&gt;GH_TOKEN=&amp;lt;your_github_username&amp;gt;:&amp;lt;your_token&amp;gt;&lt;/code&gt;&#xA;Travis will use this token to update the git repository. To provide the token to Travis we can set environment variables. This environment variables are declared in the &lt;code&gt;.travis.yml&lt;/code&gt; file.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Install the Travis cli.&#xA;You can either install it with npm: &lt;a href=&#34;https://www.npmjs.com/package/travis-encrypt&#34;&gt;https://www.npmjs.com/package/travis-encrypt&lt;/a&gt;&#xA;Or as ruby gem: &lt;a href=&#34;https://github.com/travis-ci/travis.rb&#34;&gt;https://github.com/travis-ci/travis.rb&lt;/a&gt;&#xA;Either way the Travis cli can encrypt strings by using the Travis ssl certificate of your repository.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Open a command line in your repository (you have to be in your repository otherwise Travis cannot encrypt anything).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Run &lt;code&gt;travis encrypt GH_TOKEN=&amp;lt;your_github_username&amp;gt;:&amp;lt;your_token&amp;gt;&lt;/code&gt; and copy the encrypted string.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Create a &lt;code&gt;.travis.yml&lt;/code&gt; in your repository and paste the code below with your encrypted string.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;script: bash ./deploy.sh&#xA;env:&#xA;  global:&#xA;  - GH_REF: github.com/&amp;lt;username&amp;gt;/&amp;lt;repository&amp;gt;.git&#xA;  - secure: &amp;#34;&amp;lt;encrypted_token&amp;gt;&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This configuration file will tell Travis what to do and set environment variables which will passed to our &lt;code&gt;deploy.sh&lt;/code&gt; script file.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Make a commit on your repository, go to &lt;a href=&#34;https://travis-ci.org/username/repository&#34;&gt;https://travis-ci.org/username/repository&lt;/a&gt; and make sure the build is successful.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If you want to see an example in action open this repository: &lt;a href=&#34;https://github.com/HaloCustomEdition/Halo&#34;&gt;https://github.com/HaloCustomEdition/Halo&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Finally WhatsApp has grown up</title>
      <link>https://janikvonrotz.ch/2015/02/26/finally-whatsapp-has-grown-up/</link>
      <pubDate>Thu, 26 Feb 2015 17:31:00 +0000</pubDate>
      <guid>https://janikvonrotz.ch/2015/02/26/finally-whatsapp-has-grown-up/</guid>
      <description>&lt;p&gt;Since the dawn of the internet I&amp;rsquo;ve been waiting for this feature. After every other chat app competitor (see line or telegram) have launched their web app, WhatsApp finally is available for your browser. Simply go to &lt;a href=&#34;https://web.whatsapp.com/&#34;&gt;https://web.whatsapp.com/&lt;/a&gt;, scan a QR-code and start chatting with your friends.&lt;/p&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;</description>
    </item>
    <item>
      <title>Let’s write a Laravel application - Fulltext search</title>
      <link>https://janikvonrotz.ch/2015/02/13/lets-write-a-laravel-application-fulltext-search/</link>
      <pubDate>Fri, 13 Feb 2015 09:59:27 +0000</pubDate>
      <guid>https://janikvonrotz.ch/2015/02/13/lets-write-a-laravel-application-fulltext-search/</guid>
      <description>&lt;p&gt;This time I want to show you how you add a search functionality to your Laravel application that accomplishes the following features:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Fulltext search in Eloquent model&lt;/li&gt;&#xA;&lt;li&gt;Define searchable columns&lt;/li&gt;&#xA;&lt;li&gt;Define result relevance for searchable columns&lt;/li&gt;&#xA;&lt;li&gt;Customize the look of the search results based on the model&lt;/li&gt;&#xA;&lt;li&gt;Independent search bar.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;To search in Laravel models we will use this &lt;a href=&#34;https://github.com/nicolaslopezj/searchable&#34;&gt;searchable trait&lt;/a&gt; from &lt;a href=&#34;https://github.com/nicolaslopezj&#34;&gt;Nicolás López&lt;/a&gt;. Install it with composer.&lt;/p&gt;&#xA;&lt;p&gt;First add a new route to handle our search requests.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;app/routes.php&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Route&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;get&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;search&amp;#39;&lt;/span&gt;, [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;as&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;search&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;uses&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;MemberController@search&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;]);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;app/models/*.php&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;For every model that will be searchable you have to add the searchable trait and define the searchable columns and their result relevance. You can get the details of this step from the searchable trait documentation (link above).&lt;/p&gt;&#xA;&lt;p&gt;You can use any controller of your app to handle the search requests as long you&amp;rsquo;ll add the following function to this controller.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;app/controllers/MemberController.php&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;search&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;$query &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Input&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;get&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;q&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;$route &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Input&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;get&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;route&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;preg_match&lt;/span&gt;( &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/^members.*/&amp;#39;&lt;/span&gt;, $route)){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;$model &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Member&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;$route &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;members&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;}&lt;span style=&#34;color:#66d9ef&#34;&gt;elseif&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;preg_match&lt;/span&gt;( &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/^categories.*/&amp;#39;&lt;/span&gt;, $route)){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;$model &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Category&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;$route &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;categories&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;}&lt;span style=&#34;color:#66d9ef&#34;&gt;elseif&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;preg_match&lt;/span&gt;( &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/^boats.*/&amp;#39;&lt;/span&gt;, $route)){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;$model &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Boat&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;$route &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;boats&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;}&lt;span style=&#34;color:#66d9ef&#34;&gt;elseif&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;preg_match&lt;/span&gt;( &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/^damages.*/&amp;#39;&lt;/span&gt;, $route)){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;$model &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Damage&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;$route &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;damages&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;}&lt;span style=&#34;color:#66d9ef&#34;&gt;elseif&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;preg_match&lt;/span&gt;( &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/^trips.*/&amp;#39;&lt;/span&gt;, $route)){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;$model &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Trip&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;$route &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;trips&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;}&lt;span style=&#34;color:#66d9ef&#34;&gt;elseif&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;preg_match&lt;/span&gt;( &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/^users.*/&amp;#39;&lt;/span&gt;, $route)){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;$model &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;User&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;$route &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;users&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;}&lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;$model &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Member&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;$route &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;members&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;$results &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; $model&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;search&lt;/span&gt;($query)&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;get&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;View&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;make&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;search.index&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;compact&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;results&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;model&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;route&amp;#39;&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For every route you want to provide the search functionality you have to add a case and define the model and redirect route.&lt;/p&gt;&#xA;&lt;p&gt;Now add a new view to display our search results and customize the look of the search results for every model type.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;app/views/search/index.blade.php&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;@&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;extends&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;default.master&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;@&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;section&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;content&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;@&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;foreach&lt;/span&gt;($results &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; $result)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;href&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;{{ URL::to(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;$route&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;.&amp;#39;/&amp;#39; . &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;$result-&amp;gt;id&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; . &amp;#39;/edit&amp;#39;) }}&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;@&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;($model&lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Member&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;article&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;h2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;{{$result&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;firstname&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;$result&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;lastname&lt;/span&gt;}}&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;h2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;p&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;{{$result&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;$result&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;email&lt;/span&gt;}}&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;p&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;article&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;@&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;endif&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;@&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;($model&lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Category&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;article&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;h2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;{{$result&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;}}&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;h2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;p&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;{{$result&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;}}&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;p&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;article&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;@&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;endif&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;@&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;endforeach&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;@&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;stop&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Finally we add the search bar to a default blade template.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;app/views/default/navigation.blade.php&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  {{&lt;span style=&#34;color:#a6e22e&#34;&gt;Form&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;open&lt;/span&gt;([&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;url&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;search&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;method&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;GET&amp;#39;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;class&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;navbar-form navbar-right&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;role&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;search&amp;#39;&lt;/span&gt;])}}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;div&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;form-group&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {{ &lt;span style=&#34;color:#a6e22e&#34;&gt;Form&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;hidden&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;route&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;isset&lt;/span&gt;($route) &lt;span style=&#34;color:#f92672&#34;&gt;?&lt;/span&gt; $route &lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Route&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getCurrentRoute&lt;/span&gt;()&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getPath&lt;/span&gt;())}}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {{ &lt;span style=&#34;color:#a6e22e&#34;&gt;Form&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;text&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;q&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;, [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;class&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;form-control&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;placeholder&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Search&amp;#39;&lt;/span&gt;])}}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;div&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      {{ &lt;span style=&#34;color:#a6e22e&#34;&gt;Form&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;button&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;, [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;type&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;submit&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;class&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;btn btn-default glyphicon glyphicon-search&amp;#39;&lt;/span&gt;]) }}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {{&lt;span style=&#34;color:#a6e22e&#34;&gt;Form&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;close&lt;/span&gt;()}}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If done you&amp;rsquo;re are ready to run.&lt;/p&gt;</description>
    </item>
    <item>
      <title>O3M 56 - TripTrap</title>
      <link>https://janikvonrotz.ch/2015/02/13/o3m-56-triptrap/</link>
      <pubDate>Fri, 13 Feb 2015 09:43:36 +0000</pubDate>
      <guid>https://janikvonrotz.ch/2015/02/13/o3m-56-triptrap/</guid>
      <description>&lt;p&gt;Nope this isn&amp;rsquo;t a trap playlist. That&amp;rsquo;s a delicious series of relaxed tracks to make your day even more pleasant.&lt;/p&gt;&#xA;&lt;iframe &#xA;    width=&#34;100%&#34;&#xA;    height=&#34;450&#34;&#xA;    scrolling=&#34;no&#34;&#xA;    frameborder=&#34;no&#34;&#xA;    allow=&#34;autoplay&#34;&#xA;    src=&#34;https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/playlists/66885315&amp;color=%23ff5500&amp;auto_play=false&amp;hide_related=false&amp;show_comments=true&amp;show_user=true&amp;show_reposts=false&amp;show_teaser=true&#34;&#xA;&gt;&lt;/iframe&gt;&#xA;</description>
    </item>
    <item>
      <title>Let’s write a Laravel application - Form validation for your backend and frontend</title>
      <link>https://janikvonrotz.ch/2015/02/10/lets-write-a-laravel-application-form-validation-for-your-backend-and-frontend/</link>
      <pubDate>Tue, 10 Feb 2015 00:18:29 +0000</pubDate>
      <guid>https://janikvonrotz.ch/2015/02/10/lets-write-a-laravel-application-form-validation-for-your-backend-and-frontend/</guid>
      <description>&lt;p&gt;Form validation is always part of your data process workflow. With Laravel you can to validate the input on the controller or the eloquent model. To provide a seamless user experience it&amp;rsquo;s better to validate a form with JavaScript in the frontend. However due to security reasons you have provide a backend validation, otherwise it would possible to inject non valid data.&lt;/p&gt;&#xA;&lt;p&gt;Luckily &lt;a href=&#34;https://github.com/bllim&#34;&gt;Bilal Gültekin&lt;/a&gt; came up with this awesome &lt;a href=&#34;https://github.com/bllim/laravel-to-jquery-validation&#34;&gt;solution&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The ideas is simply avoid writing validation rules twice (backend and frontend) and rather reuse the backend validation rules by adding them as parameter to our frontend form.&#xA;The extension requires the &lt;a href=&#34;https://github.com/jzaefferer/jquery-validation&#34;&gt;jquery validation plugin&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s get started by installing the required assets.&lt;/p&gt;&#xA;&lt;p&gt;Install the Laravel extension with composer.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;composer.json&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;#34;require&amp;#34;: {&#xA;&#x9;&amp;#34;bllim/laravel-to-jquery-validation&amp;#34;: &amp;#34;*&amp;#34;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Register the new service provider.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;app/config/app.php&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;#39;providers&amp;#39; =&amp;gt; array(&#xA;&#x9; &amp;#39;Bllim\LaravelToJqueryValidation\LaravelToJqueryValidationServiceProvider&amp;#39;,&#xA;)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The extension comes with a configuration file and two assets. You have to publish them first.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;php artisan config:publish bllim/laravel-to-jquery-validation&#xA;php artisan asset:publish bllim/laravel-to-jquery-validation&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In the folder &lt;strong&gt;public/packages/bllim/laravel-to-jquery-validation/&lt;/strong&gt; you&amp;rsquo;ll find now two JavaScript files. Include them in your form view. You can also use bower to maintain the jquery validation plugin.&#xA;In addition you have to add this piece of JavaScript to enable the frontend validation for your form.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;$&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;form&amp;#39;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;validate&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now that we are ready let&amp;rsquo;s add the validation rules to our model.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;app/model/Member.php&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Member&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;extends&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Eloquent&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; $rules &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;firstname&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;required&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;lastname&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;required&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;email&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;required|email&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As I&amp;rsquo;ve said we have to validate the input data in backend anyway, so here&amp;rsquo;s an example of the store function.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;app/controllers/MemberController.php&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;MemberController&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;extends&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;\BaseController&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;store&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;$validator &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Validator&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;make&lt;/span&gt;($data &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Input&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;all&lt;/span&gt;(), &lt;span style=&#34;color:#a6e22e&#34;&gt;Member&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;$rules);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; ($validator&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fails&lt;/span&gt;()) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Redirect&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;back&lt;/span&gt;()&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;withErrors&lt;/span&gt;($validator)&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;withInput&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;Input&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;except&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;password&amp;#39;&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;$member&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;create&lt;/span&gt;($data);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Session&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;flash&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;message&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Successfully created Member!&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Redirect&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;to&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;members&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In your form view you can now set the validation rules from your model.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;{{Form::setValidation(Member::$rules);}}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here&amp;rsquo;s an example of an compatible form definition for this kind of validation.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;{{ Form::open(array(&amp;#39;url&amp;#39; =&amp;gt; &amp;#39;members&amp;#39;)) }}&#xA;  &amp;lt;div class=&amp;#34;form-group&amp;#34;&amp;gt;&#xA;  {{ Form::label(&amp;#39;firstname&amp;#39;, &amp;#39;Firstname&amp;#39;) }}&#xA;  {{ Form::text(&amp;#39;firstname&amp;#39;, Input::old(&amp;#39;firstname&amp;#39;), array(&amp;#39;class&amp;#39; =&amp;gt; &amp;#39;form-control&amp;#39;)) }}&#xA;  &amp;lt;/div&amp;gt;&#xA;  &amp;lt;div class=&amp;#34;form-group&amp;#34;&amp;gt;&#xA;  {{ Form::label(&amp;#39;lastname&amp;#39;, &amp;#39;Lastname&amp;#39;) }}&#xA;  {{ Form::text(&amp;#39;lastname&amp;#39;, Input::old(&amp;#39;lastname&amp;#39;), array(&amp;#39;class&amp;#39; =&amp;gt; &amp;#39;form-control&amp;#39;)) }}&#xA;  &amp;lt;/div&amp;gt;&#xA;  &amp;lt;div class=&amp;#34;form-group&amp;#34;&amp;gt;&#xA;  {{ Form::label(&amp;#39;email&amp;#39;, &amp;#39;E-Mail&amp;#39;) }}&#xA;  {{ Form::text(&amp;#39;email&amp;#39;, Input::old(&amp;#39;email&amp;#39;), array(&amp;#39;class&amp;#39; =&amp;gt; &amp;#39;form-control&amp;#39;)) }}&#xA;  &amp;lt;/div&amp;gt;&#xA;  {{ Form::submit(&amp;#39;Save&amp;#39;, array(&amp;#39;class&amp;#39; =&amp;gt; &amp;#39;btn btn-primary&amp;#39;)) }}&#xA;{{ Form::close() }}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;From now on the input of your form will be validated in the front- and backend with the same rules.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Let’s write a Laravel application - Sortable table</title>
      <link>https://janikvonrotz.ch/2015/02/04/lets-write-a-laravel-application-sortable-table/</link>
      <pubDate>Wed, 04 Feb 2015 14:33:28 +0000</pubDate>
      <guid>https://janikvonrotz.ch/2015/02/04/lets-write-a-laravel-application-sortable-table/</guid>
      <description>&lt;p&gt;I want to show how you can create a sortable table and reuse the code with any model you want to display.&#xA;As we don&amp;rsquo;t want to write any function or definition twice or more, let&amp;rsquo;s extend the BaseController class with the function to get sorted items from a variable model.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;app/controllers/BaseController.php&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;BaseController&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;extends&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Controller&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;protected&lt;/span&gt;  $sortby;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;protected&lt;/span&gt;  $order;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;protected&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getSortedItems&lt;/span&gt;($model)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    $this&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sortby&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Input&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;get&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;sortby&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    $this&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;order&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Input&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;get&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;order&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; ($this&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sortby&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; $this&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;order&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; $model&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;orderBy&lt;/span&gt;($this&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sortby&lt;/span&gt;, $this&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;order&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;get&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; $model&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;all&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can now call this function in every controller. Here&amp;rsquo;s an example with a Member controller.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;app/controllers/MemberController.php&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;MemberController&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;extends&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;\BaseController&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    $items &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; $this&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;getSortedItems&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Member&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    $sortby &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; $this&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sortby&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    $order &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; $this&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;order&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    $action &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Route&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;currentRouteAction&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    $columns &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Member&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;$columns;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;View&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;make&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;members.index&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;compact&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;items&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;sortby&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;order&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;columns&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;action&amp;#39;&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The default.index view is supposed to be used by multiple controllers with different models to display.&#xA;This requirement leads to variable header definitions for our sortable table.&#xA;That&amp;rsquo;s why we define the columns we want to display in the model as showed below.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;app/models/Member.php&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Member&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;extends&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Eloquent&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; $columns &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ID&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Firstname&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;firstname&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Lastname&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;lastname&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;E-Mail&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;email&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;From now on you can use the next piece of code to create a sortable table in your views.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;views/members/index.blade.php&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;table&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;table&amp;#34;&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;tr&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  @foreach(array_keys($columns) as $column)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;th&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    @if ($sortby == $columns[$column] &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; $order == &amp;#39;asc&amp;#39;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {{link_to_action(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      $action,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      $column, [&amp;#39;sortby&amp;#39; =&amp;gt; $columns[$column],&amp;#39;order&amp;#39; =&amp;gt; &amp;#39;desc&amp;#39;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    )}}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    @else&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {{link_to_action(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      $action,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      $column, [&amp;#39;sortby&amp;#39; =&amp;gt; $columns[$column],&amp;#39;order&amp;#39; =&amp;gt; &amp;#39;asc&amp;#39;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    )}}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    @endif&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;td&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  @endforeach&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;tr&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;@foreach($items as $member)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;tr&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;td&lt;/span&gt;&amp;gt;{{$member-&amp;gt;id}}&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;td&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;td&lt;/span&gt;&amp;gt;{{$member-&amp;gt;firstname}}&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;td&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;td&lt;/span&gt;&amp;gt;{{$member-&amp;gt;lastname}}&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;td&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;td&lt;/span&gt;&amp;gt;{{$member-&amp;gt;email}}&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;td&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;tr&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;@endforeach&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;table&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Let’s write a Laravel application – Project template</title>
      <link>https://janikvonrotz.ch/2015/01/30/lets-write-a-laravel-application-project-template/</link>
      <pubDate>Fri, 30 Jan 2015 10:28:03 +0000</pubDate>
      <guid>https://janikvonrotz.ch/2015/01/30/lets-write-a-laravel-application-project-template/</guid>
      <description>&lt;p&gt;In web development there are tons of programs and tools and due to that also complex and very different development strategies.&#xA;Luckily dependency handling got a lot easier. For my Laravel project setup we will use 3 different package managers.&#xA;Every package manager of course manages a different resource, we will use composer for php packages, npm for everything related to Node.js and Bower for web packages.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://janikvonrotz.ch/wp-content/uploads/2015/01/Web-Technologies-1024x766.png&#34; alt=&#34;Web Technologies&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;By following the instructions of this guide you&amp;rsquo;ll get a very advanced Laravel project template with the following features:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Live Reloading of your browser.&lt;/li&gt;&#xA;&lt;li&gt;Twitter Bootstrap included.&lt;/li&gt;&#xA;&lt;li&gt;Automatic minification and bundling of CSS and JavaScript files.&lt;/li&gt;&#xA;&lt;li&gt;The most recent web technologies at your hand.&lt;/li&gt;&#xA;&lt;li&gt;A default blade template ready to run.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;install&#34;&gt;Install&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;1. Bitnami Nginx Webstack&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;First of all we need a php executable and a MySQL server. The most convienient way to deploy these services is by installing a predefined stack.&#xA;Actually we don&amp;rsquo;t need a webserver, however if you&amp;rsquo;re using phpmyadmin it&amp;rsquo;s already onboard.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://bitnami.com/stack/nginx&#34;&gt;Get Bitnami Nginx Webstack&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;2. Composer&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;As I&amp;rsquo;ve said composer is a php package manager. As Laravel is a composer package we need this tool to deploy the Laravel project. You can get composer &lt;a href=&#34;&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://getcomposer.org/&#34;&gt;Get Composer&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;3. Node.js&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The npm package manager, which will provide us Grunt and Bower is part of Node.js.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://nodejs.org/&#34;&gt;Get Node.js&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;4. Atom.io&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;As a web developer you might have heard of Sublime, well suck that! Atom.io is out of question way better. It&amp;rsquo;s opensource, it&amp;rsquo;s customizable down to the core and runs on the most promising technologies. If you&amp;rsquo;re using Sublime and reading this, the time has come to flush your workflow and get startet with Atom.io.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://atom.io/&#34;&gt;Get Atom.io&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;configure&#34;&gt;Configure&lt;/h1&gt;&#xA;&lt;p&gt;We assume you have installed all the tools above properly and ready to run.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;1. Install Laravel&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;First download the Laravel package with composer. It doesn&amp;rsquo;t matter where you&amp;rsquo;ll do this. This package will globally available on your host.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;composer global require &amp;quot;laravel/installer=~1.1&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Navigate to a directory with your command line where you want to install your first Laravel project.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;composer create-project laravel/laravel &amp;lt;project name&amp;gt; --prefer-dist&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;2. Install Bower and Bootstrap&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Navigate into your project directory.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;cd &amp;lt;project name&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Create a npm configuration file.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;npm init&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Then install Bower with npm.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;npm install -g bower&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Create a Bower configuration file.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;bower init&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;And install Bootstrap and jQuery.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;bower install bootstrap jquery --save-dev&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;3. Install and Configure Grunt&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Install the Grunt command line tool with npm.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;npm install -g grunt-cli&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Then install the Grunt packages.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;npm install grunt --save-dev&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Now add the additional Grunt packages to your npm config file &lt;code&gt;package.json&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;#34;devDependencies&amp;#34;: {&#xA;    &amp;#34;grunt&amp;#34;: &amp;#34;~0.4.5&amp;#34;,&#xA;    &amp;#34;grunt-contrib-copy&amp;#34;: &amp;#34;~0.7.0&amp;#34;,&#xA;    &amp;#34;grunt-contrib-cssmin&amp;#34;: &amp;#34;~0.11.0&amp;#34;,&#xA;    &amp;#34;grunt-contrib-uglify&amp;#34;: &amp;#34;~0.7.0&amp;#34;,&#xA;    &amp;#34;grunt-contrib-watch&amp;#34;: &amp;#34;~0.6.1&amp;#34;,&#xA;    &amp;#34;grunt-bg-shell&amp;#34;: &amp;#34;~2.3.1&amp;#34;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you did so run the npm installer.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;npm install&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Create a Grunt task file &lt;code&gt;Gruntfile.js&lt;/code&gt; in the root directory of your project.&lt;/p&gt;&#xA;&lt;p&gt;And add this content.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;module.exports = function(grunt){&#xA;&#xA;  grunt.initConfig({&#xA;    pkg: grunt.file.readJSON(&amp;#39;package.json&amp;#39;),&#xA;&#xA;    cssmin: {&#xA;      files: {&#xA;        src: [&#xA;          &amp;#39;public/style.css&amp;#39;,&#xA;          &amp;#39;bower_components/bootstrap/dist/css/bootstrap.css&amp;#39;&#xA;        ],&#xA;        dest: &amp;#39;public/all.min.css&amp;#39;&#xA;      }&#xA;    },&#xA;&#xA;    uglify: {&#xA;      files: {&#xA;        src: [&#xA;          &amp;#39;public/app.js&amp;#39;,&#xA;          &amp;#39;bower_components/jquery/dist/jquery.js&amp;#39;,&#xA;          &amp;#39;bower_components/bootstrap/dist/js/bootstrap.js&amp;#39;&#xA;        ],&#xA;        dest:  &amp;#39;public/all.min.js&amp;#39;&#xA;      }&#xA;    },&#xA;&#xA;    bgShell: {&#xA;      _defaults: {&#xA;        bg: true&#xA;      },&#xA;      runLaravel: {&#xA;        cmd: &amp;#39;php artisan serve&amp;#39;&#xA;      }&#xA;    },&#xA;&#xA;    watch:{&#xA;      css:{&#xA;        files: [&#xA;          &amp;#39;/public/style.css&amp;#39;&#xA;        ],&#xA;        tasks: [&amp;#39;cssmin&amp;#39;]&#xA;      },&#xA;      js: {&#xA;        files: [&#xA;          &amp;#39;/public/app.js&amp;#39;&#xA;        ],&#xA;        tasks: [&amp;#39;uglify&amp;#39;]&#xA;      },&#xA;      livereload: {&#xA;        options: {&#xA;            livereload: true&#xA;        },&#xA;        files: [&#xA;            &amp;#39;app/views/**/*.php&amp;#39;,&#xA;            &amp;#39;public/*.css&amp;#39;,&#xA;            &amp;#39;public/*.js&amp;#39;&#xA;        ]&#xA;      }&#xA;    }&#xA;  });&#xA;&#xA;  grunt.loadNpmTasks(&amp;#39;grunt-contrib-copy&amp;#39;);&#xA;  grunt.loadNpmTasks(&amp;#39;grunt-contrib-cssmin&amp;#39;);&#xA;  grunt.loadNpmTasks(&amp;#39;grunt-contrib-watch&amp;#39;);&#xA;  grunt.loadNpmTasks(&amp;#39;grunt-contrib-uglify&amp;#39;);&#xA;  grunt.loadNpmTasks(&amp;#39;grunt-bg-shell&amp;#39;);&#xA;&#xA;  grunt.registerTask(&amp;#39;default&amp;#39;, [&amp;#39;cssmin&amp;#39;,&amp;#39;uglify&amp;#39;,&amp;#39;bgShell:runLaravel&amp;#39;,&amp;#39;watch&amp;#39;]);&#xA;&#xA;};&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This file provides the following features:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Bundling and minifcation of your Bootstrap and custom CSS files and Bootstrap, jQuery and custom JavaScript files.&lt;/li&gt;&#xA;&lt;li&gt;It will start Laravel webserver.&lt;/li&gt;&#xA;&lt;li&gt;Provide the Live Reload feature.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;As always you can extend the Grund configuration according to your requirements. Some my want to recompile the Bootstrap less files with an updated fonts folder or add php unitiy testing.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;4. Configure Laravel&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;In order to make use of the Live Reload feature, you can either add this JavaScript to your template.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;script src=&amp;quot;//localhost:35729/livereload.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Or (what I recommend) download and install following blade template files.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://janikvonrotz.ch/wp-content/uploads/2015/01/Laravel-default-template.zip&#34;&gt;Download template files&lt;/a&gt; or get the latest version &lt;a href=&#34;https://gist.github.com/janikvonrotz/68f4da6bc6a4374d9f9b&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Add these files to a new folder called default in the app views folder &lt;code&gt;&amp;lt;project name&amp;gt;\app\views\default&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Then delete the file &lt;code&gt;&amp;lt;project name\app\views\home.php&lt;/code&gt; and add a new file &lt;code&gt;&amp;lt;project name&amp;gt;\app\views\home.blade.php&lt;/code&gt; with the following content.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;@extends(&amp;#39;default.master&amp;#39;)&#xA;@section(&amp;#39;content&amp;#39;)&#xA;Content goes here&#xA;@stop&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This template assumes that you distinct between a local and a productive environment. You have to update two configuration files before you&amp;rsquo;ll run your project.&lt;/p&gt;&#xA;&lt;p&gt;In the file &lt;code&gt;&amp;lt;project name&amp;gt;\boostrap\start.php&lt;/code&gt; add your hostname to the detect environment array.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$env = $app-&amp;gt;detectEnvironment(array(&#xA;&#x9;&amp;#39;local&amp;#39; =&amp;gt; array(&amp;#39;&amp;lt;yourhostname&amp;gt;&amp;#39;,&amp;#39;&amp;lt;anotherhostname&amp;gt;&amp;#39;),&#xA;));&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you want to connect to a MySQL database you also of to update the local environment database config file &lt;code&gt;&amp;lt;project name&amp;gt;\app\config\local\database.php&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;5. Run the Application&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now we are ready to run the whole project. You can start the development server by typing &lt;code&gt;Grunt&lt;/code&gt; into your command line. Navigate to &lt;a href=&#34;http://localhost:8000&#34;&gt;http://localhost:8000&lt;/a&gt; and you should see a simple Boostrap site.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Let’s write a Laravel application - Introduction</title>
      <link>https://janikvonrotz.ch/2015/01/28/lets-write-a-laravel-application-introduction/</link>
      <pubDate>Wed, 28 Jan 2015 18:36:10 +0000</pubDate>
      <guid>https://janikvonrotz.ch/2015/01/28/lets-write-a-laravel-application-introduction/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m going to develop a &lt;a href=&#34;http://laravel.com/&#34;&gt;Laravel&lt;/a&gt; application with my friends. The application is called RowBook. It will be a simple tool to log all the trips of the &lt;a href=&#34;http://www.seeclub-luzern.ch/&#34;&gt;row club Lucerne&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;As I&amp;rsquo;ve never used Laravel or another php framework before, I will share my first time experience here on my blog.&#xA;Whenever I have to learn about a new technology I&amp;rsquo;m looking for some basic books and videos. For Laravel I&amp;rsquo;ve found the perfect beginners eBook, where you&amp;rsquo;ll learn the most fundamental basics.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;!-- raw HTML omitted --&gt;Download - Getting Started with Laravel 4&lt;!-- raw HTML omitted --&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;And I also recommend to watch the YouTube videos from phpacademy. They&amp;rsquo;ll tell you how you can build a simple blog engine from scratch.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=4CaoPX7J-o4&amp;amp;list=FLyivmCJn96QC1rqthNlmMyA&amp;amp;index=2&#34;&gt;Watch - Simple Laravel Blog&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the next post I&amp;rsquo;ll show you how I&amp;rsquo;ve setup my first Laravel project. Despite it&amp;rsquo;s the first time I&amp;rsquo;m using Laravel you can expect a pretty good project template ;)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Thank you internet for: Peek by UserTesting</title>
      <link>https://janikvonrotz.ch/2014/05/15/thank-your-internet-for-peek-by-usertesting/</link>
      <pubDate>Thu, 15 May 2014 12:44:00 +0000</pubDate>
      <guid>https://janikvonrotz.ch/2014/05/15/thank-your-internet-for-peek-by-usertesting/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://peek.usertesting.com/&#34;&gt;Peek&lt;/a&gt; is a free service offered by &lt;a href=&#34;http://www.usertesting.com/&#34;&gt;User Testing&lt;/a&gt; where you can get real people to test your websites usability.&lt;/p&gt;&#xA;&lt;p&gt;I have to admit, first I didn&amp;rsquo;t really believe that there will be real person visiting my site and give my a feedback. But within in one hour I have been suprised.&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s the video done by a random guy from the internet:&lt;/p&gt;&#xA;&lt;p&gt;&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;Your browser does not support the video tag.&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;&#xA;&lt;p&gt;Thank you UserTesting for this awesome service!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Disable WordPress plugins manually</title>
      <link>https://janikvonrotz.ch/2014/04/29/disable-wordpress-plugins-manually/</link>
      <pubDate>Tue, 29 Apr 2014 08:05:06 +0000</pubDate>
      <guid>https://janikvonrotz.ch/2014/04/29/disable-wordpress-plugins-manually/</guid>
      <description>&lt;p&gt;With the WordPress 3.9 Update I also received several plugin updates for my blogs.&lt;/p&gt;&#xA;&lt;p&gt;One Update was for WP-Piwik. As I&amp;rsquo;ve updated the plugin I got several errors and the site become unreachable.&lt;/p&gt;&#xA;&lt;p&gt;So the only way the to disable this malicious plugin was either via ftp or with phpMyAdmin.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve decided to do it with phpMyAdmin.&lt;/p&gt;&#xA;&lt;p&gt;The settings for the plugin activation are stored in the &lt;code&gt;wp_options&lt;/code&gt; table.&lt;/p&gt;&#xA;&lt;p&gt;To get the data for the activated plugins run this sql statement:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; wp_options &lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; option_name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;active_plugins&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;By editing the option_value field you&amp;rsquo;ll get a semicolon separated list of plugins and by simply removing a value you&amp;rsquo;ll deactivate the plugin.&lt;/p&gt;&#xA;&lt;p&gt;For WP-Piwik it was:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;i:&lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;;s:&lt;span style=&#34;color:#ae81ff&#34;&gt;21&lt;/span&gt;:&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;wp-piwik/wp-piwik.php&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Project Naptha - OCR well done</title>
      <link>https://janikvonrotz.ch/2014/04/24/project-naptha-ocr-well-done/</link>
      <pubDate>Thu, 24 Apr 2014 07:59:02 +0000</pubDate>
      <guid>https://janikvonrotz.ch/2014/04/24/project-naptha-ocr-well-done/</guid>
      <description>&lt;p&gt;On the &lt;a href=&#34;http://projectnaptha.com/&#34;&gt;Project Naptha homepage&lt;/a&gt; you can download a Google chrome extension that extends your browsers text copy function.&lt;/p&gt;&#xA;&lt;p&gt;With the said extension you can copy text within images. Naptha recognises text inside images in real-time.&lt;/p&gt;&#xA;&lt;p&gt;This is truly amazing, isn&amp;rsquo;t it? They went even further! You can erase text from images and translate text in images to different languages.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://janikvonrotz.ch/wp-content/uploads/2014/04/Project-Naptha-image-text-erased.gif&#34; alt=&#34;Project Naptha image text erased&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Update Hostfile with Chrome/Firefox Plugin</title>
      <link>https://janikvonrotz.ch/2014/03/10/update-hostfile-with-chromefirefox-plugin/</link>
      <pubDate>Mon, 10 Mar 2014 10:56:12 +0000</pubDate>
      <guid>https://janikvonrotz.ch/2014/03/10/update-hostfile-with-chromefirefox-plugin/</guid>
      <description>&lt;p&gt;Domain-ip mapping is essential in developing new websites as you have to test URLs without changing DNS entries.&lt;/p&gt;&#xA;&lt;p&gt;Yet I&amp;rsquo;ve always update the local host file which requires in most cases a restart of the browser. This is a busy an troublesome issue.&lt;/p&gt;&#xA;&lt;p&gt;Luckily there&amp;rsquo;s for everything a plugin, tool or script, this also goes for host file updates via Chrome/Firefox plugin.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;!-- raw HTML omitted --&gt;HostAdmin&lt;!-- raw HTML omitted --&gt; plugin enables you to update the local host file in you browser in real time without the need to restart the browser.&#xA;This plugins saves a lot of time when switching domain-ip mappings for different environments.&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s a screenshot of the Chrome extension which shows how easy it is to switch on/off an domain-ip mapping.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://janikvonrotz.ch/wp-content/uploads/2014/03/Update-Hosfile-Plugin.jpg&#34;&gt;&lt;img src=&#34;https://janikvonrotz.ch/wp-content/uploads/2014/03/Update-Hosfile-Plugin.jpg&#34; alt=&#34;Update Hosfile Plugin&#34;&gt;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Disable Trackbacks and Pingbacks in WordPress</title>
      <link>https://janikvonrotz.ch/2014/02/27/disable-trackbacks-and-pingbacks-in-wordpress/</link>
      <pubDate>Thu, 27 Feb 2014 08:24:50 +0000</pubDate>
      <guid>https://janikvonrotz.ch/2014/02/27/disable-trackbacks-and-pingbacks-in-wordpress/</guid>
      <description>&lt;p&gt;Trackbacks and Pingbacks can be abused for spam and even &lt;!-- raw HTML omitted --&gt;DDOS attacks&lt;!-- raw HTML omitted --&gt;.&lt;/p&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;Settings&amp;gt;Discussion&amp;gt;Allow link notifications from other blogs (pingbacks and trackbacks)&lt;/p&gt;&#xA;&lt;p&gt;&lt;!-- raw HTML omitted --&gt;This will disable trackbacks and pingbacks for all future posts, but not for existing posts.&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;Unfortunately I couldn’t find a way to do this in bulk, or via the &amp;ldquo;Quick Edit&amp;rdquo; screen, so you&amp;rsquo;ll have to go through each page and manually uncheck the option under the &amp;ldquo;Discussion&amp;rdquo; tab.&lt;/p&gt;&#xA;&lt;p&gt;Or if you&amp;rsquo;re able to access the MySQL server with phpMyAdmin or a MySQL CLI you can run this SQL statement.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Globally disable pingbacks/trackbacks for all users&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;UPDATE&lt;/span&gt; wp_posts &lt;span style=&#34;color:#66d9ef&#34;&gt;SET&lt;/span&gt; ping_status &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;closed&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Don&amp;rsquo;t be confused by the column name &lt;code&gt;wp_posts&lt;/code&gt; it also contains pages.&lt;/p&gt;&#xA;&lt;p&gt;&lt;!-- raw HTML omitted --&gt;After completing these 3 steps, you should have no more trackbacks or pingbacks on your WordPress site.&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;&#xA;&lt;!-- raw HTML omitted --&gt;</description>
    </item>
    <item>
      <title>Update Url within WordPress Post Content</title>
      <link>https://janikvonrotz.ch/2014/02/10/update-url-within-wordpress-post-content/</link>
      <pubDate>Mon, 10 Feb 2014 13:06:55 +0000</pubDate>
      <guid>https://janikvonrotz.ch/2014/02/10/update-url-within-wordpress-post-content/</guid>
      <description>&lt;p&gt;Recently I&amp;rsquo;ve change the url for one of my GitHub projects.&lt;/p&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;As you might know, I&amp;rsquo;ve used this url in several posts.&#xA;&lt;!-- raw HTML omitted --&gt;In order to make this obsolete links I have to replace them in every posts.&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;&#xA;&lt;p&gt;This easy done with the following SQL query:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;UPDATE&lt;/span&gt; wp_posts &lt;span style=&#34;color:#66d9ef&#34;&gt;SET&lt;/span&gt; post_content &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;REPLACE&lt;/span&gt; (post_content, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://www.oldsiteurl.com&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://www.newsiteurl.com&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To run this SQL script you have to able to access the WordPress MySQL database.&lt;/p&gt;&#xA;&lt;p&gt;To get you further into the possibilities of manipulating the WordPress database content with queries, I&amp;rsquo;ve collected the most useful queries in a gist: &lt;!-- raw HTML omitted --&gt;&lt;a href=&#34;https://gist.github.com/8914414&#34;&gt;https://gist.github.com/8914414&lt;/a&gt;&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
