Blog Posts
15,000 emails. 8 months. All delivered to you from the only one roothouse.
It was June 2021 and we were trying to send emails for those joining HISHOT 2021, an online community seminar held by the Computer Science Studient Association of BINUS University (HINTI BINUS). If we decide to use Gmail, well, one day Google could ban us if we send more and more automated emails in the long-term. Good thing that the web hosting service behind himti.or.id also offers a SMTP email service, which we can use instead to send to them on behalf of [email protected]. The web hosting provider rate-limits the inbuilt SMTP service to the maximum of 200 emails per hour. But just to be safe, we're just going to use a half of them. That means we have to schedule the emails to be sent at a constant rate. Sure, we can use a MySQL database to store the pending emails, but Reinhart doesn't want to run and cron PHP scripts inside the remote server. At the end of the day, he decided to write a Python script and run them on his own PC. But one question remains. Is there a better way than just letting that big laptop to run scripts 24/7? Do we have a more energy-efficient way to do this? Apparently before Reinhart got his first Raspberry Pi 3 as a birthday gift and later bought an Orange Pi Zero, and they're both unused. So we decided to try the smaller house, and oh boy, we made it root. Hey, you may already read about Shift's log about sending emails before. But sure, everyone's working to get the job done. Here we fetch all draft messages to the roothouse befor asking her to deliver one-by-one. And spoiler alert, the roothouse is getting bigger! Version 0: A greedy Python script. We first iterated on creating a simple Python script which does these things: Get a list of draft emails, straight from a remote MySQL database For each emails, send them via SMTP Simple, right? The original script really worked well. However, another problem came when the script needs to fetch all of the pending emails. Or in other words, if there are 1,000 email messages waiting to be sent, the script horribly fetches ALL of them before being able to be sent. Well, that's too much and we should fetch them little by little. Not to mention there could be some messages which we need to prioritize for and to let Shift recover again when the script crashes. Version 1: A slightly efficient script. Then we decided to send emails by priority levels by upgrading the database and our SQL query. And as expected, this version worked even better especially when queuing low-priority emails (e.g. attendance receipts and e-certificates). We also tried to fetch at most 50 pending emails per batch, before sending and re-checking them, so the overall delivery time can be significantly improved. Additionally, we started to accept and parse email messages written in Markdown so yeah, we can finally make your next emails from HIMTI less boring. HIMTI's Unified Registration system also used Markdown for creating event announcements, and we're very happy to integrate that into our emails. This version worked well until we had to think about delivering e-certificates for HISHOT 2021. No, not by sending a OneDrive or Google Drive link to the list of e-certificates, but attaching them directly into the message. So here comes Version 2. Version 2: Because e-certificates broke our script. Sending e-certificates are much slower than regular, plaintext/HTML/Markdown emails for one reason: they're huge. There are two main strategies for this, whether the script is instructed to fetch the file locally and add them to the email list, or by including the entire attached message into the database. We ended up choosing the latter one because that means we can also send anything beyond images and e-certificates. So as usual, we upgraded the database and script, but then the hosting provider blocked our websites for storing too much data inside the database. That's quite a bummer, though, that we have to regularly clear sent emails from the database to be able to schedule new emails for more people. Version 3: Concurrency. As this great email delivery solution for HISHOT was adopted to more HIMTI events, including TECHNO 2021, COMPUTERUN 2.0, and HIMTI ELECTION 2021, we realized that we have to upgrade our infrastructure to be able to send more emails, for more events and people! We also realized that not every message have to be sent over the himti.or.id SMTP server. For example, internal message for event committees when a new participant have registered and paid for the event. That's why we decided to use Shiftine's private email address to send these committee messages. And more than that, we start to use GitHub Actions to help us check emails more regularly, being able to sleep() when there are no more emails to send. We can also prioritize and strategize the delivery of different emails from separate events, like sending HIMTI ELECTION receipts during the day and COMPUTERUN 2.0 reminders during the night. Some personal reflections. Yeah, that was great! I was able to share my "can't hibernate, i'm overpowered" spirit to help people in the real world. And as I now help to maintain BINUS Today's list of articles as part of my chore, seeing those sent emails feels like a nostalgia for me. Oh, right, you can check out our final code at https://github.com/alterine0101/emailer.py/.
Menjadi pribadi yang apa adanya.

