Blender Grease Pencil: Creating 3D Environment Illustrations

I saw some Blender Grease Pencil animations by Dedouze and got inspired by what the tool seemed to offer. The Grease Pencil tool is like a typical drawing tool made for Blender. It allows you to draw in 3D space as well as make and play animations in real-time. Pretty neat right? The closest thing I can compare it to is one of those 3D pens that lets you “draw” in a 3D space.

Continue reading →

Introducing: Flokk – A Desktop App built with Flutter!

After several months of hard work, we’re excited to announce our latest collaboration with Google, Canonical, and the Flutter Team, it’s a cross-platform app called Flokk!

What is it?

Flokk is a Google Contacts Manager, targeting Desktop, that allows you to integrate the Twitter and GitHub activity of your friends and contacts. 

Building Flokk

Flokk was built using the latest master branch of Flutter, and targets Linux, macOS, and Windows (with Web-Support thrown in as a bonus!). We spent a lot of time trying to make it feel like a native Desktop App and are extremely happy with the results. In the end performance was great across all the desktop platforms and rendering was extremely consistent. Flutter Desktop really looks like it could be poised for great things.

We worked closely with the Flutter team throughout the project to identify issues and develop workarounds. We will be posting more in the next couple of weeks about the architecture we used, challenges we faced, and some of the specific solutions we came up with.  

In the meantime you can check out the code right now! The entire project is open-sourced on GitHub at https://github.com/gskinnerTeam/flokk. We’re excited to see what the community does with this project, and encourage you to clone or fork the repository and jump into the code. 

Additionally we’ve posted builds for all operating system and web:

What’s Next?

The current build is in a “production ready” state, but there were still a number of loose ends and features we were hoping to add, including a better narrow-mode menu and animated side-menu. In the coming weeks and months, we’ll be posting additional updates, and logging issues in Git for the community to potentially look at.

I’m Lazy

Yes, I’m very lazy and proud of it. Most programmers out there will understand that. We’re among the laziest people you’ll ever meet. We’ll work hard and create a vast array of tools and scripts to aid us in tasks that we consider boring or repetitive, all so we don’t need to do extra work. Many of the repos at gskinner have a utils folder that’s full of scripts that serve one specific purpose. That’s a good thing. In daily programming, there are always repetitive tasks that crop up. Some are easy, some are just boring and time-consuming. Here are a few tips to help you also be lazy and save those precious seconds during your day.

When Should you Create Tools?

  • Is there a group of tasks that’s repetitive? Ex: everyday are you running the same X commands? Make a script to wrap them.
  • Is there a boring, but labor-intensive task that comes up every few weeks or months? Make a script for that. A good way to know when you should create a script for these tasks is, are you always having to remember those nit-picky details about how to do it? Or are there weird edge cases you know will be forgotten? A quick script will help isolate those dependencies for next time.
  • Is it a task that’s large and time-consuming? Examples could be data extraction or converting a folder full of files. Make a script for that. Sometimes if you know that one task will take you a few days (or more) to complete. Then, by all means, spend a few hours or even a day or 2 making that script that will save you time in the long run.
  • A “tool” doesn’t need to be a script. It could be a small, throwaway, RegExp expression. I don’t know how many times the “List” feature on https://regexr.com/ has saved me from hours of tedious data conversion tasks.

Focus on Functionality 

These tools don’t need to be perfect. They don’t need to be used by other projects or other people. Sure, if you make something that’s useful, then, by all means, consider making it more portable. But don’t waste time upfront with that extra work. It’s very tempting to over-architect your tool, but it may only be a script that’s only ever used in your project, or potentiality only runs once or twice. Your initial focus should be making it functional and don’t worry so much about error handling. Don’t worry about making the UI or cli interface perfect. Don’t worry about making the code clean. Do what’s fast, do what’s gonna get you to that point of running the script, so you can move past your boring task. You can always tweak or polish your script in the future. Or someone on your team will.

Organization 

Sometimes a tool turns into something more. Something that requires you to start adding command-line arguments or even UI. If you are in a JavaScript project, chances are you already have a package.json file.  And it’s super easy to add scripts to it. More on that here: https://docs.npmjs.com/cli/run-script. This helps centralize your tools, and makes them easy to discover, run, and self-document. For other projects just having a utils/ folder can be fine. Just remember to name your script something useful. runMe.sh is not useful. download-strings.sh gives some context to what will happen when you run this file. Don’t forget to add some docs. Use your repo’s README and add a one-liner to say what your script does, and any potential arguments or gotchas for running.

Stay Lazy!

Cinema 4D Lite vs Blender

I’ve been recently learning Cinema 4D Lite in my professional development time at gskinner and comparing it to Blender 2.8. After having spent time in both pieces of software, I wanted to share the pros and cons of using these 3D tools. So here is what I know you’ve all been waiting for: the C4D Lite vs. Blender Battle of 2020!

Battle of the Software!

Rotating bottle of hot sauce made in Cinema 4D Lite
Rotating bottle of hot sauce made in Blender

I couldn’t think of a better way to test two 3D packages than with a hot sauce bottle showdown. Using both C4D Lite and Blender, I tried to create the same scene to showcase the abilities of both.

Continue reading →

Flutter: Introducing StatsFl, an FPS monitor for Flutter

As we begin pushing Flutter to more platforms such as Desktop and Web, it is becoming increasingly important to quickly and easily measure performance of your application. While the built-in performance monitor gets the job done, it leaves a lot to be desired in terms of readability and flexibility.

As the old school Flash devs we are, we remember the days when virtually every Flash application around would use the hi-res-stats package by mrdoob (yes, that mrdoob). It was extremely helpful to catch performance issues, and make sure your application was smooth (which in those days, was a solid 24fps!).

Currently nothing like that exists in the Flutter community. To help fill this gap, we’ve created StatsFl! Available now on pub.dev: https://pub.dev/packages/statsfl

Continue reading →

Flutter: Create Custom App Themes

There is a lot to like about Flutter, but one area I’m sure no one loves, is taming the Material Theme system! With over 65(!) properties, some of which, like TextTheme, break out into 10 more sub-properties is enough to make you go crazy pretty quick.

Who wants to dive in?

Last week we looked at how you can easily implement TextStyling, and this week we’re going to dive into Color Themes. We’ll take a look at a technique that we use to implement custom app-specific themes, while still providing Material ThemeData to the core Flutter components.

Continue reading →