Jekyll2025-12-01T09:43:35+00:00https://rusydy.github.io/feed.xmlSimple Blog<section> <p> Hi, I'm Rusydy Muhiddin. </p> <p> A software engineer who loves to write about anything I find interesting. </p> <p> more about me <a href="about.html">here</a> and my resume <a href="resume.html">here</a>. </p> <p> if you want to connect, you can find me on <a href="https://github.com/Rusydy">GitHub</a>, <a href="https://linkedin.com/in/rusydy-muhiddin/">LinkedIn</a>, or just send me an <a href="mailto:[email protected]">email</a>. </p> <p> Anyways, you can adjust the theme by clicking the picture above. </p> <p> Happy reading! </p> </section> Rusydy MuhiddinInstalling MySQL 5.7 Community Server on AlmaLinux 102025-11-13T00:00:00+00:002025-11-13T00:00:00+00:00https://rusydy.github.io/installing-mysql57-community-server-almalinux10This guide provides step-by-step instructions for installing MySQL 5.7 Community Server on AlmaLinux 10.

Prerequisites

  • AlmaLinux 10 system with sudo privileges
  • Internet connection for package downloads

Installation Steps

Step 1: Add MySQL Community Repository

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

Step 2: Configure Repository Settings

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

Step 3: Install MySQL 5.7 Community Server

Install the MySQL server package:

sudo dnf install mysql-community-server

Step 4: Start and Enable MySQL Service

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

Step 5: Retrieve Temporary Root Password

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.

Step 6: Secure MySQL Installation

Run the MySQL secure installation script to enhance security:

sudo mysql_secure_installation

Follow the interactive prompts:

  1. Enter the temporary password you noted in the previous step
  2. Set a new root password when prompted
  3. Remove anonymous users: Select Yes
  4. Disallow root login remotely: Select Yes
  5. Remove test database: Select Yes
  6. Reload privilege tables: Select Yes

Example 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!

Verification

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;

Troubleshooting

Common Issues

  • Service fails to start: Check system logs with sudo journalctl -u mysqld.service
  • Cannot find temporary password: Ensure the service started properly and check /var/log/mysqld.log
  • Repository conflicts: Verify repository configuration and ensure conflicting MySQL packages are not installed

Useful Commands

  • Check MySQL version: mysql --version
  • View MySQL configuration: sudo cat /etc/my.cnf
  • Monitor MySQL logs: sudo tail -f /var/log/mysqld.log

Security Considerations

  • Always use strong passwords for database users
  • Consider configuring firewall rules to restrict database access
  • Regularly update MySQL to the latest 5.7.x version for security patches
  • Backup your databases regularly

References

]]>
Rusydy Muhiddin
The Suburban Dream vs. The Urban Reality: Pros and Cons of Buying a House in the Jakarta Suburbs2025-09-14T00:00:00+00:002025-09-14T00:00:00+00:00https://rusydy.github.io/buying-house-in-suburbs-jakartaFor many of us navigating life in our 20s and 30s in Jakarta, the dream of owning a home often leads to a single, major crossroad: do you buy a compact apartment in the city, or a spacious house in the suburbs? The allure of the pinggiran—areas like BSD, Bintaro, Gading Serpong, or even Depok and Bekasi—is undeniable. But is the trade-off worth it?

After weighing this decision myself, I’ve compiled a list of the real-world pros and cons of trading city chaos for suburban calm.

The Pros: The Allure of a Structured Life

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.

1. Privacy and Professional Conflict Resolution

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.

2. Orderly and Uninterrupted Streets

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.

3. Enhanced Security and Peace of Mind

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.

4. More Space and a Quieter Environment

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.

5. Organized Utilities (Like Garbage Collection)

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.

6. A Support System for Modern Life

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.

The Cons: The Reality of the Commute and the Bubble

Of course, the suburban dream isn’t without its drawbacks. The trade-offs are real and can significantly impact your lifestyle.

1. The Commute is a Major Commitment

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.

2. Spontaneity Takes a Back Seat

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.

4. The Suburban Bubble

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.

Conclusion: It’s All About Your Priorities

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.

]]>
Rusydy Muhiddin
Simplify Your Stack: The Case for Postgres as a Full-Stack Platform2025-07-30T00:00:00+00:002025-07-30T00:00:00+00:00https://rusydy.github.io/simplify-your-stack-postgres-full-stack-platformModern web development often feels like a paradox. We have an unprecedented number of powerful tools, frameworks, and services at our disposal, yet building and deploying even a simple application has never felt more complex. The dream of a lean MVP can quickly devolve into a nightmare of juggling a dozen different services, each with its own pricing, configuration, and learning curve.

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.

The Problem: The Sprawl of the Modern Tech Stack

