2020.12.03

Hello World. Testing the new site!

For the N’s time, I migrated the blog to a new blogging system. This time, I’m using Hugo.

Hugo is a class of CMS’s that generate static sites. Just like compiled and interpreted programming languages, the whole site generated beforehand and the result is uploaded to a server.

The main advantage using this method is a substantially faster site and zero attack surface form the CMS. The main disadvantages are the less user-friendly interface and big building times.

Let’s dig into theses issues:

Faster Experience

Since all the pages are now static and pre-made, the only variable it the server latency to delivery the files. The page does not need to be built on the fly for each user, which can be tremendously slow. And it also waste CPU from the server, rebuilding it time after time after time.

Most CMS’s have some caching system to mitigate this issue. They first check if the page have been already built. If so, serve it. If not, build it and save the result. The problem lies on implementing a CDN and/or a technique to invalidate the cache to force a rebuild (in case the content was altered by the author).

More Secure

Since it does not compile the page on the fly, it eliminate the security issues inherited form the language. It also does not access any type of database. There is no admin page. Event DOS attacks can be much more robust, since the CDN can migrate the traffic to another server easily.

User Interface (Lack of)

Well, Hugo uses the developer-driven approach that requires the user to use a IDE and compile the whole site. It does not offer any type of interface in which you can drag and drop widgets. It’s is definitively not WYSIWYG.

If you are seasoned to programming tools, you will have not much problem. It will be very familiar. For a non-tech savvy mom blogger, Hugo is a no go.

Build Times

Even to see a single post that you just wrote will take time. Like compiled programming languages, the site have to be built before you can check on it. Hugo have a automatic service that propagate the incremental changes and it really fast, so iterating the content will not slow you down.

It will take even more time if you have some extra processes implemented, like resizing images.

But the process to rebuild the entire site might take a while. Thankfully, for the production the whole building process can be delegated to CI/CD tools. Using GitHub or Gitlab, they will automatically build the site on each commit.

The process of writing this post, the very first on the new platform, was quite nice. But I’m in the perfect spot of product requirements and technical skills


Anyway, I’m going to try to post more content in the following months. :)

2017.02.20

A couple of years back I was following a site that had a great insight: track Valve’s Steam prices and point out the best deals over time. It was great because if you are interested in a particular game, it was just matter of waiting to get a big promotional discount! Unless you are super duper fan and want that game now or it has a very heavy multiplayer component, here is no need to buy a $40-$50-$60 game. It will eventually get much cheaper (and much sooner than you imagine).

Unfortunately, I forgot the name of it and I am a lazy writer that is not in the mood to search.

The good side is that is not needed anymore. That site closed doors and I discovered IsThereAnyDeal.com. It follows the same basic idea but in much bigger scale. It tracks Steam, GOG and dozen of other online portals.

Also, it offers a chance to create custom alerts when a desired game get a price bellow a threshold. Indie games are often bellow $5. AAA also often are promoted bellow $10. It opens a great window for great deals. My wanted list now have about 30 games!

It sounds unfair to the creators. But with so many good games in the market right now, I can play them all if I buy them cheap, or choose one one or two with full price. Indies gets much more opportunities this way. The big players, that invest millions on a single title hopping to sell millions at a full release price, will suffer more and will have to adapt.

Just like Netflix, the abundance of games opens great business opportunities for those that have a long tail catalogue instead only high-demand products.

So if you are a game developer, never count on making most of the sales with the full price. Is was not true before and it is even more true now. You projections should include several strategies for promoting your product so 2-3 years at least.

With proper marketing and positioning, companies still can attract audience during launching. Mario, Zelda, Fallout, The Witcher, Doom and many many other titles are recently launched and have massive initial sales. Of course there are always a EA, Ubisoft and Activision that tries to implement some weird and fake mechanism that forces players to buy or play in very specific way. Disasters like SimCity happens to them…

Otherwise: have fun buying!

2014.07.17

The very first entry of what is going to be — hopefully – a routine: a list of interesting materials that I found. Blog posts, sites, documents. Everything that I believe is worthy mention here.

Productive Flourishing

https://www.productiveflourishing.com/

It is the paradise of people that will start a new life. They present very sheets to make your personal and professional life more organized. There are a one for everything: monthly planning, blogging routine, todo tasks, GTD related. But seriously, there is no productivity guru that do not stress the “make this a habit” mantra. So force yourself to use them for a while. In the blogging organization tag, I found the following site:

Editorial Calendars and Professional Blogging

https://www.problogger.net/archives07/editorial-calendars-and-professional-blogging/

