Jekyll2021-04-07T15:45:28+02:00https://www.bastiankroggel.com/feed.xmlBastian KroggelGraduated with a Corporate Management & Economics degree at <a href="https://www.zu.de" target="_blank">Zeppelin University</a> on the shores of Lake Constance and is currently working on tomorrows future at STARTUP AUTOBAHN powered by Plug and Play. Besides that a tech enthusiast interested in all things concerning great design, millennial and born digital native. Proud member of the CodeCats, an initiative attempting to excite pupils and students to enter the world of code.
Bastian KroggelHow to share System Audio in Microsoft Teams2020-05-08T17:49:12+02:002020-05-08T17:49:12+02:00https://www.bastiankroggel.com/blog/2020/How-to-use-system-audio-in-microsoft-teams<p class="intro">Things have changed quite dramatically in the past weeks – and while the intention of this article is neither to analyze the socio-economical aspects of the crisis nor shed some light on the business side of it, it is somehow directly related to the massive transformation millions of people are currently facing.</p>
<p>With one of the most easily spottable and certainly necessary breaks with normality the closing down of office buildings around the world not just left public transportation nearly empty even around rush-hour – it also created an entire new home office situation for the employees.</p>
<p>Being forced to work out of the own house or apartment changed the usual working routine of millions of people from one day to another – which immediately resulted in the rise of remote collaboration tools to an extend that was never seen before.</p>
<p>One the one hand side this made service providers for such tools one of the very few <a href="https://news.ycombinator.com/item?id=22802960">beneficiaries of the current situation</a> – on the other hand, though this attention on their products also revealed some skeletons in the closet that are <a href="https://medium.com/bugbountywriteup/zoom-zero-day-4-million-webcams-maybe-an-rce-just-get-them-to-visit-your-website-ac75c83f4ef5">not all particularly brand-new</a> <a href="https://citizenlab.ca/2020/04/move-fast-roll-your-own-crypto-a-quick-look-at-the-confidentiality-of-zoom-meetings/">discoveries</a> <a href="https://www.forbes.com/sites/daveywinder/2020/04/28/zoom-gets-stuffed-heres-how-hackers-got-hold-of-500000-passwords/#3137267b5cdc">but</a> <a href="https://techcrunch.com/2020/04/03/zoom-calls-routed-china/">gained some</a> <a href="https://techcrunch.com/2020/04/02/zoom-freezes-feature-development-to-fix-security-and-privacy-issues/">momentum</a> through the much bigger audience that is currently perceptive for those topics – yes, I am talking about the (beloved and hated) video chat solution by <a href="https://zoom.us/">Zoom Video Communications Inc</a>.</p>
<p>The reaction especially from some of the bigger corporates on the market was quite restrictive – in many business environments Zoom is not considered as a trusted solution for the exchange of information anymore. Naturally they had to find an alternative to make home office somewhat functional – and took their chance with a company that is undeniably one of the biggest in the world, but certainly also not the most dynamic and disrupting one – at least in recent years. Clear the stage for Microsoft and their all-in-one remote working solution Microsoft Teams. And that is where the story begins.</p>
<p><img src="/assets/img/page/blog/msteams_header_full.webp" alt="Microsoft Teams" data-subtitle="picture by Mika Baumeister [@mbaumi](https://unsplash.com/@mbaumi) on [Unspalsh](https://unsplash.com/photos/-ik4J32DUyI)" /></p>
<p>This is not about the pros and cons of Teams. This is not about whether it is better than <a href="https://slack.com/">Slack</a>, <a href="https://zoom.us/">Zoom</a>, <a href="http://meet.google.com/">Google Meet</a>, <a href="http://rocket.Chat">Rocket.Chat</a> or <a href="https://jitsi.org/">Jitsi</a>. It is about a single feature that is so widely used in Zoom that I did not even think a serious competitor can lack the function – sharing your system audio with your colleagues and audience while presenting something on your screen.</p>
<p>The use case for that is pretty easily outlined: Prerecorded videos, reruns of an earlier session, or just some basic background music – all of that exceeds the basic capabilities of Microsoft Teams in its current iteration.</p>
<p>Admittedly Microsoft addressed some of the shortcomings of their Teams app in the last days – however <a href="https://microsoftteams.uservoice.com/forums/555103-public/suggestions/32616083-share-video-and-audio-during-meetings?tracking_code=499ab741c61cdbb7c1675a4f62ad852d">they only did</a> so for the <a href="https://support.office.com/en-us/article/share-system-audio-in-a-teams-meeting-or-live-event-dddede9f-e3d0-4330-873a-fa061a0d8e3b?omkt=en-001&ui=en-US&rs=en-001&ad=US">version running on their platform</a> (a prioritization which you naturally cannot blame them for). That said I am pretty positive that there are quite a few macOS users out there who are currently stuck with Microsoft Teams and need to find a way to include the system audio in their screen sharing sessions.</p>
<p>Especially for private use cases it is most often fine to just use the built-in microphone, however in professional settings – where you for example include pre-recorded videos in live streams or meetings – it is essential to include pictures as well as audio resources in the most high-quality way.</p>
<p>I, therefore, skip the just mentioned manual audio capturing with a microphone as well as the suggestion to “just use a windows computer” for obvious reasons in the following paragraphs.</p>
<p>Nonetheless there are two other options (and one is even free to use) that provide you with maximum quality streams – and allow you to finally use Microsoft Teams to its full extend.</p>
<p>As with most problems in the era of technology we can tackle the underlying problem of Microsoft Teams not being able to capture sound directly on the workstation with either a purely software approach or a solution that is more or less skewed into the hardware direction (as with everything there is of course also some software involved).</p>
<p>But first things first – let‘s talk about the <em>hardware</em> approach:</p>
<h2 id="hdmi-capture-card">HDMI Capture Card</h2>
<p>People with a background in the (semi)professional streaming or Let‘s Play business are using those converters for years as a reliable connector between their DSLR and their streaming suite like the <a href="https://obsproject.com/">Open Broadcasting Studio</a> or to easily live-capture their gameplay in full-resolution. It is worth noting that this approach usually requires quite an upfront investment – high-quality capture cards like the <a href="https://www.elgato.com/en/gaming/cam-link-4k">Elgato Cam Link 4k</a> start around $150 and do not even try to get your hands on one right now – they are almost sold out everywhere due to the popularity and the high demand right now.</p>
<p>That said – the stage is set for an (almost) new candidate in the field of streaming – at least in the not entire professional environment:
The <a href="https://www.blackmagicdesign.com/products/atemmini">Blackmagic Design ATEM Mini (Pro)</a>. Starting at roughly $300 this device is more pricey than most of the previously mentioned HDMI Capture Cards, however, it also provides much more functionality and features than the relatively simple Capture Devices – which in the end increases the professionalism of your stream.</p>
<p><img src="/assets/img/page/blog/blackmagic_atem_mini_small.webp" alt="Blackmagic ATEM Mini" data-subtitle="picture by Voice + Video [@voiceandvideo](https://unsplash.com/@voiceandvideo) on [Unsplash](https://unsplash.com/photos/k6uQJYh3qOc)" /></p>
<p>Crafted by the well known Blackmagic company you certainly can expect a high-quality product that is made for the professional market – not just function-wise but also regarding build quality. Since they nonetheless managed to lift something out of the cradle that combines all those features in a Plug & Play ready device that can be easily (and without much deeper knowledge of broadcasting technologies) set up in a matter of minutes, I highly recommend the ATEM board over most of the plain capture cards – if you do have some additional cash to spend, of course.</p>
<h2 id="virtual-audio-driver">Virtual Audio Driver</h2>
<p>There is however another solution to the problem that does not even require a hardware solution, is entirely free to use, and – on top of that – it is <a href="https://github.com/ExistentialAudio/BlackHole">open-source</a>.</p>
<p><img src="/assets/img/page/blog/existentialaudio.webp" alt="BlackHole by existential audio" data-subtitle="[official website](https://existential.audio/blackhole/)" /></p>
<p><strong><a href="https://github.com/ExistentialAudio/BlackHole">BlackHole</a></strong> is a rather new tool that aims to be a modern successor to the rather deprecated <a href="https://github.com/mattingalls/Soundflower">Soundflower tool</a> that lacks compatibility with the most recent major version of macOS “Catalina”. Both tools however share the same underlying idea to re-route the output audio signal and to directly transfer it to destination software.</p>
<p>What does not sound particularly easy is quite straightforward in its setup process. Just follow the installation procedure which can be found at the <a href="https://github.com/ExistentialAudio/BlackHole">repo‘s page on GitHub</a> or if you – like myself – enjoy the comfort of a <a href="https://brew.sh/">homebrew</a> cask installation simply enter <code class="language-plaintext highlighter-rouge">brew cask install blackhole</code> (<a href="https://github.com/Homebrew/homebrew-cask/blob/master/Casks/blackhole.rb">cask source</a>) in your preferred terminal application.</p>
<p>To send the entire system sound output to Microsoft Teams (comparable to the way Zoom captures system sound) there are just a few additional steps necessary:</p>
<ol>
<li>Open <code class="language-plaintext highlighter-rouge">[Audio-Midi-Setup.app](http://audio-midi-setup.app)</code> (e.g. via Spotlight: <code class="language-plaintext highlighter-rouge">cmd + [SPACE]</code> and enter <code class="language-plaintext highlighter-rouge">Midi</code>)</li>
<li>The sidebar now lists “Blackhole 16ch” as an available device. Right-click on the respective item and select “Use This Device For Sound Output”<sup id="fnref:routing_audio" role="doc-noteref"><a href="#fn:routing_audio" class="footnote" rel="footnote">1</a></sup>
<img src="/assets/img/page/blog/blackholesetup.webp" alt="Set Blackhole to Sound Output Device" data-subtitle="screenshot from the [official github repo](https://github.com/ExistentialAudio/BlackHole/blob/master/Images/Multi-Output/3.png)" /></li>
<li>Head over to the Microsoft Teams Meeting or Live Event and select “Device Settings”
<img src="/assets/img/page/blog/msteamsdevice_settings.jpg" alt="" class="lock" data-subtitle="Device Settings for Microsoft Teams Meetings – if you are looking for the similar setup in Production View on MS Teams Live Events please look for the little gear icon on the top right-hand corner" /></li>
<li>Choose <code class="language-plaintext highlighter-rouge">BlackHole 16ch</code> as Sound Input or “Microphone”
<img src="/assets/img/page/blog/software_specific_setup.webp" alt="Setup of audio device in video collaboration software" /></li>
<li><strong>You are all set.</strong> The entire system audio is now re-routed to MS Teams and can be picked up by your virtual audience.</li>
</ol>
<p>Like already mentioned before the Redmond, WA based tech oligarch is right now working on resolving the inadequacies of the MS Teams product – which means that in the short or long run there will be a function in place that should declare a similar setup to the above mentioned virtual audio driver redundant. Nonetheless I like to propose a setup where such a workaround might be superior to the usual integration of system audio – and therefore even for current users of Zoom, Skype, or most other virtual-meeting and webinar tools.</p>
<p>Sharing system audio usually comes in handy when pre-recorded video/audio should enhance the appearance of the live event/meeting. While therefore sharing the entire system output surely works it is far from ideal as not just the file which is intended to be shared with the audience but also all other audio signals like notifications from slack, Mail, iMessage, or else are included in the re-routed output as well. Furthermore sharing your system audio also prevents you from using your Mac audio signal <span class="sidenote"><span class="sidenote__toggle">for anything besides</span><span class="sidenote__note">it can be quite helpful to set up a simultaneous sync call with the other people working on the live stream</span></span> the MS Teams Call.</p>
<p>To cut things short – what we are looking for is a solution to only share specific audio while all other signals should be routed to different outputs – and this is also what BlackHole (considering supported third-party applications) is also enabling its users with.</p>
<p>Let us get back to the previous example and the project to include a prerecorded video-file into a virtual meeting. Screen sharing the entire Quicktime window (or the video player app of your choice) would be certainly the easiest way – however not the most sophisticated one. To heavily level up the game which just a little bit of additional effort I recommend to work with an app that allows to explicitly set the output channel to which the audio should be routed to.<sup id="fnref:explicit_routing" role="doc-noteref"><a href="#fn:explicit_routing" class="footnote" rel="footnote">2</a></sup></p>
<p>For the example use case I suggest using the longstanding and proven <a href="http://www.videolan.org/">VLC media player</a> – which “accidentally” also supports to manually select the output channel to which the media‘s audio signal should be routed to.</p>
<p>Selecting <code class="language-plaintext highlighter-rouge">Audio</code> in the macOS menu bar and moving the cursor to <code class="language-plaintext highlighter-rouge">Audio Device</code> enables the user to choose the preferred device that should receive the audio signal from VLC’s playback. Activating <code class="language-plaintext highlighter-rouge">BlackHole 16ch</code> then routes the entire VLC audio information directly to the recently installed virtual audio driver – which is just one step away from using the signal – and <strong>solely</strong> this audio signal – as the source of sound for our Microsoft Teams or Zoom Call.</p>
<p>The setup settings should look as follows:</p>
<ol>
<li>Open the <a href="http://midi-audio-setup.app">Midi-Audio-Setup.app</a> and create an <code class="language-plaintext highlighter-rouge">Aggregate Device</code> which includes (checkmarks ticked) the following devices:<br />
<code class="language-plaintext highlighter-rouge">Microphone (Build-In)</code>; <code class="language-plaintext highlighter-rouge">Output (Build-In)</code>; <code class="language-plaintext highlighter-rouge">BlackHole 16ch</code><br />
Make sure that <code class="language-plaintext highlighter-rouge">Drift-Correction</code> is enabled for Output as well as BlockHole.
<img src="/assets/img/page/blog/audio-midi-setup-aggregate-device.webp" alt="Audio Midi Setup Aggregate Device" data-subtitle="screenshot from the [official BlackHole github repo](https://github.com/ExistentialAudio/BlackHole/blob/master/Images/Aggregate/5.png)" /></li>
<li>Open <code class="language-plaintext highlighter-rouge">System Preferences > Sound</code> and choose the newly created Device as Input.</li>
<li>Select the same device as the audio device in your media player application (e.g. VLC: <code class="language-plaintext highlighter-rouge">Audio</code> > <code class="language-plaintext highlighter-rouge">Audio Device</code> > <code class="language-plaintext highlighter-rouge">Aggregate Device</code>)</li>
<li>Choose the very same device <em>(<strong>not</strong> BlackHole 16ch)</em> as the input for your destination application (like Zoom or Microsoft Teams)</li>
</ol>
<p>All in all this post is certainly neither the most comprehensive manual for software nor is this tool a perfect fit for any audio routing setup. However if you do have issues using your system audio for broadcasting on Microsoft Teams or if you would like to enhance your video calling setup you can almost surely find some interesting ideas in this post.</p>
<p>Besides that, I, of course, encourage anybody to take a look at the tools <a href="https://github.com/ExistentialAudio/BlackHole">GitHub page</a> where the author already started to collect quite a few <a href="https://github.com/ExistentialAudio/BlackHole/issues">setup instructions</a> for specific 3rd party software and use cases – which is also quite a good starting point for new projects and ideas to further work on.</p>
<p>I would also like to mention two other utilities that somewhat work in the same direction as BlackHole does. The <a href="https://jackaudio.org/">JACK Audio Connection Kit</a> is most surely the de facto standard for any music application in the Linux environment and has quite a big community that constantly works on improvements and integrations since its first appearance nearly two decades ago.</p>
<p id="Loopback"><span class="sidenote"><span class="sidenote__toggle">Much younger</span><span class="sidenote__note">Here you can find additional information about what to do if you need explicit routing of audio signals between multiple software applications</span></span> but something that should be taken into account is a software product called <a href="https://rogueamoeba.com/loopback/">Loopback</a> by the developers from <a href="https://rogueamoeba.com/">Rogue Amoeba Software</a> – which do have quite an impressive track record for high-quality audio software. While this beauty not just gets shipped with a gorgeous interface it also allows users to combine, re-route and manage multiple input channels with very granular controls – and best of all: It works with any application on your macOS system.</p>
<p class="no_shadow"><img src="/assets/img/page/blog/rogueamoeba_loopback.webp" alt="Loopback by Rogue Amoeba Software" data-subtitle="screenshot from [official Loopback website](https://rogueamoeba.com/loopback/)" /></p>
<p>This post could probably go and on and on with some much more to discover in the field of tools, ideas, and more software that some should have a look at. For now I think though, that the workaround above should finally enable macOS users to utilize Microsoft Teams in the same way that their colleagues on Windows-powered devices are making use of it.</p>
<p>That said if you do have some more ideas about what I should look into in regards to virtual audio routing on macOS I am gladly waiting for a ping on my <a href="https://twitter.bastiankroggel.com/">twitter account</a>.</p>
<p info="Addition" info_sub="2020-05-18T13:58+02">Quick update to the roughly one and half weeks ago published blog post: <br />
Since above software solutions are only focussing towards <em>macOS based</em> system <i class="fab fa-apple"></i> (except <em>Jack</em> which was mainly developed with Linux in mind) I wanted to briefly update this article with just a few links and additional software packages, that might grant you a much more comprehensive overview about possible routes or guide you to the right direction if you are looking for an alternative solution that focusses on the Microsoft Windows <i class="fab fa-windows"></i> environment:</p>
<ul info="Addition" info_sub="2020-05-18T13:58+02">
<li><strong><a href="https://www.audinate.com/products/software/dante-via">Dante Via</a></strong> ($49.99, proprietary) – <i class="fab fa-windows"></i> <i class="fab fa-apple"></i> – Dante Via is easy-to-use software that delivers unprecedented multi-channel routing of computer-based audio, allowing a wide range of applications and devices to be networked and interconnected, easily and inexpensively.</li>
<li><strong><a href="https://staticz.com/soundsiphon/">Sound Siphon by Static Z Software</a></strong> ($49, proprietary) – <i class="fab fa-apple"></i> – Sound Siphon makes it easy to capture your Mac’s audio. Use it to create virtual input audio devices that send audio from one app to another. Or, record right in the Sound Siphon app.</li>
<li><strong><a href="https://github.com/eiz/SynchronousAudioRouter">Synchronous Audio Router</a></strong> (free, open-source) – <i class="fab fa-windows"></i> – Synchronous Audio Router is a Windows audio driver which allows you to route application audio through your digital audio workstation software.</li>
<li><strong><a href="https://www.vb-audio.com/Cable/">VB-Audio</a></strong> (donation, proprietary) – <i class="fab fa-windows"></i> <i class="fab fa-apple"></i> – VB-CABLE is a virtual audio device working as virtual audio cable. All audio coming in the CABLE input is simply forwarded to the CABLE output.</li>
<li><strong><a href="https://vac.muzychenko.net/en/">Virtual Audio Cable</a></strong> ($30, proprietary) – <i class="fab fa-windows"></i> – Virtual Audio Cable (VAC) is an audio bridge between applications that transmits sounds (audio streams) from app to app, from device to device.</li>
</ul>
<p info="Addition" info_sub="2020-05-18T13:58+02" style="transform:scale(.7); transform-origin: 0"><em>Note:</em> Descriptions have been taken directly from the distributors‘ respective website.</p>
<p>Take care – and #StaySafe.</p>
<div class="footnotes" role="doc-endnotes">
<ol>
<li id="fn:routing_audio" role="doc-endnote">
<p>This results in routing the entire system audio directly to Blackhole which also means you will not be able to directly listen to the output anymore. To still be able to monitor the signal create a “<a href="https://github.com/ExistentialAudio/BlackHole/wiki/Multi-Output-Device">Multi-Output Device</a>” as explained by the BlackHole developer <a href="http://devinrothmusic.com/">Devin Roth</a> in the official <a href="https://github.com/ExistentialAudio/BlackHole/wiki/Multi-Output-Device">BlackHole wiki</a>. <a href="#fnref:routing_audio" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
<li id="fn:explicit_routing" role="doc-endnote">
<p>For more information about explicit audio routing please see <a href="#Loopback">here</a> <a href="#fnref:explicit_routing" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
</ol>
</div>Bastian KroggelThings have changed quite dramatically in the past weeks – and while the intention of this article is neither to analyze the socio-economical aspects of the crisis nor shed some light on the business side of it, it is somehow directly related to the massive transformation millions of people are currently facing. With one of the most easily spottable and certainly necessary breaks with normality the closing down of office buildings around the world not just left public transportation nearly empty even around rush-hour – it also created an entire new home office situation for the employees. Being forced to work out of the own house or apartment changed the usual working routine of millions of people from one day to another – which immediately resulted in the rise of remote collaboration tools to an extend that was never seen before. One the one hand side this made service providers for such tools one of the very few beneficiaries of the current situation – on the other hand, though this attention on their products also revealed some skeletons in the closet that are not all particularly brand-new discoveries but gained some momentum through the much bigger audience that is currently perceptive for those topics – yes, I am talking about the (beloved and hated) video chat solution by Zoom Video Communications Inc. The reaction especially from some of the bigger corporates on the market was quite restrictive – in many business environments Zoom is not considered as a trusted solution for the exchange of information anymore. Naturally they had to find an alternative to make home office somewhat functional – and took their chance with a company that is undeniably one of the biggest in the world, but certainly also not the most dynamic and disrupting one – at least in recent years. Clear the stage for Microsoft and their all-in-one remote working solution Microsoft Teams. And that is where the story begins. This is not about the pros and cons of Teams. This is not about whether it is better than Slack, Zoom, Google Meet, Rocket.Chat or Jitsi. It is about a single feature that is so widely used in Zoom that I did not even think a serious competitor can lack the function – sharing your system audio with your colleagues and audience while presenting something on your screen. The use case for that is pretty easily outlined: Prerecorded videos, reruns of an earlier session, or just some basic background music – all of that exceeds the basic capabilities of Microsoft Teams in its current iteration. Admittedly Microsoft addressed some of the shortcomings of their Teams app in the last days – however they only did so for the version running on their platform (a prioritization which you naturally cannot blame them for). That said I am pretty positive that there are quite a few macOS users out there who are currently stuck with Microsoft Teams and need to find a way to include the system audio in their screen sharing sessions. Especially for private use cases it is most often fine to just use the built-in microphone, however in professional settings – where you for example include pre-recorded videos in live streams or meetings – it is essential to include pictures as well as audio resources in the most high-quality way. I, therefore, skip the just mentioned manual audio capturing with a microphone as well as the suggestion to “just use a windows computer” for obvious reasons in the following paragraphs. Nonetheless there are two other options (and one is even free to use) that provide you with maximum quality streams – and allow you to finally use Microsoft Teams to its full extend. As with most problems in the era of technology we can tackle the underlying problem of Microsoft Teams not being able to capture sound directly on the workstation with either a purely software approach or a solution that is more or less skewed into the hardware direction (as with everything there is of course also some software involved). But first things first – let‘s talk about the hardware approach: HDMI Capture Card People with a background in the (semi)professional streaming or Let‘s Play business are using those converters for years as a reliable connector between their DSLR and their streaming suite like the Open Broadcasting Studio or to easily live-capture their gameplay in full-resolution. It is worth noting that this approach usually requires quite an upfront investment – high-quality capture cards like the Elgato Cam Link 4k start around $150 and do not even try to get your hands on one right now – they are almost sold out everywhere due to the popularity and the high demand right now. That said – the stage is set for an (almost) new candidate in the field of streaming – at least in the not entire professional environment: The Blackmagic Design ATEM Mini (Pro). Starting at roughly $300 this device is more pricey than most of the previously mentioned HDMI Capture Cards, however, it also provides much more functionality and features than the relatively simple Capture Devices – which in the end increases the professionalism of your stream. Crafted by the well known Blackmagic company you certainly can expect a high-quality product that is made for the professional market – not just function-wise but also regarding build quality. Since they nonetheless managed to lift something out of the cradle that combines all those features in a Plug & Play ready device that can be easily (and without much deeper knowledge of broadcasting technologies) set up in a matter of minutes, I highly recommend the ATEM board over most of the plain capture cards – if you do have some additional cash to spend, of course. Virtual Audio Driver There is however another solution to the problem that does not even require a hardware solution, is entirely free to use, and – on top of that – it is open-source. BlackHole is a rather new tool that aims to be a modern successor to the rather deprecated Soundflower tool that lacks compatibility with the most recent major version of macOS “Catalina”. Both tools however share the same underlying idea to re-route the output audio signal and to directly transfer it to destination software. What does not sound particularly easy is quite straightforward in its setup process. Just follow the installation procedure which can be found at the repo‘s page on GitHub or if you – like myself – enjoy the comfort of a homebrew cask installation simply enter brew cask install blackhole (cask source) in your preferred terminal application. To send the entire system sound output to Microsoft Teams (comparable to the way Zoom captures system sound) there are just a few additional steps necessary: Open [Audio-Midi-Setup.app](http://audio-midi-setup.app) (e.g. via Spotlight: cmd + [SPACE] and enter Midi) The sidebar now lists “Blackhole 16ch” as an available device. Right-click on the respective item and select “Use This Device For Sound Output”1 Head over to the Microsoft Teams Meeting or Live Event and select “Device Settings” Choose BlackHole 16ch as Sound Input or “Microphone” You are all set. The entire system audio is now re-routed to MS Teams and can be picked up by your virtual audience. Like already mentioned before the Redmond, WA based tech oligarch is right now working on resolving the inadequacies of the MS Teams product – which means that in the short or long run there will be a function in place that should declare a similar setup to the above mentioned virtual audio driver redundant. Nonetheless I like to propose a setup where such a workaround might be superior to the usual integration of system audio – and therefore even for current users of Zoom, Skype, or most other virtual-meeting and webinar tools. Sharing system audio usually comes in handy when pre-recorded video/audio should enhance the appearance of the live event/meeting. While therefore sharing the entire system output surely works it is far from ideal as not just the file which is intended to be shared with the audience but also all other audio signals like notifications from slack, Mail, iMessage, or else are included in the re-routed output as well. Furthermore sharing your system audio also prevents you from using your Mac audio signal for anything besidesit can be quite helpful to set up a simultaneous sync call with the other people working on the live stream the MS Teams Call. To cut things short – what we are looking for is a solution to only share specific audio while all other signals should be routed to different outputs – and this is also what BlackHole (considering supported third-party applications) is also enabling its users with. Let us get back to the previous example and the project to include a prerecorded video-file into a virtual meeting. Screen sharing the entire Quicktime window (or the video player app of your choice) would be certainly the easiest way – however not the most sophisticated one. To heavily level up the game which just a little bit of additional effort I recommend to work with an app that allows to explicitly set the output channel to which the audio should be routed to.2 For the example use case I suggest using the longstanding and proven VLC media player – which “accidentally” also supports to manually select the output channel to which the media‘s audio signal should be routed to. Selecting Audio in the macOS menu bar and moving the cursor to Audio Device enables the user to choose the preferred device that should receive the audio signal from VLC’s playback. Activating BlackHole 16ch then routes the entire VLC audio information directly to the recently installed virtual audio driver – which is just one step away from using the signal – and solely this audio signal – as the source of sound for our Microsoft Teams or Zoom Call. The setup settings should look as follows: Open the Midi-Audio-Setup.app and create an Aggregate Device which includes (checkmarks ticked) the following devices: Microphone (Build-In); Output (Build-In); BlackHole 16ch Make sure that Drift-Correction is enabled for Output as well as BlockHole. Open System Preferences > Sound and choose the newly created Device as Input. Select the same device as the audio device in your media player application (e.g. VLC: Audio > Audio Device > Aggregate Device) Choose the very same device (not BlackHole 16ch) as the input for your destination application (like Zoom or Microsoft Teams) All in all this post is certainly neither the most comprehensive manual for software nor is this tool a perfect fit for any audio routing setup. However if you do have issues using your system audio for broadcasting on Microsoft Teams or if you would like to enhance your video calling setup you can almost surely find some interesting ideas in this post. Besides that, I, of course, encourage anybody to take a look at the tools GitHub page where the author already started to collect quite a few setup instructions for specific 3rd party software and use cases – which is also quite a good starting point for new projects and ideas to further work on. I would also like to mention two other utilities that somewhat work in the same direction as BlackHole does. The JACK Audio Connection Kit is most surely the de facto standard for any music application in the Linux environment and has quite a big community that constantly works on improvements and integrations since its first appearance nearly two decades ago. Much youngerHere you can find additional information about what to do if you need explicit routing of audio signals between multiple software applications but something that should be taken into account is a software product called Loopback by the developers from Rogue Amoeba Software – which do have quite an impressive track record for high-quality audio software. While this beauty not just gets shipped with a gorgeous interface it also allows users to combine, re-route and manage multiple input channels with very granular controls – and best of all: It works with any application on your macOS system. This post could probably go and on and on with some much more to discover in the field of tools, ideas, and more software that some should have a look at. For now I think though, that the workaround above should finally enable macOS users to utilize Microsoft Teams in the same way that their colleagues on Windows-powered devices are making use of it. That said if you do have some more ideas about what I should look into in regards to virtual audio routing on macOS I am gladly waiting for a ping on my twitter account. Quick update to the roughly one and half weeks ago published blog post: Since above software solutions are only focussing towards macOS based system (except Jack which was mainly developed with Linux in mind) I wanted to briefly update this article with just a few links and additional software packages, that might grant you a much more comprehensive overview about possible routes or guide you to the right direction if you are looking for an alternative solution that focusses on the Microsoft Windows environment: Dante Via ($49.99, proprietary) – – Dante Via is easy-to-use software that delivers unprecedented multi-channel routing of computer-based audio, allowing a wide range of applications and devices to be networked and interconnected, easily and inexpensively. Sound Siphon by Static Z Software ($49, proprietary) – – Sound Siphon makes it easy to capture your Mac’s audio. Use it to create virtual input audio devices that send audio from one app to another. Or, record right in the Sound Siphon app. Synchronous Audio Router (free, open-source) – – Synchronous Audio Router is a Windows audio driver which allows you to route application audio through your digital audio workstation software. VB-Audio (donation, proprietary) – – VB-CABLE is a virtual audio device working as virtual audio cable. All audio coming in the CABLE input is simply forwarded to the CABLE output. Virtual Audio Cable ($30, proprietary) – – Virtual Audio Cable (VAC) is an audio bridge between applications that transmits sounds (audio streams) from app to app, from device to device. Note: Descriptions have been taken directly from the distributors‘ respective website. Take care – and #StaySafe. This results in routing the entire system audio directly to Blackhole which also means you will not be able to directly listen to the output anymore. To still be able to monitor the signal create a “Multi-Output Device” as explained by the BlackHole developer Devin Roth in the official BlackHole wiki. ↩ For more information about explicit audio routing please see here ↩A multi-location weather widget build for Übersicht2018-06-04T09:49:01+02:002018-06-04T09:49:01+02:00https://www.bastiankroggel.com/blog/2018/A-multi-location-weather-widget-build-for-Uebersicht<p>I recently rediscovered a neat little app for macOS I already played with a few years ago when it was still in it‘s early days. While it matured a lot since then, the numbers of <a href="http://tracesof.net/uebersicht-widgets/">third party widgets/addons</a>—an obviously crucial thing for such a solution, more about that in a second—increased tremendously, which made me feel like I definitely need to give this app another look and chance to stay on my machine.</p>
<p><a href="http://tracesof.net/uebersicht/">Übersicht app</a> is a little <em><a href="https://support.apple.com/kb/PH25077?locale=en_US">menu bar</a></em> application for macOS that according to its website <em>runs system commands and displays its output on your desktop in little containers, called widgets.</em></p>
<p>Achieved by a WebKit instance that runs basically in full screen mode as a layer between the actual desktop and the application/document icons, <em>Übersicht</em> allows to add nearly any kind of content to the macOS desktop that is driven by HTML5 as well as <span class="sidenote"><span class="sidenote__toggle">Javascript</span><span class="sidenote__note">Übersicht makes use of <a href="http://coffeescript.org/">CoffeeScript</a> which can be easily mixed and compiled to JS. However if preferred, it is also possible to use pure JS to write Übersicht widgets.</span></span>.<br />
That said it is actually pretty easy to write a widgets for and by yourself—at least if you do have some basic knowledge of web development—since it doesn’t require much more than the usual tools and the actually pretty comprehensive and well documented Übersicht-Readme which can be found on <a href="https://github.com/felixhageloh/uebersicht">Github</a>.</p>
<p info="Update" info_sub="2018-06-04 09:49:36 +0200">Initially this blogpost was intended to be published right along with the release of Wttr Forecast widget for Uebersicht. Since I was quite busy with the redesign and rebuilding of my new website—which you are looking at right now—I had to postpone the final push to my main domain in order to be able to release this writeup with all of the features my newly developed site provides.<br />
So while the actual release of this post might have been at the end of November 2017 the publishing date reflects the actual release on my website instead of its first appearance on my—public yet not easy to catch—beta section.
Just for the record:</p>
<p info="Update" info_sub="2018-06-04 09:49:36 +0200"><span class="highlighted">Initial Release: <code class="language-plaintext highlighter-rouge">2017-11-30 14:04:00 +0100</code></span></p>
<p><br /></p>
<h2 id="wttr-widget-for-übersicht">Wttr Widget for Übersicht</h2>
<p><img src="/assets/img/page/blog/wttr_thumbnail.jpg" alt="Wttr Widget for Übersicht" data-subtitle="Sourcecode, documentation and the ready to download product can be found on [Github](https://github.com/bkroggel/wttr)" />
There are actually quite a few Übersicht widgets out there that allow to display the current weather conditions right on the macOS desktop—so why write another one instead of just using what is already there?
Initially I actually was not interested in writing my own widget instead I was tinkering around with some already present code samples of other developers. Since I already knew what Übersicht is capable of I mainly was interested in how I could modify some function-wise very tempting products to fit a more macOS native look.<br />
But that did not feel <em>finished</em> at all—just a bunch of numbers and words that were floating around on my screen.
<img src="/assets/img/page/blog/info_widgets.jpg" alt="Info widget with a native macOS look" data-subtitle="based on code snippets and ideas to be found in the [Übersicht widget collection](http://tracesof.net/uebersicht-widgets/). Currently the widget itself cannot be found on the internet but if you are interested just let me know." />
Not being a huge fan of the native macOS notification center—and especially the widget part of it—I realized that I could not just polish the appearance of my newly created sidebar but also add the most relevant information for myself so I finally could use widgets on macOS in the way I <span class="sidenote"><span class="sidenote__toggle">expect it to behave</span><span class="sidenote__note">like on Android OS—displayed right on the main screens and therefore allowing important information to stick out of the usual data mess</span></span> instead of having to use and open an app to actually reach the most relevant information.
So what I was looking for was an easily but still fully featured weather forecast element—and everything should fit into my recently created macOS styled widget design. While there were a few things out there that kind of helped me to think through the process, there was nothing like the perfect solution for my case.<br />
<em>The reason I created it myself.</em></p>
<p><a href="http://tracesof.net/uebersicht-widgets/#wttr" class="btn">Get Wttr Forecast</a></p>
<h3 id="hands-on--the-features">Hands on + the Features</h3>
<p>The idea and the history aside let‘s dive into the actually features and therefore the “What” instead of the “Why”.
So what is the purpose of this piece of code?
After the initial thought of providing myself with a widget that not just allows to show some weather information in a beautiful and style-wise fitting design but also is capable of displaying multiple locations while still maintaining a slim and not overloaded appearance, I came up with a neat little solutions for one of the minor issues I had with Übersicht.<br />
But before we discuss that, let‘s start with a closer look at the overall features and the implementation of those in Wttr widget for Übersicht.
<img src="/assets/img/page/blog/wttr.gif" alt="Showcase of Wttr Forecast" class="lock" data-subtitle="a multi-location weather widget build for Übersicht" /></p>
<p>Above there is a short little image sequence that displays the most relevant characteristics of the widget.<br />
Wttr Forecast displays not just the <strong>current weather conditions</strong> (<em>temperature</em> as well as a <em>summary of the outside situation</em>) of your favorite places—<em>or the one you hate the most…that clearly depends on what you are looking for</em>—but also shows <strong>minimum</strong> and <strong>maximum temperatures</strong> for the upcoming two days as well as todays forecast and also adds the <strong>chance of rain</strong> for those days.<br />
Of course the whole package is rounded of by a <span class="sidenote"><span class="sidenote__toggle">nice little icon art</span><span class="sidenote__note">the icons as well as a lot more weather themed graphics are maintained by <a href="https://twitter.com/erik_flowers">Eric Flowers</a> & can be found <a href="http://erikflowers.github.io/weather-icons/">here</a></span></span> that gets dynamically changed depending on the weather situation as well as the actual time which is based on the location of your machine running macOS.</p>
<p class="quote">Wttr Forecast stores all weather information locally on your device and allows you to access forecasts even when you are offline.</p>
<p>But what are the possibilities besides the obvious feature of displaying multiple locations—basically just limited by the <span class="sidenote"><span class="sidenote__toggle">number of calls</span><span class="sidenote__note">more about that and an explanation of the configuration can be found in the <a href="#how-to">How-To section</a> </span></span> allowed by the weather API?</p>
<p>DarkSky—the US-based weather forecasting company that provides the weather information accessed by this widget—actually is one of the main big features of this product. Not really noticeable in its entire functionality from a user point of view does it provide a global coverage of current weather conditions as well as perfectly fine forecasting estimations. For the developer audience I also should mention that implementing DarkSky and using their API is an absolute breeze and just works like it should.
In conjunction with this API the widget allows to modify the output in a way to fit all—<em>alright let‘s say most of</em>—your needs.<br />
DarkSky for example provides weather condition summaries in <a href="https://darksky.net/dev/docs#api-request-types">dozens of different languages</a> which e.g. enables the widget to serve the forecasting data—customizable via a user-modifiable setting variable—in your mother tongue. Same goes for the temperature units which of course can be displayed in the metric as well as the imperial system.<br />
Besides that <em>of course</em> there is also a setting that enables the possibility to easily change the accent color—and therefore the highlighted rectangle containing the current date.</p>
<p>Last but not least a few thoughts about one of the <strong>main USPs</strong> of this widget in comparison to most of the other Übersicht addons out there.<br />
While using Übersicht in my daily life I noticed one big annoyance that did not really prevent me from using it but still bugged my a lot when it occurred.</p>
<p>I am speaking of the fact that mostly in situations where Übersicht is running before an actual internet connection is established—e.g. when you wake up your machine from a standby mode (Übersicht is instantly up and running while the WIFI network takes a short amount of time to actually set everything up)—the widget fails to reach out to the server and therefore displays a blank and—not just design-wise –å broken output.<br />
Since—I initially talked about that—Übersicht basically makes use of a WebKit instance I came up with a handy and more or less easy workaround to fix that issue.</p>
<p>Either hated or loved <a href="https://en.wikipedia.org/wiki/HTTP_cookie">Cookies</a> are the perfect solution for storing information via your browser locally on your machine and while it definitely is debatable if using a not really battery friendly web instance as the groundworks for Übersicht is the right decision, it sure makes it easy to transform web developing practices to a local environment. So whenever Wttr for Übersicht pulls updated forecasting information successfully from the DarkSky server those information get stored as cookies and therefore will be accessible for up to 48 hours—<em>even if there is no actually internet connection present</em>.</p>
<p>Of course it probably does not make too much sense to rely on outdated weather information—however since the widget still will try to reach out to the servers in the usually—and modifiable—update interval, it is clearly much more pleasant to actually get displayed <em>kind of</em> usable weather expectations instead of staring at a blank stack of widgets.</p>
<p>Anyways that could be an starting point for the next Übersicht widget that evolves and maybe it even nudges the development of the actually Übersicht software to take the another step and improve even further—I myself would love to see Übersicht and its users to extend the functionality and the variety of widgets in a much broader way and to come up with a lot of new use purposes to take the macOS desktop to the next level.</p>
<h3 id="how-to--a-short-manual">How To + A short manual</h3>
<p><em>There is a comprehensive How-To section and Readme in the <a href="https://github.com/bkroggel/wttr">GitHub Repository</a> for Wttr Forecast Widget. The following part will be heavily based on that. If you do have any questions please feel free to open a ticket on GitHub or reach out to me on <a href="https://twitter.com/derKroggel">Twitter</a></em></p>
<p>The overall starting process to get the Wttr widget up and running basically follows a <span class="sidenote"><span class="sidenote__toggle">simple step by step approach</span><span class="sidenote__note">if you already installed Übersicht and downloaded as well as moved the widget and its components to the right folder you can go ahead with bullet point No. 4</span></span> you can find below.</p>
<ol>
<li>Head over to <a href="http://tracesof.net/uebersicht/">the Übersicht website</a> and download as well as install the latest version of the core application</li>
<li>Either <a href="https://github.com/bkroggel/wttr/releases/download/1.0.1/wttr.widget.zip">click here</a> or head over to the Wttr widget repository on <a href="https://github.com/bkroggel/wttr">GitHub</a> to download the latest release</li>
<li>After downloading extract the <code class="language-plaintext highlighter-rouge">wttr.widget.zip</code> and move the <em>whole</em> <code class="language-plaintext highlighter-rouge">wttr.widget</code> folder to the Übersicht widgets folder<br />
<code class="language-plaintext highlighter-rouge">Übersicht menu bar symbol > Open Widgets Folder</code></li>
<li>Open: https://darksky.net/dev</li>
<li>Log in or Sign up if you haven’t created an (entirely free) account yet</li>
<li>Open <code class="language-plaintext highlighter-rouge">index.coffee</code> in your favorite TextEditor</li>
<li>Get your secret key (on the DarkSky website) and add it below to the <code class="language-plaintext highlighter-rouge">apiKey</code> section
(the key needs to be put in quotation marks)<br />
<span class="highlighted"><strong>NOTE:</strong> A detailed explanation of the various settings can be found <a href="https://github.com/bkroggel/wttr#settings">here</a></span></li>
</ol>
<p>After everything is installed correctly and the widget is connected to the DarkSky server you already can see the sample weather forecasts for London, Paris and New York.<br />
In order to set your own preferred locations you can of course modify the setup.</p>
<ol>
<li>create an id for your location<br />
(e.g. <code class="language-plaintext highlighter-rouge">lnd</code>)</li>
<li>add a name to your location which later will be displayed on your widget<br />
(e.g. <code class="language-plaintext highlighter-rouge">London, GB</code>)</li>
<li>add ‘Latitude’ as well as ‘Longitude’ information<br />
(e.g. <code class="language-plaintext highlighter-rouge">51.5287718</code> and <code class="language-plaintext highlighter-rouge">-0.2416814</code>)</li>
</ol>
<p>you can grab those information from <a href="https://maps.google.com">Google Maps</a>:</p>
<ol>
<li>open <a href="https://maps.google.com">maps.google.com</a></li>
<li>search for your desired location</li>
<li>get the URL:
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>https://www.google.com/maps/place/London,+United+Kingdom/@51.5287718,-0.2416814,11z/
you can find the important information here --> ^^^^^^^^^^ ^^^^^^^^^^
</code></pre></div> </div>
</li>
</ol>
<p>all in all the <code class="language-plaintext highlighter-rouge">location:</code> section will look like the following:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>location: #<-- do not remove this part
lnd:
name: 'London, GB'
lat: 51.5287718
lng: -0.2416814
</code></pre></div></div>
<p>and every other location can be added just like that:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>location: #<-- do not remove this part
lnd:
name: 'London, GB'
lat: 51.5287718
lng: -0.2416814
prs:
name: 'Paris, FR'
lat: 48.8589507
lng: 2.2770202
</code></pre></div></div>
<h2 id="credits">Credits</h2>
<p>Of course credits where credits belong—and this widget is basically a combination of multiple components that were already there—and a few additions from my side.<br />
So of course I would like to say <strong>Thank you</strong>.</p>
<p>The Wttr widget is mostly based on the <a href="https://github.com/rabad/uebersicht-multiple-locations-weather">Multiple Locations Weather widget</a> by <a href="https://github.com/rabad">Rubén Abad</a>. While major parts of this widget were rewritten it still makes use of the original data access as well as parse functions.</p>
<p>Design-wise this widget is highly influenced by a beautiful <a href="https://dribbble.com/shots/1563616-SimpL-Weather-Widget-PSD">SimpL Weather Widget</a> crafted by the wonderfully talented <a href="https://twitter.com/zramos94">Zahir Ramos</a>. Definitely go and check out his work on <a href="https://dribbble.com/zramos">dribble</a>.</p>
<p>The gorgeous <a href="https://github.com/erikflowers/weather-icons/">weather icons</a> crafted by <a href="http://www.helloerik.com/">Erik Flowers</a> cannot just be used as standalone icons but also as an easy to implement font. So in case you are wondering what else you could use to display the current weather situation I encourage you to check out the <a href="http://erikflowers.github.io/weather-icons/">project site</a>.</p>
<p>And last but not least thank you very much <a href="https://twitter.com/Felx">Felix</a> for creating and maintaining <a href="http://tracesof.net/uebersicht/">Übersicht</a>.</p>
<p info="Update" info_sub="2017-12-27 15:14:25 +0100">Version 1.0.1 of the Wttr Widget for Übersicht just got released.
While macOS Sierra users should not recognize any changes this update actually fixes an issue you could have encountered if you are living on the cutting edge side of things and already installed macOS High Sierra on your machine.
Thanks a lot to <a href="https://twitter.com/_martinc">@_martinc</a> who not just informed me about this bug but also was extremely patient and helpful while trying to find and resolve the issue.</p>Bastian KroggelI recently rediscovered a neat little app for macOS I already played with a few years ago when it was still in it‘s early days. While it matured a lot since then, the numbers of third party widgets/addons—an obviously crucial thing for such a solution, more about that in a second—increased tremendously, which made me feel like I definitely need to give this app another look and chance to stay on my machine. Übersicht app is a little menu bar application for macOS that according to its website runs system commands and displays its output on your desktop in little containers, called widgets. Achieved by a WebKit instance that runs basically in full screen mode as a layer between the actual desktop and the application/document icons, Übersicht allows to add nearly any kind of content to the macOS desktop that is driven by HTML5 as well as JavascriptÜbersicht makes use of CoffeeScript which can be easily mixed and compiled to JS. However if preferred, it is also possible to use pure JS to write Übersicht widgets.. That said it is actually pretty easy to write a widgets for and by yourself—at least if you do have some basic knowledge of web development—since it doesn’t require much more than the usual tools and the actually pretty comprehensive and well documented Übersicht-Readme which can be found on Github. Initially this blogpost was intended to be published right along with the release of Wttr Forecast widget for Uebersicht. Since I was quite busy with the redesign and rebuilding of my new website—which you are looking at right now—I had to postpone the final push to my main domain in order to be able to release this writeup with all of the features my newly developed site provides. So while the actual release of this post might have been at the end of November 2017 the publishing date reflects the actual release on my website instead of its first appearance on my—public yet not easy to catch—beta section. Just for the record: Initial Release: 2017-11-30 14:04:00 +0100 Wttr Widget for Übersicht There are actually quite a few Übersicht widgets out there that allow to display the current weather conditions right on the macOS desktop—so why write another one instead of just using what is already there? Initially I actually was not interested in writing my own widget instead I was tinkering around with some already present code samples of other developers. Since I already knew what Übersicht is capable of I mainly was interested in how I could modify some function-wise very tempting products to fit a more macOS native look. But that did not feel finished at all—just a bunch of numbers and words that were floating around on my screen. Not being a huge fan of the native macOS notification center—and especially the widget part of it—I realized that I could not just polish the appearance of my newly created sidebar but also add the most relevant information for myself so I finally could use widgets on macOS in the way I expect it to behavelike on Android OS—displayed right on the main screens and therefore allowing important information to stick out of the usual data mess instead of having to use and open an app to actually reach the most relevant information. So what I was looking for was an easily but still fully featured weather forecast element—and everything should fit into my recently created macOS styled widget design. While there were a few things out there that kind of helped me to think through the process, there was nothing like the perfect solution for my case. The reason I created it myself. Get Wttr Forecast Hands on + the Features The idea and the history aside let‘s dive into the actually features and therefore the “What” instead of the “Why”. So what is the purpose of this piece of code? After the initial thought of providing myself with a widget that not just allows to show some weather information in a beautiful and style-wise fitting design but also is capable of displaying multiple locations while still maintaining a slim and not overloaded appearance, I came up with a neat little solutions for one of the minor issues I had with Übersicht. But before we discuss that, let‘s start with a closer look at the overall features and the implementation of those in Wttr widget for Übersicht. Above there is a short little image sequence that displays the most relevant characteristics of the widget. Wttr Forecast displays not just the current weather conditions (temperature as well as a summary of the outside situation) of your favorite places—or the one you hate the most…that clearly depends on what you are looking for—but also shows minimum and maximum temperatures for the upcoming two days as well as todays forecast and also adds the chance of rain for those days. Of course the whole package is rounded of by a nice little icon artthe icons as well as a lot more weather themed graphics are maintained by Eric Flowers & can be found here that gets dynamically changed depending on the weather situation as well as the actual time which is based on the location of your machine running macOS. Wttr Forecast stores all weather information locally on your device and allows you to access forecasts even when you are offline. But what are the possibilities besides the obvious feature of displaying multiple locations—basically just limited by the number of callsmore about that and an explanation of the configuration can be found in the How-To section allowed by the weather API? DarkSky—the US-based weather forecasting company that provides the weather information accessed by this widget—actually is one of the main big features of this product. Not really noticeable in its entire functionality from a user point of view does it provide a global coverage of current weather conditions as well as perfectly fine forecasting estimations. For the developer audience I also should mention that implementing DarkSky and using their API is an absolute breeze and just works like it should. In conjunction with this API the widget allows to modify the output in a way to fit all—alright let‘s say most of—your needs. DarkSky for example provides weather condition summaries in dozens of different languages which e.g. enables the widget to serve the forecasting data—customizable via a user-modifiable setting variable—in your mother tongue. Same goes for the temperature units which of course can be displayed in the metric as well as the imperial system. Besides that of course there is also a setting that enables the possibility to easily change the accent color—and therefore the highlighted rectangle containing the current date. Last but not least a few thoughts about one of the main USPs of this widget in comparison to most of the other Übersicht addons out there. While using Übersicht in my daily life I noticed one big annoyance that did not really prevent me from using it but still bugged my a lot when it occurred. I am speaking of the fact that mostly in situations where Übersicht is running before an actual internet connection is established—e.g. when you wake up your machine from a standby mode (Übersicht is instantly up and running while the WIFI network takes a short amount of time to actually set everything up)—the widget fails to reach out to the server and therefore displays a blank and—not just design-wise –å broken output. Since—I initially talked about that—Übersicht basically makes use of a WebKit instance I came up with a handy and more or less easy workaround to fix that issue. Either hated or loved Cookies are the perfect solution for storing information via your browser locally on your machine and while it definitely is debatable if using a not really battery friendly web instance as the groundworks for Übersicht is the right decision, it sure makes it easy to transform web developing practices to a local environment. So whenever Wttr for Übersicht pulls updated forecasting information successfully from the DarkSky server those information get stored as cookies and therefore will be accessible for up to 48 hours—even if there is no actually internet connection present. Of course it probably does not make too much sense to rely on outdated weather information—however since the widget still will try to reach out to the servers in the usually—and modifiable—update interval, it is clearly much more pleasant to actually get displayed kind of usable weather expectations instead of staring at a blank stack of widgets. Anyways that could be an starting point for the next Übersicht widget that evolves and maybe it even nudges the development of the actually Übersicht software to take the another step and improve even further—I myself would love to see Übersicht and its users to extend the functionality and the variety of widgets in a much broader way and to come up with a lot of new use purposes to take the macOS desktop to the next level. How To + A short manual There is a comprehensive How-To section and Readme in the GitHub Repository for Wttr Forecast Widget. The following part will be heavily based on that. If you do have any questions please feel free to open a ticket on GitHub or reach out to me on Twitter The overall starting process to get the Wttr widget up and running basically follows a simple step by step approachif you already installed Übersicht and downloaded as well as moved the widget and its components to the right folder you can go ahead with bullet point No. 4 you can find below. Head over to the Übersicht website and download as well as install the latest version of the core application Either click here or head over to the Wttr widget repository on GitHub to download the latest release After downloading extract the wttr.widget.zip and move the whole wttr.widget folder to the Übersicht widgets folder Übersicht menu bar symbol > Open Widgets Folder Open: https://darksky.net/dev Log in or Sign up if you haven’t created an (entirely free) account yet Open index.coffee in your favorite TextEditor Get your secret key (on the DarkSky website) and add it below to the apiKey section (the key needs to be put in quotation marks) NOTE: A detailed explanation of the various settings can be found here After everything is installed correctly and the widget is connected to the DarkSky server you already can see the sample weather forecasts for London, Paris and New York. In order to set your own preferred locations you can of course modify the setup. create an id for your location (e.g. lnd) add a name to your location which later will be displayed on your widget (e.g. London, GB) add ‘Latitude’ as well as ‘Longitude’ information (e.g. 51.5287718 and -0.2416814) you can grab those information from Google Maps: open maps.google.com search for your desired location get the URL: https://www.google.com/maps/place/London,+United+Kingdom/@51.5287718,-0.2416814,11z/ you can find the important information here --> ^^^^^^^^^^ ^^^^^^^^^^ all in all the location: section will look like the following: location: #<-- do not remove this part lnd: name: 'London, GB' lat: 51.5287718 lng: -0.2416814 and every other location can be added just like that: location: #<-- do not remove this part lnd: name: 'London, GB' lat: 51.5287718 lng: -0.2416814 prs: name: 'Paris, FR' lat: 48.8589507 lng: 2.2770202 Credits Of course credits where credits belong—and this widget is basically a combination of multiple components that were already there—and a few additions from my side. So of course I would like to say Thank you. The Wttr widget is mostly based on the Multiple Locations Weather widget by Rubén Abad. While major parts of this widget were rewritten it still makes use of the original data access as well as parse functions. Design-wise this widget is highly influenced by a beautiful SimpL Weather Widget crafted by the wonderfully talented Zahir Ramos. Definitely go and check out his work on dribble. The gorgeous weather icons crafted by Erik Flowers cannot just be used as standalone icons but also as an easy to implement font. So in case you are wondering what else you could use to display the current weather situation I encourage you to check out the project site. And last but not least thank you very much Felix for creating and maintaining Übersicht. Version 1.0.1 of the Wttr Widget for Übersicht just got released. While macOS Sierra users should not recognize any changes this update actually fixes an issue you could have encountered if you are living on the cutting edge side of things and already installed macOS High Sierra on your machine. Thanks a lot to @_martinc who not just informed me about this bug but also was extremely patient and helpful while trying to find and resolve the issue.Time to start over again2018-05-30T18:32:12+02:002018-05-30T18:32:12+02:00https://www.bastiankroggel.com/blog/2018/Time-to-start-over-again<p class="intro">Its been close to 900 days since the initial launch of <em>www.bastiankroggel.com</em> and things have changed quite tremendously in the past two and a half years.<br />
Great Britain held a referendum and decided to leave the EU, Pokemon Go was released and changed the world we live in, Donald Trump was elected the 45th President of the United States and the german newspaper Sueddeutsche Zeitung published more than 13 million documents better known as the <a href="https://projekte.sueddeutsche.de/paradisepapers/politik/die-recherche-der-sueddeutsche-zeitung-e585964/">Paradise Papers</a>.
Now—yes, those are important transformations in our daily lives, but it most surely won’t affect my website—at least not immediately. However there are also shifts going on that actually do need my attention and made me interested in setting up a few new things here and there—which in the end led to this very new website.<br />
Please let me introduce you.</p>
<p>Back in 2015 at 24th of December when I released my own website to the public I was absolutely stoked and proud of what I was able to build after taking a web development course at <a href="https://careerfoundry.com/">CareerFoundry Berlin</a> and getting my hands dirty with some code. Sure, I definitely had to work out some quirks and like with everything you do for the first time (better: tim<strong>es</strong>) you heavily evolve within the process and kind of would like to start over again at the moment the finishing line reaches the horizon.</p>
<p>Initially I planned to work on the website from time to time, but after adding some blog posts and more or less maintaining a few parts of the website that needed my attention in order to keep working, I never really came around to actually push the site further.<br />
What happened was, I kind of abandoned the project.<br />
It sure was there. Up and running and thanks to the <a href="https://jamstack.org/">JAMstack</a> approach it actually did not need much efforts in order to stay there, however it just did not feel like it was mine anymore.</p>
<p>In all that time I had quite some ideas how a freshly designed website could look, what could be possible for me to add and of course what I would love to learn and use the website for.<br />
Scrolling around through the web you most certainly get confronted with some nice design inspirations of very well build website and over the months there was a Sketch file on my Mac growing that contained various ideas and mockups of sites and UI elements that potentially could rebuild my website. But then again, just the idea of a design-refresh didn’t pull the trigger for me to sit down and start over.</p>
<p><img src="/assets/img/page/blog/bk_v2.jpg" alt="Image of the current iteration of www.bastiankroggel.com" data-title="Landingpage of www.bastiankroggel.com after the new release" data-subtitle="screenshot taken at 10/05/2018" /></p>
<p>That is when <a href="https://www.netlify.com/">Netlify</a> crossed my mind.<br />
I already mentioned <strong>JAMstack</strong> above and I have written—at least in a very basic way—about my belief in using static sites before. However at that point of this article I probably should add a few thoughts and a—by no means comprehensive—overview of it.</p>
<h2 id="jamstack">JAMstack</h2>
<p>The underlying basics of the JAMstack approach actually go back to the roots of the internet. Published <a href="http://edition.cnn.com/2003/US/03/10/sprj.80.1991.www/">on August 6, 1991</a> the <a href="http://info.cern.ch/hypertext/WWW/TheProject.html">first website</a> appeared on the unknown and definitely not popular internet and the code that served this piece of history was nothing but hand-coded lines of html. There was no Content Managing System (CMS) like <a href="https://wordpress.org/">Wordpress</a>, <a href="https://www.drupal.org/">Drupal</a> or <a href="https://www.joomla.org/">Joomla</a>—just to mention a few bigger ones in a quite diverse ecosystem—out there or even in the making yet. Instead of using themes and adding your content, which nowadays can easily be done by non-coders, the knowledge of how to build a website was the minimal requirements to get something published.</p>
<p>More than 25 years later the web has changed dramatically and a single CMS like Wordpress is responsible for the base of 30% of all websites currently out there on the internet.<sup id="fnref:source_cms" role="doc-noteref"><a href="#fn:source_cms" class="footnote" rel="footnote">1</a></sup><br />
Now that arguably has quite some advantages, like the easy to maintain content of websites, a plug-and-play like add-on system that allows you to add functionalities to your website without much efforts or hours of work and of course some of those solutions provide you with hosted and managed packages which basically enables everybody to sign up and get their thoughts out with just a few clicks and pretty much no coding skills at all. Thats a <em>180 degree turn</em> in comparison to 1991 and it is definitely something that is beautiful for the ecosystem “internet” and something that empowers people.<br />
But it also has a few downsides on which I would like to shed some light below.</p>
<ol>
<li>In most cases systems like Wordpress complicate things without much necessity. The common blogger most often does not need a server in its back that renders the website on a user basis or e.g. allows visitors to log-in. Pre-build sites can be served much <strong>faster</strong> and without additional hassle that server-side on-time build processes usually add.</li>
<li>Server-side rendering also means that there is always the potential risk of opening yourself up to threats like hackers, malicious code-injections or just some bugs that probably occur only due to your set-up and way of using multiple plug-ins. JAMstack websites usually fight those issues by only hosting the “non-modifiable” site on a server that basically just serves the website without <em>much/any</em> accessibility from the user perspective and therefor reducing the surface areas for attacks to a minimum—or in other words—makes it <strong>safer</strong>.</li>
<li>What often is an important aspect to website owners is <em>money</em> and while you could potentially put up your blog on Wordpress without paying a dime, you—in that case—would be limited to a few features that in the end do not include your personal custom domain (like: www.yourname.com) or a non-limited access to the appearance of your page, which in the end forms the recognition value of your website.<br />
Believe it or not I do not pay anything for this website at all—it’s <strong>free</strong>. Sure, I had to buy my domain like everybody else, but besides that you have got great tools nowadays like GitHub Pages, GitLab pages, AmazonAWS or <span class="sidenote inline"><span class="sidenote__toggle">Netlify</span><span class="sidenote__note">there are actually limits that should be mentioned but if you take a look at the <a href="https://www.netlify.com/tos/#quota-limits">soft caps Netlify sets at 100GB/month</a> you probably should not worry much about your site being taken offline do to some excessive access</span></span>—which I am going to speak about in a second—that provide you with all the tools to publish your website without any additional costs while beyond that being a breeze to handle.<br />
Besides that—if you publish the new sensation on the internet and hundreds of people would like to access it—that is actually a non-issue with a static site served by the common hosting providers out there. Since your website is already pre-build they only need to serve it, which in terms of <strong>scalability</strong> outdoes any other server-side rendering solution that most surely will break and take your servers down if more people than usually (and what you paid for) try to access your website at the same time.</li>
<li>Last but not least, it is about <strong>developer experience</strong>. Of course there is a lot of personal bias included in this last point, but the vast variety of <span class="sidenote inline"><span class="sidenote__toggle">static site generators</span><span class="sidenote__note">static site generators basically combine the simple developer experience of <em>hard coded websites</em> and the easy content maintainability of classic and more or less established CMS solutions</span></span> out there, forms—at least in my opinion—a hard to be overlooked fact, that the JAMstack approach is kind of the golden middle for a lot of projects. Even bigger publishing companies like <a href="https://www.smashingmagazine.com/">Smashing Magazine</a> pulled the plug on classic CMS systems and migrated their underlying set-up over to a <a href="https://www.smashingmagazine.com/2017/03/a-little-surprise-is-waiting-for-you-here/">quite interesting JAMstack approach</a>.
All in all—and of course if you either do have the skills or than man power—at this point in time you should most surely not treat static, JAMstack based sites as the platform for small, underground-blogs and “neerdy” hackers anymore—there are the possibilities to actually go much further with this set-up and it is time to take that into consideration.</li>
</ol>
<p>That said you actually can see why I concentrated on a JAMstack approach in the first place—and to be quite honest especially the price and the fact that it is easily modifiable with a minimum amount of coding knowledge (so kind of the perfect playground) had a strong appeal to me.</p>
<p>Now I talked about changes before and that a purely cosmetic relaunch was not something I was much interested in.<br />
The truth is, I always had one thing in mind that I wanted to add to my side—and which is now, at least in an early implementation ready to be used.<br />
Before it gets confusing when I am talking about a static generator CMS I would like to explain the difference between the classic, established CMS systems and a frontend CMS based on a static site.</p>
<p>To distinguish the both approaches we could easily take a very simplified look at what happens when a user accesses the website.<br />
In <em>Situation_1</em>, the established CMS, a user tries to visit the website. When he reaches out to the destination server, the template will be loaded from the server, the content itself from the database, both parts will be merged together and send back to the machine where the inquiry came from.<br />
Now a look at <em>Situation_2</em>. With a static generator CMS we actually have to start a little bit earlier in the process and compare it to <em>Situation_1</em>. At the point when the admin or the content creator adds some information to the CMS (and saves it) it will actually not be send to a database but instead implemented right away in the html code. If a visitor now tries to access the website there is no merging of content and template needed. The entire website will be instantly served to the user.</p>
<p>The important aspect—besides the speed improvement also mentioned in point 1 of the above enumeration—is that while in <em>Situation_1</em> the CMS usually has to be heavily integrated and usually is mandatory in order to work, a CMS in <em>Situation_2</em>—the static site generator—is neither mandatory nor does the admin need to stick to a single CMS since there are multiple SaS solutions out there which can be more or less easily integrated in a build process and are most often interchangeable.</p>
<p>Since a static site runs perfectly without such a system, I skipped the part of integrating one in the first iteration of my website—however as more and more solutions emerged—like the very promising <a href="https://forestry.io">Forestry.io</a> or the, in this website integrated, open-sourced <a href="https://www.netlifycms.org/">Netlify CMS</a>, I felt the need to actually get my hands on a CMS and illuminate if there is any advantage in for me and if it is worth it to put some time and energy in the implementation process.</p>
<h3 id="netlify">Netlify</h3>
<p>I already started mentioning Netlify quite a bit—yes, their product is most surely another reason why I sat down and started rewriting my website. There is absolutely nothing bad to say about GitHub and their ability to host static sites, it is just that the Netlify-approach with its additional features felt more like an offer ready for the production environment.</p>
<p>Their package e.g. includes:</p>
<ul>
<li>a free <a href="https://letsencrypt.org/">Let’s Encrypt</a> SSL/TLS certificate</li>
<li>asset optimization—js and css-files get bundled and minified, images lossless compressed and there is the ability to even beautify URLs</li>
<li>snippet injections which allow you to e.g. add analytics code without touching the actual website</li>
<li>Netlify CMS is compatible with <strong>any</strong> static site generator and even lets you run custom plug-ins on top of their service</li>
<li>custom build commands allow you to easily set specific environmental variables</li>
<li>they provide forms, identity services, custom redirections and let you set the branches of a git repository to multiple domains (so you can get a alpha.yourname.com, beta.yourname.com and yourname.com all from one repository with multiple branches)</li>
</ul>
<p>I could have easily switched my old website over to their hosting product, however the package that they provide kind of allowed me to free myself from the restricted garden GitHub serves its customers with.
In conjunction with the ability to actually include a <em>nearly</em> fully featured, well integrated CMS to my website, I felt an urge to start over again and do a few things differently this time.</p>
<p>Now I do know that GitHub actually added <a href="https://blog.github.com/2018-05-01-github-pages-custom-domains-https/">free support for <strong>HTTPS</strong> on custom domains</a> starting this month, but to be honest—just from my point of view of course—that was way to late to make everybody relax.
It is true that a website which does not provide any text-input or send files back to the servers technically does not need a SSL/TLS connection at all. However it nowadays is kind of a quality sign (not just for <a href="https://searchengineland.com/google-starts-giving-ranking-boost-secure-httpsssl-sites-199446"><strong>SEO</strong></a> but also for the users) to provide state-of-the-art security and if it can be achieved as simple as adding a certificate by Let’s Encrypt it really should be a no-brainer to implement it as soon as possible.</p>
<p>That said I am not in the position to judge the decisions made at the GitHub HQ and to be absolutely fair they actually added that feature before <a href="https://searchengineland.com/effective-july-2018-googles-chrome-browser-will-mark-non-https-sites-as-not-secure-291623">Google starts warning visually</a> about accessed sites that lack a secure https-connection at the beginning of July 2018.</p>
<h2 id="to-sum-it-up">To sum it up</h2>
<p>Initially this blog post was meant to be a short introduction and showcase of the new design of my website—but as you can see (or better read) it became more of a writeup about how I have chosen my tools and services and what made me rewrite my website in the first place.
<img src="/assets/img/page/blog/bk_v1.jpg" alt="First Iteration of www.bastiankroggel.com" data-title="A throwback to the landingpage of the first version of www.bastiankroggel.com" data-subtitle="the website is still up and running (though not maintained) and can be found [here](https://v1.bastiankroggel.com)." /></p>
<p>All in all there can easily three main reasons be identified:</p>
<ol>
<li><strong>HTTPS</strong> was an important aspect for me which GitHub Pages lacked for more time than I was willing to wait + the product Netlify provides was just too tempting to not give them the chance to persuade me of their services</li>
<li>A static generator <strong>CMS</strong> was a feature I had been looking at for a long time and the package Netlify offers with the conjunction of a CMS as well as the build process and the hosting all done on their servers looked quite promising</li>
<li>I am not going to lie about that: Though I still like the plain design approach I took with the first iteration of my website—I just felt I could do better than that. Not just on the visible part of it but also on the codebase which was not really meant to be modified</li>
</ol>
<p>Those topics are most surely not ultimately discussed in their entirety so I am definitely going to put up more about Netlify, its open-source CMS <a href="https://www.netlifycms.org">Netlify CMS</a> and my overall experience with JAMstack and all of its niches and curiosities.</p>
<p>The showcase, which this article was initially meant to be can be found <del><a href="">here</a></del><em>(it soon will be published, I promise)</em> since this article is already starting to be way longer than expected. So if you are actually interested in the features this blog sections holds, feel free to take a look.</p>
<p><em>I would like to end this article with a short, personal note:</em><br />
Building something that actually makes me feel like I did my best takes time, it sure costs a lot of energy and to be honest I am not really sure that it is entirely possible at all. Moving forward from day to day and line of code to line of code I actually learn so much in the process of creating that I would like to start over again at the moment I am close to calling it a ‘finished product’.
This site will most surely evolve over time, I have some ideas and features I would like to implement soon and—since I have already invested so much time and energy in this project I hope I will not abandon this site as fast as I did it with the previous version.</p>
<p>Now, feel free to take a look around and of course let me know if there is something I should be aware of—bugs, missing features or just something you would like to talk about, my <a href="/about#contact">contact section</a> is always there for you.</p>
<p>Enjoy your day.</p>
<div class="footnotes" role="doc-endnotes">
<ol>
<li id="fn:source_cms" role="doc-endnote">
<p>https://w3techs.com/technologies/overview/content_management/all <a href="#fnref:source_cms" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
</ol>
</div>Bastian KroggelIts been close to 900 days since the initial launch of www.bastiankroggel.com and things have changed quite tremendously in the past two and a half years. Great Britain held a referendum and decided to leave the EU, Pokemon Go was released and changed the world we live in, Donald Trump was elected the 45th President of the United States and the german newspaper Sueddeutsche Zeitung published more than 13 million documents better known as the Paradise Papers. Now—yes, those are important transformations in our daily lives, but it most surely won’t affect my website—at least not immediately. However there are also shifts going on that actually do need my attention and made me interested in setting up a few new things here and there—which in the end led to this very new website. Please let me introduce you. Back in 2015 at 24th of December when I released my own website to the public I was absolutely stoked and proud of what I was able to build after taking a web development course at CareerFoundry Berlin and getting my hands dirty with some code. Sure, I definitely had to work out some quirks and like with everything you do for the first time (better: times) you heavily evolve within the process and kind of would like to start over again at the moment the finishing line reaches the horizon. Initially I planned to work on the website from time to time, but after adding some blog posts and more or less maintaining a few parts of the website that needed my attention in order to keep working, I never really came around to actually push the site further. What happened was, I kind of abandoned the project. It sure was there. Up and running and thanks to the JAMstack approach it actually did not need much efforts in order to stay there, however it just did not feel like it was mine anymore. In all that time I had quite some ideas how a freshly designed website could look, what could be possible for me to add and of course what I would love to learn and use the website for. Scrolling around through the web you most certainly get confronted with some nice design inspirations of very well build website and over the months there was a Sketch file on my Mac growing that contained various ideas and mockups of sites and UI elements that potentially could rebuild my website. But then again, just the idea of a design-refresh didn’t pull the trigger for me to sit down and start over. That is when Netlify crossed my mind. I already mentioned JAMstack above and I have written—at least in a very basic way—about my belief in using static sites before. However at that point of this article I probably should add a few thoughts and a—by no means comprehensive—overview of it. JAMstack The underlying basics of the JAMstack approach actually go back to the roots of the internet. Published on August 6, 1991 the first website appeared on the unknown and definitely not popular internet and the code that served this piece of history was nothing but hand-coded lines of html. There was no Content Managing System (CMS) like Wordpress, Drupal or Joomla—just to mention a few bigger ones in a quite diverse ecosystem—out there or even in the making yet. Instead of using themes and adding your content, which nowadays can easily be done by non-coders, the knowledge of how to build a website was the minimal requirements to get something published. More than 25 years later the web has changed dramatically and a single CMS like Wordpress is responsible for the base of 30% of all websites currently out there on the internet.1 Now that arguably has quite some advantages, like the easy to maintain content of websites, a plug-and-play like add-on system that allows you to add functionalities to your website without much efforts or hours of work and of course some of those solutions provide you with hosted and managed packages which basically enables everybody to sign up and get their thoughts out with just a few clicks and pretty much no coding skills at all. Thats a 180 degree turn in comparison to 1991 and it is definitely something that is beautiful for the ecosystem “internet” and something that empowers people. But it also has a few downsides on which I would like to shed some light below. In most cases systems like Wordpress complicate things without much necessity. The common blogger most often does not need a server in its back that renders the website on a user basis or e.g. allows visitors to log-in. Pre-build sites can be served much faster and without additional hassle that server-side on-time build processes usually add. Server-side rendering also means that there is always the potential risk of opening yourself up to threats like hackers, malicious code-injections or just some bugs that probably occur only due to your set-up and way of using multiple plug-ins. JAMstack websites usually fight those issues by only hosting the “non-modifiable” site on a server that basically just serves the website without much/any accessibility from the user perspective and therefor reducing the surface areas for attacks to a minimum—or in other words—makes it safer. What often is an important aspect to website owners is money and while you could potentially put up your blog on Wordpress without paying a dime, you—in that case—would be limited to a few features that in the end do not include your personal custom domain (like: www.yourname.com) or a non-limited access to the appearance of your page, which in the end forms the recognition value of your website. Believe it or not I do not pay anything for this website at all—it’s free. Sure, I had to buy my domain like everybody else, but besides that you have got great tools nowadays like GitHub Pages, GitLab pages, AmazonAWS or Netlifythere are actually limits that should be mentioned but if you take a look at the soft caps Netlify sets at 100GB/month you probably should not worry much about your site being taken offline do to some excessive access—which I am going to speak about in a second—that provide you with all the tools to publish your website without any additional costs while beyond that being a breeze to handle. Besides that—if you publish the new sensation on the internet and hundreds of people would like to access it—that is actually a non-issue with a static site served by the common hosting providers out there. Since your website is already pre-build they only need to serve it, which in terms of scalability outdoes any other server-side rendering solution that most surely will break and take your servers down if more people than usually (and what you paid for) try to access your website at the same time. Last but not least, it is about developer experience. Of course there is a lot of personal bias included in this last point, but the vast variety of static site generatorsstatic site generators basically combine the simple developer experience of hard coded websites and the easy content maintainability of classic and more or less established CMS solutions out there, forms—at least in my opinion—a hard to be overlooked fact, that the JAMstack approach is kind of the golden middle for a lot of projects. Even bigger publishing companies like Smashing Magazine pulled the plug on classic CMS systems and migrated their underlying set-up over to a quite interesting JAMstack approach. All in all—and of course if you either do have the skills or than man power—at this point in time you should most surely not treat static, JAMstack based sites as the platform for small, underground-blogs and “neerdy” hackers anymore—there are the possibilities to actually go much further with this set-up and it is time to take that into consideration. That said you actually can see why I concentrated on a JAMstack approach in the first place—and to be quite honest especially the price and the fact that it is easily modifiable with a minimum amount of coding knowledge (so kind of the perfect playground) had a strong appeal to me. Now I talked about changes before and that a purely cosmetic relaunch was not something I was much interested in. The truth is, I always had one thing in mind that I wanted to add to my side—and which is now, at least in an early implementation ready to be used. Before it gets confusing when I am talking about a static generator CMS I would like to explain the difference between the classic, established CMS systems and a frontend CMS based on a static site. To distinguish the both approaches we could easily take a very simplified look at what happens when a user accesses the website. In Situation_1, the established CMS, a user tries to visit the website. When he reaches out to the destination server, the template will be loaded from the server, the content itself from the database, both parts will be merged together and send back to the machine where the inquiry came from. Now a look at Situation_2. With a static generator CMS we actually have to start a little bit earlier in the process and compare it to Situation_1. At the point when the admin or the content creator adds some information to the CMS (and saves it) it will actually not be send to a database but instead implemented right away in the html code. If a visitor now tries to access the website there is no merging of content and template needed. The entire website will be instantly served to the user. The important aspect—besides the speed improvement also mentioned in point 1 of the above enumeration—is that while in Situation_1 the CMS usually has to be heavily integrated and usually is mandatory in order to work, a CMS in Situation_2—the static site generator—is neither mandatory nor does the admin need to stick to a single CMS since there are multiple SaS solutions out there which can be more or less easily integrated in a build process and are most often interchangeable. Since a static site runs perfectly without such a system, I skipped the part of integrating one in the first iteration of my website—however as more and more solutions emerged—like the very promising Forestry.io or the, in this website integrated, open-sourced Netlify CMS, I felt the need to actually get my hands on a CMS and illuminate if there is any advantage in for me and if it is worth it to put some time and energy in the implementation process. Netlify I already started mentioning Netlify quite a bit—yes, their product is most surely another reason why I sat down and started rewriting my website. There is absolutely nothing bad to say about GitHub and their ability to host static sites, it is just that the Netlify-approach with its additional features felt more like an offer ready for the production environment. Their package e.g. includes: a free Let’s Encrypt SSL/TLS certificate asset optimization—js and css-files get bundled and minified, images lossless compressed and there is the ability to even beautify URLs snippet injections which allow you to e.g. add analytics code without touching the actual website Netlify CMS is compatible with any static site generator and even lets you run custom plug-ins on top of their service custom build commands allow you to easily set specific environmental variables they provide forms, identity services, custom redirections and let you set the branches of a git repository to multiple domains (so you can get a alpha.yourname.com, beta.yourname.com and yourname.com all from one repository with multiple branches) I could have easily switched my old website over to their hosting product, however the package that they provide kind of allowed me to free myself from the restricted garden GitHub serves its customers with. In conjunction with the ability to actually include a nearly fully featured, well integrated CMS to my website, I felt an urge to start over again and do a few things differently this time. Now I do know that GitHub actually added free support for HTTPS on custom domains starting this month, but to be honest—just from my point of view of course—that was way to late to make everybody relax. It is true that a website which does not provide any text-input or send files back to the servers technically does not need a SSL/TLS connection at all. However it nowadays is kind of a quality sign (not just for SEO but also for the users) to provide state-of-the-art security and if it can be achieved as simple as adding a certificate by Let’s Encrypt it really should be a no-brainer to implement it as soon as possible. That said I am not in the position to judge the decisions made at the GitHub HQ and to be absolutely fair they actually added that feature before Google starts warning visually about accessed sites that lack a secure https-connection at the beginning of July 2018. To sum it up Initially this blog post was meant to be a short introduction and showcase of the new design of my website—but as you can see (or better read) it became more of a writeup about how I have chosen my tools and services and what made me rewrite my website in the first place. All in all there can easily three main reasons be identified: HTTPS was an important aspect for me which GitHub Pages lacked for more time than I was willing to wait + the product Netlify provides was just too tempting to not give them the chance to persuade me of their services A static generator CMS was a feature I had been looking at for a long time and the package Netlify offers with the conjunction of a CMS as well as the build process and the hosting all done on their servers looked quite promising I am not going to lie about that: Though I still like the plain design approach I took with the first iteration of my website—I just felt I could do better than that. Not just on the visible part of it but also on the codebase which was not really meant to be modified Those topics are most surely not ultimately discussed in their entirety so I am definitely going to put up more about Netlify, its open-source CMS Netlify CMS and my overall experience with JAMstack and all of its niches and curiosities. The showcase, which this article was initially meant to be can be found here(it soon will be published, I promise) since this article is already starting to be way longer than expected. So if you are actually interested in the features this blog sections holds, feel free to take a look. I would like to end this article with a short, personal note: Building something that actually makes me feel like I did my best takes time, it sure costs a lot of energy and to be honest I am not really sure that it is entirely possible at all. Moving forward from day to day and line of code to line of code I actually learn so much in the process of creating that I would like to start over again at the moment I am close to calling it a ‘finished product’. This site will most surely evolve over time, I have some ideas and features I would like to implement soon and—since I have already invested so much time and energy in this project I hope I will not abandon this site as fast as I did it with the previous version. Now, feel free to take a look around and of course let me know if there is something I should be aware of—bugs, missing features or just something you would like to talk about, my contact section is always there for you. Enjoy your day. https://w3techs.com/technologies/overview/content_management/all ↩The static way of presenting your tweets2016-03-25T14:16:00+01:002016-03-25T14:16:00+01:00https://www.bastiankroggel.com/2016/03/25/The-static-way-of-presenting-your-tweets<p>Let’s start this introduction about a sweet little workaround for a javascript based <a href="https://twitter.com">twitter</a> widget with a big <em>hug</em> and a <em>Happy Birthday!</em> (…sorry, I am a little late to the 10th anniversary party)<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup> to the whole twitter team that created such a tremendously useful service, where people can connect and share their thougts in a short but very effective way.</p>
<p>Sure. Twitter has it up and downsides like any other platform and while <span class="highlighted">a lot of devs are upset about a restrictive API policy</span> (just think about the <a href="https://dev.twitter.com/faq/rules-and-policies">token limit</a> for 3rd party twitter clients) there is a big community of creative heads that try to find the right solution for nearly any concern you might be possible to think of.</p>
<p>While working on my little personal website I came up with the idea, that a short excerpt of my twitter feed at the bottom of page might be a design and information element that would complement my site in a nice way.</p>
<!-- more -->
<p><img src="/assets/img/page/blog/2016/March/twitter-official.png" alt="Offical Twitter Widget" data-title="Official Twitter Widget" data-subtitle="Individually accessible via [https://twitter.com/settings/widgets](https://twitter.com/settings/widgets)" /></p>
<p>Speaking of a nice design: Using the official <a href="https://dev.twitter.com/web/embedded-timelines">Embedded Timeline</a> Feature of Twitter wasn’t really an option for me. Of course, there are definitely some situations, where a simple and fast working solution might come in handy, but creating a website based on a simplistic approach definitely needs a much more tailored and well fitting option.</p>
<p>You think that shouldn’t be a problem? (Well…it is).<br />
There are a great amout of plugins out there that totally fit my needs, execpt of one little detail. While <a href="http://sonnyt.com/Tweetie/">Tweetie</a> by <a href="http://sonnyt.com/">Sonny T.</a> for example is a outstandingly easy to use jQuery plugin that totally looks like a no-questions-asked solution, it depends (and that is totally not the fault of the developer) on the Twitter 1.1 API and therefore needs a server side authentication via an OAUTH process. Of course that is not a bummer if you already run your page on a PHP server (or probably most of the other server side processing solutions) but what if you are one of those guys who try to keep everything as simple as possible. What if you use a totally plain approach and deploy your website with a <a href="https://www.staticgen.com/">static site generator</a> like <a href="http://jekyllrb.com">Jekyll</a>, <a href="http://gohugo.io/">Hugo</a> or <a href="https://www.staticgen.com/middleman">Middleman</a>?<sup id="fnref:2" role="doc-noteref"><a href="#fn:2" class="footnote" rel="footnote">2</a></sup></p>
<p>Looks like you’ve got a little problem my dear web developer.<br />
Or to put it in a better way: You’ve got a little problem if you don’t now, where to go.</p>
<p>As you might have guessed (for example by reading the title of this post) I do not want to complain about anything at all, but provide a solution. Not as a creator of this workaround, but as the guy who points you in the right direction.</p>
<p>So let me introduce you to the glorious javascript only approach:</p>
<h2 id="twitter-post-fetcher-by-jason-mayes"><a href="http://www.jasonmayes.com/projects/twitterApi">Twitter-Post-Fetcher by Jason Mayes</a></h2>
<p>Alright. Now you’ve got the chance to take a look at your new way of embedding twitter timelines, but let me tell you a few things about how this JavaScript component works (and can be used) and why it is a real game changer for any user of static site generators.</p>
<p class="img100"><img src="/assets/img/page/blog/2016/March/twitter1.png" alt="Twitter-Post-Fetcher" data-title="Twitter-Post-Fetcher" data-subtitle="[Link](http://bastiankroggel.com/#twitter) to implementation in production environment" /></p>
<p>Above you can see a screenshot of my very own <a href="http://www.jasonmayes.com/projects/twitterApi">Twitter-Post-Fetcher</a> implementation, which powers the twitter section of my homepage. You’ll probably notice that the feed looks quite different in comparison to the official twitter widget and even the <a href="http://codepen.io/jasonmayes/full/Ioype/">example</a> of Jason Mayes uses a completely different approach with it’s basic top to bottom presentation.</p>
<p>What you should have recognized. I was <em>looking for</em> individualism. I’ve <em>got</em> individualsim.<br />
To be honest, while this nice looking javascript hack has a lot of advantages there is definitely a downside you should know how to deal with.</p>
<p>First of all. <strong>It is javascript</strong>. Wow, what a surprise. While most of you won’t think of it as a disadvantage it disqualifys Twitter-Post-Fetcher as an option for users who don’t have any basic knowledge of the most common web developing languages. HTML, CSS, and Javascript shouldn’t be strange acronyms for you. Bear in mind that there isn’t any way to modify (or even set up) your personalized version of the component without writing some (yeah…very basic) lines of javascript and html code.</p>
<h3 id="the-simple-example">The simple example</h3>
<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">var</span> <span class="nx">config1</span> <span class="o">=</span> <span class="p">{</span>
<span class="dl">"</span><span class="s2">id</span><span class="dl">"</span><span class="p">:</span> <span class="dl">'</span><span class="s1">345170787868762112</span><span class="dl">'</span><span class="p">,</span>
<span class="dl">"</span><span class="s2">domId</span><span class="dl">"</span><span class="p">:</span> <span class="dl">'</span><span class="s1">example1</span><span class="dl">'</span><span class="p">,</span>
<span class="dl">"</span><span class="s2">maxTweets</span><span class="dl">"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
<span class="dl">"</span><span class="s2">enableLinks</span><span class="dl">"</span><span class="p">:</span> <span class="kc">true</span>
<span class="p">};</span>
<span class="nx">twitterFetcher</span><span class="p">.</span><span class="nx">fetch</span><span class="p">(</span><span class="nx">config1</span><span class="p">);</span>
</code></pre></div></div>
<p>With this simple example I copied from the <a href="https://github.com/jasonmayes/Twitter-Post-Fetcher">official Github repository</a> it is quite easy to understand the underlying principles of this javascript component. Unlike server side solutions Twitter-Post-Fetcher doesn’t ask Twitter for the latest posts, but fetches the actual tweets from a official Twitter Widget and dismantels the usefull content from the unnecessary, bloated widget you have seen in the <a href="#thefourth">4th paragraph</a> of this blog post.<br />
Essential for this procedure is a valid <code class="language-plaintext highlighter-rouge">id</code> you can extract from the URL of your created widgets you can find in your Twitter settings on the left hand site under the item entitled “widgets”. Or as the documentation puts it:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Go to www.twitter.com and sign in as normal, go to your settings page.
Go to "Widgets" on the left hand side.
Create a new widget for what you need eg "user time line" or "search" etc.
Feel free to check "exclude replies" if you don't want replies in results.
Now go back to settings page, and then go back to widgets page and
you should see the widget you just created. Click edit.
Look at the URL in your web browser, you will see a long number like this:
345735908357048478
</code></pre></div></div>
<p>Knowing this <code class="language-plaintext highlighter-rouge">id</code> (and entering it at the right spot) you simple need to link the <code class="language-plaintext highlighter-rouge">domID</code> variable to an existing container in your HTML document and call it with the command you can see above.</p>
<p>The developers of this project implemented a few different options into their product which allows you to customize the output in a very clear way. The <a href="https://github.com/jasonmayes/Twitter-Post-Fetcher/blob/master/js/exampleUsage.js">example usage document</a> collects all of the settings and is the perfect place to go if you would like to dive deeper into this tailored solution.</p>
<p>From my point of view there is one major feature you definitely should know about. With the variable <code class="language-plaintext highlighter-rouge">customCallback</code> you are able to set the proper enclosing html elements and classes to your own Twitter-Post-Fetcher.</p>
<p>Take a look at the code example I am using for my site:</p>
<div class="language-javascript block highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">var</span> <span class="nx">config2</span> <span class="o">=</span> <span class="p">{</span>
<span class="dl">"</span><span class="s2">id</span><span class="dl">"</span><span class="p">:</span> <span class="dl">'</span><span class="s1">345170787868762112</span><span class="dl">'</span><span class="p">,</span>
<span class="dl">"</span><span class="s2">domId</span><span class="dl">"</span><span class="p">:</span> <span class="dl">'</span><span class="s1">twitter-posts</span><span class="dl">'</span><span class="p">,</span>
<span class="dl">"</span><span class="s2">maxTweets</span><span class="dl">"</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span>
<span class="dl">"</span><span class="s2">enableLinks</span><span class="dl">"</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span>
<span class="dl">"</span><span class="s2">showTime</span><span class="dl">"</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span>
<span class="dl">"</span><span class="s2">customCallback</span><span class="dl">"</span><span class="p">:</span> <span class="nx">handleTweets</span>
<span class="p">};</span>
<span class="kd">function</span> <span class="nx">handleTweets</span><span class="p">(</span><span class="nx">tweets</span><span class="p">)</span> <span class="p">{</span>
<span class="kd">var</span> <span class="nx">x</span> <span class="o">=</span> <span class="nx">tweets</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span>
<span class="kd">var</span> <span class="nx">n</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="kd">var</span> <span class="nx">element</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="dl">'</span><span class="s1">twitter-posts</span><span class="dl">'</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">html</span> <span class="o">=</span> <span class="dl">'</span><span class="s1"><div class="row"></span><span class="dl">'</span><span class="p">;</span>
<span class="k">while</span><span class="p">(</span><span class="nx">n</span> <span class="o"><</span> <span class="nx">x</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">html</span> <span class="o">+=</span> <span class="dl">'</span><span class="s1"><div class="twitter-cols"></span><span class="dl">'</span> <span class="o">+</span> <span class="nx">tweets</span><span class="p">[</span><span class="nx">n</span><span class="p">]</span> <span class="o">+</span> <span class="dl">'</span><span class="s1"></div></span><span class="dl">'</span><span class="p">;</span>
<span class="nx">n</span><span class="o">++</span><span class="p">;</span>
<span class="p">}</span>
<span class="nx">html</span> <span class="o">+=</span> <span class="dl">'</span><span class="s1"></div></span><span class="dl">'</span><span class="p">;</span>
<span class="nx">element</span><span class="p">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="nx">html</span><span class="p">;</span>
<span class="p">}</span>
<span class="nx">twitterFetcher</span><span class="p">.</span><span class="nx">fetch</span><span class="p">(</span><span class="nx">config2</span><span class="p">);</span>
</code></pre></div></div>
<p>While it might look a little bit confusing at first, it really isn’t that hard to use. Let’s take a look at the relevant items. We already talked about <code class="language-plaintext highlighter-rouge">id</code> and <code class="language-plaintext highlighter-rouge">domID</code>. As you can see right here, the html element that houses my Twitter-Post-Fetcher posts has the class <code class="language-plaintext highlighter-rouge">twitter-posts</code>. The <code class="language-plaintext highlighter-rouge">maxTweets</code> variable allows me to reduce or increase the amount of tweets that will be shown on the custom widget, while the <code class="language-plaintext highlighter-rouge">true</code> or <code class="language-plaintext highlighter-rouge">false</code> value for <code class="language-plaintext highlighter-rouge">enableLinks</code> will decide whether or not the users will be possbile to retweet, “love” or reply instantly to your presented tweets.<br />
It shouldn’t be some suprising news, that the <code class="language-plaintext highlighter-rouge">showTime</code> variable allows to add a line of code to your tweets which presents the date when the posts were created.<br />
Focus your attention at the last component of the first block. The value of the variable <code class="language-plaintext highlighter-rouge">customCallback</code> indicates a connection with the following function called <code class="language-plaintext highlighter-rouge">handleTweets</code>. While the real magic happens in the lines starting with <code class="language-plaintext highlighter-rouge">function</code>, the <code class="language-plaintext highlighter-rouge">customCallback</code> variable is necessary to tell our Twitter-Post-Fetcher, that we would like to tweek the appearance and create our custom look. All you have to do is to link your function once again to your <code class="language-plaintext highlighter-rouge">domID</code> (recognize the <code class="language-plaintext highlighter-rouge">twitter-posts</code> in the line starting with <code class="language-plaintext highlighter-rouge">var = element</code>) and you are ready to add the classes and id’s to your widget you might need for a proper styling with some css elements.</p>
<p>What you can see below is a slightly modified version of the example we just took a look at, where I commented out every line that isn’t necessary for the following thoughts. The first code block highlights the two lines which enclose <em>the whole</em> widget, which means, that my <code class="language-plaintext highlighter-rouge"><div class="row"></code> is pretty much a frame that contains all elements created by the Twitter-Post-Fetcher.</p>
<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">//function handleTweets(tweets) {</span>
<span class="c1">// var x = tweets.length;</span>
<span class="c1">// var n = 0;</span>
<span class="c1">// var element = document.getElementById('twitter-posts');</span>
<span class="kd">var</span> <span class="nx">html</span> <span class="o">=</span> <span class="dl">'</span><span class="s1"><div class="row"></span><span class="dl">'</span><span class="p">;</span>
<span class="c1">// while(n < x) {</span>
<span class="c1">// html += '<div class="twitter-cols">' + tweets[n] + '</div>';</span>
<span class="c1">// n++;</span>
<span class="c1">// }</span>
<span class="nx">html</span> <span class="o">+=</span> <span class="dl">'</span><span class="s1"></div></span><span class="dl">'</span><span class="p">;</span>
<span class="c1">// element.innerHTML = html;</span>
<span class="c1">//}</span>
</code></pre></div></div>
<p>The second code block highlights the elements that will contain just one post at a time. Thus, the <code class="language-plaintext highlighter-rouge"><div class="twitter-cols"></code> enables to arrange the twitter posts side by side or to add some dividing elements.</p>
<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">//function handleTweets(tweets) {</span>
<span class="c1">// var x = tweets.length;</span>
<span class="c1">// var n = 0;</span>
<span class="c1">// var element = document.getElementById('twitter-posts');</span>
<span class="c1">// var html = '<div class="row">';</span>
<span class="k">while</span><span class="p">(</span><span class="nx">n</span> <span class="o"><</span> <span class="nx">x</span><span class="p">)</span> <span class="p">{</span>
<span class="nx">html</span> <span class="o">+=</span> <span class="dl">'</span><span class="s1"><div class="twitter-cols"></span><span class="dl">'</span> <span class="o">+</span> <span class="nx">tweets</span><span class="p">[</span><span class="nx">n</span><span class="p">]</span> <span class="o">+</span> <span class="dl">'</span><span class="s1"></div></span><span class="dl">'</span><span class="p">;</span>
<span class="nx">n</span><span class="o">++</span><span class="p">;</span>
<span class="p">}</span>
<span class="c1">// html += '</div>';</span>
<span class="c1">// element.innerHTML = html;</span>
<span class="c1">//}</span>
</code></pre></div></div>
<p>After picking the Tweets with the introduced Twitter-Post-Fetcher and providing a short description about how to set up a html scaffolding around the project, it is now up to the individual to create a unique twitter widget with some css code.</p>
<h2 id="lets-wrap-this-up">Let’s wrap this up:</h2>
<p>Check out the <a href="http://jasonmayes.com/projects/twitterApi/">Twitter-Post-Fetcher Website</a>, take a look at the <a href="https://github.com/jasonmayes/Twitter-Post-Fetcher">GitHub Repo</a> and of course don’t forget to thank <a href="https://twitter.com/jason_mayes">Jason Mayes</a> for his awesome work. If you are interested in a javascript approach that won’t need you to tinker around with a server side setup or you are looking for a opportunity to show your tweets on a static websites (Github Pages Users, wherer are you?) just go ahead and set up your own feed right on your website.</p>
<h2 id="update--05292016">Update – 05/29/2016</h2>
<p info="update" info_sub="2016-09-25 12:34:40 +0100">Haven’t had the time to update this post recently, but I am pretty sure I should at least add a few words about the author of Twitter-Post-Fetcher. To be honest, the best plugin is just useless if there is not a guy behind that project who really puts a lot of time and effort into his products and is interested in not just creating but maintaining them. Lucky us, Jason Mayes is totally one of them. After a few weeks ago twitter changed some widget details which caused Twitter-Post-Fetcher not beeing able to get the tweets anymore, it took just a few hours until a new release of this plugin solved all of it’s problems. I was definitely pretty impressed by the fast reaction of the dev and the attention he pays to his plugin - so I would call that a additional reason to check it out.</p>
<p>Last but not least - I would love to hear from you. If there are any questions or some feedback you would like to share with me, feel free to get in touch with me on <a href="http://twitter.bastiankroggel.com">twitter</a>.</p>
<div class="footnotes" role="doc-endnotes">
<ol>
<li id="fn:1" role="doc-endnote">
<p>On 21st of March in 2006 Jack Dorsey published the first tweet on twitter. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
<li id="fn:2" role="doc-endnote">
<p>That is a bad day for your fundamental beliefs. Server side actions are a <em>must</em> for any OAUTH process. I am sorry for that. <a href="#fnref:2" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
</ol>
</div>Bastian KroggelLet’s start this introduction about a sweet little workaround for a javascript based twitter widget with a big hug and a Happy Birthday! (…sorry, I am a little late to the 10th anniversary party)1 to the whole twitter team that created such a tremendously useful service, where people can connect and share their thougts in a short but very effective way. Sure. Twitter has it up and downsides like any other platform and while a lot of devs are upset about a restrictive API policy (just think about the token limit for 3rd party twitter clients) there is a big community of creative heads that try to find the right solution for nearly any concern you might be possible to think of. While working on my little personal website I came up with the idea, that a short excerpt of my twitter feed at the bottom of page might be a design and information element that would complement my site in a nice way. On 21st of March in 2006 Jack Dorsey published the first tweet on twitter. ↩Website2015-12-24T17:32:00+01:002015-12-24T17:32:00+01:00https://www.bastiankroggel.com/2015/12/24/Website<p class="img100 no_caption"><img src="/assets/img/page/blog/2015/December/main-website-mockup.jpg" alt="Website on MacBook Screen" /></p>
<p>Was lange Zeit auf meinem Rechner vor sich hin schlummerte, ist endlich bereit den Schritt an die frische Luft zu tun und den kleinen Zeh vorsichtig in das nasse Kühl der Öffentlichkeit zu strecken.
<!-- more --></p>
<p class="left50"><img src="/assets/img/page/blog/2015/December/underconstruction.jpg" alt="Underconstruction-Platzhalter der Domain www.bastiankroggel.com" data-title="Underconstruction-Platzhalter der Domain www.bastiankroggel.com" data-subtitle="Der Sourcecode kann bei [Github](https://github.com/bkroggel/home) eingesehen werden." /></p>
<p><a href="http://bastiankroggel.com">bastiankroggel.com</a> ist online. Und das nicht nur mit der <a href="https://github.com/bkroggel/home">schnöden, verheißungsvollen Nachricht</a>, dass etwas im Gange sei - nein - jetzt in vollem Glanz und ganzer Pracht.</p>
<p>Über einzelne Aspekte werde ich (wie <a href="/2015/12/24/Hallo-Welt-und-ein-README.html">hier</a> angekündigt) mich sicherlich noch an anderer Stelle ausführlicher auslassen, dennoch möchte ich nachfolgend ein paar der Objekte und Materialien hervorheben, die es in meinen Augen wirklich verdient haben in den Vordergrund gerückt zu werden.</p>
<p>Sich von der weihnachtlichen Stimmung tragen lassen, dass funtkioniert auch in Punkto WebDesign:</p>
<h3 id="snowfall"><a href="https://github.com/loktar00/JQuery-Snowfall">Snowfall</a></h3>
<p>Außerordentlich leicht und einfach in der Handhabung ist das “Snowfall JQuery-Plugin” aus dem Hause <a href="https://github.com/loktar00">Loktar</a>. Ich bin zugegebenermaßen (noch) nicht der ganz große Held im JavaScript Segment, aber mit einer schlichten und dennoch mehr als verständlichen Dokumentation kann im Prinzip nichts schief gehen. Einzigstes Manko der Aktion und gleichzeitig mahnende Worte:<br />
Man sollte sich gut überlegen, ob man seinen Besuchern ein Schnegestöber der allerfeinsten Güteklasse präsentiert oder doch nach dem weniger ist mehr Prinzip agieren möchte. So schön das Spektakel auch ist, man bedenke den entsprechend Hohen Aufwand, den der Rechner im Hintergrund zu bewältigen hat. Darunter leidet gerne die Performance (jap…es geht auch am Smartphone…aber eben in Maßen genießen) und die UserExperience gleich mit. Wem das nicht egal ist, der hält sich - frei nach Da Vinci - an die Einfachheit als höchstes aller Gefühle.<br />
<a href="https://github.com/loktar00/JQuery-Snowfall" class="btn">Github</a> <a href="http://www.somethinghitme.com/2012/12/08/snowfall-1-6/" class="btn">Hompage</a></p>
<h3 id="papai-noel---der-weihnachtsmann"><a href="http://codepen.io/igordesouzamorais/pen/MYyVXQ">Papai Noel - der Weihnachtsmann</a></h3>
<p>Kudos auch an <a href="http://codepen.io/igordesouzamorais/">Igor de souza morais</a>, dessen Pen <a href="http://codepen.io/igordesouzamorais/pen/MYyVXQ">Papai Noel 2014</a> den weihnachtlich-winterlichen Auftritt der Seite komplettiert. Eine wirklich schöne Arbeit, die sich wunderbar mit dem Snowfall-Plugin verbinden lässt.</p>
<h3 id="twitter-post-fetcher"><a href="http://www.jasonmayes.com/projects/twitterApi">Twitter-Post-Fetcher</a></h3>
<p>Das Project von <a href="http://www.jasonmayes.com/">Jason Mayes</a> erlaubt die Implementierung eines Twitter-Feeds in die eigene Website. Während das offizielle Widget aus dem Hause Twitter nur sehr eingeschränkt anpassbar ist, was das Aussehen und die angezeigten Elemente betrifft, bieten die meisten Drittanbieter-Applikationen nur einen Abruf der Tweets über eine API Schnittstelle. Da diese Verbindung allerdings zwangsläufig eine serverseitige Authentifizierung verlangt, ist eine solche Lösung im Umfeld von statischen Seiten, wie dem hier verwendeten Grundgerüst auf Basis des <a href="http://jekyllrb.com/">Jekyll Static Site Generators</a>, nicht ohne weiteres umsetzbar.<br />
Der <a href="http://www.jasonmayes.com/projects/twitterApi">Twitter-Post-Fetcher</a> setzt an genau diesem Problem an und erlaubt einen rein Javascript basierten Tweet-Zugriff ohne dass ein serverseitiger Prozess von Nöten wäre.<br />
Einen weitaus ausführlicheren Post von mir, der auch ein klein wenig in die Verwendung dieser Komponente einführt findet sich unter folgendem <a href="http://www.bastiankroggel.com/2016/03/25/The-static-way-of-presenting-your-tweets.html">Link</a>.<br />
<a href="https://github.com/jasonmayes/Twitter-Post-Fetcher" class="btn">Github</a> <a href="http://www.jasonmayes.com/" class="btn">Hompage</a></p>
<p><em>Fürs erste ist es das nun - mehr folgt aber bestimmt. Soviel sei schonmal gesagt, es gibt durchaus noch den ein oder anderen Punt, den es näher zu beleuchten gibt, der Post wird also aktualisiert</em></p>
<hr />
<p>Weitere Ideen, brennende Fragen oder doch böse Meinungen, die losgelassen werden müssen? Jederzeit gerne! Einfach ab damit in Richtung <a href="/contact/">ContactPage</a> und schnell in meine Inbox.</p>Bastian KroggelWas lange Zeit auf meinem Rechner vor sich hin schlummerte, ist endlich bereit den Schritt an die frische Luft zu tun und den kleinen Zeh vorsichtig in das nasse Kühl der Öffentlichkeit zu strecken.PPE-Conference2015-12-24T17:31:00+01:002015-12-24T17:31:00+01:00https://www.bastiankroggel.com/2015/12/24/ppe-conference<p class="cover"><img src="/assets/img/page/blog/2015/December/ppe-conference.jpg" alt="Hompage der PPE-Conference 2015 an der Zeppelin Universität" data-title="Hompage der PPE-Conference 2015 an der Zeppelin Universität" data-subtitle="der Sourcecode der Website ist bei [Github](https://github.com/bkroggel/WebPage) einsehbar" /></p>
<p><a href="https://github.com/bkroggel/WebPage">Website</a> der ersten PPE-Conference des Sociology, Politics and Economics Lehrstuhl der <a href="http://www.zu.de">Zeppelin Universität Friedrichshafen</a>.<br />
Sowohl Design-Prozess (der Website) als auch Entwicklung entstanden im Team-Work aus “einer Hand” und sind somit (hoffentlich) in ein konsistenten Bild übergegangen. Maßgebliche Vorgaben bzw. Anforderungen begrenzten sich lediglich auf Inhalt, Farbgebung und entsprechendes, bereits entwickelte Logo Grafik.
<!-- more --></p>
<p>Zurückgegriffen wurde dabei einerseits auf häufig Verwendung findenden Lösungen wie <a href="http://getbootstrap.com/">Bootstrap</a>, <a href="https://jquery.org/">jQuery</a> oder der Icon-Lösung <a href="http://fontawesome.io/">FontAwesome</a>, andererseits aber auch kleinere, möglicherweise weniger bekannte jQuery-Plugin’s, die nachfolgend kurz Erwähnung finden sollen.</p>
<h3 id="jquery-sidebar"><a href="http://jillix.github.io/jQuery-sidebar/">jQuery Sidebar</a></h3>
<p>Schlicht, funktionell aber äußerst übersichtlich und einfach zu verwendedende Lösung, wenn <a href="http://jillix.github.io/jQuery-sidebar/">Slider</a> oder Modal-ähnliche Möglichkeiten gesucht werden.<br />
Auf der vorliegenden Website wurde die <a href="http://jillix.github.io/jQuery-sidebar/">jQuery Sidebar</a> by <a href="https://github.com/jillix">jillix</a> als “Fensterersatz” zur Darstellung des Impressum genutzt, um einerseits dem gewünschten Single-Scrolling Effekt Rechnung zu tragen, andererseits aber auch die Seite nicht mit mehr Content als nötig zu belasten.<br />
Zu guter letzt bietet das Entwicklerteam einen exzellenten Support und reagiert absolut vorbildlich auch Fragen und Anregungen.</p>
<h3 id="owl-carousel"><a href="http://owlgraphic.com/owlcarousel/">OWL Carousel</a></h3>
<p>Das <a href="http://owlgraphic.com/owlcarousel/">OWL Carousel</a> ist möglicherweise eines der umfangreichsten Plugins wenn der Einsatz von Content-Carousels gefordert ist. Mobile-optimiert und auf Touch-Lösungen angepasst, bietet die Lösung weit mehr als nur ein schlichtes “Bilderkarusell”. Die Dokumentation ist geradezu herausragend und dennoch übersichtlich. Demos für die verschiedensten Einsatzzwecke werden angeboten und lassen sich damit gut und praxisnah erkunden und verstehen.<br />
Darüber hinaus ist das Plugin - für den Umfang geradezu erschrecken - einfach in der Handhabung und der Implementierung.</p>
<h3 id="slideoutjs"><a href="https://mango.github.io/slideout/">Slideout.js</a></h3>
<p><a href="https://mango.github.io/slideout/">Slideout.js</a> by <a href="https://getmango.com/en/">Mango</a> bietet die ideale Option für all diejenigen, die einerseits zwar in ihrem angestammten WebDevelopment Revier bleiben, andererseits aber ein wenig mehr “app-feeling” in ihren Kreationen unterbringen möchten. Vergleichbar mit Menus, die heutzutage fast jede App beherbergt, lässt sich mit Slideout.js eine touch-optimierte (ja, es lässt sich über den Bildschirm wischen um das Menu-Fenster zum Vorschein zu bringen) Experience auf der eigenen Seite wiederfinden, die fast schon in das Gefühl der Verwendung einer nativen Applikation übergeht.<br />
Eine gute Dokumentation und damit einfache Verwendung runden das Gesamtgergebnis ab.</p>Bastian KroggelWebsite der ersten PPE-Conference des Sociology, Politics and Economics Lehrstuhl der Zeppelin Universität Friedrichshafen. Sowohl Design-Prozess (der Website) als auch Entwicklung entstanden im Team-Work aus “einer Hand” und sind somit (hoffentlich) in ein konsistenten Bild übergegangen. Maßgebliche Vorgaben bzw. Anforderungen begrenzten sich lediglich auf Inhalt, Farbgebung und entsprechendes, bereits entwickelte Logo Grafik.Hallo Welt2015-12-24T17:30:00+01:002015-12-24T17:30:00+01:00https://www.bastiankroggel.com/2015/12/24/Hallo-Welt-und-ein-README<p>Hallo und Herzlich Willkommen - oder wie es dem tagesaktuellen Geschehen wohl eher angemessen ist <em>Frohe Weihnachten, Feliz Navidad, Joyeux Noël, Buon Natale und natürlich Merry Christmas</em>.</p>
<h3 id="wo-bin-ich-denn-hier-gelandet">Wo bin ich denn hier gelandet?</h3>
<p>Gute Frage, aber ich will mich mal an einer Antwort darauf versuchen.
Einerseits sicherlich die Möglichkeit den Gedanken und der
Meinung freien Lauf zu lassen, andererseits aber auch Ort und Sammelpunkt, an dem Erfahrungen und Wissen weitergetragen werden soll und zum Selbstversuch anregen darf.
Wer ein Tagebuch sucht und dem lebensbegleitenden Wortschwall des kreativen Individuums beistehen möchte wird wohl ebenso entäuscht werden wie der geneigte Leser, dessen Fokus auf gut vorgekautem aber garantiert neutral formuliertem Informationscontent liegt.
<!-- more -->
Ich behalte mir vor in purer Ehrlichkeit und vollster Meinung das zu präsentieren, was mir am Herzen liegt. Vielleicht kritisch, aber sicherlich nie auf Positionen beharrend, die es freizugeben gilt.</p>
<h3 id="okay-jetzt-aber-ehrlich-worum-gehts">Okay. Jetzt aber ehrlich, worum gehts?</h3>
<p>Wilde Versuche sich im WebDevelopement Geschehen zurecht zu finden, zwischen Entrepreneurship und der neusten Errungenschaft im Technikhimmel. <em>Ist das Internet nicht schön?</em> Ganz sicher kein weiterer Technikblog dessen wohlgewählte Worte zum neusten Produkt in der schieren Masse an Kontrahenten untergeht. Was hier zu begutachtet ist, sind zudem meine ersten Schritte im breiten Feld der <a href="https://www.staticgen.com/">Static Site Generators</a>, wobei mit <a href="http://jekyllrb.com/">Jekyll</a> auch der wohl bekannteste Vertreter dieser Art aktuell<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup> in diesem Blog Verwendung findet.<br />
<em>Damit sind wir dann auch schon beim ersten Thema, dass in den nächsten Updates schrittweise Eingang in die noch weißen Zeilen des Internets findet.</em>
Ich werde mir einfach mal erlauben hier zu zeigen, was meine Versuche der letzten Wochen so ans Tageslicht gebracht haben und welche Ideen und kleinen “Schätze” sich darunter befinden.<br />
Frei nach den Gesetzen des Internets wird sich sicherlich der ein oder andere in einer Déjà-vu Situation wiederfinden - irgendwie ist das Netz doch ein Dorf - aber vielleicht Lohnt es ja doch einen Blick in die Folgeposts zu stecken…die Chance auf einen Glückstreffer ist ja durchaus gegeben.
Von Anderen lernen (Ihr Glückspilze habt mich erwischt^^) ist also der erste Punkt, der hier angegangen wird und was weiter folgt, dass wird das neue Jahr sicherlich bringen - geben wir der Zeit ihre Chance uns zu zeigen wo es lang geht.</p>
<p>Jetzt wünsche ich auf jeden Fall angenehme Feiertage einen entspannten und hoffentlich nicht zu glatten Rutsch ins frische <strong>2016</strong>.
Irgendwann und irgendwo sieht man sich bestimmt mal, bis dahin bleibt gesund und munter - und mir treu.</p>
<div class="footnotes" role="doc-endnotes">
<ol>
<li id="fn:1" role="doc-endnote">
<p>wir schreiben den 24.Dezember 2015, man beachte das bitte bei späterem lesen dieser Worte <a href="#fnref:1" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
</ol>
</div>Bastian KroggelHallo und Herzlich Willkommen - oder wie es dem tagesaktuellen Geschehen wohl eher angemessen ist Frohe Weihnachten, Feliz Navidad, Joyeux Noël, Buon Natale und natürlich Merry Christmas. Wo bin ich denn hier gelandet? Gute Frage, aber ich will mich mal an einer Antwort darauf versuchen. Einerseits sicherlich die Möglichkeit den Gedanken und der Meinung freien Lauf zu lassen, andererseits aber auch Ort und Sammelpunkt, an dem Erfahrungen und Wissen weitergetragen werden soll und zum Selbstversuch anregen darf. Wer ein Tagebuch sucht und dem lebensbegleitenden Wortschwall des kreativen Individuums beistehen möchte wird wohl ebenso entäuscht werden wie der geneigte Leser, dessen Fokus auf gut vorgekautem aber garantiert neutral formuliertem Informationscontent liegt.