oida.dev | TypeScript, Rust 2026-02-04T12:50:56.890Z https://oida.dev Stefan Baumgartner [email protected] TypeScript's `erasableSyntaxOnly` Flag 2025-02-03T00:00:00.000Z https://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 work 2024-11-22T00:00:00.000Z https://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: Macros 2024-11-20T00:00:00.000Z https://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: Channels 2024-11-19T00:00:00.000Z https://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 Started 2024-11-18T00:00:00.000Z https://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 Stack 2024-11-18T00:00:00.000Z https://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.000Z https://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 TypeScript 2024-03-05T00:00:00.000Z https://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 TypeScript 2023-07-17T00:00:00.000Z https://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 Traits 2023-03-02T00:00:00.000Z https://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&lt;String, String&gt;</code> called <code>headers</code>, presumably dealing with something similar to HTTP headers.</p> Refactoring in Rust: Abstraction with the Newtype Pattern 2023-02-21T00:00:00.000Z https://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 Cookbook 2022-11-07T00:00:00.000Z https://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 objects 2022-05-11T00:00:00.000Z https://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 JavaScript 2022-05-09T00:00:00.000Z https://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.dev 2022-04-27T00:00:00.000Z https://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 traits 2022-04-15T00:00:00.000Z https://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 point 2022-01-31T00:00:00.000Z https://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 TypeScript 2022-01-10T00:00:00.000Z https://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 Rust 2021-12-23T00:00:00.000Z https://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 Coverage 2021-12-14T00:00:00.000Z https://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 overload 2021-11-30T00:00:00.000Z https://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 broken 2021-09-15T00:00:00.000Z https://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 any 2021-09-14T00:00:00.000Z https://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 errors 2021-09-09T00:00:00.000Z https://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&lt;dyn Error&gt;</code>, which means we defer a lot of information from compile-time to runtime, for the sake of convenient error handling.</p> Dissecting Deno 2021-09-08T00:00:00.000Z https://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 Rust 2021-09-07T00:00:00.000Z https://oida.dev/rust-error-handling/> <p>I started doing <a href="https://kusss.jku.at/kusss/selectcoursegroup.action?coursegroupid=5209&amp;abhart=all&amp;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 intersections 2021-07-21T00:00:00.000Z https://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 audit 2021-07-07T00:00:00.000Z https://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 types 2021-07-06T00:00:00.000Z https://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 forwardRefs 2021-04-13T00:00:00.000Z https://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 names 2021-03-15T00:00:00.000Z https://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 Go 2021-03-03T00:00:00.000Z https://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 clauses 2021-03-02T00:00:00.000Z https://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 types 2021-01-20T00:00:00.000Z https://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 generics 2021-01-07T00:00:00.000Z https://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 patterns 2020-11-24T00:00:00.000Z https://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 interfaces 2020-11-20T00:00:00.000Z https://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 enums 2020-11-19T00:00:00.000Z https://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 Lessons 2020-10-12T00:00:00.000Z https://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.000Z https://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 TypeScript 2020-08-19T00:00:00.000Z https://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 Modules 2020-08-14T00:00:00.000Z https://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.FC 2020-07-30T00:00:00.000Z https://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 patterns 2020-07-28T00:00:00.000Z https://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.ts 2020-07-17T00:00:00.000Z https://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 TypeScript 2020-07-06T00:00:00.000Z https://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 type 2020-06-29T00:00:00.000Z https://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&lt;T&gt;</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 automatically 2020-06-25T00:00:00.000Z https://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.000Z https://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 Preview 2020-06-19T00:00:00.000Z https://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.keys 2020-06-17T00:00:00.000Z https://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.000Z https://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 types 2020-03-25T00:00:00.000Z https://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.defineProperty 2020-02-06T00:00:00.000Z https://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 type 2020-02-03T00:00:00.000Z https://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 TypeScript 2019-09-10T00:00:00.000Z https://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 TypeScript 2019-09-06T00:00:00.000Z https://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 TypeScript 2019-09-04T00:00:00.000Z https://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 TypeScript 2019-08-28T00:00:00.000Z https://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 Elements 2019-08-27T00:00:00.000Z https://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 context 2019-08-26T00:00:00.000Z https://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 shape 2019-08-19T00:00:00.000Z https://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 pattern 2019-08-15T00:00:00.000Z https://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 OBS 2019-08-06T00:00:00.000Z https://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 audio 2019-07-30T00:00:00.000Z https://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 video 2019-07-25T00:00:00.000Z https://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 Projector 2019-07-24T00:00:00.000Z https://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 chapter 2019-07-19T00:00:00.000Z https://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 chapter 2019-07-18T00:00:00.000Z https://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 CSS 2019-07-17T00:00:00.000Z https://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 props 2019-07-17T00:00:00.000Z https://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 Types 2019-07-17T00:00:00.000Z https://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 React 2019-07-17T00:00:00.000Z https://oida.dev/typescript-react/ <p>Welcome to this little primer on TypeScript and React! A match made in heaven!</p> TypeScript and React: Hooks 2019-07-17T00:00:00.000Z https://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: Context 2019-07-17T00:00:00.000Z https://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 chapter 2019-07-17T00:00:00.000Z https://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 superpowers 2019-07-16T00:00:00.000Z https://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 maps 2019-07-15T00:00:00.000Z https://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 apps 2019-05-30T00:00:00.000Z https://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 Sites 2019-05-09T00:00:00.000Z https://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 loaders 2019-02-13T00:00:00.000Z https://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 2018 2018-12-27T00:00:00.000Z https://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: Events 2018-12-17T00:00:00.000Z https://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 chapter 2018-12-16T00:00:00.000Z https://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 Started 2018-12-12T00:00:00.000Z https://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 reading 2018-12-12T00:00:00.000Z https://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: Components 2018-12-12T00:00:00.000Z https://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: Children 2018-12-12T00:00:00.000Z https://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 types 2018-12-12T00:00:00.000Z https://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 predicates 2018-11-29T00:00:00.000Z https://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 sugar 2018-11-21T00:00:00.000Z https://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 chapter 2018-11-15T00:00:00.000Z https://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 right 2018-11-14T00:00:00.000Z https://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 development 2018-11-08T00:00:00.000Z https://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 Substitutability 2018-03-16T00:00:00.000Z https://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 Code 2018-03-14T00:00:00.000Z https://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-processing 2018-03-06T00:00:00.000Z https://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 misconceptions 2018-03-05T00:00:00.000Z https://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 Puppeteer 2018-02-20T00:00:00.000Z https://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 edition 2018-02-13T00:00:00.000Z https://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 sites 2018-01-08T00:00:00.000Z https://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 2017 2017-12-31T00:00:00.000Z https://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 2017 2017-12-30T00:00:00.000Z https://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 2017 2017-12-28T00:00:00.000Z https://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, Revisited 2017-11-29T00:00:00.000Z https://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 ScriptConf 2017-08-09T00:00:00.000Z https://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 ScriptCast 2017-07-11T00:00:00.000Z https://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.000Z https://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 #devone 2017-06-03T00:00:00.000Z https://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.js 2017-04-19T00:00:00.000Z https://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 gist 2017-03-20T00:00:00.000Z https://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 podcast 2017-02-22T00:00:00.000Z https://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 files 2017-02-20T00:00:00.000Z https://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'17 2017-02-16T00:00:00.000Z https://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 complete 2017-02-07T00:00:00.000Z https://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.000Z https://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 2016 2016-12-31T00:00:00.000Z https://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 conference 2016-10-26T00:00:00.000Z https://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 2016 2016-10-09T00:00:00.000Z https://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-matter 2016-08-09T00:00:00.000Z https://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 Scale 2016-08-08T00:00:00.000Z https://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.js 2016-05-25T00:00:00.000Z https://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.000Z https://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 wrap 2016-02-05T00:00:00.000Z https://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 IE 2016-01-28T00:00:00.000Z https://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 classes 2016-01-27T00:00:00.000Z https://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 scripts 2016-01-25T00:00:00.000Z https://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 page 2016-01-12T00:00:00.000Z https://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 Promises 2015-12-21T00:00:00.000Z https://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 2015 2015-12-12T00:00:00.000Z https://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 pipeline 2015-10-13T00:00:00.000Z https://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.series 2015-09-29T00:00:00.000Z https://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.000Z https://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 aid 2015-09-10T00:00:00.000Z https://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.lastRun 2015-09-09T00:00:00.000Z https://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 streams 2015-09-07T00:00:00.000Z https://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: Arrays 2015-09-04T00:00:00.000Z https://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 Sourcemaps 2015-09-03T00:00:00.000Z https://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 Directory 2015-09-01T00:00:00.000Z https://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 Yeoman 2015-08-26T00:00:00.000Z https://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&amp;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 Theme 2015-08-25T00:00:00.000Z https://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 Verou 2015-08-24T00:00:00.000Z https://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.000Z https://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.com 2015-08-12T00:00:00.000Z https://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 Misconceptions 2015-08-11T00:00:00.000Z https://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 2015 2015-05-16T00:00:00.000Z https://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 plugin 2015-05-03T00:00:00.000Z https://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.io 2015-04-27T00:00:00.000Z https://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 One 2015-04-04T00:00:00.000Z https://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 Browserify 2015-03-25T00:00:00.000Z https://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/Gulp 2015-03-21T00:00:00.000Z https://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 remote 2015-02-25T00:00:00.000Z https://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 LESS 2015-02-13T00:00:00.000Z https://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 file 2015-01-05T00:00:00.000Z https://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 inside 2015-01-04T00:00:00.000Z https://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 htaccess 2015-01-02T00:00:00.000Z https://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 overview 2014-12-30T00:00:00.000Z https://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 library 2014-12-29T00:00:00.000Z https://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.000Z https://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 Yeoman 2014-12-09T00:00:00.000Z https://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 sudo 2014-12-08T00:00:00.000Z https://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 Print 2014-09-19T00:00:00.000Z https://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 Marks 2014-09-18T00:00:00.000Z https://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 Paramters 2014-09-18T00:00:00.000Z https://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 Source 2014-09-17T00:00:00.000Z https://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 model 2014-07-13T00:00:00.000Z https://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 &lt;select&gt; elements 2014-06-05T00:00:00.000Z https://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 files 2014-05-27T00:00:00.000Z https://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.000Z https://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 Linz 2014-03-02T00:00:00.000Z https://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 Modernizr 2014-02-20T00:00:00.000Z https://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.000Z https://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 Jekyll 2014-01-02T00:00:00.000Z https://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 it 2013-11-17T00:00:00.000Z https://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 2013 2013-11-13T00:00:00.000Z https://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. value 2013-10-21T00:00:00.000Z https://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.000Z https://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&gt;li*5</code> expands to one <code>&lt;ul&gt;</code> element with five nested <code>&lt;li&gt;</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.000Z https://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 2013 2013-10-10T00:00:00.000Z https://oida.dev/blog/2013/10/10/digital-visions-2013/ <p>Last friday <a href="http://liechtenecker.at">J&uuml;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&uuml;sseldorf at the latest!</p> Using grunt-connect-proxy 2013-09-20T00:00:00.000Z https://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 Gruntfile 2013-09-02T00:00:00.000Z https://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 SMIL 2013-07-16T00:00:00.000Z https://oida.dev/blog/2013/07/16/basic-svg-path-tweening-with-smil/ <p></p> <p></p> Preparing for an unprefixed future 2013-07-02T00:00:00.000Z https://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 URLs 2013-06-17T00:00:00.000Z https://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 iframes 2013-06-16T00:00:00.000Z https://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.000Z https://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&uuml;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 2 2013-04-30T00:00:00.000Z https://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 apps 2013-04-24T00:00:00.000Z https://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> "Tech­no­logie­plausch­erl" at Netural 2012-11-26T00:00:00.000Z https://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 IE9 2012-11-16T00:00:00.000Z https://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.000Z https://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 grayscale 2012-06-11T00:00:00.000Z https://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 touches 2012-05-01T00:00:00.000Z https://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 / land­scape detection 2012-04-16T00:00:00.000Z https://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 devices 2012-04-08T00:00:00.000Z https://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>