Monday, June 19, 2017

Why LiveCoding (now LiveEdu) failed

7 comments

Inception

For those who don't know livecoding.tv first started as a live streaming platform for software development (think of it as twitch for programmers). Initially, I was really excited about this idea and I have even been streaming on the site for 111 hours gathering approximately 100 followers. I wasn't the best streamer, my mic was bad, I seldom talked but the projects I showed were interesting to create and watch.

No one was earning money at the beginning (not streamers, nor livecoding), but if I recall correctly they soon added a "recruiter" plan which might have lead to some earnings for the platform. 

Time to make money!

So far so good, the community was growing, more and more streamers came to the site (even though they weren't earning anything) and viewers were interested in this idea.

It then all went downhill.

They soon added a "PRO" plan so that streamers could stream "premium content" that only PRO users could watch. It was good on paper, but they made two big mistakes:
  • The price of $25/mo was way too high in my opinion and they were referring to it as a "no-brainer". 
  • The percentage that the streamers got from those $25 was not that great. It was zero. This is where probably a lot of streamers (even though they were not earning anything until then) felt used as they were the ones providing the content but they were not receiving anything in exchange.
I recommend reading this discussion in the comment section where they announced the PRO plan. The main issue that I see in their attitude is that they thought it was fine to put themselves above the streamers. Deciding that a source of income is needed while ignoring the content creators was justified by saying "don't worry, we will care about you in the future!".

Why pivot if it's going well?

After they reduced the PRO plan to $9.99 and genuinely seemed interested about the streamers, they made the bold move of rebranding livecoding.tv to liveedu.tv. If you ask me, this is by far the biggest mistake they made. I don't know their reasoning, but it was probably related to making the platform more general, an educational platform not necessarily for coding. They seem to try turning the platform more into a directory of premium videos (udemy?). If that's the case, why keep the live in the name? 

The name livecoding was actually a good website name: memorable, easy to pronounce, easy to write and it was accurately describing what the site was about.

Current issues

I will name a few issues that really stop me from using or recommending liveedu.tv anymore, but first let's see how friendly is it for new users.

I tried today accessing liveedu.tv to see if it's worth going back.  I clicked to watch the stream featured on the homepage.


Most users leave when they see this, but I added the site to the ad-blocker exceptions. 


If I were a new user I might have left immediately not wanting to waste time creating a new account. Luckily I was an old user so I logged into my existing account (well, it wasn't that easy, because they changed their domain and my password manager did not autofill my credentials and I had to go search for it).
After I logged in I got the same screen as above but saying "SOMETHING WENT WRONG",  message which seems to show on some streams.

Now, a list of other issues that just makes me wonder how a good idea turned out so bad:
  • The interface is a mess. The site is very "jumpy", meaning that the entire layout is recalculated several times during page load as some elements are dynamically added but without having their space allocated beforehand. They are still updating it, but it seems to be for the worse. For example, I let you judge the way white space is used in the new chat section...

  • You can't really watch content if you are not a PRO member. There are 15s ads before starting to watch any stream and too many banners, sections and pages asking you to go "PRO".
  • At the time of writing this post, there are only 4 streamers online and I can't even get to load two of them.
  • Twitch now has a programming community.

Conclusion

I have only described the bad parts that I see, feel and felt from my perspective, the perspective of a streamer and occasional viewer. Let me know if you think I have been to harsh judging this site , site behind which is probably an amazing team of developers.

In conclusion, for me LiveEdu.tv is a platform that is too bulky, difficult to use and lacks enough good content to be worth using. I really wanted to see again and interact with the old spirit of LiveCoding.tv, a lean platform on which both the viewer and streamer are respected, but that spirit seems to have been stolen by the Greed Monster.

PS: LiveEdu might actually be a success and their premium projects directory might have a bigger community than I expect, but I have not yet had any contact with that side of the platform.

Later edit (20 June): LiveEdu just released a blog post introducing the new subscriber plans AND limiting the amount of content you can watch for free. I don't understand why they keep focusing on pricing instead of the content.

Date: 19 June 2017
Read More...

Saturday, April 15, 2017

Best way to withdraw money from your Envato earnings

Leave a Comment

So, you are an author on Envato, you earned some money and you now want to make use of it!

There are a few questions you have to ask before deciding what withdrawal method to use:

  1. Do I want the money cash, in my bank account or just want to spend them online?
  2. In what currency do I want the money?
Envato supports four withdrawal methods PayPal, Skrill, Payoneer and SWIFT.

As I am from the EU and Skrill and Payoneer are not very popular here. Because of this and because they don't clearly state their rates/fees (although on some pages they take a percentage of 1.5% - 4% of the amount you withdraw) I decided not to try those so I won't say anything about them. If you had a good experience with any of those two let me know in the comment section.

TL;DR:


  • Use PayPal if you are in the US.
  • Use PayPal if you want to spend the money online.
  • Use SWIFT Bank transfer if you want to withdraw a large amount (over $1000)
  • AVOID PAYPAL CURRENCY CONVERSIONS as much as possible
  • If you withdraw a smaller amount (under $500) it might be worth to withdraw to PayPal and from there to your credit card/bank account and just accept the currency conversion fees.
  • If you want to avoid PayPal you might want to consider keeping the money into your Envato account and only withdrawing it via SWIFT once you reach $600-$700 or more.


1. PayPal

PayPal is definitely the way to go if you just want to spend the money online (most websites accept PayPal) or if you are from the US. If you have $350 in your Envato account, after withdrawing them to PayPal you will have exactly $350 in your PayPal account that you can spend online with ZERO taxes.

PayPal has usually no fees for transfers BUT, only if there is no currency conversion involved. If there is any currency conversion God help you.

Let's say you have $350 in your PayPal account and you want to withdraw them to your bank account. There are actually two withdrawl methods: to credit card or directly to your bank account.

 a. Withdrawing to your VISA Credit Card

  • Fee: $2.50 USD - This is a flat fee for any amount you withdraw. This is the only fee.
  • Limit: $500 (daily) - Note that in some countries this limit might not exist, not so sure about it, but in most cases it's $500
  • Note: You first have to confirm your card to be able to withdraw.

 a. Withdrawing to your Bank Account

  • Fee: Zero 
  • Limit: None
  • Note: You still have to confirm your card or bank account to be able to withdraw money.
All seems great, but, as I previously said, there's a catch: currency conversion.

Well, I told myself, I will just open an USD bank account at my local bank and I will withdraw the USD in my PayPal account to my USD bank account at zero cost and with zero currency conversions.

Unfortunately it doesn't work like this: PayPal only allows to withdraw to a bank account only in your local currency*. 
*(funny thing, my local currency is RON, not EUR, but PayPal decided to use EUR)

When I tried to withdraw USD (PayPal) ---> USD (my Bank) PayPal actually showed that the transfer will look like this:
USD (PayPal) --> EUR (conversion, by PayPal) --> USD (another conversion, my Bank)

Now, what you have to know about the PayPal conversion rates is that this is how they make their money: they add another 2.5% - 4% on top of the current market exchange rates. So, if I were to withdraw $350 USD to my USD bank account I will receive around 317 EUR (at today's exchange rate -4%) which will then be converted again to USD by my bank. Assuming that the bank uses a fair exchange rate I will actually have in my bank account around $335 USD. So, although there are 0 transfer fees I would lose around $15 due to PayPal's exchange fees.

I tried contacting PayPal in order to update my account to be able to tansfer USD to USD without the additional USD->EUR conversion but they said it is impossible for bank accounts but, if I have a credit card attached to my USD bank account they can update the currency for the credit card for me so I can withdraw USD->USD with no extra conversion. As good as this sounds, for me there are two issues:
  1. The $500 daily withdrawal limit still applies, so if I would ever want to withdraw more than that I would have withdraw multiple times, in different days and with each withdrawal there will be the $2.50 withdrawal fee.
  2. Even with the limitations above, that would still be the best method for me as I don't regularly earn more than $500 monthly on Envato so one withdrawal would be enough. Why I can't use that method is simply because my bank does not offer credit cards for USD bank accounts, so I can not have a VISA credit card attached to my bank account.

Note that those fees might differ in your country, make sure to check the PayPal withdrawal fees page.

2. SWIFT

SWIFT is the most popular international payment network for transferring money between different banks, be them in different countries or not. There are no percentage charges for the amount you transfer but a flat amount of $25 (might depend based on your country/bank). 

Envato charges $25 from the start to cover their bank costs, as the SWIFT transfer fees can be paid by the sender, the receiver or split between them (I think that fee should cover the entire transfer cost for most banks/countries). Unfortunately in my case, being from Romania and Envato sending the money from US I got charged another $25 (leading to a total of $50 transfer fee), probably by an intermediary bank, but I can't tell for sure as there is no evidence that those missing extra $25 have ever been sent. 

So, in my case, I withdrew $600 but I only received $550 in my bank account. As I did not have an USD bank account that sum got automatically converted at an acceptable (actually good) exchange rate, to my local currency RON.

Now, if you are from the US or in a different country and maybe just by using a different bank I think the total SWIFT transfer fee should only be the $25 that Envato charges.

So, what withdrawal method are you using?

Well, I am still looking for the "best way", but as of now I am just withdrawing from Envato->PayPal and then from PayPal to my credit card, in my local currency so only one conversion happens, not two. This still means that if I ever need to withdraw more than $500 in a month I would have to make multiple withdrawals, each one with a $2.50 fee. 
I would withdraw from PayPal to an USD credit card, unfortunately my bank doesn't offer those.

Suggestions please!

If you know a better withdrawal method or if you found that in your country a specific way of withdrawal works better, help others by describing your experience in the comments.

Disclaimer: I am just an author on the CodeCanyon marketplace, I am not related in any way with the Envato company.

Have a lovely day!
Cristy.


Read More...

Sunday, March 12, 2017

Road to 10k - Prologue - Thoughts of an author

Leave a Comment

What is "Road to 10k"?

This is the first post from a new blog series called "Road to 10k" in which you can follow my thoughts, hopes, progress, disappointments and cool solutions for problems encountered while creating and updating multiple web applications in order to reach 10,000 sales on CodeCanyon. My intention is to reach 10,000 sales by the end of this year (2017).

In other words you will read about Web Dev, JavaScript, algorithms, app performance, marketing and some occassional cursing.

Initial state


As you may or may not know, my main income source is my userTrack script that I have created in 2013 and updated regularly ever since. I have recently reached 1000 sales in my 5 years of being an author on CodeCanyon, meaning that making another 9000 sales in the 9 months left in this year would be an increase of 60 times the amount of sales I do each month.

So, what's the plan?

In order to increase my sales I have planned to do the following:
  • Create more items. I plan on creating a new product at least once every month, so by the end of the year I should have at least 10 different items in my portfolio.
  • Marketing. Although userTrack is a great script and offers good value for money, not many have heard of it because I have failed reaching out to enough webmasters, even though I tried anything from paid advertising to contacting bloggers. I suck at marketing. So, my plan in this direction is to either find someone who is really good at marketing or take more time doing content marketing (creating tutorials on how to use my items, creating guest posts explaining why they make your life easier or why are they a great piece of software).
  • Be more professional. As of now, every customer who has an issue can either contact me via the comment section of my items or via e-mail. Although this works good enough for now this is not scalable. Not only I can not keep track of opened issues if there are more than 2-3 customers complaining at once but also I can not verify their support period. On CodeCanyon the price of the item is actually composed of two things: item price and support price. When you purchase an item you get 6 months of support from the author, after this period you have to extend it (which costs about 50% of the item list price) or the author is no longer required to answer your support questions. This means that at the moment there are many customers who get support from me for free, even though their support period expired. To solve this issue I will switch from using the mail-support I do today with a web ticket system that requires the customer to verify their support period before creating a new ticket. This will not only increase a bit my revenue by making sure customers have valid support but will also help with scalability, organizing the support tickets and making sure each and every customer has his issue resolved (no more spam folder e-mails, no more accidentally marking an e-mail as read).
I start today: I have already submitted a new item for review on CodeCanyon. I will write a post about it and some cool Web Dev tricks I used to create a smooth UX a few weeks after it will be accepted and up for sale (so that I can also provide some sales numbers).

Let me know if you have any questions about me, my very ambitious plan, userTrack or any Web Dev related question in the comment section below.

So our journey begins, make sure to check the blog once or twice a month to see how my progress goes and whether I am heading in the right direction or went crying in a corner while re-thinking my life.

Author: Cristian Buleandră
Date: 12th March 2017
Read More...

Wednesday, June 3, 2015

[JS] Running Phaser in Node.js

6 comments

A new beginning

   It has been over 3 years without a post. I want to break this silence with this post, a post about how to run a Phaser game inside a NodeJS environment. This is the first post from a new series that will explain how to create a cross-platform real-time multiplayer game.

Cross-platform real-time multiplayer games in JavaScript

  1. Running a Phaser game inside a NodeJS environment - Part 1.
  2. Running a Phaser game inside a NodeJS environment - Part 2.
  3. Basic Socket.IO connections between client & server.
  4. Client-Server game state syncing.
  5. Interpolated syncing, or how to make things seem smooth.
  6. ... more to be added

Phaser game inside a NodeJS environment

How and why can you do it

   Running a game (at 60fps) inside a Node.js instance is not that hard. You just need a gameLoop function that is executed 60times a second and you can do that by using a setTimeout for example. Doing this will not block the event loop between frames but while a new frame is being computed (eg. the gameLoop function is being executed) the event loop is actually blocked but the time between frames is more than enough for Node to do its stuff.

   Phaser, being written in JavaScript, can be run directly in Node.js, but there are some things you have to handle:
  • Phaser requires a HTML DOM.
    • There is a jsdom package which creates a virtual DOM. The thing is, it's more than we need and is harder to install because of the contextify dependency. Due to the popularity of Node.js there is actually a package already created the does what we need without that contextify dependency jsdom-no-contextify.
  • Phaser requires a functional Canvas element.
    • I have created a mock canvas module which only adds the empty canvas functions that Phaser calls. This means that we don't have a real canvas, function calls will do nothing, but we need their declarations added so errors are not triggered.
    • An alternative was to install a real canvas (the node canvas package) but it is really difficult to install (actually 2/3 times I didn't even manage to install it). The advantage with having a mock canvas is that, by doing nothing on function calls, the resources used on the server would be fewer.
  • Phaser uses XMLHttpRequest to load assets. 
    • You need to actually load the sprite images so that their width and height can be retrieven.
    •  There is also a catch here: the XMLHttpRequest package works only via HTTP, but when you load resources in pixi you actually load it via an absolute file path (like file:///C:/img/asset.png) which won't work. Luckily there is a local-xmlhttprequest node package which handles this case.
    • Once you load an image you also need a way to get its dimensions (width/height). For this I used the package image-size.
For the client-server connection I have used socket.io, for which you have to include two packages:
  • Express (web framework)
  • Socket.io (server framework, used for creating server-side sockets)
Now, another thing that you will learn in this series is how to use the same code both on the client and  the server. This will considerably cut the development time of a multiplayer game, as you only have to write the game engine once and only add some simple conditions to check if the environment is a client or a server. To be able to do this you have to:
  • Use RequireJS on both client & server. This means that you won't include all the files on the client by using <script> tags, because those are DOM specific which you include in your HTML file, but on Node you will have no HTML file. By using RequireJS you have a way to include JavaScript files on the client in the same way you do on the server.<script> tags, but by requiring them where they are needed.
  • I decided to use two different Phaser library files, one for client (the default one) and one for the server (where all the phaser dependencies described above are included). I will be using Phaser v2.2.2 because the new versions didn't seem to work with RequireJS (I will update this post when I will manage to include a newer phaser version). So, the server-side Phaser library is actually a custom build (I found no way to integrate image-size package into the Phaser loader without writing code directly in the load function).

Getting started

To get started, you have to:
  • Install WAMP (or another web server suitable for your platform). We'll use Apache to serve static files (like our game index.html) so we use Node.js only for the multiplayer part.
  • Install Node.js. This will automatically install npm which you'll use to easily install packages (node modules).
Now you should test that everything is installed correctly. First, create a folder in WAMP's www directory add an index.html file containing a basic HTML file or a Hello World message. When you navigate to http://localhost/yourDirectory you should see that message. This means that WAMP is working.

Now, let's test Node. All node applications must have a package.json file which describes the application (name, author, etc...), most importantly it's dependencies. To create a new app open the console at your folder's location (windows, in your folder: SHIFT+RIGHTCLICK->Open command window) and type npm init. Complete the name of the app and the rest of inputs (you can keep pressing enter to skip them all).



Let's see how node works by creating a simple Socket.io server.
Create a js subfolder and an server.js file in it. In this file we will create the Socket.io server and listen to a port.

Server.js file:
var app = require('express')();
var server = require('http').createServer(app);
var io = require('socket.io')(server);

var port = 3000;

server.listen(port);
console.log('Started Socket.io, linstening on port:' + port);

Now, if you write in console node js/server.js to run the server you will get several errors. This is because we did not include the dependencies. For this we have to run the following npm commands:

npm install express --save
npm install socket.io --save
The --save part is included so that the dependencies are saved inside the package.json file. This way when you try to install your app from a package.json config you only have to type npm install and all the dependencies mentioned in the JSON file will be included.

Executing node js/server.js should now result in this message:

End of Part 1

This is all for the first part of this tutorial. You have learned what are the problems that you might encounter while trying to run Phaser in Node.js and what are the theoretical solutions for overcoming those problems. You have installed WAMP and Node.js and learned how to create a basic Socket.io server.

In the next part I will explain, step by step, how to successfully run Phaser inside node and I will also post an archive containing a basic Phaser + Node app template.

If you have any suggestions for this post, or encounter problems following the steps described above, feel free to leave a comment.

Author: Cristian Buleandră
Posted on: 03 June 2015
Last updated: 03 June 2015
Read More...

Wednesday, October 17, 2012

[JQ] Javascript particles system v2

3 comments

Good news. I have created a brand new version of the old's particle system! Now, easier to implement, customizable and there's much more physics involved!

Read More...

Saturday, August 25, 2012

[TIPS] HTML transparent background

3 comments
If you are a webdesigner there is a big chance you have encountered this problem before: transparent backgrounds. In this post I will describe three methods to create transparent backgrounds using images, HTML or simply by using CSS.

Read More...