To launch a modern application, the checklist of required services can be daunting. You’re told you need:

  • A primary database (like Postgres or MySQL).
  • A NoSQL database for flexible data (like MongoDB).
  • A caching layer for performance (like Redis).
  • A separate service for background and scheduled jobs (cron jobs).
  • A search engine for fast, fuzzy search (like Algolia or Elasticsearch).
  • A vector database for AI and embeddings (like Pinecone).
  • A real-time service for live data updates (like Firebase).
  • Authentication, analytics, and monitoring tools.

This fragmented approach introduces “JavaScript framework drama,” surprise invoices, and a web of dependencies just to get a basic product out the door.

The Solution: The Postgres All-in-One Ecosystem

Postgres, through its robust core features and incredible extension ecosystem, can consolidate many of these functions directly within the database. Here’s how.

1. NoSQL Flexibility with JSONB

Thought 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.

2. Scheduled Jobs with pg_cron

Forget 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'$$);

3. High-Speed Caching with UNLOGGED Tables

Need 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.

4. AI-Powered Vector Search with pgvector

The 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.

5. Advanced Full-Text Search with tsvector

Don’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.

6. Instant GraphQL APIs with pg_graphql

Want 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.

7. Real-Time Data Sync with ElectricSQL

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.

8. Authentication and Authorization in SQL

You can build a robust and secure authentication system entirely within Postgres.

  • Hashing: Use the pgcrypto extension to securely hash and verify user passwords.
  • JWTs: Sign and verify JSON Web Tokens (JWTs) with extensions like pgjwt.
  • Permissions: Use Postgres’s powerful Row-Level Security (RLS) policies to ensure users can only see and modify their own data. This moves your most critical security logic right next to the data itself.

Conclusion: It’s Time to Simplify

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?”

]]>
Rusydy Muhiddin
Complete Guide to Annual Motorcycle Tax Renewal at Samsat - ENG2025-06-30T00:00:00+00:002025-06-30T00:00:00+00:00https://rusydy.github.io/motorcycle-tax-renewal-guide-indonesiaRenewing your motorcycle’s annual tax is a mandatory obligation for every vehicle owner. To ensure the process runs smoothly without back-and-forth trips, it’s essential to prepare everything properly. Here’s a clear and easy-to-follow step-by-step guide based on general procedures at Samsat buildings. As of 2025, this guide still remains relevant, eventhough some procedures are claim to be online, but in reality, many Samsat offices still require in-person visits.

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.


Stage 1: Document Preparation & Form Collection

The first step is ensuring all required documents are complete. This is key to preventing any delays in your process.

Required Documents to Bring:

  • Original ID Card (KTP) and 1 photocopy.
  • Original STNK (Vehicle Registration Certificate) and 1 photocopy.
  • Original BPKB (Vehicle Ownership Document) and 1 photocopy (for some Samsat offices or specific conditions, BPKB photocopy might be required, so it’s better to prepare it just in case).
  • TBPKP (Tax Payment Proof) or previous year’s tax receipt if available.

Process on 2nd Floor (1-Year Tax Validation):

  1. Go to 2nd Floor of the Samsat Building.
  2. Get SKP Form (Tax Assessment Letter). Usually available at the information counter or designated desk.
  3. Fill out the Form with data matching your STNK.
  4. Register at SKP Counter. Submit the completed form along with photocopies of ID card, STNK, and last year’s TBPKP/Tax Receipt.

Stage 2: Payment at Cashier

After your documents are verified, the next step is making the payment.

  1. Wait for Your Call. The officer will call your name according to the data on your STNK.
  2. Go to Jasa Raharja Counter & Cashier. After being called, you’ll receive an SKP (Tax Assessment Letter) containing the breakdown of total tax to be paid.
  3. Make Payment at the designated cashier counter. Keep the payment receipt safe.

Stage 3: Collection of Validated STNK

This is the final step in the annual tax renewal process.

  1. Wait for Final Call. After payment, wait again in front of the STNK delivery counter.
  2. Collect New STNK. Your name will be called to collect the validated STNK (usually in the form of a validation stamp on the STNK sheet) along with the new TBPKP or new tax payment proof.
  3. Done! Make sure you receive the original STNK and new TBPKP before leaving Samsat.

Important Notes

  • Arrive Early. To avoid long queues, try to come in the morning.
  • Bring Your Own Writing Tools. Bringing your own pen will speed up the form-filling process.
  • Double-check All Documents. Before leaving home, ensure no documents are left behind.
  • Procedures May Vary Slightly. Floor order or counter arrangements might vary at each Samsat office, but the general process flow will be the same.

