oida.dev | TypeScript, Rust2026-02-04T12:50:56.890Zhttps://oida.devStefan Baumgartner[email protected]TypeScript's `erasableSyntaxOnly` Flag2025-02-03T00:00:00.000Zhttps://oida.dev/erasable-syntax-only/>
<p>TypeScript adds a new flag to its compiler with version 5.8: <code>erasableSyntaxOnly</code>. It ensures you won’t use TypeScript features that generate code.</p>Unsafe for work2024-11-22T00:00:00.000Zhttps://oida.dev/unsafe-for-work/>
<p>Before we start, have a look at this image. It is from a German book from the early Nineties, and it features some very interesting cover artwork. A knight with a cape and a big bushy mustache rides a friendly green dragon. A castle, a dolphin, and some animals are in the background. Focus on the details; we will return to that image at the end.</p>Tokio: Macros2024-11-20T00:00:00.000Zhttps://oida.dev/rust-tokio-guide/macros/<p><code>tokio::join!</code> lets you run multiple futures concurrently, and returns the output of all of them. For JavaScript developers: <code>Promise.all</code> is a good equivalent.</p>Tokio: Channels2024-11-19T00:00:00.000Zhttps://oida.dev/rust-tokio-guide/channels/<p>This is a long section. Here are some anchors to jump to the respective part:</p>Tokio: Getting Started2024-11-18T00:00:00.000Zhttps://oida.dev/rust-tokio-guide/getting-started/<p>Let’s get started with our first Tokio app. Create a new project using Cargo and add the <code>tokio</code> dependency either to your <code>Cargo.toml</code> file or directly on the command line.</p>Network Applications on the Tokio Stack2024-11-18T00:00:00.000Zhttps://oida.dev/rust-tokio-guide/<p>This guide is a collection of articles and exercises covering how to write network applications with Tokio. Its base is a workshop I gave over the last few years called “Network Applications using Tokio.” The <a href="/slides/network-applications-with-tokio-and-rust/">slides</a> are available in the respective section.</p>Remake, Remodel, Reduce.2024-11-07T00:00:00.000Zhttps://oida.dev/remake-remodel-5/>
<p>Welcome to my new website! I have wanted to create a new and updated version of this page for a long time. In fact, I feel that the old one kept me from blogging; I couldn’t stand watching my own webpage anymore.</p>The `never` type and error handling in TypeScript2024-03-05T00:00:00.000Zhttps://oida.dev/typescript-never-and-error-handling/>
<p>One thing that I see more often recently is that folks find out about the <code>never</code> type, and start using it more often, especially trying to model error handling. But more often than not, they don’t use it properly or overlook some fundamental features of <code>never</code>. This can lead to faulty code that might act up in production, so I want to clear doubts and misconceptions, and show you what you can really do with <code>never</code>.</p>5 Inconvenient Truths about TypeScript2023-07-17T00:00:00.000Zhttps://oida.dev/5-truths-about-typescript/>
<p>I’m writing books about TypeScript and I do workshops and trainings online and in-house. Every time I meet a new group of developers there are some TypeScript facts that they need to be confronted with:</p>Refactoring in Rust: Introducing Traits2023-03-02T00:00:00.000Zhttps://oida.dev/refactoring-rust-introducing-traits/>
<p>In the same codebase as <a href="/refactoring-rust-abstraction-newtype/">last time</a>, we extract data from a <code>HashMap<String, String></code> called <code>headers</code>, presumably dealing with something similar to HTTP headers.</p>Refactoring in Rust: Abstraction with the Newtype Pattern2023-02-21T00:00:00.000Zhttps://oida.dev/refactoring-rust-abstraction-newtype/>
<p>The following piece of code takes a <code>PathBuf</code> and extracts the file name, eventually converting it to an <em>owned</em> <code>String</code>.</p>Announcing the TypeScript Cookbook2022-11-07T00:00:00.000Zhttps://oida.dev/announcing-the-typescript-cookbook/>
<p>Oops, I did it again! I’m writing another book, and it’s again about TypeScript. I’m happy to announce <em>The TypeScript Cookbook</em>, to be published in 2023 by O’Reilly. You can check it out in Early Release on the <a href="https://www.oreilly.com/library/view/typescript-cookbook/9781098136642/">O’Reilly website</a>.</p>TypeScript: Iterating over objects2022-05-11T00:00:00.000Zhttps://oida.dev/typescript-iterating-over-objects/>
<p>There is rarely a head-scratcher in TypeScript as prominent as trying to access an object property via iterating through its keys. This is a pattern that’s so common in JavaScript, yet TypeScript seems to through all the obstacles at you. This simple line:</p>The road to universal JavaScript2022-05-09T00:00:00.000Zhttps://oida.dev/the-road-to-universal-javascript/>
<p>Universal JavaScript. JavaScript that works in every environment. JavaScript that runs on both the client and the server, something thinking about for years (see <a href="https://medium.com/@mjackson/universal-javascript-4761051b7ae9">1</a>, <a href="https://medium.com/airbnb-engineering/isomorphic-javascript-the-future-of-web-apps-10882b7a2ebc">2</a>). Where are we now?</p>10 years of oida.dev2022-04-27T00:00:00.000Zhttps://oida.dev/10-years-of-fettblog/>
<p>I missed a little anniversary. Roughly 10 years ago (on April 8, 2012), I started blogging on oida.dev! Time flies! I think this is my longest-running project, let’s take some time to reflect.</p>Rust: Tiny little traits2022-04-15T00:00:00.000Zhttps://oida.dev/rust-tiny-little-traits/>
<p>Rust’s trait system has a feature that is often talked about, but which I don’t see used that often in application code: Implementing your traits for types that are not yours. You can see this a lot in the standard library, and also in some libraries (hello <a href="https://docs.rs/itertools/latest/itertools/"><code>itertools</code></a>), but I see developers shy away from doing that when writing applications. It’s so much fun and so useful, though!</p>The TypeScript converging point2022-01-31T00:00:00.000Zhttps://oida.dev/slides/the-typescript-converging-point/<p>Usually, when doing TypeScript talks, I just open up a code editor and hack away some cool types that help in a certain scenario. This time, I was asked to do the same thing but within a 20-minute time limit. This has been super tough, so I scripted the entire thing and resorted to slides that have certain progress. Fewer chances for me to screw up! This allows me to give you not only the slides but also a write-up of this talk. I’ll give myself a bit of freedom and flesh it out where appropriate. Enjoy!</p>How not to learn TypeScript2022-01-10T00:00:00.000Zhttps://oida.dev/how-not-to-learn-typescript/>
<p>“TypeScript and I are never going to be friends”. Oh wow, how often have I heard <em>this</em> phrase? Learning TypeScript, even in 2022, can be frustrating it seems. And for so many different reasons. People who write Java or C# and find out things are working differently than they should. Folks who have done JavaScript most of their time and are being screamed at by a compiler. Here are some mistakes I’ve seen people do when getting started with TypeScript. I hope they’re helpful to you!</p>Getting started with Rust2021-12-23T00:00:00.000Zhttps://oida.dev/getting-started-with-rust/>
<p>Learning and teaching Rust has been a big part of me in the last couple of years. Interest in the Rust programming language has brought me to <a href="https://rust-linz.at">found the Rust Linz meetup with Rainer Stropek</a>, to teach <a href="https://rust-jku.netlify.app">Rust at the local university</a>, and to do <a href="/slides/idiomatic-rust">a ton</a> <a href="/network-applications-with-tokio-and-rust/">of workshops</a> on the topic. It’s a lot of fun! It has introduced me to one of the most welcoming communities. And I <em>love</em> seeing Rust code getting in production and keeping all the promises it gives us. Folks who I’m in contact with through various channels ask me how to best get started with Rust. This article tries to give you an overview.</p>Introducing Slides and Coverage2021-12-14T00:00:00.000Zhttps://oida.dev/introducing-the-slides-section/>
<p>There’s a new section on this website! Since today, you’re able to see full coverage of my workshops and talks in the new <a href="/slides/">slides and coverage</a> section. That’s the announcement. If you want to see more, head over to the new section. If you want a little “Making of”, please continue with this article.</p>TypeScript: The humble function overload2021-11-30T00:00:00.000Zhttps://oida.dev/typescript-function-overload/>
<p>With the most recent type system features like conditional types or variadic tuple types, one technique to describe a function’s interface has faded into the background: Function overloads. And there’s a good reason for that. Both features have been implemented to deal with the shortcomings of regular function overloads.</p>TypeScript + React: Children types are broken2021-09-15T00:00:00.000Zhttps://oida.dev/react-types-for-children-are-broken/>
<p><em>Update April 2022</em>: With the update to React 18, a lot of those problems have been fixed. See <a href="https://github.com/DefinitelyTyped/DefinitelyTyped/pull/56210">this pull request for more details</a></p>TypeScript: In defense of any2021-09-14T00:00:00.000Zhttps://oida.dev/typescript-any-is-ok/>
<p>A couple of days ago I found this beauty on the internet: <a href="https://giveupanduseany.com/">Give up and use any</a>. That’s a fantastic website, absolutely hilarious! It also shows how much TypeScript has grown in popularity. You have to have a certain reach to get critics to create websites like this.</p>Rust: Enums to wrap multiple errors2021-09-09T00:00:00.000Zhttps://oida.dev/rust-enums-wrapping-errors/>
<p>This is a follow-up to <a href="/rust-error-handling/">Error handling in Rust</a> from a couple of days ago. The moment we want to use error propagation for different error types, we have to rely on trait objects with <code>Box<dyn Error></code>, which means we defer a lot of information from compile-time to runtime, for the sake of convenient error handling.</p>Dissecting Deno2021-09-08T00:00:00.000Zhttps://oida.dev/dissecting-deno/>
<p>I had the chance to toy around with <a href="https://deno.land">Deno</a> recently. And with “toy around” I mean dissecting it into little pieces and see how the sausage was made. So, my view is not from a user’s perspective who wants to create and run apps with it, but rather one who has a huge interest in JavaScript runtimes, Serverless, and Rust.</p>Error handling in Rust2021-09-07T00:00:00.000Zhttps://oida.dev/rust-error-handling/>
<p>I started doing <a href="https://kusss.jku.at/kusss/selectcoursegroup.action?coursegroupid=5209&abhart=all&courseclassid=36943">university lectures</a> on Rust, as well as holding workshops and trainings. One of the parts that evolved from a couple of slides into a full-blown session was everything around error handling in Rust, since it’s so incredibly good!</p>TypeScript: Unexpected intersections2021-07-21T00:00:00.000Zhttps://oida.dev/typescript-unexpected-intersections/>
<p>Sometimes when writing TypeScript, some of the things you’d usually do in JavaScript work a little different and cause some weird, and puzzling situations. Sometimes you just want to assign a value to an object property and get a weird error like <em>“Type ‘string | number’ is not assignable to type ‘never’. Type ‘string’ is not assignable to type ‘never’.(2322)”</em></p>Upgrading Node.js dependencies after a yarn audit2021-07-07T00:00:00.000Zhttps://oida.dev/yarn-audit-fix/>
<p>It’s Tuesday! The day of your weekly <em>dependabot</em> alerts from GitHub! A nice reminder to check on your projects, and usually just a few clicks worth of work, the automatic update is wonderful.</p>TypeScript: Array.includes on narrow types2021-07-06T00:00:00.000Zhttps://oida.dev/typescript-array-includes/>
<p>The <code>Array.prototype.includes</code> function allows searching for a value within an array. If this value is present, the function returns <code>true</code>! How handy! Of course, TypeScript has proper typings for this JavaScript functionality.</p>TypeScript + React: Typing Generic forwardRefs2021-04-13T00:00:00.000Zhttps://oida.dev/typescript-react-generic-forward-refs/>
<p>If you are creating component libraries and design systems in React, you might already have fowarded Refs to the DOM elements inside your components.</p>shared, util, core: Schroedinger's module names2021-03-15T00:00:00.000Zhttps://oida.dev/schroedingers-architecture/>
<p>I do a lot of architecture work lately, and one thing that seems to appear more often than I thought it would be are module names that have generic-sounding names like <em>shared</em>, <em>util</em>, or <em>core</em>. There is something confusing about them, as they don’t tell you what’s inside!</p>Learning Rust and Go2021-03-03T00:00:00.000Zhttps://oida.dev/learning-rust-and-go/>
<p>My blog is a chronicle of learning new things. Most of the articles I write are notes on how I solved problems that I found in my everyday work. And every now and then I have to urge to learn something new!</p>TypeScript: Narrow types in catch clauses2021-03-02T00:00:00.000Zhttps://oida.dev/typescript-typing-catch-clauses/>
<p>When you are coming from languages like Java, C++, or C#, you are used to doing your error handling by throwing exceptions. And subsequently, catching them in a cascade of <code>catch</code> clauses. There are arguably better ways to do error handling, but this one has been around for ages and given history and influences, has also found its way into JavaScript.</p>TypeScript: Low maintenance types2021-01-20T00:00:00.000Zhttps://oida.dev/low-maintenance-types-typescript/>
<p>I write a lot about TypeScript and I enjoy the benefits it gives me in my daily work a lot. But I have a confession to make, I don’t really like writing types or type annotations. I’m really happy that TypeScript can infer so much out of my usage when writing regular JavaScript so I’m not bothered writing anything extra.</p>Tidy TypeScript: Name your generics2021-01-07T00:00:00.000Zhttps://oida.dev/tidy-typescript-name-your-generics/>
<p>My book <a href="https://typescript-book.com">TypeScript in 50 Lessons</a> features interludes. Short texts on TypeScript culture that provide room to breathe between heavy, technical tutorials. One of those interludes gives some opinionated advice on how to name generic variables.</p>Tidy TypeScript: Avoid traditional OOP patterns2020-11-24T00:00:00.000Zhttps://oida.dev/tidy-typescript-avoid-traditional-oop/>
<p>This is the third article in a <a href="/archive/tidy-typescript/">series of articles</a> where I want to highlight ways on how to keep your TypeScript code neat and tidy. This series is heavily opinionated and you might find out things you don’t like. Don’t take it personally, it’s just an opinion.</p>Tidy TypeScript: Prefer type aliases over interfaces2020-11-20T00:00:00.000Zhttps://oida.dev/tidy-typescript-prefer-type-aliases/>
<p>This is the second article in a <a href="/archive/tidy-typescript/">series of articles</a> where I want to highlight ways on how to keep your TypeScript code neat and tidy. By nature, this series is heavily opinionated and is to be taken with grains of salt (that’s plural).</p>Tidy TypeScript: Prefer union types over enums2020-11-19T00:00:00.000Zhttps://oida.dev/tidy-typescript-avoid-enums/>
<p>This is the first article in a <a href="/archive/tidy-typescript/">series of articles</a> where I want to highlight ways on how to keep your TypeScript code neat and tidy. This series is heavily opinionated, so don’t be angry if I ditch a feature that you learned to like. It’s not personal.</p>My new book: TypeScript in 50 Lessons2020-10-12T00:00:00.000Zhttps://oida.dev/new-book-typescript-in-50-lessons/>
<p>I’ve written a new book! On <strong>October 6</strong>, the pre-release of <a href="https://www.smashingmagazine.com/printed-books/typescript-in-50-lessons/"><em>TypeScript in 50 Lessons</em></a> started. It’s 450 pages, published by the wonderful people at <a href="https://smashingmagazine.com">Smashing Magazine</a>, and available to read right now! The printed version is being produced as I write, and will be shipping in mid-November.</p>Go Preact! ❤️2020-08-24T00:00:00.000Zhttps://oida.dev/go-preact/>
<p>You might have heard of <a href="https://preactjs.com">Preact</a>, the tiny 3KB alternative to React. It has been around for a while, and since its inception, it claims to be API and feature compatible compared to the more widely used Facebook library.</p>this in JavaScript and TypeScript2020-08-19T00:00:00.000Zhttps://oida.dev/this-in-javascript-and-typescript/>
<p><em>Sometimes when writing JavaScript, I want to shout “This is ridiculous!”. But then I never know what <code>this</code> refers to</em>.</p>TypeScript and ECMAScript Modules2020-08-14T00:00:00.000Zhttps://oida.dev/typescript-and-es-modules/>
<p>Working with real, native, ECMAScript modules is becoming a thing. Tools like <a href="https://github.com/vitejs/vite">Vite</a>, <a href="https://open-wc.org/developing/es-dev-server.html">ES Dev server</a>, and <a href="https://snowpack.dev">Snowpack</a> get their fast development experience from leaving module resolution to the browser. Package CDNs like <a href="https://skypack.dev">Skypack</a> and <a href="https://unpkg.com/">UnPKG</a> are providing pre-compiled ES modules which you can use in both Deno and the browser just by referencing a URL.</p>TypeScript + React: Why I don't use React.FC2020-07-30T00:00:00.000Zhttps://oida.dev/typescript-react-why-i-dont-use-react-fc/>
<p><em>Update</em>: React types for version 18 changed a lot! If you encounter problems described in this article, make sure you update to the latest version!</p>TypeScript + React: Component patterns2020-07-28T00:00:00.000Zhttps://oida.dev/typescript-react-component-patterns/>
<p>This list is a collection of component patterns for React when working with TypeScript. See them as an extension to the <a href="/typescript-react/">TypeScript + React Guide</a> that deals with overall concepts and types. This list has been heavily inspired by <a href="https://reactpatterns.com/">chantastic’s original React patterns list</a>.</p>TypeScript: Augmenting global and lib.dom.d.ts2020-07-17T00:00:00.000Zhttps://oida.dev/typescript-augmenting-global-lib-dom/>
<p>Recently I wanted to use a <a href="https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver"><code>ResizeObserver</code></a> in my application. <code>ResizeObserver</code> recently landed in all <a href="https://caniuse.com/#search=ResizeObserver">major browsers</a>, but when you use it in TypeScript — at the time of this writing — <code>ResizeObserver</code> won’t be recognized as a valid object (or constructor). So why is that?</p>Vite with Preact and TypeScript2020-07-06T00:00:00.000Zhttps://oida.dev/typescript-vite-preact/>
<p><em>Update</em>: Please note that this article already has some age and <em>Vite</em> has seen significant updates. Also, the Preact team has created their own preset for Vite which you can find <a href="https://github.com/preactjs/preset-vite">here</a>. Be sure to check that out!</p>TypeScript: Union to intersection type2020-06-29T00:00:00.000Zhttps://oida.dev/typescript-union-to-intersection/>
<p>Recently, I had to convert a union type into an intersection type. Working on a helper type <code>UnionToIntersection<T></code> has taught me a ton of things on conditional types and strict function types, which I want to share with you.</p>11ty: Generate Twitter cards automatically2020-06-25T00:00:00.000Zhttps://oida.dev/11ty-automatic-twitter-cards/>
<p>For the redesign of this blog, I created Twitter title cards that are generated automatically. So whenever people share my stuff on social media, they get a nice card telling them the article’s title and post date.</p>Are large node module dependencies an issue?2020-06-22T00:00:00.000Zhttps://oida.dev/impact-of-large-node-modules/>
<p>The other day, I had some friends frowning over the 800KB size of a node application. This brought to my attention that I never really worried about the size of my dependencies in a Node.js application.</p>TypeScript: Variadic Tuple Types Preview2020-06-19T00:00:00.000Zhttps://oida.dev/variadic-tuple-types-preview/>
<p>TypeScript 4.0 is supposed to be released in August 2020, and one of the biggest changes in this release will be <em>variadic tuple types</em>. And even though his feature is hot of the press at the time of this writing, it’s worth checking out and see what we can do with it. Note that stuff here might be subject to change, so be cautious! I will try to keep this page up to date until 4.0 is in RC or released.</p>TypeScript: Improving Object.keys2020-06-17T00:00:00.000Zhttps://oida.dev/typescript-better-object-keys/>
<p><strong>Note:</strong> Be very careful with this technique. Better checkout <a href="/typescript-iterating-over-objects">my new approach</a>.</p>Remake, Remodel. Part 4.2020-06-16T00:00:00.000Zhttps://oida.dev/remake-remodel-part-4-11ty/>
<p>I originally wanted to launch my new website on June 1st, but there were more important things happening at the moment than relaunching a tech blog. Truth be told, it was really hard for me focussing on anything else but the protest. The ongoing protests have not lost any importance. Do your part and <a href="/black-lives-matter/">educate yourself and be an ally</a>.</p>TypeScript + React: Typing custom hooks with tuple types2020-03-25T00:00:00.000Zhttps://oida.dev/typescript-react-typeing-custom-hooks/<p>I recently stumbled upon a question on Reddit’s <a href="https://www.reddit.com/r/LearnTypescript/">LearnTypeScript</a> subreddit regarding custom React hooks. A user wanted to create a toggle custom hook, and stick to the naming convention as regular React hooks do: Returning an array that you destructure when calling the hook. For example <code>useState</code>:</p>TypeScript: Assertion signatures and Object.defineProperty2020-02-06T00:00:00.000Zhttps://oida.dev/typescript-assertion-signatures/<p>In JavaScript, you can define object properties on the fly with <code>Object.defineProperty</code>. This is useful if you want your properties to be read-only or similar. Think of a storage object that has a maximum value that shouldn’t be overwritten:</p>TypeScript: Check for object properties and narrow down type2020-02-03T00:00:00.000Zhttps://oida.dev/typescript-hasownproperty/<p>TypeScript’s control flow analysis lets you narrow down from a broader type to a more narrow type:</p>Boolean in JavaScript and TypeScript2019-09-10T00:00:00.000Zhttps://oida.dev/boolean-in-javascript-and-typescript/<p><code>boolean</code> is a fun primitive data type in JavaScript. In TypeScript, it allows for a total of four values
Wait, four?</p>void in JavaScript and TypeScript2019-09-06T00:00:00.000Zhttps://oida.dev/void-in-javascript-and-typescript/<p>If you come from traditional, strongly typed languages you might be familiar with the concept
of <code>void</code>: A type telling you that functions and methods return nothing when called.</p>Symbols in JavaScript and TypeScript2019-09-04T00:00:00.000Zhttps://oida.dev/symbols-in-javascript-and-typescript/<p><code>symbol</code> is a primitive data type in JavaScript and TypeScript, which, amongst other things,
can be used for object properties. Compared to <code>number</code> and <code>string</code>, <code>symbol</code>s have some unique
features that make them stand out.</p>Why I use TypeScript2019-08-28T00:00:00.000Zhttps://oida.dev/why-i-use-typescript/<p>You might well see that my blog starts to center around TypeScript a lot recently. This might look
like a strong deviation from what I usually blog and advocate: Performant, accessible and resilient
web sites.</p>TypeScript + React: Extending JSX Elements2019-08-27T00:00:00.000Zhttps://oida.dev/typescript-react-extending-jsx-elements/<p>React typings for TypeScript come with lots of interfaces for all possible HTML elements
out there. But sometimes, your browsers, your frameworks or your code are a little bit ahead of
what’s possible.</p>TypeScript: Validate mapped types and const context2019-08-26T00:00:00.000Zhttps://oida.dev/typescript-validate-mapped-types-and-const-context/<p>Mapped types are great, as they allow for the flexibility in object structures JavaScript is known for.
But they have some crucial implications on the type system. Take this example:</p>TypeScript: Match the exact object shape2019-08-19T00:00:00.000Zhttps://oida.dev/typescript-match-the-exact-object-shape/<p>TypeScript is a structural type system. This means as long as your data structure satisfies a contract,
TypeScript will allow it. Even if you have too many keys declared.</p>TypeScript: The constructor interface pattern2019-08-15T00:00:00.000Zhttps://oida.dev/typescript-interface-constructor-pattern/<p>If you are doing traditional OOP with TypeScript, the structural features of TypeScript might
sometimes get in your way. Look at the following class hierachy for instance:</p>Streaming your Meetup - Part 4: Directing and Streaming with OBS2019-08-06T00:00:00.000Zhttps://oida.dev/streaming-your-meetup-part-4-obs/<p>Now that we have everything wired up, it’s time to record, direct and stream!
If you missed the previous parts, check out the table of contents to quickyl jump to a previous
section.</p>Streaming your Meetup - Part 3: Speaker audio2019-07-30T00:00:00.000Zhttps://oida.dev/streaming-your-meetup-part-3-audio/<p>We successfully set up the projector in the <a href="/streaming-your-meetup-part-1-projector/">first chapter</a>.
We are able to record the speaker’s video as described in the <a href="/streaming-your-meetup-part-2-video/">second chapter</a>.
Now let there be sound!</p>Streaming your Meetup - Part 2: Speaker video2019-07-25T00:00:00.000Zhttps://oida.dev/streaming-your-meetup-part-2-video/<p>We successfully set up the projector in our last <a href="/streaming-your-meetup-part-1-projector/">chapter</a>.
Now it’s time to record the speaker himself. I’ll show you a couple of options how you can record
the speaker video. It’s up to your budget and up to the quality you want to achieve.</p>Streaming your Meetup - Part 1: Basics and Projector2019-07-24T00:00:00.000Zhttps://oida.dev/streaming-your-meetup-part-1-projector/<p>When we did <a href="https://scriptconf.org/2018">Script’18</a> in January 2018, we borrowed an A/V equipment worth of 35.000 EUR
to make sure we get kick-ass videos. A+ camera, an A/V mixer and a hard disc recording system that does
editing on the fly. We wanted to go live with our recordings directly after the conference.</p>TypeScript and React Guide: Added a new styles chapter2019-07-19T00:00:00.000Zhttps://oida.dev/redirect-to-typescript-react-styles/<p>CSS in JS! In all possible ways. Or at least, in 5 of them. I collected a list of popular ways
on how to style React components: emotion, styled components, styled-jsx, inline styles and webpack
imports. The focus is again on typings. How well do they play with TypeScript? How complete are
TypeScript integrations. Have fun!</p>TypeScript and React Guide: Added a new render props chapter2019-07-18T00:00:00.000Zhttps://oida.dev/redirect-to-typescript-react-render-props/<p>This took me exactly one year. But mostly due to not finding a lot to talk about. Typings
for React render props are extremely easy and show through typings what its all about: About
sharing state between components. Check out the chapter in my TypeScript + React guide.</p>TypeScript and React: Styles and CSS2019-07-17T00:00:00.000Zhttps://oida.dev/typescript-react/{{page.fileSlug}}/<p>Is there any topic in the React space that has spawned more controversy than styling?
Do everything inline vs rely on classic styles. There’s a broad spectrum. There’s also
a lot of frameworks around that topic. I try to cover a couple, never all of them.</p>TypeScript and React: Render props and child render props2019-07-17T00:00:00.000Zhttps://oida.dev/typescript-react/{{page.fileSlug}}/<p>Render props is, according to the <a href="https://reactjs.org/docs/render-props.html">offical docs</a>, <em>a technique for sharing code between React components using a prop whose value is a function.</em> The idea is to make components composable but being flexible in what to share.</p>TypeScript and React: Prop Types2019-07-17T00:00:00.000Zhttps://oida.dev/typescript-react/{{page.fileSlug}}/<p>React has its own, built-in way of type checking called “prop types”. Together with TypeScript this provides
a full, end-to-end type-checking experience: Compiler and run-time.</p>TypeScript and React2019-07-17T00:00:00.000Zhttps://oida.dev/typescript-react/<p>Welcome to this little primer on TypeScript and React! A match made in heaven!</p>TypeScript and React: Hooks2019-07-17T00:00:00.000Zhttps://oida.dev/typescript-react/{{page.fileSlug}}/<p>Hooks have been announced at React Conf 2018. Check out <a href="https://reactjs.org/docs/hooks-intro.html">this page</a> for more
details. I think they’re pretty awesome. Probably game-changing! Hooks heave formerly “stateless” functional components to
… basically everything traditional class components can be. With a much cleaner API!</p>TypeScript and React: Context2019-07-17T00:00:00.000Zhttps://oida.dev/typescript-react/{{page.fileSlug}}/<p>React’s context API allows you to share data on a global level. To use it, you need two things:</p>TypeScript and React Guide: Added a new prop types chapter2019-07-17T00:00:00.000Zhttps://oida.dev/redirect-to-typescript-react-prop-types/<p>React has a built-in way of type checking called prop types. This works at run time and is a great
accompanying feature for TypeScript. I’ve added a small chapter on prop types in my React and TypeScript
guide.</p>TypeScript without TypeScript -- JSDoc superpowers2019-07-16T00:00:00.000Zhttps://oida.dev/typescript-jsdoc-superpowers/<p>One way to think about TypeScript is as a thin layer around JavaScript that adds type annotations.
Type annotations that make sure you don’t make any mistakes. The TypeScript team worked hard on making
sure that type checking also works with regular JavaScript files. TypeScript’s compiler (<code>tsc</code>) as well as language support in editors like VSCode give you a great developer experience without any compilation step. Let’s see how.</p>TypeScript: Mapped types for type maps2019-07-15T00:00:00.000Zhttps://oida.dev/typescript-type-maps/<p>Factory functions are a popular tool in JavaScript to create a diversity of objects with a single call.
There’s a particular factory function that you might have used at some point:</p>JAMStack vs serverless web apps2019-05-30T00:00:00.000Zhttps://oida.dev/jamstack-vs-serverless-web-apps/<p>JAMStack seems to be one of the most trending topics right now. So are serverless web apps. Hot and loved! I’ve seen some tweets, articles and even live presentations just this week that talk about JAMStack and serverless web apps as if they are the same. For good reason. In an ideal scenario, serverless web apps and JAMStack sites/apps are indistinguishable.</p>The Unsung Benefits of JAMStack Sites2019-05-09T00:00:00.000Zhttps://oida.dev/jamstack-the-unsung-benefits/<p><em>This post originally appeared on <a href="https://dev.to/ddprrt/the-unsung-benefits-of-jamstack-sites-3kd6">dev.to</a></em></p>TypeScript: Ambient modules for Webpack loaders2019-02-13T00:00:00.000Zhttps://oida.dev/typescript-modules-for-webpack/<p>When you work on modern JS apps you most likely use Webpack. Webpack always looked like a very complicated build tool to me, until I realised that it’s nothing but a JavaScript bundler. A JavaScript bundler that allows you to bundle <em>everything</em>! CSS, Markdown, SVGs, JPEGs, you name. It exists and helps the web, you can bundle it.</p>My most favourite talks in 20182018-12-27T00:00:00.000Zhttps://oida.dev/top-talks-to-watch-2018/<p>It’s that time of the year again! For the fourth time in a row, I’m sharing my most
favourite conference talks of the year! And again I found some incredible gems that I can’t
wait to share with you!</p>TypeScript and React: Events2018-12-17T00:00:00.000Zhttps://oida.dev/typescript-react/{{page.fileSlug}}/<p>Web apps are really boring if you don’t interact with them. Events are key, and TypeScript’s React typings
have great support for them.</p>TypeScript and React Guide: Added a new context chapter2018-12-16T00:00:00.000Zhttps://oida.dev/redirect-to-typescript-react-context/<p>React’s context API has be slumbering inside for a while. With one of the latest releases, they decide to open
this API to everybody. It’s very nice to use if you like render props. If not, there’s always the new hooks
API that makes it even easier.</p>TypeScript and React: Getting Started2018-12-12T00:00:00.000Zhttps://oida.dev/typescript-react/{{page.fileSlug}}/<p>TypeScript is a natural fit for React, not only because TypeScript is a full fledged JSX compiler. Which means
that you don’t need a huge building setup. TypeScript includes everything you need. One thing you might want is a
bundling tool. <a href="https://parceljs.org/">Parcel</a> is one choice with easy to no configuration, but you can also use
<a href="https://webpack.js.org/">Webpack</a>.</p>TypeScript and React: Further reading2018-12-12T00:00:00.000Zhttps://oida.dev/typescript-react/{{page.fileSlug}}/<p>Here’s a couple of resources that help you getting more out of TypeScript and React:</p>TypeScript and React: Components2018-12-12T00:00:00.000Zhttps://oida.dev/typescript-react/{{page.fileSlug}}/<p>Components are at the heart of React. Let’s see what we can do to get better error handling and tooling for them!</p>TypeScript and React: Children2018-12-12T00:00:00.000Zhttps://oida.dev/typescript-react/{{page.fileSlug}}/<p>JSX elements can be nested, like HTML elements. In React, children elements are accessible via
the <code>children</code> props in each component. With TypeScript, we have the possibilty to make children
type safe.</p>TypeScript: Built-in generic types2018-12-12T00:00:00.000Zhttps://oida.dev/typescript-built-in-generics/<p>TypeScript comes with a ton of built in generic types that ease your development workflow. Here’s a list of all built-in generic types, with examples!</p>TypeScript: Type predicates2018-11-29T00:00:00.000Zhttps://oida.dev/typescript-type-predicates/<p>Type predicates in TypeScript help you narrowing down your types based on conditionals. They’re similar to type guards, but work on functions.
They way the work is, if a function returns true, change the type of the paramter to something more useful.</p>JSX is syntactic sugar2018-11-21T00:00:00.000Zhttps://oida.dev/jsx-syntactic-sugar/<p>If you follow me you know that I’m super late to the React game. It was not until functional components showed up that I got
really interested in the framework. I just loved the idea of having everything wrapped in an easy function rather than needing
to navigate up and down a class to get everything together. One thing that put me off in the beginning though was JSX. And I’m
sure I’m not the only one. Every time I talk to people about my newly found React love, this point comes up constantly.</p>TypeScript and React Guide: Added a new hooks chapter2018-11-15T00:00:00.000Zhttps://oida.dev/redirect-to-typescript-react-hooks/<p>Hooks are a new feature in React that I personally find pretty exciting. Shortly after their release in React 16.7., people started
developing TypeScript typings via DefinitelyTyped. They’re pretty good, as you don’t have to do much to get all the type safety you need. I put together a little list of things to consider for all hook types in my TypeScript + React guide.</p>Getting your CfP application right2018-11-14T00:00:00.000Zhttps://oida.dev/rock-the-cfp/<p>We just started the <em>Call for Presentations</em> for the upcoming <a href="https://devone.at">DevOne</a> conference,
and I couldn’t be more excited. Last year’s proposals where excellent and a great addition to our
line-up. And by looking at the people who already registered interest, I’m sure that there’s a ton of
great stuff coming up.</p>FAQ on our Angular Connect Talk: Automating UI development2018-11-08T00:00:00.000Zhttps://oida.dev/angular-connect/<p>I’m writing these lines as I fly back from an excellent Angular Connect. I started public speaking a couple of years ago, and this particular talk will be one I’m going to remember for a long time. I think it’s easily on par with my most favourite speaking experience that I had back in 2013 with Breaking Development.</p>TypeScript and Substitutability2018-03-16T00:00:00.000Zhttps://oida.dev/typescript-substitutability/<p>When starting with TypeScript it took not much time to stumble upon some of the type system’s odds. Odds that make a lot of sense if you take a closer look. In this article I want to show you why and how in some cases, TypeScript allows non-matching method signatures.</p>Debugging Node.js apps in TypeScript with Visual Studio Code2018-03-14T00:00:00.000Zhttps://oida.dev/typescript-node-visual-studio-code/<p>When developing, there’s three things that I absolutely enjoy:</p>From Medium: Deconfusing Pre- and Post-processing2018-03-06T00:00:00.000Zhttps://oida.dev/pre-and-post-processing/<p><em>This post was originally published on <a href="">Medium</a> in 2015. I decided to carry it over to my blog to keep it safe</em></p>From Medium: PostCSS misconceptions2018-03-05T00:00:00.000Zhttps://oida.dev/postcss-misconceptions/<p><em>This post was originally published on <a href="">Medium</a> in 2015. I decided to carry it over to my blog to keep it safe</em></p>Saving and scraping a website with Puppeteer2018-02-20T00:00:00.000Zhttps://oida.dev/scraping-with-puppeteer/<p>For some of my performance audits I need an exact copy of the webpage as it is served by my clients infrastructure. In some cases, it can be hard to get to the actual artefact. So it’s easier to fetch it from the web.</p>Cutting the mustard - 2018 edition2018-02-13T00:00:00.000Zhttps://oida.dev/cutting-the-mustard-2018/<p>The other day I was holding a workshop on performance optimisation for single page applications. For this workshop I needed an example that I could optimise step by step. I decided not to use a framework, as I didn’t know the experiences and background of my attendees. Also, I didn’t want to draw attention to framework details, rather focus on concepts that build on the platform and that are universally applicable to SPAs.</p>Wordpress as CMS for your JAMStack sites2018-01-08T00:00:00.000Zhttps://oida.dev/wordpress-and-jamstack-sites/<p>The almighty JAMStack brings you fast and secure static websites, and with things like <a href="https://storyblok.com">headless content management systems</a> they become even easy to edit! However, every once in a while you will find yourself in front of a Wordpress blog that has way too many articles (and way too many authors that fear change!) to be reasonably transferred. But Wordpress can be headless, too. In fact, Wordpress’ own hosting service uses its core only via API, the editing interface comes with the shiny new <a href="https://developer.wordpress.com/calypso/">Calypso</a>.</p>My most favourite podcast episodes in 20172017-12-31T00:00:00.000Zhttps://oida.dev/top-podcast-episodes-2017/<p>After my <a href="/top-books-to-read-2017/">most favourite tech books</a> and my <a href="/top-talks-to-watch-2017/">most favourite tech talks</a> I want to conclude my yearly review with some of podcast episodes I really enjoyed! I listen to one or two hours of podcasts a day. Most of the podcasts I subscribed to are about growing up in the 80s and loving things like the Nintendo Entertainment System or Indiana Jones. But I also listen to a couple of tech podcasts occasionally. And there I found some true gems. Let’s go!</p>My most favourite talks in 20172017-12-30T00:00:00.000Zhttps://oida.dev/top-talks-to-watch-2017/<p>So it IS finally a tradition. After <em><a href="/top-talks-to-watch-2015/">my most favourite talks of 2015</a></em>, and <em><a href="/top-talks-to-watch-2016/">the top talks to watch in 2016 – the conference videos strike back!</a></em>, we complete the trilogy with <em>my most favourite talks of 2017 – Return of the Bingewatch</em>:</p>My most favourite books in 20172017-12-28T00:00:00.000Zhttps://oida.dev/top-books-to-read-2017/<p>I started taking reading seriously again in 2017. I had highs where I read about 10 books a month (phew), and also lows where I haven’t touched a page for a couple of months. Now with having both a toddler and a Kindle<sup>*</sup>, I gladly spend night again guarding the crib while reading both fiction and non-fiction. And oh, did I read a lot of non-fiction this year. There were some amazing books, and I want to share with you the ones that I found the most compelling.</p>The Best Request Is No Request, Revisited2017-11-29T00:00:00.000Zhttps://oida.dev/the-best-request/<p>I had the incredible privilege to work with the fine folks at <a href="https://www.alistapart.com">A List Apart</a> on a text concerning resource bundling in the age of HTTP/2. Using the powers of the new protocol is something that keeps my head busy <a href="https://www.youtube.com/watch?v=98z0XjYWX0o">for quite some time now</a>, and I had to write down my findings. Aaron and Jeremy from ALA were kind enough to accept this piece and work with me on it. It’s been a very thorough process, but it strengthens my belief that an editor’s work can’t be valued enough. Thanks for all your help in getting this one out!</p>Not so hidden figures - Organizing ScriptConf2017-08-09T00:00:00.000Zhttps://oida.dev/not-so-hidden-figures/<p>I met Laura from <a href="http://foundation.travis-ci.org">Travis Foundation</a> a couple of years ago at a conference in Austria, and we had some good time and nice chats together. It’s not easy to keep always in touch with everyone you meet a conference, but thankfully Laura and I managed to cross paths mutliple times in the last few years. I was also delighted to work with her on bringing diversity tickets to Script’17. After attending Script’17, she asked me to write about my experiences in organizing and getting such a wonderful line-up on stage. Laura was super patient, as it took me about six months to finally get the piece done. But here it is, finally! Check out <a href="http://foundation.travis-ci.org/2017/08/09/not-so-hidden-figures/">Not so hidden figures - organizing ScriptConf</a> over at Travis Foundation!</p>My podcast journey to ScriptCast2017-07-11T00:00:00.000Zhttps://oida.dev/scriptcast/<p>I love podcasting. I started back in 2009 and hosted a literature podcast for roughly two years. That’s where I made my first steps in producing non-written content and had lots of fun! I fiddled around doing interviews, chats, specials and audio dramas. Trying to read certain passages of books and added some sound effects to make those passages more interesting. Best thing was buying a semi-professional equipment and record public readings from authors directly from the mixer.</p>Grid layout, grid layout everywhere!2017-06-27T00:00:00.000Zhttps://oida.dev/grid-concepts/<p>One of the great things about Microsoft Edge is that as a developer, you always know what to expect from an upcoming version. Communication is key! The <a href="https://developer.microsoft.com/en-us/microsoft-edge/platform/status/">platform status page</a> gives you a by feature list of the current development status, and the <a href="https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6514853-update-css-grid">Edge user voice</a> allows you to actively influence the developers’ backlog!</p>#scriptconf and #devone2017-06-03T00:00:00.000Zhttps://oida.dev/scriptconf-and-devone/<p>About two years ago, <a href="https://twitter.com/sebgie">Sebastian</a> and I had our first chats about having a JavaScript conference in our town of Linz. And this January, we made our vision reality and launched <a href="https://scriptconf.org">ScriptConf</a>, a conference about JavaScript. Giving it the (quite bold) tagline “The conference this city needs”, we wanted to make JavaScript more popular in Linz, while having a great time with an amazing community.</p>Object streams in Node.js2017-04-19T00:00:00.000Zhttps://oida.dev/object-streams-in-node-js/<p>I’m really good friends with the people at Rising Stack in Budapest. I had lots of fun when they invited me to JSConf Budapest back in May, and enjoy every time they show up here in Linz! I’m also looking forward to see them again when Peter will talk at the upcoming <a href="https://devone.at">Devone</a> conference. So it’s clear that I was more than eager to produce a guest post for their <a href="https://community.risingstack.com">Rising Stack community</a>. Even though I was so eager, it took me roughly 3 months to produce an article based on my recent book “Front-End tooling”. Nevertheless, I thought that my guide to object streams turned out pretty good! I hope <a href="https://community.risingstack.com/the-definitive-guide-to-object-streams-in-node-js/">you enjoy it</a>!</p>Guest post in "Human and the machine": Get the gist2017-03-20T00:00:00.000Zhttps://oida.dev/get-the-gist/<p>Back in the day I was an avid reader of <a href="https://the-pastry-box-project.net/">The pastry box</a>. You can imagine how super happy I was when Alex, the project’s creator asked me to contribute to his new project <a href="https://superyesmore.com/publication/the-human-in-the-machine-a4064599cde2cb3397239e8d72219f48">Human and the machine</a>. It’s all about productivity, in all shapes and forms imaginable. I wrote about “<a href="https://superyesmore.com/get-the-gist-8ff35dc28f30640e2d5fd54bcb7ff083">getting the gist</a>”, and how I manage to stay up to date without having to become an expert myself. Contributing was a wonderful experience, thanks again to Alex for having me and for this great opportunity!</p>I was a guest on the Perfbytes podcast2017-02-22T00:00:00.000Zhttps://oida.dev/guest-on-perfbytes/<p>The <a href="http://perfbytes.com">Perfbytes</a> crew was live at this year’s Perform conference, interviewing crew, attendees and speakers. I had the chance to have a few minutes with them talking about the <a href="https://www.dynatrace.com/capabilities/digital-experience-monitoring/visually-complete/">Visually Complete</a> metric and what it means for Real User Monitoring. Being a podcaster since 2009, it was funny for me doing an interview live from the other side of the microphone. But an experience I fully enjoyed, also mostly due to Mark’s excellent interviewing skills. I should do more live podcasts! If you like, give it a listen at <a href="https://www.spreaker.com/user/pureperformance/dynatrace-perform-2017-wednesday-highlig">Spreaker</a>. It’s a long show, my part starts roughly at 37 minutes. And keep in mind that I was super jetlagged. Thanks Mark and Brian for having me!</p>Change case to lowercase for committed files2017-02-20T00:00:00.000Zhttps://oida.dev/snippets/git/lowercase-rename/<p>It’s super-annoying that the Mac’s file OS is case insensitive. Especially if you have a *NIX based server that can’t read your images and things like that. Just renaming it on the file system won’t work, you have to rename it via Git itself:</p>This was Script'172017-02-16T00:00:00.000Zhttps://oida.dev/this-was-script-17/<p>Sebastian and I gathered together a <a href="https://scriptconf.org/blog/script17-roundup">list of links and lots of coverage</a> to our
conference we held in January. Lots of great blogs, podcasts, images and tweets,
including a few words from our side. We had so much fun organising the conference
and a wonderful time being there. Thanks to everybody for coming.</p>Real user speed index and visually complete2017-02-07T00:00:00.000Zhttps://oida.dev/real-user-visually-complete/<p>This is a somewhat personal post today. I’m currently in Las Vegas (which would be a story on its own) to
speak and attend our company’s <a href="https://www.dynatrace.com/perform">Perform conference</a>. Why me, as a mere
web developer with no customer contact? First, I do like to bring the developer’s view into the whole mix.
Second, I want to see the birth of a new product feature.</p>Plumbin' Pipelines with Gulp.js (Workshop)2017-01-15T00:00:00.000Zhttps://oida.dev/plumbin-pipelines-with-gulp-js/<p>Now that <a href="https://manning.com/baumgartner">my book</a> is out, I dug up an old workshop I held almost one and a half years ago in Belgium at Devoxx. Devoxx is a special type of conference, unlike any other conference I’ve ever seen. And speaking at a cinema definitely is one of the things that get stuck with you. Anyways, here’s the 2 hour course (the rest of the show is a little off topic, intentionally), which is about 75% of the Gulp chapters in live coding.
Enjoy:</p>My most favorite talks in 20162016-12-31T00:00:00.000Zhttps://oida.dev/top-talks-to-watch-2016/<p>Let’s make this a tradition! I love to watch conference talks. Be it live or on tape. And just like <a href="/top-talks-to-watch-2015/">last year</a> I try to collect the talks that I loved most. I know, since I started organising <a href="https://scriptconf.org">Script</a> I began seeing conference talks differently. However, those are the ones I put my attendee-hat on. And let’s be honest: A good organiser needs to do that! So enjoy my list of talks I enjoyed most in 2016.</p>Script'17 JavaScript conference2016-10-26T00:00:00.000Zhttps://oida.dev/script-17/<p>After years of attending conferences and gathering lots of impressions from
around the world, my buddy Sebastian and I decided to do our own thing.
We call it <a href="https://scriptconf.org">Script’17</a>, and aim to provide an exciting,
caring and inspiring JavaScript event for everybody. If you’re interested, go
ahead and check it out!</p>PortoTechHub 20162016-10-09T00:00:00.000Zhttps://oida.dev/porto-tech-hub-2016/<p>I rarely talk about attending or speaking at conferences, but sometimes you just
have to point out some extraordinary events.</p>Jekyll filter: Use Liquid in front-matter2016-08-09T00:00:00.000Zhttps://oida.dev/snippets/jekyll/liquid-in-frontmatter/<p>Jekyll’s template language <a href="https://help.shopify.com/themes/liquid">Liquid</a> is pretty powerful. We
especially use Liquid objects to access different data across all pages, like</p>Using a Static Site Generator at Scale2016-08-08T00:00:00.000Zhttps://oida.dev/static-site-at-scale-smashing-mag-article/<p>I’m so incredibly happy to have my first article published on <a href="https://www.smashingmagazine.com/2016/08/using-a-static-site-generator-at-scale-lessons-learned/">Smashing Magazine</a>. It’s a
6000 word long story about how we managed to bring roughly 2000 pages on a technology stack made for hackers. It took me
roughly four years to find a story that I’m eager enough to pursue, but in the end I think it totally paid off.
Working with Smashing Magazine, especially Vitaly and Iris, was a complete joy! Thank you again for the professional and
friendly work experience!</p>Create progressive JPEGs with graphicsmagick in Node.js2016-05-25T00:00:00.000Zhttps://oida.dev/snippets/node.js/progressive-jpegs-gm/<p>We want to convert all our header images to progressive JPEGs to give a good
impression of the content to come, rather than having everything line by line.
If you’ve installed <a href="http://www.graphicsmagick.org/">GraphicsMagick</a> you can
use the excellent <a href="https://www.npmjs.com/package/gm">gm</a> Node.js bindings to
do so. This is some sample code, with an additional check if the conversion
went well:</p>Video and Slides to: Speed Index, Explained!2016-02-07T00:00:00.000Zhttps://oida.dev/speed-index-explained-topconf/<p>I gave a talk on the beloved “Speed Index” metric at this year’s Topconf in Tallinn.
I managed to put the video on Youtube, for all of you to enjoy:</p>Topconf Linz 2016 is a wrap2016-02-05T00:00:00.000Zhttps://oida.dev/topconf-at-2016/<p>So, Linz has a software conference. One that’s supposed to stay. I think it’s
about time. Linz has a wonderful IT community, with lots of great companies and
so many schools and universities specialised for software development. Except for the short-lived <a href="http://Kod.io">Kod.io</a> movement (spanning <a href="/blog/2014/03/02/kodio/">Kod.io</a>,
Codefront and Railsgirls in 2014), as well as some Linuxwochen now and then,
I hardly can remember any full-fledged Software conference.
So hey, we finally got one!</p>Tales from the Browser Wars: Mozilla Stomps IE2016-01-28T00:00:00.000Zhttps://oida.dev/mozilla-stomps-ie/<p>Recently I did some “The History of the web” talks for various institutions. While preparing the story to tell, I remembered one specific tale from 1997. It was a tale from the first browser wars, when Microsoft battled Netscape for world browser domination.</p>You can extend CoffeeScript classes with ES6 classes2016-01-27T00:00:00.000Zhttps://oida.dev/extend-coffeescript-with-es6-classes/<p><strong>TL;DR</strong>: If you want to extend from CoffeeScript written classes, you can use
the ES6 class syntax to do so.</p>The best thing about NPM scripts2016-01-25T00:00:00.000Zhttps://oida.dev/npm-scripts/<p><strong>TL;DR:</strong> NPM Scripts render global installations of NPM command line tools useless.</p>Jekyll table of contents per page2016-01-12T00:00:00.000Zhttps://oida.dev/snippets/jekyll/table-of-contents/<p>This filter creates a table of contents list based on all <code>h2</code> tags that are on
your site.</p>Gulp and Promises2015-12-21T00:00:00.000Zhttps://oida.dev/gulp-promises/<p>The Gulp task system does not only work with streams alone, but also with other
asynchronous patterns. One of those are well known Promises! Find out how we can
use two Promise-based tools to create a thorough file sync between two folders.</p>My most favorite talks in 20152015-12-12T00:00:00.000Zhttps://oida.dev/top-talks-to-watch-2015/<p>I enjoy being at conferences, however I can’t be on all of them. Which is sad,
because judging from all the videos one misses a lot! Turns out, my most
favorite talks were all from conferences I haven’t been to. The organizers
however are kind enough to provide amazing videos for us:</p>Gulp: Grab files from your CDN and add them to your build pipeline2015-10-13T00:00:00.000Zhttps://oida.dev/gulp-merge-cdn-files-into-your-pipeline/<p>This one is a shorty, but that’s what it makes it so nice. Imagine that you
have only one dependency in your project, which is some third party library
your code builds upon, like jQuery. Instead of having the complete dependency
management stack on your shoulders, you just want to use that single file.</p>Gulp 4: The new task execution system - gulp.parallel and gulp.series2015-09-29T00:00:00.000Zhttps://oida.dev/gulp-4-parallel-and-series/<p>One of the major changes in Gulp 4 is the new task execution system. In this
article, I want to show you what’s new and how you can migrate the best.</p>Stay focused with Webmonitoring (ruxit.com)2015-09-14T00:00:00.000Zhttps://oida.dev/stay-focused-with-web-monitoring/<p>Another article I wrote for the blog over at my employer. When we switched
our login from a purely JavaScript based to a progressively enhanced one,
we ended up in some deployment mistakes. This was how our tool recognized
those errors and what it meant for us. Read it over
at <a href="https://blog.ruxit.com/stay-focused-with-web-monitoring/">Ruxit</a></p>Node.js 4.0.0 and Gulp first aid2015-09-10T00:00:00.000Zhttps://oida.dev/gulp-and-node4-first-aid/<p><a href="https://nodejs.org/en/blog/release/v4.0.0/">Node.js 4.0.0</a> just got released! The jump from 0.12.x
to 4.0 is a huge one, especially since it incorporates lots of changes that happened
over at the IO.js project. So far, I haven’t experienced a lot of issues with it, and it
quickly became the one version that I use as default on my system. However, there are some
hickups here and there. Here I try to collect some issues with Gulp.js and first aid
solutions. There are few and they might be out of date quickly.</p>Gulp 4: Incremental builds with gulp.lastRun2015-09-09T00:00:00.000Zhttps://oida.dev/gulp-4-incremental-builds/<p>Incremental builds are a good way of speeding up your build iterations. Instead
of building everything again with each and every iteration, you just process
the files that have changed.</p>Gulp 4: Passthrough source streams2015-09-07T00:00:00.000Zhttps://oida.dev/gulp-4-passthrough/<p>Another nice addition to <code>vinyl-fs</code> that will end up in Gulp 4 is the possibility
of having “passthrough” source streams. This basically allows <code>gulp.src</code> to be
writable. So what does this mean for you?</p>JavaScript 101: Arrays2015-09-04T00:00:00.000Zhttps://oida.dev/javascript-101-arrays/<p><em>This was the first contribution I’ve ever made at <a href="https://github.com/jquery/learn.jquery.com/pull/88">GitHub</a>, belonging to the original
<a href="http://learn.jquery.com">learn.jquery.com</a> website. The original article is now offline, but saved here for the future.</em></p>Gulp 4: Built-in Sourcemaps2015-09-03T00:00:00.000Zhttps://oida.dev/gulp-4-sourcemaps/<p>One really cool feature on the Gulp 4 roadmap is the inclusion of native
sourcemaps. A commit roughly two weeks ago at the <a href="git://github.com/wearefractal/vinyl-fs">vinyl-fs</a>
package makes this possible now. Instead of using the <code>gulp-sourcemaps</code>
package directly, you can use a flag in <code>gulp.src</code>. Gulp takes care of the rest:</p>Custom Jekyll Includes Directory2015-09-01T00:00:00.000Zhttps://oida.dev/snippets/jekyll/custom-jekyll-includes-directory/<p>If you want to have a custom <code>_includes</code> directory, and maybe more than one
<code>_includes</code> directory, you can easily achieve this by adding a new tag to your
existing Jekyll tag library:</p>I'm writing a book: Front-End Tooling with Gulp, Bower and Yeoman2015-08-26T00:00:00.000Zhttps://oida.dev/the-gulp-book/<p>Okay, lovely people, this is huge for me. I’m actually in the midst of writing a
book. It’s called “<a href="https://www.manning.com/books/front-end-tooling-with-gulp-bower-and-yeoman/?a_aid=fettblog&a_bid=238ac06a">Front-End Tooling with Gulp, Bower and Yeoman</a>”, and it’s
– you guessed it – about front-end tooling with Gulp, Bower and Yeoman. Actually
I’ve been writing on it for the last 9 months, and now it has reached the phase of
going public for the first time. It’s in the so called “Early Access Program” from
Manning (MEAP), where you can buy it before it goes to print, helping me pointing at
all the mistakes I make. Or do some slap on the back because it’s so good.</p>Wordpress: Remove Admin bar in Theme2015-08-25T00:00:00.000Zhttps://oida.dev/snippets/wordpress/wordpress-remove-admin-bar-in-theme/<p>The admin bar in Wordpress can be annoying sometimes, hiding some of your design and even having certain side effects you don’t want. With this snippet, you can turn it off:</p>Book Review: CSS Secrets by Lea Verou2015-08-24T00:00:00.000Zhttps://oida.dev/book-review-css-secrets/<p>In 2012 I saw one of Lea Verou’s talks for the first time. And if you every had the opportunity of seeing her, you know that you are in for a treat. Her unique way of teaching all those nifty CSS tricks is not only entertaining and engaging, but also a huge motivation for your own work. Every time I returned home from one of those conferences, I tried recreating those tricks and secrets (as she calls it) at home. Using her interactive slides I managed to recreate a good deal of what she’s shown, but sometimes I wished I had some sort of documentation ready. Well, this is now available with her book “CSS Secrets”.</p>Deconfusing Pre- and Post-Processing (ext)2015-08-13T00:00:00.000Zhttps://oida.dev/deconfusing-pre-and-post-processing-orig/<p>Some sort of follow-up to my first Medium article – <a href="https://medium.com/@ddprrt/postcss-misconceptions-faf5dc5038df">PostCSS Misconceptions</a> – this one deals with the terms pre- and post-processing in general. Well illustrated and with a verdict.</p>How we sped up ruxit.com2015-08-12T00:00:00.000Zhttps://oida.dev/how-we-sped-up-ruxit-com/<p>The first time I wrote something for my new Job at <a href="https://ruxit.com">Ruxit.com</a>. We spent about three weeks to push the site’s loading performance to a possible max, without us having the possibility to reduce the page’s weight. <a href="https://blog.ruxit.com/how-we-sped-up-ruxit-com/">This is the write-up of our endeavour</a>.</p>PostCSS Misconceptions2015-08-11T00:00:00.000Zhttps://oida.dev/postcss-misconceptions-orig/<p>I tried out Medium as a publishing platform recently. The result is a short rant on how people few PostCSS. While I love the tool and use it everyday, I do want to make clear what’s it all about. Have fun <a href="https://medium.com/@ddprrt/postcss-misconceptions-faf5dc5038df">reading</a>.</p>beyond tellerrand 20152015-05-16T00:00:00.000Zhttps://oida.dev/beyond-tellerrand-2015/<p>Last week I attended this year’s <a href="http://beyondtellerrand.com/">beyond tellerrand</a> in Düsseldorf. It was now my third or fourth time (memories are actually really fuzzy … but then again you don’t remember how often you came back to your home during a year) and again I was blown away by both the quality of the conference and the warmth and open-mindedness of its audience.</p>Gulp Recipes - Part Two: You might not need this plugin2015-05-03T00:00:00.000Zhttps://oida.dev/gulp-recipes-part-2/<p>One month has passed, many questions on <a href="http://stackoverflow.com/questions/tagged/gulp">StackOverflow</a> have been answered, so here’s yet another round of common Gulp issues with a simple and repeatable solution to them. Be sure to check out last <a href="/gulp-recipes-part-1">month’s edition</a>, as well as my articles on <a href="/php-browsersync-grunt-gulp">Gulp, PHP and BrowserSync</a> and <a href="/gulp-browserify-multiple-bundles/">multiple Browserify bundles</a>.</p>Interview with bugtrackers.io2015-04-27T00:00:00.000Zhttps://oida.dev/interview-with-bugtrackers/<p>I had the sincere pleasure of doing an interview with the guys at <a href="https://www.bugtrackers.io/interview-stefan-baumgartner">bugtrackers.io</a>. We talked a lot about my journey as a web developer for the last 15 years. Starting as a teenage boy doing <a href="http://web.archive.org/web/20040403201325/http://www.squarenet.de/main.php?site=sn-news">Gaming websites</a>, up to creating websites professionally with several agencies, and finally my landing at <a href="http://www.ruxit.com">Ruxit</a>.</p>Gulp Recipes - Part One2015-04-04T00:00:00.000Zhttps://oida.dev/gulp-recipes-part-1/<p>In the last two weeks I spent a good deal of time on <a href="http://stackoverflow.com/questions/tagged/gulp">StackOverflow</a>, trying to solve every open Gulp question there is. The reasons for that are manifold, and besides an overall high amount of spare time and a strong tendency to masochism (it would be more if I’d watch the JavaScript channel there), there was one more reason, which I hope to address at some point in the future.</p>Gulp: Creating multiple bundles with Browserify2015-03-25T00:00:00.000Zhttps://oida.dev/gulp-browserify-multiple-bundles/<p>With the ever-changing eco system of Node.js tools, a short version disclaimer. This article has been created using</p>Running an on-demand PHP server with BrowserSync and Grunt/Gulp2015-03-21T00:00:00.000Zhttps://oida.dev/php-browsersync-grunt-gulp/<p>Quite a while ago I wrote a little article on <a href="/blog/2013/11/17/the-magic-of-grunt-contrib-connect-and-how-to-run-php-with-it/">connect middleware and how to run PHP with it</a>. While the article was originally intended to introduce the concept of connect middlewares to the Grunt audience, I get a lot of feedback on the PHP part. Which was actually broken by design. So, if you’re search for a <em>real</em> on-demand PHP server in your Grunt or Gulp setup, and have all the livereload goodness you know from your connect server, proceed:</p>Delete a commit on your remote2015-02-25T00:00:00.000Zhttps://oida.dev/snippets/git/delete-a-commit-on-your-remote/<p>Assume you have pushed a commit and regret it now. Or you did want to have that commit in another branch, for development reasons.
It’s rather easy to revert that commit and delete it from your pushed remote:</p>Revisiting LESS2015-02-13T00:00:00.000Zhttps://oida.dev/revisiting-less-stylesheets/<p>Back in 2011 when we started using preprocessors at our company the decision fell very quick to <a href="http://www.lesscss.org">LESS</a>. The reasons for that where mannifold:</p>Reverting a single file2015-01-05T00:00:00.000Zhttps://oida.dev/snippets/git/reverting-a-single-file/<p>You can do the following to revert a single filename to its previous status.</p>Frontend-Tooling Workshop in March - Slides inside2015-01-04T00:00:00.000Zhttps://oida.dev/frontend-tooling-2015/<p>I happen to hold my third iteration of the “Frontend Tooling with Grunt and Yeoman” workshop at this years <a href="http://javascript-days.de/2015/">JavaScript Days</a> in March. It’s in Munich, so if you happen to be bear this lovely town, drop by and learn a lot about different JavaScript technologies.</p>Changing compatibility view settings for IE via htaccess2015-01-02T00:00:00.000Zhttps://oida.dev/snippets/server/changing-compatibility-view-settings-for-ie-via-htaccess/<p>Those lines send compatibility view instructions with the HTTP Header:</p>Show only user's posts in post overview2014-12-30T00:00:00.000Zhttps://oida.dev/snippets/wordpress/show-only-user-s-post-in-post-overview/<p>This one restricts authors to only view their own posts in Wordpress’ post overview:</p>Show only user's images in media library2014-12-29T00:00:00.000Zhttps://oida.dev/snippets/wordpress/show-only-user-s-images-in-media-library/<p>This short snippet restricts authors to only view the files from the media library which they have uploaded:</p>My contribution to Christoph Rumpel's "10 things that will make you a better developer"2014-12-10T00:00:00.000Zhttps://oida.dev/contribution-to-10-things/<p>I did a small contribution to <a href="http://christoph-rumpel.com/2014/12/10-things-that-will-make-you-a-better-developer/">Christoph’s blog</a> on “10 thing that will make you a better developer”. Be sure to check out the entire article. This one is mine:</p>Introduction to Yeoman2014-12-09T00:00:00.000Zhttps://oida.dev/introduction-to-yeoman-slides/<p>A few weeks ago I did a short talk on <a href="http://yeoman.io">Yeoman</a> at the Linzer edition of <a href="http://codeweek.eu">Codeweek</a> and how it helps us in our daily workflow. For the first time I tried to have some sort of script, and afterwards I even made notes. So aside from funny images, you even can read what I was talking about. Have fun!</p>Running NPM without sudo2014-12-08T00:00:00.000Zhttps://oida.dev/snippets/node.js/npm-without-sudo/<p>Several ways to fix the problem of running node tools and npm without sudo (which probably always results in an error).</p>The Fine Print2014-09-19T00:00:00.000Zhttps://oida.dev/snippets/semantics/the-fine-print/<p>This one gets overlooked the most, I guess. If you have any legal disclaimer, a so called fine print or small print (The ambitious “Kleingedruckte” in German), there is actually an element for that, that you might even know: <code>small</code>. You may put it in a footer to separate it correctly:</p>Removing Byte Order Marks2014-09-18T00:00:00.000Zhttps://oida.dev/snippets/php/removing-byte-order-marks/<p>One special version of Excel for instance still adds those nasty buggers.</p>Calling Dynamic Functions with Dynamic Paramters2014-09-18T00:00:00.000Zhttps://oida.dev/snippets/javascript/calling-dynamic-functions-with-dynamic-parameters/<p>Useful for wrapper APIs or communicating with external interfaces:</p>Making dragonquest.at Open Source2014-09-17T00:00:00.000Zhttps://oida.dev/making-dragonquest-at-open-source/<p>No tutorials or tech guides today, this is something rather personal! Yesterday while waiting for the launch of Netflix I got an E-Mail that the original <em>Dragon Quest</em> is available for Smartphones, making it the first time that this game makes it to Europe since its original release in 1986.</p>CSS levels up: the HWB colour model2014-07-13T00:00:00.000Zhttps://oida.dev/hwb-colors/<p>HWB is short for “Hue, Whiteness, Blackness” and is a new colour space format, which is now proposed in the current <a href="http://dev.w3.org/csswg/css-color/#the-hwb-notation">CSS Colours Module Level 4</a> working draft.</p>Formular One - or - How to style <select> elements2014-06-05T00:00:00.000Zhttps://oida.dev/style-select-elements/<p>Remember those days where developers made the most amazing forms in Flash because they both had to do everything from scratch due to lack of being close to an operating system. And designers decided to put extra effort in looks in behaviour because of … design?</p>Lesser known Grunt.js features: Renaming of files2014-05-27T00:00:00.000Zhttps://oida.dev/blog/2014/05/27/undocumented-features-rename/<p>Recently I had to deploy some static sites for some client, whose server didn’t allow to automatically redirect to <code>index.html</code> when accessing a directory. It had to be named <code>index.php</code> for whatever reason.</p>Gulp, Sass, Autoprefixer, Sourcemaps!2014-04-10T00:00:00.000Zhttps://oida.dev/blog/2014/04/10/gulp-sass-autoprefixer-sourcemaps/<p><strong>Update 2016/02</strong>: <em>This is old. This might not be up to date anymore!</em></p>kod.io Linz2014-03-02T00:00:00.000Zhttps://oida.dev/blog/2014/03/02/kodio/<p>Last Saturday the very first developer conference of Linz was held at the Ars Electronica Center. A place I haven’t visited for 10 years. It was called <a href="http://linz.kod.io">kod.io</a> and was the international spin-off of a Turkish event held last year.</p>noPrefixes flag in Modernizr2014-02-20T00:00:00.000Zhttps://oida.dev/blog/2014/02/20/no-prefixes/<p>More than half a year ago I had some little rant on why we should <a href="/blog/2013/07/02/preparing-for-an-unprefixed-future/">drop using vendor prefixes as a whole</a>. Main points were:</p>Create manageable Sass components (to use with Bower, etc.)2014-01-13T00:00:00.000Zhttps://oida.dev/blog/2014/01/13/manageable-sass-components/<p>Having a set of reusable and ready software components is a great thing. And for a multitude of reasons, like ensuring DRY development or boosting efficiency. A software component is a self contained unit of program code which can be accessed only by a defined interface. Or like <a href="http://www.eecs.berkeley.edu/~newton/Classes/EE290sp99/lectures/ee290aSp994_1/tsld009.htm">Berkely University puts it</a>:</p>Remake, Remodel! Part Three: How to switch from Wordpress to Jekyll2014-01-02T00:00:00.000Zhttps://oida.dev/blog/2014/01/02/how-to-switch-from-wordpress-to-jekyll/<p>Even tough I was pretty satisfied with my old blog, and especially its design, I felt the need to go into another round of updating not only the look, but more importantly the system behind it. So, even if everything looks shiny and new (more likely: crappy), this is all about the nuts and bolts behind the content: <strong>Converting your blog from Wordpress to Jekyll</strong></p>The magic of grunt-contrib-connect, and how to run PHP with it2013-11-17T00:00:00.000Zhttps://oida.dev/blog/2013/11/17/the-magic-of-grunt-contrib-connect-and-how-to-run-php-with-it/<p><strong>Note:</strong> <em>This article is rather old. If you want to know more about `connect`, proceed, if you just want to have a PHP sever with livereload for your Grunt or Gulp setup, go <a href="/php-browsersync-grunt-gulp/">there</a></em>
<p>One of the most loved <a href="http://gruntjs.com">Grunt.js</a> extensions in our team is the ability to spawn a server for your project with the virtual push of a button, and to be able to see all the changes directly in the browser with a little <a href="https://github.com/livereload/livereload-js">Livereload</a> magic. The seemingly endless Apache configuration days seemed to be over, and every front-end dev in our group was happy with the new workflow established. However, from time to time there was the urge to run some little PHP scripts. Not the big apps, mostly an inclusion of CMS managed labels. This need brought me to delve deeper into the mysteries of the connect task. <!--more--></p>Topconf Tallinn 20132013-11-13T00:00:00.000Zhttps://oida.dev/blog/2013/11/13/topconf-tallinn-2013/<p>Last week I attended <a href="http://topconf.com">Topconf</a> in Tallinn, Estonia. It was my very first time in Estonia and also my first time at a conference which wasn't targeted to web developers or designers. Instead, it was a software conference which appealed both hardcore coders and project managers.</p>Content vs. value2013-10-21T00:00:00.000Zhttps://oida.dev/blog/2013/10/21/content-vs-value/<p>Title’s for all content strategists out there who expect something really meta and with a lot of additional bla bla. Well, this is about HTML Content vs. Input Values.</p>Great Scott! Five lesser known shortcuts for Emmet.io that rock!2013-10-16T00:00:00.000Zhttps://oida.dev/blog/2013/10/16/great-scott-five-lesser-known-shortcuts-for-emmet-io-that-rock/<p>I'm a huge fan of <a href="http://emmet.io">Emmet</a>. It allows you not only to create markup in no-time by using a CSS-like syntax in your most favourite code editor (e.g. <code>ul>li*5</code> expands to one <code><ul></code> element with five nested <code><li></code> elements in HTML after hitting the tab key. Alternatively, you can just type <code>m20</code> in your CSS to get <code>margin: 20px</code> after hitting tab).</p>It's all about the content!2013-10-11T00:00:00.000Zhttps://oida.dev/blog/2013/10/11/its-all-about-the-content/<p>You know parallel scrolling websites? The kind where big sunglasses assemble themselves, break through rocks and crash your browser? The kind everyone loves. Except developers. Today I found <a href="http://thereisnopagefold.com">thereisnopagefold.com</a> by <a href="http://twitter.com/coda_za">Damien du Toit</a>, who had his own opinion on the whole thing. Check it out.</p>Digital Visions 20132013-10-10T00:00:00.000Zhttps://oida.dev/blog/2013/10/10/digital-visions-2013/<p>Last friday <a href="http://liechtenecker.at">Jürgen Liechtenecker and company</a> held the Digital Visions conference in Vienna for the second time. I was invited to speak and got the amazing opportunity to try out a new talk in front of an interested crowd. Digital Visions quickly became the no. 1 meeting point for all Front End devs and UX people in Austria, and I was not only happy to see a lot of familiar faces from Linz and Vienna, but also meet cab sharing buddy <a href="http://maddesigns.de">Sven Wolfermann</a> again. He's an amazing speaker and combines true "Berliner Schnauze" with a lot of interesting information. Have fun in Amsterdam, pal, see you in Düsseldorf at the latest!</p>Using grunt-connect-proxy2013-09-20T00:00:00.000Zhttps://oida.dev/blog/2013/09/20/using-grunt-connect-proxy/<p>
<em>Update 2014/01/13: The interface of <code>grunt-contrib-connect</code> has slightly changed. Please check <a href="/blog/2013/11/17/the-magic-of-grunt-contrib-connect-and-how-to-run-php-with-it/">my article on how to add middleware</a>. The proxy middleware is still the same, tough.</em>
</p>Using assemble.io with yeoman.io's webapp Gruntfile2013-09-02T00:00:00.000Zhttps://oida.dev/blog/2013/09/02/using-assemble-io-with-yeoman-ios-webapp-gruntfile/<p>With <a href="http://h5bp.github.io/Effeckt.css/dist/">Effeckt.css</a> I discovered <a href="http://assemble.io/">assemble.io</a>, a node-based static site generator for ... well ... assembling HTML files from different parts.</p>Basic SVG path tweening with SMIL2013-07-16T00:00:00.000Zhttps://oida.dev/blog/2013/07/16/basic-svg-path-tweening-with-smil/<p></p>
<p></p>Preparing for an unprefixed future2013-07-02T00:00:00.000Zhttps://oida.dev/blog/2013/07/02/preparing-for-an-unprefixed-future/<p>I realized recently that I don't have to use "<em>-webkit</em>" on the transition property anymore for Chrome. Actually, to use transitions in modern desktop browsers I don't have to use any prefix at all. This was almost unimaginable a few months ago!</p>Caring for Sharing: Social share URLs2013-06-17T00:00:00.000Zhttps://oida.dev/blog/2013/06/17/caring-for-sharing-social-share-urls/<p>I truly hate social media share buttons. Especially those plugins which not only are coded badly but also create heavy traffic and performance issues. Plus, they're a pain in the ass to place correctly. If you really want to use (or have to use) those social liking/sharing/tweeting stuff, use their share URLs. Every single one of them has such, and you can either open them in a pop-up or in a new window. Here they are:</p>Preserving aspect ratio for embedded iframes2013-06-16T00:00:00.000Zhttps://oida.dev/blog/2013/06/16/preserving-aspect-ratio-for-embedded-iframes/<p><b>Update 2021</b>: This has been one of my most read articles for some time. And now I'm happy to proclaim: It's outdated. There's a property in CSS!</p>beyond our own noses - the "beyond tellerrand 2013"2013-06-06T00:00:00.000Zhttps://oida.dev/blog/2013/06/06/beyond-our-own-noses-the-beyond-tellerrand-2013/<p>Not one single line of JavaScript code? At a conference where web developers visibly outnumbered the rest of the audience? Yes, they can: Düsseldorf's <a href="http://2013.beyondtellerrand.com">"beyond tellerrand"</a> conference saw its third edition this year, and what initially started as a somewhat obscure insider gathering is now a definite "Be there or be square" for designers and coders. How come? Well, "beyond tellerrand" translates as "beyond our own noses", and that is exactly what the event is about: Widening the horizon of web developers. Planting fresh ideas into bright brains. Seeding energizing motivation into otherwise boring "business as usual". Throwing a spotlight on fields which are closely linked to our own work, yet rarely part of our considerations. In other words, the principles of the Netural environment get blown up to a full-size conference here.</p>Remake. Remodel. Part 22013-04-30T00:00:00.000Zhttps://oida.dev/blog/2013/04/30/remake-remodel-part-2/<p><a href="http://blog.cloudfour.com">@grigs</a> said I should blog, so I'm going to take this thing seriously now. I spent the last few days (finally) creating a new look for my website. With the advent of flat designs I think I'm able to create at least one style that doesn't fail completely. And actually I'm pretty happy with it. </p>Nobody wants HTML5 apps2013-04-24T00:00:00.000Zhttps://oida.dev/blog/2013/04/24/nobody-wants-html5-apps/<p>There's much buzz going on about HTML5 being just the wrong way of developing apps. Facebook switched to "kind of native" a while ago (and still has an app below standards), now <a href="http://venturebeat.com/2013/04/17/linkedin-mobile-web-breakup/" target="_blank">LinkedIn</a> dropped their HTML5 based app in favor of a native one.</p>"Technologieplauscherl" at Netural2012-11-26T00:00:00.000Zhttps://oida.dev/blog/2012/11/26/technologieplauscherl-at-netural/<p>On Thursday we held the "<a href="http://www.barcamp.at/Technologieplauscherl" target="_blank">Technologieplauscherl</a>" at Netural for the first time. The "Plauscherl" (which translates to technology talk, but is unrelated to my beloved F.E.T.T.) is some sort of short evening barcamp held by the local dev community of Linz in different locations, mostly offices from attending persons. In its eight edition it had the unique topic "books", which was also a first for the group, I guess. The goal was: Present a book and give a short review.</p>Preventing FOUT in IE92012-11-16T00:00:00.000Zhttps://oida.dev/blog/2012/11/16/preventing-fout-on-ie9/<p>FOUT is an abbrevation for flash of unstyled text (or type) and is one of those really nasty bits in modern frontend development. Summarized it means that if you use webfonts it might happen that you first see your text displayed in a fallback font until the downloadble webfont is loaded, parsed and inserted. <a href="http://remysharp.com/2009/06/23/safaris-problem-with-font-face/" target="_blank">Remy Sharp</a> and <a href="http://paulirish.com/2009/fighting-the-font-face-fout/" target="_blank">Paul Irish</a> did a lot of research on that topic more than three years ago.</p>Remake, Remodel.2012-11-15T00:00:00.000Zhttps://oida.dev/blog/2012/11/15/remake-remodel/<p>Let's face it: ModX -- even with the Articles Plugin -- isn't suitable for fast blogging. At least not in the way I need it. So I switched back to Wordpress. Setting the whole thing up from scratch. So there will be some changes in the next days/weeks/months.</p>Forcing browsers to print all pages in grayscale2012-06-11T00:00:00.000Zhttps://oida.dev/blog/2012/06/11/forcing-chrome-to-print-all-pages-in-grayscale/<p><em>Slightly updated on 2014/05/27</em></p>Of mice and touches2012-05-01T00:00:00.000Zhttps://oida.dev/blog/2012/05/01/ie9-mobile-is-no-touch-browser/<p>Unbelievable, but true: Imagine you bought a new Windows Phone 7 (e.g. Nokia Lumia or Samsung Omnia) with "Mango" on it and try to get your mobile web app running, you will be really surprised when finding out, that there's no touch event available.</p>Robust (but hacky) way of portrait / landscape detection2012-04-16T00:00:00.000Zhttps://oida.dev/blog/2012/04/16/robust-but-hacky-way-of-portraitlandscape-detection/<p>On mobile devices it's pretty easy (and in some cases also pretty cool) to change the look of your website respectively to the orientation of your device with media queries. However, sometimes the orientation does not only affect your layout, but also the routines of your Javascript. This article shows some possibilites how to detect portrait/landscape orientation on your mobile device. Some are less robust considering multiple device vendors, and some are in exchange a lot more hacky. You're gonna love it.</p>HTML5 Audio on mobile devices2012-04-08T00:00:00.000Zhttps://oida.dev/blog/2012/04/08/html5-audio-on-mobile-devices/<p>HTML5 Audio on desktop browsers is a mess. But you haven't experienced true pain and suffering until you try to get HTML5 audio done on mobile devices. This article is a follow-up to <a href="https://oida.dev/slides/HTML5Mobile">my talk at the Barcamp in Salzburg</a> in March and was inspired by <a href="https://twitter.com/#!/codepo8/status/187790267464679424">Chris Heilmans tweets</a> on that topic a few days ago.</p>