<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[snajdr.de - Medium]]></title>
        <description><![CDATA[Some more or less technical thoughts by Martin Snajdr - Medium]]></description>
        <link>https://medium.com/snajdr?source=rss----8f200099b75---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>snajdr.de - Medium</title>
            <link>https://medium.com/snajdr?source=rss----8f200099b75---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Wed, 23 Sep 2026 10:08:38 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/snajdr" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Lost Android app signing key from IntelliJ?]]></title>
            <link>https://medium.com/snajdr/lost-android-app-signing-key-from-intellij-82a342745d1f?source=rss----8f200099b75---4</link>
            <guid isPermaLink="false">https://medium.com/p/82a342745d1f</guid>
            <category><![CDATA[android]]></category>
            <category><![CDATA[security]]></category>
            <category><![CDATA[intellij]]></category>
            <category><![CDATA[passwords]]></category>
            <dc:creator><![CDATA[Martin Snajdr]]></dc:creator>
            <pubDate>Fri, 15 Sep 2017 16:17:55 GMT</pubDate>
            <atom:updated>2017-09-15T16:18:03.097Z</atom:updated>
            <content:encoded><![CDATA[<p><em>This short hint from the anonymous author of </em><a href="https://swenotes.wordpress.com"><em>https://swenotes.wordpress.com</em></a><em> just saved my life, so I decided to share it:</em></p><h4>Find my lost Android app signing key from IntelliJ</h4><p>Over time I seemed to have lost my keystore password, that I needed to sign some Android app. Still had the keystore file though. IntelliJ also had the keystore password stored. So how do I get the password from IntelliJ?</p><p>There is a handy utility on github for this <a href="https://github.com/corneliudascalu/intellij-decrypt">https://github.com/corneliudascalu/intellij-decrypt</a>. If you have the master password for IntelliJ, it decrypts all passwords stored in IntelliJ. Using this I was able to recover the signing password for my keystore.</p><p>This requires the security.xml file from IntelliJ where the passwords are stored. Where is this stored on OSX? Googleing for it, this seems to vary. None of the given options seem to make an sense. So we try “find / -type f -name security.xml”. This finds it in “/Users/myname/Library/Preferences/IdeaIC14/options/security.xml”. That’s how I finally got the keystore password.</p><p><em>Originally published at </em><a href="https://swenotes.wordpress.com/2015/05/28/find-my-lost-android-app-signing-key-from-intellij/"><em>swenotes.wordpress.com</em></a><em> on May 28, 2015.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=82a342745d1f" width="1" height="1" alt=""><hr><p><a href="https://medium.com/snajdr/lost-android-app-signing-key-from-intellij-82a342745d1f">Lost Android app signing key from IntelliJ?</a> was originally published in <a href="https://medium.com/snajdr">snajdr.de</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[firebase-cli or workbox-cli freeze terminal]]></title>
            <link>https://medium.com/snajdr/firebase-cli-or-workbox-cli-freeze-terminal-72a15b4a2a56?source=rss----8f200099b75---4</link>
            <guid isPermaLink="false">https://medium.com/p/72a15b4a2a56</guid>
            <category><![CDATA[workboxjs]]></category>
            <category><![CDATA[pwa]]></category>
            <category><![CDATA[firebase]]></category>
            <category><![CDATA[nodejs]]></category>
            <dc:creator><![CDATA[Martin Snajdr]]></dc:creator>
            <pubDate>Wed, 06 Sep 2017 10:31:18 GMT</pubDate>
            <atom:updated>2017-09-06T10:31:17.896Z</atom:updated>
            <content:encoded><![CDATA[<p>Recently I’m exploring and using Google’s <a href="https://firebase.google.com/">Firebase</a> and <a href="https://workboxjs.org/">WorkboxJS</a> to create PWAs more and more <em>(and I really like it)</em>.</p><p>Google provides command line tools for those (<a href="https://github.com/firebase/firebase-tools">firebase-cli</a> an <a href="https://workboxjs.org/how_tos/workbox-cli.html">workbox-cli</a>), which makes live super easy. But since you stumbled across this article, you propably already try to use them.</p><p>There are several commands such as firebase serve or workbox inject:manifest (pretty basic ones) which led my terminal window to freeze completely, not even Ctrl+C was working anymore.</p><h4>Solution:</h4><p>It seems to be a bug with nodeJS Version 8.1.0. Changing the version to another one, using nvm for instance, solved it.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=72a15b4a2a56" width="1" height="1" alt=""><hr><p><a href="https://medium.com/snajdr/firebase-cli-or-workbox-cli-freeze-terminal-72a15b4a2a56">firebase-cli or workbox-cli freeze terminal</a> was originally published in <a href="https://medium.com/snajdr">snajdr.de</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Setting up Shopware from GitHub]]></title>
            <link>https://medium.com/snajdr/setting-up-shopware-from-github-3911d42fbcc6?source=rss----8f200099b75---4</link>
            <guid isPermaLink="false">https://medium.com/p/3911d42fbcc6</guid>
            <category><![CDATA[php]]></category>
            <category><![CDATA[shop-online]]></category>
            <category><![CDATA[shopware]]></category>
            <category><![CDATA[git]]></category>
            <category><![CDATA[ecommerce-web-development]]></category>
            <dc:creator><![CDATA[Martin Snajdr]]></dc:creator>
            <pubDate>Mon, 04 Sep 2017 21:11:11 GMT</pubDate>
            <atom:updated>2017-02-03T16:30:30.988Z</atom:updated>
            <content:encoded><![CDATA[<p>As I might have mentioned before (but maybe somewhere else), <a href="http://www.shopware.de/">Shopware</a> is my new favorite in terms of OpenSource-eCommerce solutions.</p><p>Since it is written in PHP, hosted on GitHub, setting up a new shop by cloning from <a href="https://github.com/ShopwareAG/shopware-4">Shopware’s GitHub</a> sounds like no big deal at first and it is quite easy indeed, but there are some hidden traps.</p><p>Basically you have to follow the steps also mentioned in their GitHub-Readme in the section called “<a href="https://github.com/ShopwareAG/shopware-4#start-hacking">Start Hacking</a>”. I am going through the following steps, altering some of the recommended and adding some more:</p><h4>1) Get your copy</h4><p>There are two main-approaches of getting the files into your project. Which one to use depends on your personal favor, but also on the Git Hosting Service you or your company is using.</p><p><strong>1a) Use your own fork</strong></p><p>If you are using GitHub, this is the way to go. Fork the repository and clone it on your local machine.</p><pre>git clone git@github.com:[YOUR USERNAME]/shopware-4.git</pre><p><strong>1b) Use an additional remote and branch</strong></p><p>If you don’t use GitHub and prefer hosting your repositories on your own server or for example at Bitbucket (as I do), you can’t fork a GitHub-Repo. So you have to clone it onto your local machine and add some additional remote and branch to achieve something comparable.</p><p>First clone the original repo.</p><pre>git clone <a href="https://github.com/ShopwareAG/shopware-4.git">https://github.com/ShopwareAG/shopware-4.git</a></pre><p>Add a new remote and push.</p><pre>git remote add myrepo git@bitbucket.org:myusername/myrepo.git<br>git push myrepo master</pre><p>Add and checkout your branch.</p><pre>git branch mybranch<br>git push myrepo mybranch<br>git checkout mybranch</pre><p>Using this method you can merge a new Shopware version into your branch from the original Shopware Repo at any time without having to merge anything by hand.</p><h4>2) Build/seed Database</h4><p>Now it’s time to create your config files, build and seed the database. I’m not going into details about the config files here, I think you’ll manage this by yourself, if you did it up to here.</p><p>To build and pre-fill the database use the provided script in the build-directory.</p><pre>php build/ApplyDeltas.php</pre><p>On a server environment you may prefer using <a href="http://ant.apache.org/">Apache Ant</a> for creating config and database as Shopware provides scripts for this as well. I’ll cover this in another post in the future.</p><p>Until now almost everything goes according to Shopware’s Readme and at this point you have your shop up and running (if you have configured your webserver etc., which I assume). <em>Yay! </em>Start coding, theming, skinning and go crazy…</p><p><strong>BUT WAIT! </strong>As soon as you try to install plugins from the Shopware Community Store, even those which come <em>preinstalled </em>like PayPal, or try to update existing plugins you’ll run into some strange errors sooner or later, with not really helpful error messages such as “<em>Given file is no zip archive”. </em>I explained the issue in more detail in this (german) post at the Shopware forum: <a href="http://forum.shopware.de/post81016.html#p81016">http://forum.shopware.de/post81016.html#p81016</a></p><p>But you can solve this issue by a simple step:</p><h4>3) Set your version</h4><p>As mentioned in the <a href="http://forum.shopware.de/post81016.html#p81016">forum post</a> these problems are caused by a missing version number in <em>/engine/Shopware/Application.php</em>. In this file, there is only a placeholder <em>____VERSION____</em>, which is presumably replaced by hand, when the Shopware crew is wrapping up a new release build.<br>So to fix this error, simply replace the placeholder with a valid version number and you are set:</p><pre>…<br>class Shopware extends Enlight_Application<br> {<br> const VERSION = ‘4.1.4&#39;;<br> const VERSION_TEXT = ‘’;<br> const REVISION = ‘201312061433&#39;;<br>…</pre><p>With this fix you can use the whole Plugin-Management without any problems.</p><blockquote>This post was originally published <a href="http://www.martinsnajdr.de/setting-up-shopware-from-github/">on my blog</a> on 23rd of february, 2014.</blockquote><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3911d42fbcc6" width="1" height="1" alt=""><hr><p><a href="https://medium.com/snajdr/setting-up-shopware-from-github-3911d42fbcc6">Setting up Shopware from GitHub</a> was originally published in <a href="https://medium.com/snajdr">snajdr.de</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Adding password protection to zero configuration Webpack React App]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-snippet">Recently I&#x2019;ve been working on a prototype for a client, who wanted and deserved a certain level of confidentiality (as actually every&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/snajdr/adding-password-protection-to-zero-configuration-webpack-react-app-1bd3fc976996?source=rss----8f200099b75---4">Continue reading on snajdr.de »</a></p></div>]]></description>
            <link>https://medium.com/snajdr/adding-password-protection-to-zero-configuration-webpack-react-app-1bd3fc976996?source=rss----8f200099b75---4</link>
            <guid isPermaLink="false">https://medium.com/p/1bd3fc976996</guid>
            <category><![CDATA[authentication]]></category>
            <category><![CDATA[react]]></category>
            <category><![CDATA[http-request]]></category>
            <category><![CDATA[heroku]]></category>
            <category><![CDATA[javascript]]></category>
            <dc:creator><![CDATA[Martin Snajdr]]></dc:creator>
            <pubDate>Sun, 03 Sep 2017 16:18:31 GMT</pubDate>
            <atom:updated>2017-09-03T16:18:40.327Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[My favorite talks from push conference 2016]]></title>
            <link>https://medium.com/snajdr/push-conference-2016-e3f7116a9296?source=rss----8f200099b75---4</link>
            <guid isPermaLink="false">https://medium.com/p/e3f7116a9296</guid>
            <category><![CDATA[ux-design]]></category>
            <category><![CDATA[push-conference]]></category>
            <dc:creator><![CDATA[Martin Snajdr]]></dc:creator>
            <pubDate>Sun, 25 Jun 2017 11:42:38 GMT</pubDate>
            <atom:updated>2017-06-25T11:44:35.512Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*S_-WL7GDWHY1RW1DBkL4aQ.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*srwxDgKyA-2F-KN7q00sug.jpeg" /></figure><p>This year’s push conference again was packed with really inspiring and entertaining talks more less closely related to UX topics.</p><p>This is my personal list of favorites, the talks, I will tell my friends about, the talks, that made me laugh, think, made me proud and humble and motivated me the most.</p><p>In order of appearance.</p><h3>Truth is contextual Or: The holy grail of process and collaboration</h3><h4>Scott Savarie / Product Manager @ InVision</h4><p>Scott Savarie, product manager at InVision jump-started the push conference with his entertaining talk about the hard role of a designer nowadays due to an abundance of tools and processes and roles. By the way, if you don’t know Invision, it’s one of the leading prototyping design tools out there.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Mu9knMv5RaM7h_AE_MTyYw.jpeg" /></figure><p>Scott is really struggling, when his mom asks him what his job is. There are no clearly defined roles anymore:</p><h3>Hank on Twitter</h3><p>Scott Savarie #push16</p><p>He tells us, that there is not the one and only holy grail, the one solution which suits all problems. He rather recommends to stop reinventing and start standardizing, creating guidelines to lead others instead of doing everything by yourself, his example is the module library used by Facebook.</p><h3>Doreen on Twitter</h3><p>Nice first talk from Scott Savarie at #push16</p><p>Also he encourages designers, to be more pushy, asking more questions, challenging ideas and products and becoming the killjoy from time to time.</p><p>His third advice is not just to rely on your talent and gut feeling, but use data and evidence as well, reflect your opinions.</p><blockquote>Include designers in bigger questions and do not let them only push pixels around!!!</blockquote><h3>The psychology behind successful products</h3><h4>Nathalie Nahai / Web Psychologist @ The Web Psychologist Ltd.</h4><p>If you think psychology is something weird and boring, something for the Woody Allen maybe, you have definitely missed Nathalie Nahais talk, which turned psychology in one of the most interesting subjects ever.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*I0WGOGvWrnADvJaL8ftGbg.jpeg" /></figure><p>According to her, seven points make a product successful. The seven points are:</p><ol><li>Endowed Progress</li><li>Sunk-cost fallacy</li><li>Appointment dynamic</li><li>Cognitive load</li><li>Processing fluency</li><li>Hedonic adaptation</li><li>Dopamine loops</li></ol><p>For more information look at her awesome <a href="http://www.slideshare.net/nathalienahai">slides</a>.</p><h3>Trust Me: UX for Privacy</h3><h4>Ame Elliott / Design Director @ Simply Secure</h4><p>Ame is talking about the power of UX design to protect people’s privacy. She says, security has to be easy and intuitive or it won’t work. This is the main challenge for UX designers — finding the appropriate complexity for privacy and security.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*FnMQw4fhOU-DznlyCYeW3Q.jpeg" /></figure><p>On the one hand it’s about helping more people to understand the systems the are using and the imposed threats. And then it’s also about motivating a behavior change towards more secure behaviors.</p><p>Check out her <a href="http://www.slideshare.net/AmeElliott/ux-for-security-power-of-design">slides</a> here.</p><h3>Articulating Design Decisions</h3><h4>Tom Greever / UX Director &amp; author of Articulating Design Decisions @ Bitovi</h4><p>This talk inspired me so much that I bought Tom’s book right after he had finished it. So maybe I’m the best proof that he actually knows what he’s talking about his topic, how to sell your design decisions to your clients.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*LGKhAxG6ZteaEoVc8pCEUA.jpeg" /></figure><p>The main three questions a designer should know answers to are:</p><ol><li>What problem does this solve?</li><li>How does this affect the user?</li><li>Why is it better than the alternative?</li></ol><p>And if this doesn’t work out — <em>paint a duck…</em> What? A duck? Yes… watch Toms talk at vimeo to find the duck:</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fplayer.vimeo.com%2Fvideo%2F192270947&amp;url=https%3A%2F%2Fvimeo.com%2F192270947&amp;image=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F611572286_1280.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=vimeo" width="1920" height="1080" frameborder="0" scrolling="no"><a href="https://medium.com/media/2d1cab6359d482ada40a39e0db1711ad/href">https://medium.com/media/2d1cab6359d482ada40a39e0db1711ad/href</a></iframe><h3>Smart Transitions in UI Design</h3><h4>Adrian Zumbrunnen / UX Designer @ Freelance at Google</h4><p>Adrian from Switzerland got us all with his bar of swiss chocolate he pulled out while distracting everyone of us with some fancy animations in his slides.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3u1Ww439DJ_AcIAiuargJA.jpeg" /></figure><p>Packed with interesting examples and helpful insights he fascinated the audience in no time making this one of the best talks of the whole conference.</p><p>Get yourself a piece of chocolate at vimeo:</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fplayer.vimeo.com%2Fvideo%2F192495456&amp;url=https%3A%2F%2Fvimeo.com%2F192495456&amp;image=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F611572623_1280.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=vimeo" width="1920" height="1080" frameborder="0" scrolling="no"><a href="https://medium.com/media/08b14d0f2c7d1a307dbac82882151fd8/href">https://medium.com/media/08b14d0f2c7d1a307dbac82882151fd8/href</a></iframe><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e3f7116a9296" width="1" height="1" alt=""><hr><p><a href="https://medium.com/snajdr/push-conference-2016-e3f7116a9296">My favorite talks from push conference 2016</a> was originally published in <a href="https://medium.com/snajdr">snajdr.de</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[AngularJS with Rails4 Asset Pipeline]]></title>
            <link>https://medium.com/snajdr/angularjs-with-rails4-asset-pipeline-f8ae4915c?source=rss----8f200099b75---4</link>
            <guid isPermaLink="false">https://medium.com/p/f8ae4915c</guid>
            <category><![CDATA[heroku]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[ruby-on-rails]]></category>
            <category><![CDATA[ruby]]></category>
            <category><![CDATA[angularjs]]></category>
            <dc:creator><![CDATA[Martin Snajdr]]></dc:creator>
            <pubDate>Tue, 05 May 2015 09:50:42 GMT</pubDate>
            <atom:updated>2016-09-02T12:07:42.253Z</atom:updated>
            <content:encoded><![CDATA[<p>Ruby on Rails does precompile your assets for you, which also means, your JavaScripts may get concatenated, minified and uglified, depending on the environment, your app is running in.</p><p>Which sounds nice (and actually is) may cause some problems in some cases, especially if you are using AngularJS.</p><p>You can solve this problem by modifying your asset configuration in <em>config/environments/production.rb</em> like this:</p><pre>config.assets.js_compressor = Uglifier.new(:mangle =&gt; false)</pre><p><strong>Hint:</strong> Just changing this setting in an heroku environment won’t recompile (or re-precompile) your assets as this is only happening after they changed.</p><p><em>Source: </em><a href="http://blog.berylliumwork.com/2013/07/tips-on-rails-4-assets-compression-with.html*"><em>http://blog.berylliumwork.com/2013/07/tips-on-rails-4-assets-compression-with.html</em></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f8ae4915c" width="1" height="1" alt=""><hr><p><a href="https://medium.com/snajdr/angularjs-with-rails4-asset-pipeline-f8ae4915c">AngularJS with Rails4 Asset Pipeline</a> was originally published in <a href="https://medium.com/snajdr">snajdr.de</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Serve static HTML files build with grunt from heroku]]></title>
            <link>https://medium.com/snajdr/serve-static-html-files-build-with-grunt-from-heroku-ecd794cb2453?source=rss----8f200099b75---4</link>
            <guid isPermaLink="false">https://medium.com/p/ecd794cb2453</guid>
            <category><![CDATA[heroku]]></category>
            <category><![CDATA[nodejs]]></category>
            <category><![CDATA[grunt]]></category>
            <dc:creator><![CDATA[Martin Snajdr]]></dc:creator>
            <pubDate>Fri, 27 Mar 2015 10:46:51 GMT</pubDate>
            <atom:updated>2017-06-24T14:06:02.368Z</atom:updated>
            <content:encoded><![CDATA[<p><em>See Github-Repo at </em><a href="https://github.com/martin-snajdr/heroku-node-static-express*"><em>https://github.com/martin-snajdr/heroku-node-static-express</em></a></p><p>Ready to deploy and run NodeJS Server to serve static files from heroku built with grunt.</p><h3>What’s in it</h3><ul><li>NodeJS Express to serve static files from <em>build</em>-directory</li><li>Optional HTTP Auth (uncomment lines in <em>server.js</em>)</li><li>Grunt Task to build SCSS, Javascript and Kit-Files (<a href="http://incident57.com/codekit/help.html#kit">What is kit?</a>)</li><li>Grunt LiveReload included</li></ul><h3>How to use</h3><p>First, create a new heroku app</p><pre>heroku create heroku-node-static-express —region eu</pre><p>Then push your repo to heroku</p><pre>git push heroku master</pre><p>It’s up an running! <em>Almost…</em></p><p>Because…</p><p>Not a single grunt task has run! So basically no CSS files, Javascript or compiled HTML documents exist.</p><p>You can run the grunt task manually:</p><pre>heroku run grunt</pre><p>This works fine, but it’s not quite handy when you have to do this everytime you push a new commit to heroku.</p><p>Using a custom buildpack you can do this automatically after pushing a commit.<br>I use the customized Heroku Buildpack with Grunt support by Matthis Buchetics, you can find it at <a href="https://github.com/mbuchetics/heroku-buildpack-nodejs-grunt.">https://github.com/mbuchetics/heroku-buildpack-nodejs-grunt.</a></p><p>Adding it to your heroku app is easily done by adding some environment variables:</p><pre>heroku config:set BUILDPACK_URL=https://github.com/mbuchetics/heroku-buildpack-nodejs-grunt.git<br> heroku config:set NODE_ENV=production<br> heroku config:set PORT=80</pre><p>That’s it! Now, everytime you push a commit, your default grunt task is executed.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ecd794cb2453" width="1" height="1" alt=""><hr><p><a href="https://medium.com/snajdr/serve-static-html-files-build-with-grunt-from-heroku-ecd794cb2453">Serve static HTML files build with grunt from heroku</a> was originally published in <a href="https://medium.com/snajdr">snajdr.de</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Change the Default Editor From Nano on Ubuntu Linux]]></title>
            <link>https://medium.com/snajdr/change-the-default-editor-from-nano-on-ubuntu-linux-d56fee0eba18?source=rss----8f200099b75---4</link>
            <guid isPermaLink="false">https://medium.com/p/d56fee0eba18</guid>
            <category><![CDATA[cmd]]></category>
            <category><![CDATA[linux]]></category>
            <category><![CDATA[ubuntu]]></category>
            <dc:creator><![CDATA[Martin Snajdr]]></dc:creator>
            <pubDate>Wed, 04 Mar 2015 13:37:38 GMT</pubDate>
            <atom:updated>2017-06-24T14:09:08.295Z</atom:updated>
            <content:encoded><![CDATA[<h3>How to change the default editor on Ubuntu</h3><p>…didn’t know this :-|</p><p>It’s as easy as this:</p><pre>sudo update-alternatives — config editor</pre><p><strong><em>Thanks to </em></strong><a href="https://www.howtogeek.com/howto/ubuntu/change-the-default-editor-from-nano-on-ubuntu-linux/"><strong><em>HowToGeek</em></strong></a><strong><em>!</em></strong></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d56fee0eba18" width="1" height="1" alt=""><hr><p><a href="https://medium.com/snajdr/change-the-default-editor-from-nano-on-ubuntu-linux-d56fee0eba18">Change the Default Editor From Nano on Ubuntu Linux</a> was originally published in <a href="https://medium.com/snajdr">snajdr.de</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Custom Actions for Rails_Admin]]></title>
            <link>https://medium.com/snajdr/custom-actions-for-rails-admin-cf88c2a704b4?source=rss----8f200099b75---4</link>
            <guid isPermaLink="false">https://medium.com/p/cf88c2a704b4</guid>
            <category><![CDATA[ruby]]></category>
            <category><![CDATA[ruby-on-rails]]></category>
            <category><![CDATA[rails-admin]]></category>
            <dc:creator><![CDATA[Martin Snajdr]]></dc:creator>
            <pubDate>Wed, 18 Feb 2015 16:32:23 GMT</pubDate>
            <atom:updated>2017-06-24T14:12:56.626Z</atom:updated>
            <content:encoded><![CDATA[<p>If you are using <a href="https://github.com/sferik/rails_admin">Rails Admin</a> as Rails engine for your Administration Area or something similar, you may want to add custom actions to some models.</p><p>To achieve this, first of all create a custom class for your action derived from RailsAdmin::Config::Actions::Base. I prefer putting it into /config/initializers/rails_admin.rb.</p><pre><strong>module </strong><em>RailsAdmin<br>  </em><strong>module </strong><em>Config<br>    </em><strong>module </strong><em>Actions<br>      </em><strong>class </strong><em>MyAction </em>&lt; RailsAdmin::Config::Actions::Base<br>        RailsAdmin::Config::Actions.register(<strong>self</strong>)<br>        register_instance_option :visible? <strong>do<br>          </strong> <strong>true<br>        end<br>        </strong>register_instance_option :member <strong>do<br>          true<br>        end<br>        </strong>register_instance_option :link_icon <strong>do<br>          </strong><em>#FontAwesome Icons<br>          </em>&#39;icon-check&#39;<br>        <strong>end<br>        </strong>register_instance_option :controller <strong>do<br>          </strong>Proc.new <strong>do<br>            </strong><em># Do whatever you want with @object<br>          </em><strong>end<br>        end<br>      end<br>    end <br>  end<br>end</strong></pre><p>Then, add your new action to the RailsAdmin config, like this:</p><pre>RailsAdmin.config <strong>do </strong>|<em>config</em>|<br> <em># …</em><br>  <em>config</em>.actions <strong>do<br>    </strong>dashboard <em># mandatory<br>    </em>index <em># mandatory<br>   # …</em><br>    my_action <strong>do<br>      </strong><em># Make it visible only for specific model.<br></em><strong>      </strong><em># You can remove this if</em><strong><em> </em></strong><em>you don’t need.<br>      </em>visible <strong>do<br>        </strong>bindings[:abstract_model].model.to_s == <strong>`MediaTarget`<br>      end<br>    end<br>  end<br>end</strong></pre><p>That’s it!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=cf88c2a704b4" width="1" height="1" alt=""><hr><p><a href="https://medium.com/snajdr/custom-actions-for-rails-admin-cf88c2a704b4">Custom Actions for Rails_Admin</a> was originally published in <a href="https://medium.com/snajdr">snajdr.de</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[bleech.io]]></title>
            <link>https://medium.com/snajdr/bleech-io-422e1bdb780a?source=rss----8f200099b75---4</link>
            <guid isPermaLink="false">https://medium.com/p/422e1bdb780a</guid>
            <category><![CDATA[html]]></category>
            <category><![CDATA[css]]></category>
            <category><![CDATA[javascript]]></category>
            <dc:creator><![CDATA[Martin Snajdr]]></dc:creator>
            <pubDate>Mon, 09 Feb 2015 13:24:31 GMT</pubDate>
            <atom:updated>2017-02-03T16:05:16.305Z</atom:updated>
            <content:encoded><![CDATA[<h3>Tech inspiration for creatives</h3><p>Visit <a href="http://bleech.io/">bleech.io</a> for an amazing collection of useful and inspiring links for creative web workers.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=422e1bdb780a" width="1" height="1" alt=""><hr><p><a href="https://medium.com/snajdr/bleech-io-422e1bdb780a">bleech.io</a> was originally published in <a href="https://medium.com/snajdr">snajdr.de</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>