hello.js

var please = require('share');
console.log('thank you');

NEW !!!

Thursday, 6 October, 2022 UTC

How to gain the skills of a software engineer

Note: If you haven’t read my article about what it means to be a software engineer, I would recommend you go back and read it first for some valuable context. Okay, so you know that you want to be a software engineer, now what? Should I go to college? ... more


Friday, 4 March, 2022 UTC

If it’s not a number, what is it? Demystifying NaN for the working programmer.

There are few things that can trip up even experienced programmers more easily than floating-point arithmetic. New programmers often don’t even realize they are using floating-point numbers, or know what floating-point numbers are. In modern programming, ... more


Wednesday, 15 September, 2021 UTC

What I got out of my internship with Lucid

Before my software engineering internship began at Lucid, I naturally had some concerns about beginning a new job remotely. How am I going to find answers to the questions that I’m sure to have hundreds of? Am I going to find myself floundering in an ... more


Tuesday, 21 January, 2020 UTC

Why Selenium Clicks Fail

Maintaining a stable Selenium test suite is a time-consuming endeavor, and Selenium scripts can fail in nondeterministic and mysterious ways. This is a huge problem across the in the testing industry, and at Lucid we pride ourselves in being on the cutting ... more


Sunday, 8 December, 2019 UTC

JSON Compression: Alternative Binary Formats and Compression Methods

TL;DR: If you are considering using an alternative binary format in order to reduce the size of your persisted JSON, consider this: the final compressed size of the data has very little to do with the serialization method, and almost everything to do ... more


Monday, 14 October, 2019 UTC

Understanding the Intricacies of Angular’s Async Pipe

The Naive Approach to Using Angular’s Async Pipe When I was still fairly new to doing frontend development with TypeScript and Angular, I was tasked with building a component in Lucidchart that would show up conditionally. This seemed like a great opportunity ... more


Thursday, 22 August, 2019 UTC

Decoding and Encoding Base64 VLQs in Source Maps

If you ever need to write some code to read a source map, then you should probably start by trying to find a good library to do it for you. If for some reason you still need to write your own source map reader, then at some point you will need to know ... more


Wednesday, 29 May, 2019 UTC

Internationalizing Your Software Part Two: Handling Language Differences

In part one of this series, we covered the basics of the i18n process. This post will cover more of the differences between languages and how to handle them in your code. Any time you see text or numbers that are user-facing, you should ask yourself: ... more


Tuesday, 22 January, 2019 UTC

What you should know before making a service worker

Service workers have arrived and they are awesome. They let you create excellent fallback behavior to provide users with seamless offline experiences. With service workers, websites are a step closer to giving users a native app experience in the web ... more


Saturday, 5 January, 2019 UTC

JavaScriptCore—10 Months Later

Ten short months ago we published a blog post showcasing how Lucid shares code between iOS, Android, and the web. In that post, we highlighted a new feature that executed a subset of our shared JavaScript using JavaScriptCore, a WebKit framework for ... more


Friday, 9 November, 2018 UTC

ZoneTracker: Tracking JavaScript Performance with Zone.js

Lucidchart is a highly performant web application. When editing a Lucidchart document, users expect a high frame rate and a responsive UI. To ensure a great experience, we track frame rate and UI stalls. This article describes how we leverage an existing ... more


Monday, 13 August, 2018 UTC

Keeping Up With Change: On-the-Job Learning

After I had been at Lucid for a few months and was at least somewhat familiar with our code base, all the JavaScript was converted to TypeScript in the space of a few days. Angular 1 also changed drastically and became Angular 2. The languages, libraries, ... more


Wednesday, 8 August, 2018 UTC

Why Puppeteer is Better than Selenium

At the start of this year, we could only write end-to-end tests using Selenium in Scala here at Lucid. This was just fine for the developers here who mostly write in Scala. The problem was that learning Scala and Selenium was a high bar of entry for ... more


Monday, 16 July, 2018 UTC

Why JSON isn’t a Good Configuration Language

Why JSON isn’t a Good Configuration Language Many projects use JSON for configuration files. Perhaps the most obvious example is the package.json file used by npm and yarn, but there are many others, including CloudFormation (originally JSON only, but ... more


Wednesday, 27 June, 2018 UTC

Idiomatic JavaScript: Boolean Expression Tricks

If you’re new to JavaScript, you’ll come across various keywords, syntax sugar, and shorthands that make you scratch you head. This article introduces a few of the most common boolean expression tricks I encountered when I began coding in JavaScript. ... more


Wednesday, 20 June, 2018 UTC

How to Actually Improve Type Safety with the TypeScript Strict Flags

Last summer a team of engineers converted our front-end code from Closure-annotated JavaScript to TypeScript, you can read about it here. It has been a long journey to take that converted code that was smattered with any s and turn it into idiomatic ... more


Wednesday, 18 April, 2018 UTC

Time-saving Chrome DevTools Shortcuts

It is impossible to imagine modern web development without the use of Chrome DevTools. Thanks to a clean UI and continuous improvements to meet real-world needs, the tool has become the go-to live development environment that surpasses many contemporary ... more


Tuesday, 13 March, 2018 UTC

The Critical Path: Optimizing Load Times With the Chrome DevTools

Recently, my team was tasked with delivering a limited version of Lucidchart to embed inside another application. Because Lucidchart would only represent a small part of the total functionality visible to the user, we wanted to make sure that we didn’t ... more


Wednesday, 14 February, 2018 UTC

JavaScriptCore – The Holy Grail of Cross Platform

The perfect cross platform solution. The Holy Grail. The El Dorado of app development. The dream that multiple languages have promised, but none have delivered. As we speak, there are likely a dozen cross platform projects in the R&D phase—all with ... more


Wednesday, 3 January, 2018 UTC

How to handle folder uploads in an Angular app

At Lucidpress, we recently decided to revamp our image manager experience by creating a completely new image manager written in Angular 2 and Typescript. One of the key new features we wanted to add was bulk image upload, which is the ability to upload ... more


Wednesday, 20 December, 2017 UTC

5 Angular directives you can use in your project

In a recent blog, we showed off some examples of Angular pipes we use in our code base. Now, we’d like to talk about directives. Angular directives allow you to attach behavior to elements in the DOM and reuse it across your project. The framework already ... more