Some notes on Google's plans to block older apps on Android 14.

Resolusi Tahun 2023
Masih ingat post yang satu ini? Sebelum saya mengumumkan resolusi 2023, mari kita cek pencapaian resolusi tahun 2022! Pencapaian Resolusi 2022 Masuk LINE TODAY - malah LINE Todaynya tutup ðŸ˜ðŸ˜ðŸ˜ Lebih dari 2,000 contributions di GitHub - bablas sampai lebih dari 4,000 contributions! 🎉🎉🎉 Bikin 1 aplikasi baru tiap bulan AEP Mobile BINUSMAYA Down BINUS Today Mobile (masih pengembangan) HAM (meski dibikin sebelum resolusi ini ditulis tapi barusan ultah yo!) Info QRIS 2.0 (masih pengembangan) PQRS (masih pengembangan) Reinhart Maps Ga dapat 12 sih, tapi, hasilnya memuaskan Lulus MSJ 1 & 2 - Malah bablas ke MSJ 3 dan CGT 1 Langsung ngegas skripsi (sidang @ Semester 7) - Masih lanjut!!! Ngajakin lebih banyak orang pergi ke CG (Note: bukan restoran Common Grounds) - CG FAAAANNNNN, IS NOT FAN WITHAUT YUUUUUU... Punya Shiftine di kehidupan nyata - Ada Resolusi 2023 Kali ini saya akan lebih singkat dan serius, yaitu: Summa Cum Laude Menjadi pribadi yang apa adanya Setop menyalahkan diri sendiri
When Indonesian governments tried to be the Gojeks of their own...
Alright, those who complained regarding with Jakarta Smart City team and Jabar Digital Service, the government finally built an in-house design and development team for digitalization. Hooray! And now, let's see how existing government institutions are trying to become the Gojeks of their own. Before we convinced POLRI to have one. Case Study 1: JAKI (Jakarta Kini) JAKI was initially launched as almost looking like Gojek, with the exception of the top carousel that obscures the resemblance. Its purpose is well, to replace the existence of Qlue as endorsed by the previous mayor of Jakarta and to build an integrated Customer Response Management (CRM) and of course, a superapp. However, its initial days were plagued with one main issue: the need to install another app to access specific feature as advertised on the app, such as e-library. Well, this is definitely does not make JAKI a super-app. No. Instead, this makes JAKI to be yet another App Store of the provincial government of Jakarta. The good news is that these annoying things are finally removed for good, so all of these features: are now all available in-app (despite some are cheating with WebViews). Good job! Case Study 2: PeduliLindungi Ah, yes, the national COVID-19 contact tracing app wouldn't be made without "some" inspiration from Gojek. At the time of this writing, PeduliLindungi is capable of vaccine registration, vaccine certificate, travel permits, public area check-ins, and all the health-related information you need during the case of the pandemic. And they are currently expanding their plans to support beyond COVID-19, like child immunization and personal medication reminder tool. I can personally imagine if Gojek didn't exist. This gigantic app would be split into 5-10 individual apps, like the case of the Semarang government. Yeah, I mean this one: Like Semarang, there would be a dedicated app for contact tracing, a dedicated app for COVID-19 vaccination, another one for immunization, another one for e-HAC (health-based travel permits), and another one for public health information. Each of them is a dedicated CRUD service, so they could have been split according to the government's and tender winners' old mindset. Thinking beyond than just being "the Gojek of POLRI". Sure that, there are now many, many examples of government institutions are being "Gojek, but government official app for something and something and something" Like West Java's PIKOBAR, "PeduliLindungi, but for West Java and white and green", which PeduliLindungi itself is "Gojek, but for COVID-19 public management and white and blue". It's important for us, as well, that our main purpose of building POLRI Super App is not to be another "Gojek, but POLRI and dark blue". There's something that we would like to do more than that, but unfortunately, it's one of our trade secrets 🥲. But looking back at one of Gojek's own statement, A Super App is many apps within an umbrella app. It’s an Operating System that unbundles the tyranny of apps. It’s a portal to the internet for a mobile-first generation. https://www.gojek.io/superapp The true essence of a "super app" is not cloning the features of those famous apps who present a grid of features right on the front of the home page. Or to follow the "digitalization in the Industry 4.0 era" thing. No. But it's building an "operating system" that works on any operating system which unites the entire Police Force and the people to be collaboratively predictive, responsible, transparent in enforcing laws and honoring justice. Yep, precisely this one: "Works with any operating system?" Yeah, POLRI Super App still depend on Android and iOS, as well as Linux servers and Windows workstations used by the vast number of POLRI's individual regions, departments, and units. We are making a "meta operating system" that again, works on any operating system. You can look at Android, BlackBerry, GNOME, iOS, KDE, macOS, or Windows and see how integrated their system apps are. For example, your created Tasks or Reminders or To-Do can be shown in another app called Calendar. Or you can set up widgets so both your important tasks and events can be shown right on your desktop. When translated into the Indonesian government's digital services, we should make a system that combines existing CRUD services together, and not just that, allowing future POLRI app developers to integrate their CRUD services with us! Hence, we're not just building an app. We're not just building a meta-OS of our own. We're also responsible to build apps within an app, digital services within a digital service, integrated CRUDs within a CRUD. Who knows that we actually built a dedicated no-code platform, specifically designed for the Police Force? That's real, and the app is just the tip of the iceberg.
Some plans to reboot Teropong, yet another Fediverse client.

