Blog posts from English (#english)
From Deaths to Memories: We're rebuilding Kenangan.com from scratch! (&& you can help, too)

My life as a snake. I mean, a python3 emailer robot.

Human at Day, Robot at Night: A brief explanation of my cyborg account dreams.
What? So, I am planning to create a Telegram bot account. Or to be precise, a cyborg account. It works quite similar to @livegrambot, a Telegram bot builder used to create and manage thousands of feedback bot accounts out there. A typical @livegrambot-powered Telegram bot acts as a proxy between Telegram users who contacted the bot, with the ones who created the bot (usually a support staff or team). The cyborg account that I'm developing, will definitely be similar, too! I can read all your sent messages, send, reply, delete, and even ban you. But when you say some magic words, my mechanical parts will uncontrollably move my hands and fingers to reply to you as quick as possible, even when I'm sleeping and don't know who you are! Oh no, I'm enchanted! Just kidding! But to be honest, that magical thing could be one of the benefits of chatting with me through a cyborg account. You can ask me anything, and if that falls into one of the Frequently-Asked Questions you'll likely to get your answers from me even when I'm not reading your message... yet! How does it work? Okay, have you guys know about the famous Turing test? Basically it's a test where someone, physically separated from a person and a self answering program/machine (which I assumed as a robot), tries to guess which one's the human and which one's the robot. When you are interacting through my cyborg account, you're basically in that test room chatting with me as a human and my self-answering program as a robot. But instead of convincing you that my program is more human than me, we are convincing you that we are humans and robots at the same time. Some of you might be confused and feel less comfortable when I say I'm a robot. That's the reason why we finally just want to convince you that I'm a human at day, and robot at night! If you want me to better understand you when it's night time in Indonesia, try speaking to me as if you're talking to a robot. Well, why? Cause I am a robot 🤖. (Or to be precise, I'm unavailable at night so my robot will try to understand your questions.) Now, let's jump into some technical details, shall we? When you talk normally to me, the bot will relay the message to me as usual, while scanning for keywords which could potentially be answered instantly. For example, if you send a text message which the bot highly believes that you ask for guidance to register for HISHOT 2021, the bot will confidently reply with instructions to register for that event. Or else, the bot will try to guess the topic of your message regardless of confidence levels. It might be tiring for you to send messages like "Hey Reinhart, can you join this Zoom meeting", or "Don't forget to remind me to send the document" repetitively, and that's why you have the chance to summon my 24/7 robotic entity to answer questions and perform actions quickly by using the infamous slash commands. Wanna learn more how to use a specific Command Prompt command? Send /tldr <your command here> and my robot will fetch some information from cht.sh and tldr.sh. Wanna report an urgent issue? Send /wtf <problem> or /ftw <problem> (stands for "For The Workers"). And finally, wanna make sure that you're talking into a human, send /captcha. Why would you want to be a cyborg? At least in Telegram? And what does this actually mean to me? And why do I really care about it? I don't need to worry forgetting several things before answering your questions. They're already written in the (PHP, Python, and Java)script!I can finally multithread myself especially when it comes to reading and replying messages.And finally I can sleep(), 'cause automated messages saves my day! And additionally, with the power of Telegram bot API, I can secure and prevent myself to be added by others to spam groups (especially those fake investment groups), 'cause: I can prevent my registered phone number to leak accidentally into other unknown Telegram users,And of course, I'm a robot! (Many public Telegram groups, including Kotakode, forbid members to add bot accounts without admin's consent) Problems and Solutions But of course, there are some drawbacks of chatting with you guys on behalf of a bot/cyborg account: It's a little bit difficult to know about you, from the perspective of a bot account. You might set a different display name (e.g. "Alice" instead of your real "Eve") on Telegram which could confuse myself.Can't call (or join an ongoing call) through a bot account. This seems to be self-explanatory, while I'm happy if Telegram will soon add this functionality into bot accounts.I have to create a separate app/website just to chat with you. Unlike Matrix.org, you can't log in into Telegram as a bot, and Telegram doesn't store chat history for bot accounts. That means I have to create my own database to save your messages, too. And of course, I wouldn't be Reinhart without solving problems with algorithms. So, to work around with the limitiations: I'll encourage users to sign up for an account at bots.reinhart1010.id before interacting with me as a cyborg. This will help me and my bots to know your preferences (preferred language, gender pronounciation, etc.), and create additional features on my cyborg account which require an additional level of security, e.g. by making sure that you're a committee of Event X and by sending OTP tokens from emails and apps such as Google Authenticator.I'm also considering to open-source my custom chatbot framework (note: it's not Ika) and web frontend used to operate my cyborg account. But please be aware that some modules (e.g. the ones which perform queries in an external database) will be proprietary and confidential. The Roadmap I already have @reinhart1010_bot which is currently being used by both Controld and Alterine to help TECHNO 2021: ERA committees to fix registration issues on https://registration.himti.or.id. Once after TECHNO 2021 is finished, I will start to reuse that username for the sake of this project. Then congratulations, I am officially a robot! And finally, do you have any names for that robotic entity? Well, it's a good time to spawn up the name of Sketchy. Many dictionaries define "sketchy" as something incomplete, unclear, unreliable or even unsafe! Nevertheless, he's just a normal bot trying hard to understand you. So, come on...
Say hello to blog posts on reinhart1010.github.io (and .gitlab.io)
Important NoteWe archived this post from our previous blog website at https://reinhart1010.github.io/posts/2021/01/25/say-hello-to-blog-posts-on-reinhart1010.github.io.html, and now we're retiring both of them in favor of this site. Blog posts are one of the most common features of a personal website, showcasing personal works and interests. Now it's available in both <reinhart1010.github.io> and <reinhart1010.gitlab.io>, directly from the home page. These blog posts are originally scattered across different places, from the OpenStreetMap User Diaries to Kotakode to Twitter to @reinhart1010 at BINUSIAN Blog. Yes, that list stil does not mention other (micro)blogging platforms such as Quora, telegra.ph, Telegram channels, and so on. Starting today, my articles from those sites will be migrated and unified in my GitHub repository, https://github.com/reinhart1010/reinhart1010.github.io (GitLab version: https://gitlab.com/reinhart1010/reinhart1010.gitlab.io). The Grand History The "Reinhart's New Website" thing is always a hoax. - Reinhart, 2016. Since 2013 (Primary School Grade 6), I always wanted to make a website. The original website would simply feature a list of links to my current projects and a blog page. 1. 2013 website, codenamed "Botolcabe". Hosted on WordPress.com. 2. 2014 Website Project. This was a part of a school project to develop a simple website with HTML and CSS. However, thanks to JavaScript, Dark Mode has been included on this site, too!. 3. Circa 2015, on a free hosting platform. 4. Website Concept in 2016 5. Circa 2017 This is the first website to be hosted on GitHub Pages. Some data contained on this website is controlled by a single JSON file. The remnants of this version still remains on reinhart1010/reinhart1010.github.io repository, which is planned to be replaced with YAML-based configuration files stored on reinhart1010/reinhart1010. 6. Late 2019 Now powered by Bootstrap and hosted on GitHub Pages. This website was planned to be integrated with a syndication service run on Now.sh (now Vercel), which serves all the data (blogs, annoucements, etc.) supplied to the website. This was then scrapped in favor of traditional JSON-based files (soon to be YAML) stored on GitHub. At the meantime a new, Cayman-based theme was developed to be placed on another repository dedicated for blog archives. Now, all posts contained from the repository have been moved here. How it's done This website now uses Halfmoon as the main CSS framework. The primary reason of choosing this over Bootstrap and TailwindCSS is that Halfmoon was one of the first framework to support Dark Mode, a feature long neglected from the 2014 website. TailwindCSS did not support the feature untuk Version 2.0 (which came later after this site is published), and the ability to customize via CSS global variables are a great way to modify the entire site without breaking the framework. The blogging feature is powered by Jekyll. However, due to technical issues (more about that later), the site has to be compiled first (by running jekyll build -d docs) before publishing to GitHub Pages. Some contents (such as cards at the homepage) are generated from a buch of JSON and YAML files, while the site icons come from 2 sources: Fork Awesome and Bootstrap Icons. Icons from Fork Awesome are primarily used for displaying third-party icons such as Twitter, GitHub and GitLab. The color scheme is currently mixed across different design systems, borrowed from Halfmoon, W3.CSS, Material Design and recently, Tailwind CSS. The Future There is a lot more work to improve this website, including improving the current Jekyll pages for Categories and Tags to be more attractive. Additionally, a(nother) redesign is currently being made to improve the website experience, especially for mobile devices. Here's a sneak peek of it.
Testing Delivery Subkeys for Food-Ordering Apps
As you might have noticed, OpenStreetMap offers the delivery= tags/keys to tag places and restaurants which offers food deliveries. But, have you ever wondered how to tag those who do not have their own delivery service, but they do accept orders from food-ordering and delivery apps? I have seen this case multiple times on small restaurants in Indonesia which indirectly accepts delivery service from GoFood and GrabFood. Sure that there are other similar services available in the world including MelbSC (Australia), Deliveroo (multiple countries), Foodora/Foodpanda (multiple countries), UberEats (multiple countries), Just Eat (multiple countries), as well as Demae-can (Japan). So, why not we tag these services into OpenStreetMap the same way as payment:*= tags? The rules are simple. For every food delivery apps that one place accepts, tag delivery:<app or service name>=yes. For example, if one accepts both GoFood and GrabFood mentioned earlier, give both delivery:gofood=yes and delivery:grabfood=yes respectively. If the place does not have their own delivery service, as originally intended in the wiki, tag delivery=no. Some users might want to quickly find the place in respective food delivery apps. To ease that workflow, I suggest to add a sub-subkey named delivery:<app or service name>:ref=, which stores the URL or URI of the food delivery website/app. Using URL/URIs for this will be much easier for mapping, rather than finding and obtaining respective “restaurant ID”s similar to wikidata= and wikipedia=.
Upgrading Transjakarta Networks to Public Transport V2 Schema
This post was originally published for OpenStreetMap. I am currently working to improve Transjakarta, one of Jakarta’s major BRT/Busway operators, to comply with Public Transport Version 2 schema in OpenStreetMap, though Version 3 is being purposed. Before and After map of Transjakarta Corridor 9 route, between Pluit and Penjaringan bus stops Legacy Tags that I’d like to keep for compatibility: amenity=bus_stop for PTV1 compatibility on bus stationscorridorXX=yes: assigns which Transjakarta corridors are served, such as corridor9=yes for Corridor 9 and corridor12=yes for Corridor 12 (see Implementation Notes if you are a developer utilising this tag for queries)HOTOSM InAWARE tagsnetwork=Transjakarta, now also reinforced withnetwork:wikidata and wikidata valuesshelter=yesshelter_tj=yes (see Implementation Notes if you are a developer utilising this tag for queries) Things I REMOVED service=TransJakarta, since this is unacceptable by Osmose and other QA tools (see Implementation Notes if you are a developer utilizing this tag for queries) New things that I added bus=yes to meet PTV2 requirements for busRoute relation-specific additions:New route relations will be added for Corridor sub-routes (e.g. Corridor 1A, 9M, etc.), night services (e.g. M1 for Corridor 1; though I’ll consult with other OSM Public Transport implementations in other places)Duplicating roads since many Transjakarta networks operate on one-way roadsnetwork:wikidata=Q1671143 for Transjakarta, then add Wikidata values for each route relation, e.g. wikidata=Q12492249 for Corridor 5public_transport:version=2 to enable JOSM and Osmose debuggingShelter/station-specific additions:Stations may now be represented as a Relation for those which have split platforms and/or multiple objects in OSM, such as in some Corridor 9 stations which are split by toll roads/expresswaysTransit-Oriented Development (TOD) areas are now represented as a separate Relation to connect multiple stations serving different networkscovered=yes, since Transjakarta stations are fully covered (in conjunction to shelter=yes)departures_board=realtime since all Transjakarta stations (except Metrotrans, Miktrotrans, and Royaltrans services) have a live bus timetable, which can also be accessible through API at http://api.jakarta.go.idpublic_transport=stop_position and public_transport=platform, see PTV2 on OSM wiki for specific implementationsmoking=no due to government laws, though not necessarily applied to all stops and stations across Jakartawheelchair=yes/dedicated/partial/no (optional) Implementation Notes (for apps and services) Please use the Route Relation instead of corridorXX=yes for network queries. After checking on taginfo.openstreetmap.org most of corridorXX tags are only used in Indonesia.Additionally, you may include hard-coded Relation IDs which belong to Transjakarta network.Please use highway=* and Transjakarta Route Relation IDs instead of service=TransJakarta to query roads which belongs to Transjakarta, as some parts of the routes do NOT have a separate road (or Kassel Kerbs)Please use Transjakarta Route Relation objects with role=platform or role=stop_position instead of shelter_tj, as some Transjakarta (especially Royaltrans and Metrotrans) networks do stop at regular bus stations.
Mapping Indonesian Payment Systems and Proposal for New Payment Tags
This post was originally published for OpenStreetMap. This post is neither created nor endorsed by companies involved in establishment of payment systems listed below. The OpenStreetMap payment: tag allows mappers to tag stores that accept certain payment methods (cash, debit and credit cards, etc.). Currently, the wiki only accepts those payment methods, so now I decided to introduce new ones in Indonesia. What’s new? First, let me introduce five new tags: three of them are dedicated to Indonesia’s newly-established GPN (Gerbang Pembayaran Nasional, literally National Payment Gateway). Currently it is a debit card switching network, similar to that of VISA and MasterCard (Maestro). Here, I propose payment:gpn_debit to be used in all merchants accepting GPN debit cards. The Indonesian government has plans to replace existing payment networks in Indonesia with GPN, so does with credit cards and mobile wallets (e.g. Apple Pay and Google Pay). I am proposing payment:gpn_credit and payment:gpn_qris to be reserved for later use. The latter refers to the QR Indonesian Standard (QRIS) payment, similar to the SGQR system in Singapore. The rest of these tags are payment:akulaku and payment:grabpay, reserved for Akulaku Pay and GrabPay. Both payment systems are currently used in multiple countries across Southeast Asia. In Indonesia, GrabPay has merged to Indonesian digital wallet app OVO, so merchants using OVO-GrabPay QR code sticker (see below) should be tagged with payment:grabpay=yes and payment:id_ovo=yes. There are a bunch of other proposed tags prefixed in id_* (e.g. payment:id_ovo and payment:id_gopay). This prefix is used for payment services operating only in Indonesia, to avoid trademark conflicts with other countries, such as Indonesia’s GO-PAY with GOPAY (Malaysia), GoPay (Czech Republic) and GoPay.me. A full list of posposed (and existing) payment: tags are available on https://telegra.ph/Konvensi-tag-payment-di-Indonesia-04-19 , written in Bahasa Indonesia to serve as guidelines for Indonesian mappers. Note that some tags might be replaced with payment:gpn_qris once after QRIS becomes functional. How will users use this data? On the OpenStreetMap.org website, users can look for accepted payment methods from the node/line/area details. Unfortunately, payment tag details are not available in some OSM clients and the Nomimatim website. Oh, some users might hunt for stores with discounts and cashbacks offered by digital wallet apps (currently this is a real craze in Indonesia). Note: Some of the payment metadata is incorrect, and the shop was edited before the tag proposal. Major Alfamart stores now accepts cash, debit and credit cards, contactless prepaid cards Flazz (payment:id_flazz), Mandiri e-money (payment:id_mandiri_emoney) and BRIZZI (payment:id_brizzi), as well as digital wallet service GO-PAY (payment:id_gopay). Besides that, tagging these shops may also be useful for research. For example, a TagInfo search of stores accepting Alipay reveals that the service is accepted outside China to serve international visitors (especially China). As one of the largest countries in the world, having a complete map of Indonesian payment systems could be beneficial for researchers to evaluate the effectiveness of payment services as one of the economy infrastructures in Indonesia. And for the OSM community, adding new payment: tags from Sabang to Merauke will get them busy again.
Fixing Genting Highlands
This post was originally published for OpenStreetMap. Changesets: https://www.openstreetmap.org/changeset/65071147https://www.openstreetmap.org/changeset/65071317 Removed 20th Century Fox World (constructed roads) I reverted the mapping of roads under construction in this area as 20th Century Fox decided to stop the project (and Genting sues them). No, I’m not planning to change the type of Fox World’s area to brownfield, as this case have not been settled yet. However, I might want to improve the mapping of other theme parks in OSM, as other mappers have mapped some with great details. (such as in Universal Studios Japan) Readjusting First World Hotel towers Prior to these changesets, the First World Hotel consists of 2 towers: Tower 1 and Tower 3. The building which is named as Tower 3 in OSM is supposed to be Tower 2, as Tower 3 is built as an extension to Tower 2. I have stayed there once, so I also added a cafe in the Tower 3 lobby. Next, I also adjusted the First World Hotel towers based on the newer DigitalGlobe imagery. Towers 1 and 2 are supposed to be curved, so I added that change to OSM. (You can confirm the shape using the older Bing imagery) As a result, these towers are aligned better towards Genting International Convention Center as well as the SkyAvenue shopping mall. Skytropolis During the development of 20th Century Fox World, Genting also have prepared a renovation of the First World Indoor Theme Park which will become “Skytropolis”. As the construction of this new the park is almost complete, I decided to add this to OpenStreetMap. Other things Added more parking lanes near to Genting Grand hotel A note on previous changesets This post is a continuation of my previous diary which I considered it controversial. Here are my next plans to fix those issues: First, I am going to resolve where the new First World Lobby paths should actually exit. Even though I have justified this against the old satellite imagery, I will be there to verify the Avenue of Stars exits by next month.Next month is also my next Genting trip (hence I’m motivated to improve Kuala Lumpur International Airport and Genting Highlands prior to travelling), so expect some additions of restaurants and stores starting from Theme Park Hotel to First World, as well as Awana SkyCentral and Genting Premium Outlets at Awana /Gohtong Jaya.
Mapping the New Genting Highlands
Note: The original post have missing screenshots which have been omitted. Major Edits in Resorts World Genting, Malaysia Today I am going to announce a large change to the OpenStreetMap database. What is it? The complete removal of the old Genting Highlands Theme Park assets. If you are using Bing, MapBox, or DigitalGlobe (Premium) satellite imagery, you are still seeing the old face of Genting theme park. However, if you use the standard DigitalGlobe imagery, you will see that everything has changed since 2015, the last time I visited this place. I have to admit that adding and editing existing buildings and roads here are difficult. I ran into issues such as the traffic flow for vehicles exiting from the First World Hotel lobby. In making these changes, I relied on some sources: “Genting Highlands June 2018 and September 2018 Progress Update” videos by SouthernCorridorMalaysia on YouTube The indoor directory of Genting SkyAvenue, which can found from the official website here The concept art of 20th Century Fox World Malaysia Comparison Before the start of this project I compared the existing map of Genting Highlands on Google Maps and HERE WeGo. Here are some notes after adding the changesets. HERE WeGo is still showing the former First World underground links, which also proven the existence of underground tunnels connected to roads near to the Avenue of Stars. These changesets are primarily based on DigitalGlobe Standard imagery, where Google Maps’ interpretation of Genting is based from. Hence, the new buildings (especially the SkyAvenue) might look similar to GMaps, even though they are directly traced against the imagery source. The new First World Plaza exit routes have been changed. Now it follows the former Outdoor Theme Park road located at the lakeside as shown in an older satellite imagery (see comments), to the Arena of Stars underground tunnel shown in HERE. There is a distortion in the satellite imagery around SkyCasino, which GMaps weren’t aware of and mapped the distorted building. The two YouTube videos, as well as the official SkyAvenue directory above prove the correct shape of the building. What Has Changed in Genting? Here are some highlights on major changes in Genting Highlands: Closure of the old Genting Outdoor Theme Park [1] Closure of the old First World Indoor Theme Park [2] Renovation of the old Theme Park Hotel, which later changed its name to “Hotel On The Park” then reverted to its former name [2] Construction and opening of Awana SkyCentral [2] Construction and opening of SkyAvenue [1] Construction and opening of Awana SkyWay, connecting Awana SkyCentral to SkyAvenue via Chin Swee Temple [2][3] Construction and opening of Grand Ion Delemen Hotel [2] Construction of the 20th Fox World Malaysia (Delayed) [1] Construction and opening of Skytropolis, the new First World Indoor Theme Park [3] [1] Shown on changesets mentioned in this article[2] Already added/changed/deleted prior to this article[3] Might have some mapping issues and/or planned to be edited soon What Has Been Changed in OpenStreetMap? A lot: see Added “Genting SkyAvenue” and “Genting SkyCasino” Note: The prefix word “Genting” is not neccessary, while this could ease people for searching this new shopping mall in Genting. Genting SkyAvenue, or simply “SkyAvenue”, is a new shopping mall located at part of the former Outdoor Theme Park area. This mall, stretching from the First World Plaza to the Avenue of Stars, hosted many tenants that were previously available at the First World Plaza (FWP). Most of the FWP areas, such as the “Genting Walk”, has been closed for the opening of the new “Skytropolis” theme park. Removed two “lakes” in the former Outdoor Theme Park area. These “lakes” were built for water attractions on the theme park. Now they have been closed for the construction of the 20th Century Fox World Malaysia. However, the Outdoor Theme Park roads that surrounds the larger lake has been added as the current exit path of First World Plaza (see comments) Modified First World Hotel lobby exit paths Initially, I thought that vehicles exiting from the First World Hotel are guided through the new tunnels at SkyAvenue to the gate where the First World Bus Terminal was built. After consulting with the SkyAvenue indoor directory, I agreed to modify the path to exit at the Arena of Stars. There are future tenants opening at the Ground Level of SkyAvenue, which does not indicate any vehicle routes. However, the new elevated track is built near the former Bus Terminal, which directs the vehicles to the multi-storey parking area at SkyAvenue. New Paths at 20th Century Fox World Malaysia Here, I would also like to give a head start of the mapping progress of the future outdoor theme park. At the first steps I added some paths that are most likely to be part of the main roads in this theme park, supported by the early concept images. I assigned these paths with highway:road before the theme park is finalized to the public. At the end, here are a list of changesets for you to discover: #64266771, #64269329, #64269852, #64269863, #64270973, #64279712 and #64280005