Hope this guide helps you renew your motorcycle’s annual tax more easily and quickly!

]]>
Rusydy Muhiddin
Panduan Lengkap Perpanjangan Pajak Motor Tahunan di Samsat - IDN2025-06-30T00:00:00+00:002025-06-30T00:00:00+00:00https://rusydy.github.io/motorcycle-tax-in-indonesiaMemperpanjang pajak tahunan motor adalah kewajiban bagi setiap pemilik kendaraan. Agar prosesnya berjalan lancar tanpa bolak-balik, ada baiknya Anda mempersiapkan semuanya dengan baik. Berikut adalah panduan langkah demi langkah yang jelas dan mudah diikuti berdasarkan prosedur umum di Gedung Samsat. Per tahun 2025, panduan ini masih relevan, meskipun beberapa prosedur diklaim sudah online, namun kenyataannya banyak kantor Samsat yang masih mengharuskan kunjungan langsung.

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.


Tahap 1: Persiapan Dokumen & Pengambilan Formulir

Langkah pertama adalah memastikan semua dokumen yang dibutuhkan sudah lengkap. Ini adalah kunci agar proses Anda tidak terhambat.

Dokumen yang Wajib Dibawa:

  • KTP Asli dan 1 lembar fotokopi.
  • STNK Asli dan 1 lembar fotokopi.
  • BPKB Asli dan 1 lembar fotokopi (untuk beberapa Samsat atau kondisi tertentu, fotokopi BPKB mungkin diperlukan, sebaiknya siapkan untuk berjaga-jaga).
  • TBPKP (Tanda Bukti Pelunasan Kewajiban Pembayaran) atau Struk Pajak tahun sebelumnya jika ada.

Proses di Lantai 2 (Pengesahan Pajak 1 Tahun):

  1. Naik ke Lantai 2 Gedung Samsat.
  2. Ambil Formulir SKP (Surat Ketetapan Pajak). Biasanya tersedia di loket informasi atau meja khusus.
  3. Isi Formulir dengan data yang sesuai pada STNK Anda.
  4. Daftar di Loket SKP. Serahkan formulir yang sudah diisi beserta fotokopi KTP, fotokopi STNK, dan TBPKP/Struk Pajak tahun lalu.

Tahap 2: Pembayaran di Kasir

Setelah berkas Anda diverifikasi, tahap selanjutnya adalah melakukan pembayaran.

  1. Tunggu Panggilan. Petugas akan memanggil nama Anda sesuai dengan data di STNK.
  2. Menuju Loket Jasa Raharja & Kasir. Setelah dipanggil, Anda akan menerima SKP (Surat Ketetapan Pajak) yang berisi rincian total pajak yang harus dibayarkan.
  3. Lakukan Pembayaran di loket kasir yang ditunjuk. Simpan baik-baik bukti pembayarannya.

Tahap 3: Pengambilan STNK yang Telah Disahkan

Ini adalah langkah terakhir dalam proses perpanjangan pajak tahunan.

  1. Tunggu Panggilan Akhir. Setelah membayar, tunggu kembali di depan loket penyerahan STNK.
  2. Ambil STNK Baru. Nama Anda akan dipanggil untuk mengambil STNK yang telah disahkan (biasanya berupa stempel pengesahan pada lembar STNK) beserta TBPKP atau bukti lunas pajak yang baru.
  3. Selesai! Pastikan Anda menerima STNK asli dan TBPKP baru sebelum meninggalkan Samsat.

Penting untuk Diperhatikan

  • Datang Lebih Awal. Untuk menghindari antrean panjang, usahakan datang di pagi hari.
  • Bawa Alat Tulis Sendiri. Membawa pulpen sendiri akan mempercepat proses pengisian formulir.
  • Periksa Kembali Semua Dokumen. Sebelum berangkat, pastikan tidak ada dokumen yang tertinggal.
  • Prosedur Bisa Sedikit Berbeda. Urutan lantai atau loket mungkin bervariasi di setiap kantor Samsat, namun alur prosesnya secara umum akan sama.

Semoga panduan ini membantu Anda dalam memperpanjang pajak motor tahunan dengan lebih mudah dan cepat!

]]>
Rusydy Muhiddin
A Lesson from Buddha on Suffering, Mistakes, and Growth2024-12-26T00:00:00+00:002024-12-26T00:00:00+00:00https://rusydy.github.io/a-lesson-from-buddha-on-suffering-mistakes-and-growthI mess up at work. I often fail to understand the requirements, and I’m too slow to solve problems. My mistakes pile up, and it feels like everyone’s frustration with me grows heavier each day. People shout at me, and I’m left feeling stupid and inadequate. I’m deeply sorry for being this way—for failing so often and for falling short of the expectations placed on me.

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.

Embracing Suffering: The Reality of Dukkha

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.

This Too Shall Pass: The Wisdom of Anicca

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.