Mengapa mahasiswa Teknik Informatika ujung-ujungnya lulus sebagai wibu?
Sebagai bangsa yang besar, Indonesia memiliki sebuah legenda rakyat yang mengatakan bahwa setiap mahasiswa yang masuk ke dalam jurusan Teknik Informatika akan berubah menjadi seorang wibu. Ada yang nanya soal itu di Twitter, dan ada juga yang balas bahwa memang kebanyakan anak-anak IT itu, ya, wibu. Bahkan, saya juga pernah ditanya oleh mahasiswa baru, apakah BINUS kampus Anggrek punya mesin pengharum ruangan untuk menghilangkan bau bawang di dalam kampus. Sumber: Gatau sih, tapi pernah diposting di grup Telegram milik Kotakode Tapi beneran, kenapa ya statement seperti itu masih saja populer di kalangan masyarakat dan pelajar di Indonesia? Apakah saya sendiri harus menjadi seorang wibu untuk diwisuda sebagai lulusan S1? Saya sebenarnya sudah memulai investigasi ini sejak 2021. Dan akhirnya, saya menemukan beberapa fakta berikut ini: Beberapa fakta tentang kewibuan mahasiswa IT. Pertama, legenda ini tak hanya berlaku di Indonesia saja dan tak hanya mengenai menjadi wibu saja. Selain wibu, tak sedikit mahasiswa IT yang ujung-ujungnya menjadi seekor furry¹. Namun pada kesempatan ini saya akan lebih membahas soal dunia media fantasi Jepang yang lebih sering dipahami masyarakat awam di Indonesia. Iya, ada banyak cara seorang mahasiswa IT dapat berubah dari pribadi yang "normal" alias normie menuju seorang wibu, misalnya karena saudara atau teman dekatnya sudah terekspos menjadi seorang wibu telah mengantarnya terlebih dahulu. Tapi ada satu jalur yang jarang diekspos secara publik, yang tak disadari, telah dilalui jutaan mahasiswa baru di seluruh dunia, yang membuat mereka berujung menjadi para wibu. Dan ternyata, kesalahpahaman banyak orang tentang dunia IT itu sendiri telah menjadi pendorong utama bagi mereka untuk merasa kesepian, menyendiri, mencari komunitas, dan akhirnya mengikatkan diri terhadap media Jejepangan tersebut. Roadmap-nya cukup panjang, dari momen di mana mereka yang masih terlihat "normal" mulai dihadapkan dengan masalah dan keinginan dalam dunia IT, ditambah kesalahpahaman orang-orang lain tentang dunia IT dan bidang ilmu yang mereka pelajari. Saksikan videonya berikut ini: https://youtu.be/ReSN41bOwO4 ¹ Pribadi antromorfisme, campuran antara manusia dan hewan berbulu seperti anjing, kucing, rubah, dan kelinci.
POLRI, meet Gojek.
And you might be asking? How was POLRI before the era of POLRI Super App? The Indonesian Police Force consists of many, many autonomous regions and units, which we can divide by 2 factors: what they do and serve as, as well as where do they operate. Take their headquarters in South Jakarta for example, where they have dedicated units for headquarter management (Yanma), public relations (Humas), and of course, their IT department (TIK POLRI). TIK POLRI is what we currently work for to coordinate the digitalization of POLRI services in our POLRI Super App. However, that central headquarter isn't the only headquarter POLRI have in the Republic of Indonesia, we have many, many regional headquarters ranging from POLDA (Provincial), POLRES (City or Regency-based), and POLSEK (District-based) services. In many cases, each POLDA and POLRES may have individual apps and digital services, which again are often made through this traditional practice of digitalization bureaucrazy. The result? Many local software houses, or should I say, tender winners, duplicated their own apps for use between POLDA and between POLRES all across the entire POLRI. Like this software company who mostly puts internal Police Force apps into their portfolio. And they seem still proud of it. In POLRI, I've heard that they already have at least 200, or even 400 (according to some rumors) individual apps and digital services running on the entire country. If each app is essentially a CRUD and at least have a dedicated Sign Up and Log In (SULI) features, then how much time is wasted to develop SULI features hundreds of times? These are the three main problems currently faced by, not just many, but any Indonesian government instances. These issues will definitely continue to exist in the future. However, there was an app, made by the minds of the Indonesian people, who finally teaches the government on how to do this "digitalization in the Industry 4.0 era", in the right way. Gojek, the local super app that (also) breaks government conventions. And here comes the classic, seemingly unrelated tale of Gojek. Originally founded in 2010, with official app first released in 2015, Gojek has become a trendsetter of its own. Its "you can also deliver stuff and order food right from our motorcycle driver network" thing have caused GrabTaxi (now Grab) and even Shopee, Traveloka, and AirAsia to have one. Its super app ambitions, and the record for being the first unicorn startup in Indonesia, have encouraged and made every local startup to be unicorn as well 🦄 Oh right, one of the Gojek's motto here is "Build startups within a startup". And one of the most epic moments, its big mobile app redesign in 2018 have finally made everyone wanted to be their own Gojek. I'm not kidding. Like, this is what Grab used to be back then. But since Gojek announced the new app design, Grab suddenly ended up like this. When DANA escaped from its home from BlackBerry Messenger with the launch of their dedicated app in 2019, this is entirely looks like the same Gojek design from 2018, despite blue. When state-owned banks and financial services agree to merge all their digital wallet apps into LinkAja in 2019, it certainly looks like Gojek, despite red. And, OVO, who was looking like this: ...ended up being this instead. So hear me out, EVERYONE. NOW. WANTS. URGES. TO. BE. GOJEK. And as private companies are trying to become more and more like Gojek, the Indonesian government finally start to realize that something is really, really wrong with their own apps. To list some issues: Government institutions are still stuck under "one app is only good for one CRUD service" mindset. Gojek, however, almost already had 20 services contained in one single app. So this isn't just all about building simple CRUD projects, right? Gojek, despite having substantial number of services, never got very bad app ratings in App Store and Google Play. At least not reaching below 2.5 stars. But many government apps still fall under the same landfill. Gojek build things mostly at their own expertise. By the way, have you read Gojek's official blog posts?No, not about that tasty GoFood and GoPay promos, but how they tackle and battle against their old codebase, aptly named Stan Marsh?I personally recommend reading Gojek Design/Tech/Engineering blog posts, they're great at explaining and experimenting at things. And finally, Gojek influences everyone to change. From the online drivers movement, rise in food delivery, new opportunities for cloud kitchen, up to that 2018 UI that makes it so original, to the point that other local apps are now start to look the same. Gojek have collectively taught us how to transform the Indonesia's digital economy and society, magnitudes of "better" than their own government. And so, the government shall learn and change how they approach their long-dreamed digital transformation, with all the right fundamentals and steps.
Making FluffyChat stories more beautiful!
