I’m a web developer from Santiago, Chile. You may (not) know me because of Junkstr, Quickty and Chevereto.

You can check my old portfolio to see my past works.

Catch me at Twitter, LinkedIn or at inbox@rodolfoberrios.com

Micro payments nightmare

Something that has emerged since late 2010 is the fact that, unlikely before, people are paying more for digital bargains for things like in-app purchases or extensions for games, software, etc. At the beginning it was pretty balanced but 2012 leaves with this turned into the consumer nightmare that will eventually blow up this model. Of course that this model has been created to increase sales by getting micro-payments for small things but they have forgot that users have a very thin line that divides love and hate for a product or brand and people will start to hate this more and more.

When you went to an Arcade joint and play in any of those machines the coins where used as the currency to be able to use this machines. Why? Because the owner has to pay the power, the property, the illumination, the maintenance, etc. Then the home gaming consoles came so with the Nintendo and the desired game you where able to replicate the experience. It wasn’t the same, but it was closer and cheaper in the long term. So why you have to pay 1 dollar to be able to roll a virtual slot machine? You are not in the casino, you won’t experience the same and you won’t earn nothing if you get a row.

The same problem is present in some apps where you have to buy pencils, colors, sheets, etc. But why? does the developer need to get the pencils from the factory? Does the developer needs to have an inventory? Absolutely no, is all digital and that’s why digital things exists: To easily repeat and multiply things. Ok, the developer must pay salaries to keep development going, he needs to pay his bills, etc. I totally understand that.

Some developers catch the micro-payments thing in the right direction, like make the app fit your needs by buying custom assets like lenses in a camera app, but others are just doing the most annoying thing ever saw like ask you to buy coins to play an old arcade game. This is just a terrific way to make money at the price of loose your clients in the second that your competitor stop this way of doing business.

I believe that the main problem with this micro-payments is that the respect for the client has been lost and they will squeeze the cow until it last.

A system to stop being nulled

Nulled is a term used to refer to scripts that don’t have any licensing or callback method to let the author know if the installation is legal or not. In other words, it means that a commercial script can be pirated and safely used without being catch. Software developers have a real problem dealing with this because they often base their protection system in obfuscation and that in the long term can be always broken.

A method that can stop this and allow software developers to not being fooled is like ask for the holy grail, well… I think that I’ve made it and it will debut in Chevereto 3 but I will like to share the method so all the developers can use it freely.

The system is based on the combination of public and private hashes that makes impossible to make legal an illegal installation. Basically each unique download of your software must be associated with a encrypted user id and a unique user hash. The user id must be encrypted because it can be known by a simple _GET request like targetwebsite.com?uid so you encrypt it to ensure the privacy of your clients. In the other hand, the unique user hash is a random generated string that can’t be retrieved by a request to the target website (this is the private part). This means that each user id is associated to an unique user hash in the delivered file to your client and the only persons with access to that information are your client and you.

In your database you will need to keep this user unique hash and add two more hashes: A user complement hash and a final user hash. Key element here is that the final user hash is generated by the combination of the user complement hash + user unique hash. In the end you will have the user id associated with the unique user hash, the user complement hash and the final user hash in your database.

Finally, once you query the target website for the user id you will do a new _GET request to this website in the form of targetwebsite.com?generateHash=<user_complement_hash> which will ask the target website to generate the final user hash using the private hash (unique user hash) and the supplied user complement hash, if the final user hash doesn’t match the one in your database it means that the installation has been altered and therefore is illegal.

The target website will only return a generated hash and the only person in the world that know the expected result is the author. If in any point the system doesn’t return anything or it returns random data then you automatically know that the target installation is trying to fool the system and therefore is illegal. Add that to licensing statements that grant you full control over the permissions to use your software and they will be done.

The only way in that a target installation could be labeled as legal is that the user id is associated to the correct user unique hash and that means that you can find the person who is leaking your software because there will be a lot of installations running the same user. This means that they will running time bombs ready to be taken down.

If a installation is labeled as illegal then you only need to do a WHOIS to the server IP and send complaints to the host and data centers. Eventually they will end up using hosting services in countries like Pakistan or Vietnam where they don’t care about copyright and that means a little pain in the ass for them.

I hope that developers out there find this method useful and feel free to ask me details about it.

Quickty early beta round one ended

Quickty is a project that once its finished it will be the main project around here but in the meanwhile is under planification and part of this process was the first early beta sign-up which its objective was validate the project idea and it was successfully validated, my goal was pretty tender (50 sign-ups) but I notice how much the people like the idea and the first early beta sign-up ended with more than two hundred registrations.