The Path Forward: Kindness and Effort

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.

The Takeaway

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.

]]>
Rusydy Muhiddin
IELTS Writing Task 2: Public vs. Private Advice2024-12-26T00:00:00+00:002024-12-26T00:00:00+00:00https://rusydy.github.io/ielts-writing-task-2-public-vs-private-adviceIELTS Writing Task 2: Public vs. Private Advice

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.

]]>
Rusydy Muhiddin
Setup PHP Version Management: shivammathur/homebrew-php2024-12-24T00:00:00+00:002024-12-24T00:00:00+00:00https://rusydy.github.io/setup-php-version-management-shivammathurshivammathur/homebrew-php is a repository that provides PHP version management for macOS. It allows you to install multiple PHP versions and switch between them easily.

Installation

In this topic, we will install shivammathur/homebrew-php on macOS.

Install shivammathur/homebrew-php

[!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 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

Switch PHP version

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

Upgrade PHP version

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

References

]]>
Rusydy Muhiddin
Setup Python Version Management: pyenv2024-12-24T00:00:00+00:002024-12-24T00:00:00+00:00https://rusydy.github.io/setup-python-version-management-pyenvPyenv lets you easily switch between multiple versions of Python. It’s simple, unobtrusive, and follows the UNIX tradition of single-purpose tools that do one thing well.

Installation

In this topic, we will install pyenv on macOS.

Install pyenv

[!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 pyenv to zsh profile

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

Usage

List available Python versions

pyenv install --list

Install Python

pyenv install 3.12.8

Set Python version globally

pyenv global 3.12.8

Set Python version locally

pyenv local 3.12.8

Uninstall Python

pyenv uninstall 3.12.8

List installed Python versions

pyenv versions

Update pyenv

brew upgrade pyenv

PIP

Install PIP

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.py only 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

References

]]>
Rusydy Muhiddin
Handling Intensive Conversations in the Workplace: Subtle Influence and Conflict Resolution2024-12-15T00:00:00+00:002024-12-15T00:00:00+00:00https://rusydy.github.io/workplace-conflict-mediation-strategyScenario: Strategic Conflict Management

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.

Explanation: What Happened Here?

Influence Through Structured Communication

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.

The Psychology Behind Your Actions

Your actions reflect key psychological strategies:

  1. Creating the Appearance of Neutrality:
    • By framing the manager’s involvement as a way to ensure fairness, you appear objective and focused on team success, which earns trust and deflects any perception of self-serving motives.
  2. Positioning Yourself Strategically:
    • Highlighting your willingness to compromise while emphasizing your contributions subtly strengthens your standing. Others see you as cooperative and solution-focused.
  3. Managing Perceptions:
    • Presenting the situation as a collective effort rather than a conflict helps shift the focus from disagreement to problem-solving, casting you in a favourable light.

When Is This Approach Appropriate?

Strategic influence works best under these conditions:

  1. High Stakes: When the outcome significantly affects your role or project.
  2. Team Dynamics: When you need to maintain relationships while advocating for your perspective.
  3. Power Balance: When navigating hierarchical structures or differing levels of influence within the team.

However, overuse or misuse of this approach can risk appearing manipulative. It’s essential to pair strategy with genuine collaboration to maintain trust.

Strategies to Subtly Influence Workplace Conversations

  1. Lead with Questions:
    • Ask open-ended questions that guide the discussion toward your desired outcome (e.g., “How do you see this approach affecting our timeline?”).
  2. Control the Narrative:
    • Frame the conversation in a way that emphasizes shared goals and minimizes discord (e.g., “Let’s find the best way to deliver value to the client.”).
  3. Leverage Authority Wisely:
    • Involve your manager not as a decision-maker but as a facilitator, ensuring your ideas are presented favourably without appearing overly assertive.
  4. Demonstrate Empathy:
    • Acknowledge your coworker’s points to disarm potential resistance, then build on them to support your perspective. For example, “I see your concern about the timeline, and I believe we can address it by…”
  5. Be Generous with Credit:
    • Recognize the contributions of others while subtly tying the success of the project to your involvement. This enhances your standing without creating conflict. For example, “I appreciate your insights, and I believe by combining our approaches, we can achieve a stronger outcome.”

Balancing Strategy and Collaboration

Subtle influence is most effective when combined with genuine efforts to collaborate. Here’s how to balance:

  • Focus on Mutual Gains: Frame your perspective as benefiting the team or project.
  • Cultivate Relationships: Build rapport with coworkers outside high-stakes discussions to create goodwill.
  • Be Transparent When Necessary: Strategic actions are most effective when grounded in integrity. Ensure your motives align with team goals.

Conclusion

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.

]]>
Rusydy Muhiddin