This post is gives very quick view about the benefits of scheduling blog posts based on theme. It is not new by any means, but it I mentioned here because is the reason I am writing this very post! I will adopt some of the suggested themes:

  • Link round-ups – put together a list of the best posts you’ve read within the week (always good for Fridays)
  • Interviews with other bloggers in your niche
  • Reviews of products/services/websites in your niche
  • Tutorials or how-to articles – pick a day where you’ll share your expertise with your readers
  • Ask Me – create a post where you answer open questions from your readers in the comments section.
  • Blog Carnivals – host a blog carnival on a regular basis.

The Art of Animation

https://theartofanimation.tumblr.com/

A stunning blog that gathers amazing artists. I found it when looking for an artist to draw character concept art for my next game. There are many concept art in general. Really inspiring.

2012.11.13

Starting today, the blog will be now maintained using Google Blogger service.

It was 4 years using Drupal for my personal site. I still like it very much, but for a such small and simple mission, there is absolutely no reason to maintain the whole infrastructure for this site. Installing updates, maintaining versions and fighting for the correct configuration is no easy task.

I already struggle to write new posts. while I write a personal (really personal, only for myself) log quite regularly, writing for other people is a totally different endeavor  The text requires a much more logical and careful writing

The final and decisive blow was the problems I was having with Bluehost that was not possible to use the Clean URL feature in Drupal. All the pages needed a weird “?q=” in order to function. I was not able to correct it properly. So I decided to change.

For the next few weeks I hope to be able to move everything to this new place. The theme will be changed as well. A lot of experimentation will be done.

2012.06.06

My new game, Picubic, is now released under the Alpha flag.

Mechanics

Picubic is puzzle game inspired on the Japanese Picross, or Nonogram. The objective of Picross is to discover what image is hidden, using the hints. That’s why the name is a mix of picture and crosswords. But there is a fundamental difference between Picross and Picubic: Picubic is a 3D puzzle! It uses the same general logic, but with a great twist. The final pictures are in fact 3D objects: TV, Sofa, sportsman, truck, trees… There are hints for each of the axis (X, Y and Z), which might create interesting challenges.

Graphics

Because the game is essentially an abstract game, it was a challenge to decide a theme for the game. The first and obvious choice was a black/white theme. But I was not happy about it. I wanted to give it a personality, a distinctive face. After some attempts, I decided for a general look and feel of wood. It is something not usual for games, so it would be somewhat unique. It’s beautiful. The graphics were created using 3 sources: myself, free stuff from internet and outsourcing. I’m not an artist, so the current version have a lot of temporary material. Later I will replace it for the definitive versions.

Development and Road map

It’s a one-man game for now. I personally did the whole programming. Done entirely as C# code using Unity3D and Monodevelop. I’m really happy about the IDE. There will be an editor for players to create their own puzzles, send to friends (an Facebook and Google+ integration planned). The editor is the same used by myself. It’s not in the current alpha because of some bugs. The final version is planned to be by October. Each 15 days I plan to release a new version. The lite version will have about 10 puzzles, besides the tutorial.

Where to Find it?

The game will be launched for Android and iOS phones/tablets, Windows/Linux/Mac as well web version, playable in any modern browser. The Alpha and beta versions will be probably only deployed as the web version. See https://picubic.com for furthers news.

 

2012.01.13

Passwords are the new era plague. They are everywhere. Every system relies on passwords. People, unfortunately, are not designed to memorize all of them. The most common solution? Use one password for everything. If you ask one to create a password, one will use the very same password. Passwords have some intrinsic problems:

  • difficult to create
  • difficult to remember
  • spread across several systems

Jeff Atwood wrote about the advantages of passphrases over passwords, but I’m still not convinced that it correctly addresses the problem. Using more robust brute force techniques, it will me in fact easier to break it, even if has several digits. But when the person uses the same password over and over, there are some extra problems:

  • cross site vulnerability when one is hacked

Some use password wallets; programs that stores all your passwords in one place. However, you are putting all the eggs in a single basket. If this program gets hacked, all your passwords are exposed. Also, you have to keep a record of all sites you use, which facilitates even more the job a malicious hacker.

PasswordMaker

Suddenly I found about PasswordMaker on the FLOSS Weekly 84 on Twit, which opened my mind for a nice solution. The idea is to create a password generator using a central password combined with a unique id for each site, which can be its actual address! So, your job relies only on remembering one single password, and it will recalculate the actual password each time. One password to rule them all. It solves some problems.

complex password generation