All the feedback collected with the early beta registrations have been recorded and I’ve talked with all the folks that left me a message and I notice how much this project could grow and how the users are giving the right shape for it. I can’t believe how valuable have been this early beta sign-up process and how much the people have collaborated in this.

A second round early beta sign-up will be opened in a few months once the project get more things clear and new feedback will be needed. This second round (probably the last) will be also casted in one month period where you will have the chance to give your feedback and also get a special price on launch… What could be more perfect than that?

Many thanks to all the folks that joined this early beta round, I hope to deliver more news about Quickty soon.

Third-party Plugins can be evil

Almost every script has a plugin system or a method to easily extend its default set of bundled features. That is because plugins highly enhances or extend the system to a point where the user feels the product more shaped to their own unique needs. That of course is the good thing about plugins: Others can extend your work and help you reach more users. Take for instance WordPress, there is no doubt that WordPress success is highly related to his plugin and theme systems. Can you imagine WordPress without plugins? No one can.

Developers love this way of doing things and sadly some of them have forgot that plugins are not there to let others do your work. Plugins are there to make the system fit better to your users, pretty much like change the stereo or the seats in a new car. You don’t change the seats because the default ones are a mess… You change or improve the seats because you want real leather or a purple stripe on it. If you can’t get this customizations you will be fine with the original seats and you won’t feel that bad. Is way different need to change the seats because they are rubbish.

This car metaphor is pretty good to explain the current “Third-party plugins can be evil” thesis because is like BMW develop a car and they just not improve it anymore, stop listening the user feedback and leave this responsibility to the folks that do car modifications. What if BMW makes seats that will show problems under certain climatic conditions and they just don’t fix it? Since you have a problem and a plugin system, someone else will improve it for you and then you will have a third-party developer fixing your problems but not in the same way that BMW do things. Not even to mention that perhaps this developer will charge users for this “seat-gate” issue and that is not the way to solve your problems. How do you think that users feels when they need to pay to get the product work as expected?

Many scripts are using the plugins to rely important innovations and improvements of their systems in third-party developers. This is awful because users are almost forced to go to this path and then, when you finally issue the improvements, you have to deal with all the merging dilemmas and users pretty screw up. Another thing to have in mind is that this third-party developers can disappear anytime. What happen with all the people that trust in this solution? And I haven’t even mention that this cut your freedom because your changes to the core could affect this third-party plugin and the users won’t update because they need the plugin also updated, they could miss important things like improvements in security and stability.

Another example of this problem can be noticed in OpenCart, which is a Open Source e-commerce script, where they make a limited script and make money with a marketplace powered by third-party developers which is a great business idea, problem is that when there is the lack of some important feature there will be always a lot of third-party developers trying to make their own solution to the problem and that is the problem because you are loosing the identity of the product and is not more a BMW, at this point is just a LEGO car. I’ve experienced same problems using XenForo where their official replies are almost like “you can achieve that with this mod…” when the problem is the script himself that can’t do what IPB and VB can do.

I don’t think that someone wants to buy a new car considering spend money to fix some factory issues that are wrong. Users will always try to go with the solution that offers the best deal for the money, the best support and the best perspective over time. They will wait for the new BMW or they will just get an Audi. Perhaps they will get the LEGO car and it will be fun for a while until they get bored of all the third-party plugins hassle and start seeking for a more complete and stable solution.

Quickty, my new thing

I’ve managed to own the most famous and best selling image hosting script, yes I’m talking about Chevereto and over all that I’ve this new idea of a file sharing script, Quickty, because I know that users will always want one crucial thing: Control.

With control you can do many things like set the content rules, apply flexible permissions, run in any server you want and customize the look and feel in every pixel. This means that control gives you real freedom and therefore that is revolutionary because I don’t see the current services (Drive, Dropbox, iCloud, etc.) giving you real control. Your content is pretty much a citizen living in 1984… At least for the Big brother thing.

You don’t need to be a genius to know that a new project means that your old projects may lose part of your time which means that they don’t have the same amount of attention as before. Since I know that this could happen, I will code a new core library that will suit both projects meaning that all the innovations and improvements will be shared among both of them. This means that Quickty improvements could be ported to Chevereto and vice versa. Sweet.

Quickty obviously will share all the Chevereto loved goodies like its lifetime tech support but the cherry on the pie is that I’m also thinking in a hosted version which will be suitable for everyone that want all this features without the hassle of the licensing price, server management and the software updates. Since I believe in freedom you will be able to migrate to your own server without loosing anything.

This new project looks promising, I love the idea and after a few weeks of validation I’m pretty sure that this is the way.