Create the MySQL community repository configuration file:
sudo vim /etc/yum.repos.d/mysql-community.repo
Add the following content to the file:
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
enabled=1
gpgcheck=0
[mysql-connectors-community]
name=MySQL Connectors Community
baseurl=http://repo.mysql.com/yum/mysql-connectors-community/el/7/$basearch/
enabled=1
gpgcheck=0
[mysql-tools-community]
name=MySQL Tools Community
baseurl=http://repo.mysql.com/yum/mysql-tools-community/el/7/$basearch/
enabled=1
gpgcheck=0
Ensure MySQL 8.0 is disabled and MySQL 5.7 is enabled:
# Disable MySQL 8.0 Community Repository
sudo dnf config-manager --disable mysql80-community
# Enable MySQL 5.7 Community Repository
sudo dnf config-manager --enable mysql57-community
Install the MySQL server package:
sudo dnf install mysql-community-server
Start the MySQL service and enable it to start automatically on boot:
sudo systemctl enable --now mysqld.service
Verify the service is running:
sudo systemctl status mysqld.service
MySQL generates a temporary password for the root user during installation. Retrieve it using:
sudo grep 'A temporary password' /var/log/mysqld.log | tail -1
Example output:
2025-11-12T12:16:18.004506Z 1 [Note] A temporary password is generated for root@localhost: EQ(9h)1AsZen
Important: Make note of the password (in this example: EQ(9h)1AsZen) as you’ll need it for the next step.
Run the MySQL secure installation script to enhance security:
sudo mysql_secure_installation
Follow the interactive prompts:
YesYesYesYesExample interactive session:
Change the password for root ? (Press y|Y for Yes, any other key for No) : Yes
New password: [Enter your new secure password]
Re-enter new password: [Confirm your password]
Estimated strength of the password: 100
Do you wish to continue with the password provided?: Yes
Remove anonymous users?: Yes
Success.
Disallow root login remotely? : Yes
Success.
Remove test database and access to it? : Yes
- Dropping test database...
Success.
- Removing privileges on test database...
Success.
Reload privilege tables now? (Press y|Y for Yes) : Yes
Success.
All done!
Test your MySQL installation by connecting to the server:
mysql -u root -p
Enter your new root password when prompted. If successful, you’ll see the MySQL prompt:
mysql>
To exit MySQL, type:
EXIT;
sudo journalctl -u mysqld.service/var/log/mysqld.logmysql --versionsudo cat /etc/my.cnfsudo tail -f /var/log/mysqld.logAfter weighing this decision myself, I’ve compiled a list of the real-world pros and cons of trading city chaos for suburban calm.
The appeal of the suburbs often comes down to one word: predictability. In a city as wonderfully chaotic as Jakarta, a little bit of order can feel like the ultimate luxury.
In a typical Jakarta gang (alleyway), your life is an open book. In a suburban cluster, you can maintain your privacy. If a neighbour is too noisy or their car is blocking your gate, you don’t have to engage in a potentially awkward confrontation. A quick call to the estate management or the security post (pos satpam) handles the issue professionally.
This is a big one. You’ll never wake up to find the main road to your house blocked by a giant tent for a hajatan (wedding or celebration). The streets within the cluster are managed by the developer, ensuring they remain open and accessible for residents.
Most suburban housing clusters operate with a one-gate system and have security patrols running 24/7. This provides a significant sense of safety, whether you’re at home, at work, or travelling. It’s a comfort that’s hard to put a price on.
This is perhaps the biggest draw. For the price of a small two-bedroom apartment in South Jakarta, you can often get a landed house with a small garden. The environment is also significantly quieter. You trade the constant symphony of horns and construction for the sound of birds in the morning and crickets at night. The air quality often feels better, too.
Forget seeing piles of trash on street corners or smelling burnt plastic from neighbours burning their own garbage. Suburban townships have a dedicated, scheduled garbage collection system, leading to a cleaner and healthier living environment.
Little conveniences add up. Working from home and expecting a package? If you need to step out, you can simply inform security, and they’ll receive it for you. This simple service is a lifesaver in the age of e-commerce.
Of course, the suburban dream isn’t without its drawbacks. The trade-offs are real and can significantly impact your lifestyle.
Your one original con is the most critical one. Public transport integration is often poor. While the KRL Commuter Line is a lifeline, the “last mile” from the station to your house can be a hassle, often requiring a car or an online taxi. This means you are heavily reliant on a private vehicle, and you’ll spend a significant amount of your time, money (for fuel and tolls - biaya tol), and energy stuck in Jakarta’s infamous macet (traffic jams). A daily round trip can easily take 2-3 hours, which adds up to a significant chunk of your day.
Want to meet friends for a spontaneous dinner at a trendy new restaurant in SCBD? That’s not a quick trip anymore. It’s a planned expedition. Your social life might become more centered around the malls and cafes within your suburban bubble, and you might experience a bit of FOMO (Fear Of Missing Out) from the city’s vibrant, ever-changing scene.
While organized, some find suburban clusters to be sterile and lacking the unique character of older Jakarta neighbourhoods. You also have to factor in the monthly maintenance fee (Iuran Pengelolaan Lingkungan or IPL), which covers security, garbage, and facility upkeep. This is an additional, recurring cost on top of your mortgage.
It’s easy to get comfortable and never leave your township. With malls, schools, hospitals, and offices all within the same planned area, you might find yourself living in a bubble, disconnected from the wider pulse and diversity of the metropolis.
Ultimately, the choice between city and suburb isn’t about which is “better,” but what’s right for you at your current stage of life.
If you crave space, security, and a quiet environment to potentially raise a family, and you can manage the commute, the suburbs are a fantastic option.
However, if your career and social life are deeply embedded in the city center, and you thrive on spontaneity and easy access to everything, the daily grind from the suburbs might wear you down.
It’s a classic trade-off: space and serenity vs. access and spontaneity.
]]>Your to-do list app now needs a seed round.
But what if there was a way to escape this complexity? What if a single, reliable tool you already know could handle the work of many? It’s time to take another look at a boring, old friend: Postgres. The humble SQL database has secretly evolved into a full-stack powerhouse, a Swiss Army knife capable of simplifying your entire architecture.
To launch a modern application, the checklist of required services can be daunting. You’re told you need:
This fragmented approach introduces “JavaScript framework drama,” surprise invoices, and a web of dependencies just to get a basic product out the door.
Postgres, through its robust core features and incredible extension ecosystem, can consolidate many of these functions directly within the database. Here’s how.
JSONBThought you needed a separate NoSQL database for unstructured data? Think again. Postgres’s JSONB data type allows you to store dynamic, schema-less JSON documents natively. You get the flexibility of NoSQL with the power of SQL queries to search and manipulate that data. It’s the best of both worlds: structure and chaos, living together.
pg_cronForget setting up a separate server or wrestling with Linux scripts for your background tasks. The pg_cron extension turns Postgres into a powerful job scheduler. You can schedule any SQL query to run every hour, every day, or at any custom interval.
-- Run a cleanup job every Saturday at 3:30 AM
SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);
UNLOGGED TablesNeed a cache like Redis for fast-changing, temporary data? Postgres has you covered. By creating UNLOGGED tables, you create tables that don’t write to the main transaction log (the Write-Ahead Log). This makes writes significantly faster. Since the data lives primarily in memory and doesn’t survive a crash, it’s perfect for session data, counters, or other throwaway cache information.
pgvectorThe AI revolution is here, and with it, the need for vector search. Instead of adding another specialized database to your stack, you can use the pgvector extension. It adds a true vector data type to Postgres, allowing you to store embeddings and perform nearest-neighbor searches—essential for RAG-style lookups, recommendations, and semantic search.
tsvectorDon’t pay for an external search service. Postgres has powerful, built-in full-text search capabilities using the tsvector and tsquery types. You can build your own sophisticated search engine that handles typos, ranks results, and understands language-specific rules, all without leaving your database.
pg_graphqlWant to expose your data via a GraphQL API without writing a dedicated backend server? The pg_graphql extension by Supabase introspects your database schema and turns it into a fully functional GraphQL API. You write SQL to define your tables and permissions, and you get structured, efficient queries in return.
One of Firebase’s killer features is real-time data sync. But you can achieve this with Postgres too. Tools like ElectricSQL create a real-time, reactive layer on top of your existing Postgres database, keeping your front-end applications fresh without polling or complex WebSocket management.
You can build a robust and secure authentication system entirely within Postgres.
pgcrypto extension to securely hash and verify user passwords.pgjwt.With modern serverless platforms like Neon making it easier than ever to host, scale, and manage Postgres, the argument becomes even stronger.
By leveraging the rich ecosystem built on this one reliable database, you can have a cache, a job scheduler, a vector store, a search engine, a GraphQL server, real-time sync, auth, and analytics. All of this is built on a single, battle-tested foundation.
So next time you’re mapping out a new project, before you spin up six microservices and four SaaS tools, just smile and ask: “Why don’t we try Postgres first?”
]]>This guide conducted in Jakarta, Indonesia, and the procedures might slightly vary in different regions, but the overall flow should be similar. Be aware of possible changes in procedures due to updates in regulations or office policies, or corruption/bribery practices that might affect the process.
The first step is ensuring all required documents are complete. This is key to preventing any delays in your process.
Required Documents to Bring:
Process on 2nd Floor (1-Year Tax Validation):
After your documents are verified, the next step is making the payment.
This is the final step in the annual tax renewal process.
Hope this guide helps you renew your motorcycle’s annual tax more easily and quickly!
]]>Panduan ini dilakukan di Jakarta, Indonesia, dan prosedurnya mungkin sedikit berbeda di daerah lain, tetapi alur keseluruhannya seharusnya serupa. Perhatikan kemungkinan perubahan prosedur akibat pembaruan regulasi atau kebijakan kantor, atau praktik korupsi/suap yang mungkin mempengaruhi proses.
Langkah pertama adalah memastikan semua dokumen yang dibutuhkan sudah lengkap. Ini adalah kunci agar proses Anda tidak terhambat.
Dokumen yang Wajib Dibawa:
Proses di Lantai 2 (Pengesahan Pajak 1 Tahun):
Setelah berkas Anda diverifikasi, tahap selanjutnya adalah melakukan pembayaran.
Ini adalah langkah terakhir dalam proses perpanjangan pajak tahunan.
Semoga panduan ini membantu Anda dalam memperpanjang pajak motor tahunan dengan lebih mudah dan cepat!
]]>But as I sit with these feelings, overwhelmed and lost, I wonder: Is this all there is to me? Am I only my failures?
Buddha’s teachings offer a different perspective. They remind me that while suffering is a part of life, it is not the entirety of life. Mistakes, like all things, are impermanent. They do not define us but are stepping stones for growth if we allow them to be.
Buddha teaches us that life is inherently full of challenges. Mistakes at work, misunderstandings, and feelings of inadequacy are all part of the human experience. They’re not proof of stupidity or failure—they’re reminders of our shared humanity.
“Pain is inevitable, but suffering is optional.”
Instead of resisting these moments, I’m trying to learn from them. Each frustration from my colleagues, each mistake I make, carries a lesson. It might be about clarity, communication, or patience—both with myself and with others.
The heaviness I feel isn’t permanent. Just as joy fades, so too does sorrow. My current struggles at work will not last forever. There will be a time when the shouting stops, the mistakes diminish, and I find my footing.
“No matter how hard the past, you can always begin again.”
When I hold onto this truth, it gives me strength to keep going. Each day is a new chance to improve, to understand, and to be understood.
Buddha also taught the importance of kindness—not just for others, but for ourselves. I’ve been harsh with myself, calling myself “stupid” and “slow.” But if I can treat others with patience, why not extend the same kindness to myself?
“You yourself, as much as anybody in the entire universe, deserve your love and affection.”
At work, I’m trying to approach tasks differently. I ask more questions to clarify requirements, break problems into smaller parts, and seek feedback early. Progress feels slow, but each effort counts.
Buddha’s teachings remind me that I am not my mistakes. My worth isn’t tied to my job performance or how others perceive me. What matters is my willingness to learn, to improve, and to be gentle with myself in the process.
If you’re struggling, like me, remember: life is full of challenges, but you don’t have to face them alone. Mistakes are not the end of your story—they’re just the beginning of a new chapter.
]]>
Some people believe that giving advice publicly is an effective way to address mistakes, while others argue that such an approach is disrespectful and counterproductive. Discuss both views and give your own opinion.
Publicly giving advice is common in workplaces and educational settings. While some argue it encourages group learning and transparency, others believe it can cause embarrassment and harm relationships. In my view, offering advice privately is a more effective and respectful approach.
Advocates of public advice claim it promotes accountability and saves time. For instance, addressing an individual’s error in a team meeting can clarify misunderstandings for everyone and prevent similar mistakes in the future. Additionally, it fosters a culture of shared learning, where individuals benefit from others’ experiences. For example, a manager discussing a missed deadline openly may help the entire team understand the importance of time management.
However, public advice often leads to embarrassment, defensiveness, or even resentment. Being corrected in front of others can make individuals feel humiliated, which may undermine their confidence and motivation. For example, an employee criticized during a meeting might feel less willing to share ideas, damaging team dynamics. Furthermore, public feedback can strain relationships, as it might be perceived as overly critical or disrespectful.
In contrast, private advice respects the individual’s dignity and allows for constructive conversations. For instance, a teacher offering feedback one-on-one can personalize their advice, which often leads to better results. Similarly, in professional settings, private discussions enable employees to reflect on feedback without external pressure, strengthening trust and collaboration.
In conclusion, while public advice can be useful in promoting group learning, its drawbacks, such as embarrassment and strained relationships, often outweigh the benefits. Providing advice privately is a more respectful and effective approach, fostering personal growth and preserving positive relationships.
]]>In this topic, we will install shivammathur/homebrew-php on macOS.
[!NOTE] Before installing shivammathur/homebrew-php, make sure you have installed Homebrew. If you haven’t installed Homebrew yet, you can follow the instructions here.
Add the shivammathur/homebrew-php tap:
brew tap shivammathur/php
Install the desired PHP version using Homebrew:
# install PHP 8.4 for example
brew install shivammathur/php/[email protected]
# after installation, you have to link the PHP version
brew link --overwrite --force shivammathur/php/[email protected]
# check the PHP version
php -v # should show PHP 8.4
To switch between PHP versions, you can use the brew link command:
# install PHP 8.3 for example, if you haven't installed it yet
brew install shivammathur/php/[email protected]
# switch to PHP 8.3
brew link --overwrite --force shivammathur/php/[email protected]
# check the PHP version
php -v # should show PHP 8.3
To upgrade to a newer PHP version, you can use the brew upgrade command:
# upgrade to PHP 8.5
brew upgrade shivammathur/php/[email protected]
# after upgrade, you have to link the PHP version
brew link --overwrite --force shivammathur/php/[email protected]
# check the PHP version
php -v # should show PHP 8.5
In this topic, we will install pyenv on macOS.
[!NOTE] Before installing pyenv, make sure you have installed Homebrew. If you haven’t installed Homebrew yet, you can follow the instructions here.
Install pyenv using Homebrew:
brew update
brew install pyenv
Add the following lines to your ~/.zshrc file:
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init - zsh)"' >> ~/.zshrc
pyenv install --list
pyenv install 3.12.8
pyenv global 3.12.8
pyenv local 3.12.8
pyenv uninstall 3.12.8
pyenv versions
brew upgrade pyenv
To install PIP, you do that via the get-pip.py script. The script automatically downloads and installs the current pip package for Python.
[!IMPORTANT] Install pip via
get-pip.pyonly with Python3 or later. This method doesn’t work for earlier versions.
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py
To verify the installation, run the following command:
pip --version
Imagine you work as a software developer. Recently, during a team meeting, a disagreement arises between you and a coworker about the approach to implementing a critical feature. The conversation becomes tense, with raised voices and interruptions.
Sensing the situation, you pause the discussion and call for a separate meeting, but instead of framing it as a conflict, you suggest involving your manager to “align perspectives.” During this discussion, you subtly emphasize your contributions and your openness to compromise, positioning yourself as a team player while steering the conversation toward an outcome that aligns with your ideas. Your manager’s presence helps diffuse tension, but you also ensure that your voice is heard and valued.
In this scenario, you adeptly used the opportunity to guide the conversation toward a favourable resolution while maintaining an image of collaboration and openness. This approach involves subtle tactics to shape perceptions and outcomes without appearing overbearing. By positioning the discussion as a mutual alignment effort, you avoid confrontation while subtly steering the narrative.
Your actions reflect key psychological strategies:
Strategic influence works best under these conditions:
However, overuse or misuse of this approach can risk appearing manipulative. It’s essential to pair strategy with genuine collaboration to maintain trust.
Subtle influence is most effective when combined with genuine efforts to collaborate. Here’s how to balance:
Incorporating subtle influence into workplace interactions can help navigate intensive conversations and achieve desired outcomes while maintaining trust and collaboration. By mastering these strategies, you can position yourself as a leader and problem-solver, fostering stronger relationships and professional growth.
]]>