From d8bfe2c5ed8cfcd115da418817bf62c3b84876f0 Mon Sep 17 00:00:00 2001 From: jetstream0 <49297268+jetstream0@users.noreply.github.com> Date: Wed, 2 Aug 2023 15:03:09 -0700 Subject: [PATCH] update posts --- posts/190k_faucet.md | 25 +++++++++++++++++++++ posts/_metadata.json | 22 ++++++++++++++++--- posts/adding_commas.md | 42 ++++++++++++++++++++++++++++++++++++ posts/meta.md | 1 + static/images/190kyay.png | Bin 0 -> 2631 bytes static/images/commas.gif | Bin 0 -> 17420 bytes static/images/og_faucet.png | Bin 0 -> 5647 bytes 7 files changed, 87 insertions(+), 3 deletions(-) create mode 100644 posts/190k_faucet.md create mode 100644 posts/adding_commas.md create mode 100644 static/images/190kyay.png create mode 100644 static/images/commas.gif create mode 100644 static/images/og_faucet.png diff --git a/posts/190k_faucet.md b/posts/190k_faucet.md new file mode 100644 index 0000000..d45aa03 --- /dev/null +++ b/posts/190k_faucet.md @@ -0,0 +1,25 @@ +My Banano faucet, [faucet.prussia.dev](https://faucet.prussia.dev) recently reached an incredible 190k claims. I want to thank everyone who donated to the faucet or used it, and of course the people who contributed to the code: HalfBakedBread, SaltyWalty and KaffinPX. + +![190k, yay!](/images/190kyay.png) + +## Version 1 +Around 2 and a half years ago (wow...), I first launched my Banano faucet. It was my first experience programming in cryptocurrency. After struggling with the libraries for Banano on Python (a problem I fixed a few months ago by writing [bananopie](https://github.com/jetstream0/bananopie)), I switched to using Node.js and Banano.js. + +The original faucet... I was not very good at CSS back then: + +![Picture of the original faucet](/images/og_faucet.png) + +I launched the faucet sometime in October, and it was a great success thanks to everyone in the Banano community. Soon after, SaltyWalty opened an awesome PR that got the faucet looking a lot better. Later, Nano and xDai support was also added to the faucet. +For the next 2 years or so, the faucet was sustained by the generosity of many donors, and I was able to help dozens of others to launch their own Banano faucet, or faucets for other currencies. + +It's great to see the Banano faucet scene now thriving, and along the way I've also been commissioned to make faucets to help first time users with gas fees on other chains, like Polygon and Arbitrum Nova. + +## Version 2 +A couple months ago, I decided I was not satisfied with the code quality of the [original faucet](https://github.com/jetstream0/Banano-Faucet), and started rewriting the code from scratch. The new goal was not just better code, but also a config file that people with just a little, or no technical experience, could modify and easily, quickly start their own faucets. + +HalfBakedBread and I finally finished Faucet v2, and the current version of faucet.prussia.dev is using it! I also added Vite support with the help of KaffinPX. Of course, it is open source on [Github](https://github.com/jetstream0/Faucet-v2). + +Since the faucet was having problems with Replit (specifically connecting to the mongodb database), the host was also migrated from Replit to Render, which will hopefully work better. + +## Future Plans +Currently, there are plans to add Algorand support, and also change the xDai faucet to support any EVM chain. diff --git a/posts/_metadata.json b/posts/_metadata.json index 92dced5..1e56f6f 100644 --- a/posts/_metadata.json +++ b/posts/_metadata.json @@ -5,7 +5,23 @@ "filename": "meta", "date": "01/08/2023", "author": "jetstream0/Prussia", - "tags": ["code", "project", "web", "markdown"] + "tags": ["code", "project", "web", "markdown", "typescript/javascript", "css"] + }, + "adding-commas": { + "title": "Adding Commas to Numbers", + "slug": "adding-commas", + "filename": "adding_commas", + "date": "15/11/2022", + "author": "jetstream0/Prussia", + "tags": ["code", "typescript/javascript"] + }, + "190k-faucet": { + "title": "190000 Payouts!", + "slug": "190-faucet", + "filename": "190k_faucet", + "date": "12/02/2023", + "author": "jetstream0/Prussia", + "tags": ["project", "web", "milestone", "crypto"] }, "ryuji-docs": { "title": "Ryuji Documentation", @@ -13,7 +29,7 @@ "filename": "ryuji_docs", "date": "02/08/2023", "author": "jetstream0/Prussia", - "tags": ["code", "project", "web", "docs"] + "tags": ["code", "project", "web", "docs", "typescript/javascript"] }, "saki-docs": { "title": "Saki Documentation", @@ -21,6 +37,6 @@ "filename": "saki_docs", "date": "02/08/2023", "author": "jetstream0/Prussia", - "tags": ["code", "project", "web", "build", "docs"] + "tags": ["code", "project", "web", "build", "docs", "typescript/javascript"] } } \ No newline at end of file diff --git a/posts/adding_commas.md b/posts/adding_commas.md new file mode 100644 index 0000000..065a92a --- /dev/null +++ b/posts/adding_commas.md @@ -0,0 +1,42 @@ +I had to add commas to a number in Javascript today. I thought it was kinda interesting, and here is what I came up with: + +```js +function format_commas(amount) { + let amount_mod = String(amount); + //iterate the amount of commas there are + for (let i=0; i < Math.floor((String(amount).length-1)/3); i++) { + let position = amount_mod.length-3*(i+1)-i; + amount_mod = amount_mod.substring(0, position)+","+amount_mod.substring(position, amount_mod.length); + } + return amount_mod; +} +``` + +Basically, we calculate how many commas we will need to add (`Math.floor((String(amount).length-1)/3)`). If the `amount` is 3 digits, we need 0 commas, since `floor((3-1)/3) = floor(2/3) = 0`. If the `amount` is 7 digits, we need 2 commas, since `floor((7-1)/3) = floor(6/3) = 2`. And so on. + +Then, we do a for loop with that number, and insert our commas, *starting from the back*. We find the position where we need to split the string in half, and then insert a comma in between the two halves of the string. + +I think the most interesting part of this code was the 5th line (`let position = amount_mod.length-3*(i+1)-i;`). You might be wondering with the `-i` at the end is necessary. That's there because we are increasing the string's length by adding a comma, so we need to offset it. Remember, we are inserting commas starting from the back of the string, so we are subtracting to offset, not adding. + +![Demo](/images/commas.gif) + +Here is a version that can handle decimals and invalid inputs: + +```js +function format_commas(amount) { + if (isNaN(Number(amount))) { + return amount; + } + let before_dec = String(amount).split('.')[0]; + let amount_mod = before_dec; + //iterate the amount of commas there are + for (let i=0; i < Math.floor((before_dec.length-1)/3); i++) { + let position = amount_mod.length-3*(i+1)-i; + amount_mod = amount_mod.substring(0, position)+","+amount_mod.substring(position, amount_mod.length); + } + if (String(amount).split('.')[1]) { + amount_mod = amount_mod+"."+String(amount).split('.')[1]; + } + return amount_mod; +} +``` diff --git a/posts/meta.md b/posts/meta.md index 4476372..e308ca0 100644 --- a/posts/meta.md +++ b/posts/meta.md @@ -14,6 +14,7 @@ Anyways, once I decided to start completely rewriting the blog, I established so - Use Typescript - No Javascript running client side - the web pages should be pure HTML and CSS - Style-wise, should be minimalistic, nothing fancy +- Load quickly and be small in size ## Non-Technical Goals - Make two things I can call "Ryuji" and "Saki" to go along with "Makoto" (those are the three main characters of one of the best manga series ever) diff --git a/static/images/190kyay.png b/static/images/190kyay.png new file mode 100644 index 0000000000000000000000000000000000000000..092963ab152c3fcd3ba349bbec9de54b23a03f9d GIT binary patch literal 2631 zcmaKuc{me}1IG0&CFRSvgPKYgm0Cz6a^%i6=9rl?%tVtjGxxPIHrLRIAd(6UOwI3yq2CM*#iig>HEtMNSUbYq zd3=61hm(_+-}sz)FDL|0%rpl>vL6;=;*-D-hwEB8`o^X{cTw_Z&SBycGjj5h(lR`} z5u+keW=?KcRE(LGO;l`rA?4qAY+6b>;STa{KycXj#DtrduZ@F~`i-0U#gq@T9|<}6 z!C?>Jo?bZ*i;$?G;0O$kkU7BPp`&9+1?2i?jW0R9gshy*yoW}&E#t7Mm#(Vi7nQsf ziJDlf^lTEVtvxg{8s>IqWOOtjFv!WxBQXW1YiPpm;q>(nK%HF!!y>M#Yr@?7i6Ha9kKK#zSPZ+OU?0dQuihzUfauT%Bu zGgq`_J%f_e)!zT5B%?X5G8dW_N*rt-1+Qw&4n?(0Y%2;aUs2G@Hyf-Kk0hzEGAHJ6 z0(x--(sVguBL)dIR6WT4Ppx@o+chbd9j(DPDP3}T2^diO_HWO`ffH;DSOp^ui|VgDA!z)H)P@~6vj|+EcnX3mK`YBd3L1Q-^y)1 zCv9rd#QW!Bak35?5?A(NLaqQI6ql@Vcs8;axgZzf>hZfWnyk0iCwCOs!d=X7(PbEg zT!>k`t#brK9|t%PzGo0u4wnMH><|B#$}lbXrPq!JpuQsQ;RN7V*-0av(;I%p`*vQP z6*aC+RsW&h@K5%1j&*%iGBXiuzCneaOZze2p0}9Y4hY%dcuB{eaM!Z`xqkM$du@+w zt4P$?+_yG%CU?DV--lCbe}MK<2bXV>K2=1IXM%L4j#P>g05(&a{LlS@2nE(RpcSMS z?7%);dDPlEeO=Plh5sZZzzX!hJVX2|jl@9L#adPYF(;k@7z^9QCxn$ffm*~6B^MYW ze1rfjy^d>x-Cy0Kebiy~8!e$iOh`BDaVBg#mEB$A%gCwM(@~O?y2q!(oJI)6kcL+^ zY65iEffyf69`M^q7IL@01aK}MJ_~(9g|k790nAE&e?G|3fndbK|E@7TItg(h$kXYo z+la<&w6xju&mIi_@$6z0*M;c?kbp9o^KH5y0WhH2Kn~RgYQzH=z52XU*XquV`dm={ zK3&z-wn^=E*Wt}a1>dJv<=Ag6Emr{i&$oo7I5*OBPaA zbRDsi_WLm=#7s_SI#2W5zNPasD`nOozKkZW;`NTFfVJ9};TjuEzjlAG3bGL}&0Xn6 zy=;A(wHzcI`1pJ9`qT6>OvfVW>s-;;6o2y!aRF0$&A1hD4h6`CqA};j7?Fycf2oA5G+S{ECq}we(8E~5J~%7H8+%1(m*ZZ{r!}b ziw}>!w`=HF`$I{Ele`ayn3baiSj)2V9vI-qM{Z=h^poj}k%Wqxs_=blnDYi)zC=zy z!~QiB-GfvzAnZ=(vo%SG(UR-j#Ez(Dg}WYX63=!KKRjz%PFoKp0b|jpb{Ve5p6cWM-^H2S>Q5Pb8S8INWEBgVR=0WoQ&G3I+Ns%KB z_VI7&S<10BmbnTnyFBVCcLT!y>jNXUW!37AU!M(FApG}`X`u*^--?Yuf`rrKe7L)4 zgrqebi2FV#@1xujqWz7EwU`@jgMexwUe9fgoI}x+AK0ZZs;4`)>_AFlPK8YnBdJ#+ z>dqD4INE3vPY%LnOh?w`02In8_GLE76|dZ1>Ny;J&g-NwJh~@q3&AloNb+%xRSN_( z(AD_sS1xmpl!(t7?p7RW$)dxjMxg8g7bgECt#of~f`BC}U;ne&Jj1Knl-Wh7&ThB3 zJe~?jX^k3eMoNA97;)DmHg92XZICtc5c1S(P1qC^j3ZhGErrBTvjNXeN3CnQ(y-(O z228~-O16m?Xn|_eW^^fZz4PG8deE>hbn|ZxJJSQNOlhoS&S;G63-Z+~q_)1Bynu*W zRg@#ZKiK<(7CRHk|vPi#z;u aN6uySPkR;0^&fBlu$&( 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%0D|7pf$?*nh-*cW%H@`CA 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 n|1bV8{r_(%|D{A`