Building an application on a blockchain is a real challenge for developers who are seeking to leverage the power of the decentralized Web. With that in mind, dfuse is inviting experienced developers to share their journey of building these next-generation dapps. In this instalment, we are pleased to speak with Jorge Alcario, the CTO and Lead Developer of pixEOS and one of the early users of the dfuse API.
Could you introduce yourself?
I’m Jorge, and I am the CTO and Lead Developer of the pixEOS Project. I’m from Portugal and I’ve lived in Lisbon for most of my adult life.
I started developing back in the 1980s when I first got my hands on a ZX Spectrum, which was a very popular cheapish computer in Europe at the time. Starting with BASIC, I soon delved into Assembly to leverage the full power of the machine, mostly for graphic purposes. High resolution images at that time would qualify as vintage pixel art today!
I eventually upgraded to a Commodore Amiga, and then a PC, when they started to be good enough. I was always very interested in graphics and user interfaces, and that interest remained throughout my career.
I built a lot of business software solutions during the 1990s and early 2000s, both server and client sides, so I became familiar with the full stack. Being no stranger to distributed systems, I was always a strong believer in the Cloud. So when I stumbled onto blockchain some years ago, I found it to be a very interesting implementation of a distributed system, and here I am!
As most of my blockchain experience has been with EOSIO, this will be very EOS-centric.
Could you present the vision of pixEOS?
We love games and we love art - both physical and digital. A major part of the project is building a platform where art can be created, shared and traded. If you’re an artist, you now have a vehicle to showcase and sell your art.
You can work through a commission system using the Art House, or put your art up for auction on the Auction House. You can publish and sell your artworks on the Art Gallery. You can even sell your art on apparel, through our My pixEOS shop, which is the result of a collaboration between pixEOS, Cypherglass and Threadless, although only using fiat currency for now - the crypto payment integration is in the works!
We’re also collaborating on the dGoods NFT standard for the EOS blockchain, which we will implement to issue NFT tokens for digital and physical original art. At the initial stage, the NFT standard will be used to issue and track ownership of digital artworks on our platform, but a very significant part of the project plan is solving ownership and provenance issues on real, physical art and further bridging the divide between the blockchain world and the physical world.
These kinds of problems are very suited to a blockchain solution, because we believe that this technology can solve many of the problems that you have today in the art world. Not only does it provide complete transparency for the whole platform, but when we start having the NFTs for all types of art, it's going to solve the real ownership problem that you experience today.
And while this is all on the official Roadmap, we’re always doing experiments on the side, like the Avatar Maker and the 3D representation of our Paint canvas generated from a height map.
What are the main challenges when developing on a blockchain?
I think the most challenging part of blockchain development, especially for people with a lot of experience in traditional database systems, is fully and deeply coming to terms with the permanence of data. You don’t have that last resort of restoring from backups. You often deal with real monetary value. And whatever you do, that’s done, forever, no safety net. So you need to double and triple-check your stuff.
Then, there are costs associated with operations, so you need to make sure your code is as efficient as possible. To mitigate these issues, you have to test and audit extensively. Our development cycle includes extensive testing on local nodes and then on the Jungle testnet before finally deploying on the Main Net. Although, EOSIO has a clear advantage on this, as you can redeploy your contracts as often as you need with no cost, so that helps with a lot.
Our first dApp, pixEOS Paint, is very dependent on transaction history, and we had some trouble with that. Development started at a time when it was becoming clear the history node situation on EOS would have to be addressed. We were planning on using the standard history API to verify and analyse transactions, but because there were only a few full history nodes, we had to reassess. We solved that problem with dfuse, but it resulted in a slight delay for the launch, as we had to retrofit a good portion of the backend to use the new API.
Will it be obvious to a user that they are on a blockchain?
We actually want it to be obvious you’re on a blockchain. We want the user to understand that all this technology is decentralized, transparent and auditable.
We think the way to mass adoption is helping the user understand the complex parts and learn how to work with them. In EOS’s case, we need to stress the staking aspects of the platform and primarily help users understand the CPU mechanics. This is not an easy task as the CPU usage can be a tad unpredictable, but a lot can be done with carefully designed UIs and user-friendly error handling. For instance, instead of simply informing the user of a “deadline exceeded” present some more detailed info and give the user the option to stake more CPU immediately.
And of course, we’ll be using our Paint and Avatar Maker apps as the frontline for our UI/UX improvements.
What advice would you give to a developer who wants to build a project on blockchain?
I work on a mix of Windows and Ubuntu machines, both physical and virtual. Windows Subsystem for Linux is actually very useful now, and makes it possible to develop for EOSIO 100% on a Windows machine without Docker or VMs, so that’s an option.
I go back and forth between sublime and VS Code, although sublime is the clear winner here - old habits die hard. I’ve chosen Vuejs because I’ve been working with it for some years now, and I can get things done quickly. Most backend stuff is node.js, although when I need a quick web site or app with a database backend I usually spin up a Laravel app. It’s quite simple and has Vue already built in, so I like it.
My main resources for development are the EOSIO developer portal and the various developer groups on Telegram. The community is very helpful and you can learn a lot by keeping up with it. There is also an EOSIO stack exchange community that has been growing, and of course, EOSIO source code itself.
Some things I would say to any software developer is, don’t try to solve everything at once. Build it step by step and tackle one problem at a time. Don’t just jump into coding, plan carefully and take your time, good software takes time. Any application that’s meant for long term will always need to be extended and maintained, so build with this in mind. That is true for decentralization too - don’t put everything on the blockchain at once. Start with a mix of centralized/decentralized and build from there. Our own Avatar Maker started as an image generator, then we’ve updated it to store the image generation parameters in the blockchain, and the next step will probably be to also decentralize all the images. It’s not a fully decentralized app yet, but it’s a useable product with the best of both worlds.
Some tips for new EOS developers:
- Get comfortable with cleos, and with curl to some extent. With these two, you can do basically anything;
- Keep in mind that while you can recompile and deploy your contracts as much as you want, table structures are not easily changed, so plan ahead on that;
- Learn about microforks - sometimes your transactions won’t make into the blockchain, so you have to account for that.
And the most important tip: when you’re stuck, ask for help. The EOS developer community is very active and there are lots of experienced developers willing to help.
If you are a developer and want to share your experience to build on the blockchain, please feel free to contact us. We would be happy to integrate your interview in to our series "In the Eyes of a Blockchain Developer".