It can automatically generate very very very strong passwords using a several possible characters. the default 8 digits and 99 characters possible, generate 1 password in 9 227 446 944 279 201, much better than 110 075 314 176 passwords possible using a simple lowercase letters only. I personally use very long passwords. Configuring it to create a 20 digits password, it will be one in 8 179 069 375 972 310 000 000 000 000 000 000 000 000! much safer!

cross site safety

If Facebook is hacked, your Gmail account wont be compromised. If Flickr is invaded, your bank account will still be intact. Because each site uses a different password, you will be protected on all the others. And believe me, it’s site invasion and password leakage very common.

multiple profiles

Some sites have different password policies. Some require using letters and numers, some forbids special characters. Some require at least 8 digits, others restrict to 20. Using thie tool, you can change easily the different profiles and generate, each time, a password for each situation.

browser extensions

In their site, there are several plugins for all major browsers. They facilitates a lot the tool usage. I personally created a Chrome extension that uses the same algorithm.  I hope people like it.

no central repository

Nothing is stored in the computer nor the internet. You don’t have to keep track which sites you have accounts. It still require non-software measures to make it work. You have to change your password in a regular basis (yearly maybe), among other atitutes. It is not a silver bullet solution, but it addresses several problems.

2010.12.07

Brazilian guys, I’m sorry.

But keeping a two language site manually is simply not worthy.

I’m going to write only in English for now on since i write most about worldwide subjects.

Google will be responsible for translating everything for me 😉

There is a new button that will translate without any page reload, which is awesome.

Note: All Portuguese content were already deleted!

2010.12.01

just saw the news about the Drupal 7 Release Candidate. I could not be more perplex with the length of its cycle. The code freeze was announced in September 15, 2009, so its more than a year!

I’m perplex mostly because of the nature of this software: a internet application. Because the internet environment changes in a incredible pace, its really counterproductive to stop accepting deep modifications for so long time. NoSQL databases are getting more and more used, JavaScript techniques getting more refined and the whole HTML5/Video is dominating news. Two years to launch a new version is quite a lot.

I have a hunch: Drupal 5 was a true revolution but had a quite short life cycle, coz Drupal 6 was released soon after. I believe several developers got pissed with that as they were forced to make a long conversion process from Drupal 4 to 5 and than from 5 to 6. Drupal 6 took quite some time to actually be used by old sites, because several important modules (Views and CCK mainly) delayed the port to see what direction D7 would take. The result is that Drupal 6 was coined “Drupal Vista: wait for the 7”. This might be forced Drupal core guys to extend the cycle.

The whole problem is now gone since most sites are now ported to D6. But I really believe that was not matter of the short-cycles-that-pressure-developers, but the lack of clear support from project managers. I say that because some even more complex programs are getting big supporters, despite the apparent paradox.

The most enlightening example is Google. Google’s most popular softwares adopted the strategy of the “fast iterations”. The idea is not to aim “quality at all cost” (typical for projects that release when it is ready) but “to fix as soon as possible”. Chrome is 3 years old or so and it is in version 9! The adoption rate is even bigger than Firefox! Android is in version 2.2 already and gaining more and more support of developers. Can you imagine a more complex software with a faster release cycle?

Faster cycles have several advantages:

  • Gain easy testers with the early adopters
  • Avoid that small enhancements being postponed for years just because is a “new feature”
  • Avoid the proliferation of hacks-as-plugins that implement the small enhancements i just mentioned
  • Revert wrong decisions often
  • Encourage more people to participate to the core development, since their suggestions might be implemented soon after
  • Avoid analysis-paralysis loop of each change
  • Reduces the possibility of forks (what is the advantage of Pressflow if Drupal 7 was released quite after?)

I think Drupal community still is somewhere between The Cathedral and the Bazaar. They are still in CVS mentality of a centralized control and serialized development of features. We have to make features in parallel, not in series. So no more “feature freeze”, “guys, lets think about the next version… ideas?”. Every time is time to release a new features. It has to create several forks (and not only patches) that will work on each features and, when any of them are ready, commit into mainstream and launch as a new small version, like 7.1, 7.2, 7.3…

One last comment for those that think several people want stability over cutting edge stuff. Its just to maintain a similar concept used by Ubuntu: time to time a given release will be considered “long term support”. And if Drupal 7.2 is LTS, for example, it could be released several other “features-releases” like 7.3, 7.4 and several “bug-releases” for 7.2, like 7.2.1, 7.2.2, 7.2.3… Fixed time support also gives business and people the right information for a proper planning.

2010.04.03

