Posts

Ahmedabad Shopping festival

Image
Ahmedabad Shopping festival is solution created by Tuzzin Infotech Pvt. Ltd.
I worked as part of the development team

My journey started as a part-time web developer. A MySQL database, Php for backend, VueJs and jQuery frontend, scss for css and I'm done. So easy! I was never thinking about scaling, rate limiting, timeout on those days, and normal site even does not need to care about such things unless they reaches that threshold.Luckily, I got chance to work on a product which was requiring all of this. It was the first time when I got exposure to real scalable application with spike in traffic, Ahmedabad Shopping festival 2019.  
Brief Intro of Ahmedabad Shopping festival 


Ahmedabad Shopping festival was first digitally managed shopping festival of India hosted in Ahmedabad, Gujarat. Every customer were getting rewards and coupons for chance to win prize on making shopping during shopping hours.
Technical requirements

Ahmedabad Shopping festival was consisting a web portal for retaile…

Creating 2d games with golang and gontuz/prototype

Image
Golang was created as server language. But with the time and curiosity of people, golang has covered GUI application and game development as well.

I am sharing here one of the available golang library, on top of which you can create 2d games. Its gonutz/prototype.





Sample video




Gonutz/prototype is very small and easy to learn library. It's cross-platform, that means the game your are creating in one platform will be able to run on other platforms without any change in code ( in normal case ). 

This package currently supports windows , mac and linux.
gonutz/prototype features
Support for keyboard inputSupport for mouse inputSupport for 2d drawingSupport for image and sprite-sheetsSupport for sound 

Want to learn more about this package. 
Follow my youtube video playlist "2d game development in golang"
Video tutorial playlist: https://www.youtube.com/playlist?list=PLub5C2vM5SjJIF0f561mAON7nFG2nKHD9

Go-boiler : smaller and simplest starter kit

Image
Project Name 
Go-boiler

Project Descrtiption
Simple, small & easy to get started boiler-plate(starter-kit) written in golang for creating website/webapps.






External libraries
Cloudykit/Jet ( HTML templating engine)gorilla/mux ( HTTP Routing )gorilla/csrf ( CSRF )


Source code
https://github.com/mchampaneri/go-boiler

Documentation
https://mchampaneri.github.io/go-boiler

Customize Scrollbar look

You can customize the look of scrollbar using CSS.
Here is a snippet of sample custom scrollbar UI,

( I have introduced :hover  because I want to show scrollbar on an element only when user hover on that element )




1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19*::-webkit-scrollbar{width:5px;display:none;background-color:#666666;}*:hover::-webkit-scrollbar{width:5px;display:block;background-color:#666666;}*::-webkit-scrollbar-track{background:#ddd;}*::-webkit-scrollbar-thumb{background:#666;border-radius:20px;}

YTDownload ( Server )

Image
Project Name
YTDownload

Project Descrtiption
YTDownload ( Server ) is a server-based application. Its aim is to download video from youtube in all format and qualities provided by youtube.
It uses a web browser for its UI. The core logic of the server is written in goLang.



External libraries & dependcies
VueJS ( JavaScript FrameWork )Spectre ( Css FrameWork )YTDL ( GoLang Youtube download Library )Gorilla Mux ( GoLang HTTP Routing Library )Pros
It's a server-based application. So you just have to start the server and you will be able to use it from any device having a browser and connected to the same network using local address of the server.No need to install

Cons
Downloads with a single thread, so downloading speed will be less than those other downloaders provides.Can not use without the local server running.No mobile platform for the server is supported
Source code
https://sourceforge.net/projects/ytdownloader-xyz/

Download link
https://ytdownloader-xyz.sourceforge.io/

Datastore : Handling heavy insertions

Note: This is a case study to share what I faced, this might not be new to you and may have a better solution then I find. (You can share you solution here 😊) . 

At first sight, datastore looks very easy to work with. And it is if insertions have to be done at a low rate. But when insertions are done at a high rate you come to find out certain issues which are not because your program is faulty but because you don't read the ( long detailed ) documentation of datastore, that itself has certain restrictions you might never hear before.



Timeout Problems
There are two kinds of timeouts
1. Call error 11: Deadline exceeded
2. API error 5 (datastore_v3: TIMEOUT)


Call error 11: Deadline exceeded

This kind of time out happens when your datastore operation takes time more than 60 sec to finish the operation. 
For example, you are inserting too much data with a putMulti function. That takes time more then 60s insert.


API error 5 (datastore_v3: TIMEOUT)

This mostly occurs due to write contention.

When…

Cursor based navigation for datatable

I was working on a module where data was comming from datastore and paginated using cursor. If you are not familier with datastore, then you can refer to this link.

In case of datastore we just have cursor to get next set of data. Though there is offset availabe in datastore its costly. So to be cost effective we have only option available is cursor.

Datastore decodes cursor and in response returns data associated with that cursor.

Now, If you are using bootstrap data-table you might find it cofusing that how to pass the cursor to your queryparameter.

Even I still don't get answer of how I can change data-queryparamter dynamically to update cursor on the url.

But instead I got another simple solution.

HTML Snippet
<table id="table" data-toggle="table" > <thead> <tr> // your data table fields </tr> </thead> <tbody></tbody> </table> <nav aria-label="Page navigation example" style…