After creating several sites using several CMSes, one single thing still annoys me: the lack of a proper export settings feature. Puting a local testing site in the official online server is always a nightmare, since we have basically try one of the options:

  • Copy the whole database: it also copy several testing data we used.
  • Step-by-step replication: After 3 days, you will still discovery several options that were not copyed
  • Manually select DB table-by-table to copy: unless you really know of are you doing, its quite crazy

In Drupal world, one of my most admired companies, Development Seed, created both Features and Strong Arm that try to address this, but the lack of broad and ubiquitous support we still feel that we will miss something.

There are 3 types of data that a computer program might have:

  • External: the spreadsheet for Excel, html to a browser, the image for Photoshop… its the reason why the program exists.
  • Internal: the data that makes the program works. It’s the settings.
  • Temporary: stuff that the program creates in order to gain performance. It, by definition, dont need to be backed up because the program can recreate everything

Every program that is a platform should provide a Settings API. It would help on 4 big scenarios

Local / Production

There are several situations that we need to maintain a testing site for development new features without testing in the really production site. But time to time, we are satisfied with the test results and we and to apply the modification into the production site. For some business, like 3rd party site development, its the daily job, so its a must to make this workflow faster and painless.

Debug

After installing several plugins, its each to get a very unstable site, because they are changing same data. It would be much easier to monitor modifications and find solutions. A settings comparison tool would be great, so we could see what were overwritten.

Distribution / Template

Platforms, by definition, allow us to build stuff over it. But quite often projects are similar. So why not create a template for other people to use it? For a site builder like Drupal, we could create eCommerce, Blog, Forum templates for a easy deployment. Its an extraordinary feature for new comers.

Stack

If the program is settings aware, a good extra feature is to apply in a stack. Its a similar concept of CSS, cascading settings based on specific variables. Imagine, for example, a site about football teams. While the site has a main theme, each team’s page can have one and the users can have a personal one. We could enabled this cascaded settings for each settings.

Multi dimensional settings

If we have different content types in a site (ex: static pages, forum pages and news pages), we could have a page to change all settings related to each content type and have a page to change a specific settings of all content types.

As we can see, settings is a very important part in a program. We have to think it with more care to leverage its potentials.

2009.08.11

Creating GUI is no easy task. But creating GUI creators is a even more complex task. Almost a nightmare. But the long road walked by GUI creation programs, we already know somethings that are good and somethings that are bad.

Drag and drop

Quite a long time, desktop IDE’s acknowledged that letting developers to create GUI with some kind of drag and drop interface were critical. That were because GUI were less and less created by programmers but more and more by designers, that have little knowledge and patience to deal with programming code. It also facilitate the adoption by beginners.

Designer-driven script

A too designer/beginner driven interface for creating GUI might also not be a good choice. The whole customization and generalization possible by programming is lost. Its too case-by-case development. Its not cost efficient. That’s why a middle term is needed. Some kind a language that is easy enough for designers but programmable. Drupal CMS uses the Form API, a PHP array that will be used to create HTML forms. Its quite easy to be used by newbies. I heard that QT is preparing some custom language for creating their UI too.

UPDATE (2010-10-03): Qt revealed QML.

“Lorem ipsum/123” preview

Most GUI element have a fixed set of parameters. But sometimes the GUI should be generated on the fly. Developing GUI like this is very try-and-error. To facilitate the creating phase, its important to be possible to see it working with some generic data.

Widget or data separation

The UI 101 rule is to separate the data to the layout. But it is important to let the users to chance any of them. For example, the user can enter his birth year by a textfield or a dropdown list, or some nice JS calendar. This example show how to change the widget, the GUI element. However, the user might need to change the data type. If the birth year was originally text, the user might decide to change it to integer number. The challenge here is to convert saved data. But for most cases, it is feasible.

Context

Developers of both desktop and internet applications are experiencing a quite interesting phenomenon: the same application must have several outputs, like netbook version or mobile sites. With the rise of HTML5, sites now might need multiple different outputs. Also, we must have different outputs when we are creating, viewing or update content. The concept of multiple contexts might be anticipated by the GUI creators.

Custom data structures

Integers, float numbers, strings… all developers know these data types. But they know that in some cases it is needed a more complex data types; combination of primitives. Some programming languages have structures and objects to address this idea. But GUIs can also be the combination of multiple primitives. Imagine a “password_checker” GUI element that is, in fact, two form fields that will check if the user typed the password correctly or an “address” element that is in fact a group of *country, province and city* fields. Users might be enabled to create and edit these type of custom data structures.

UPDATE (2009-10-05): I just saw a issue posted against CCK module called State of the multigroup module. It has close relationship with this post. Curious is that it is more a hack than a core idea.

Woman filling out form, close-up