Sunday, December 24, 2023

Mysql and Python Nowadays 🤦

 Some notes after installing mysql-client and pkg-config using brew:

mysql-client is keg-only, which means it was not symlinked into /opt/homebrew,

because it conflicts with mysql (which contains client libraries).


If you need to have mysql-client first in your PATH, run:

  echo 'export PATH="/opt/homebrew/opt/mysql-client/bin:$PATH"' >> ~/.zshrc


For compilers to find mysql-client you may need to set:

  export LDFLAGS="-L/opt/homebrew/opt/mysql-client/lib"

  export CPPFLAGS="-I/opt/homebrew/opt/mysql-client/include"


For pkg-config to find mysql-client you may need to set:

  export PKG_CONFIG_PATH="/opt/homebrew/opt/mysql-client/lib/pkgconfig"

==> Summary

🍺  /opt/homebrew/Cellar/mysql-client/8.2.0: 128 files, 151.0MB

==> Caveats

==> mysql-client

mysql-client is keg-only, which means it was not symlinked into /opt/homebrew,

because it conflicts with mysql (which contains client libraries).


If you need to have mysql-client first in your PATH, run:

  echo 'export PATH="/opt/homebrew/opt/mysql-client/bin:$PATH"' >> ~/.zshrc


For compilers to find mysql-client you may need to set:

  export LDFLAGS="-L/opt/homebrew/opt/mysql-client/lib"

  export CPPFLAGS="-I/opt/homebrew/opt/mysql-client/include"


For pkg-config to find mysql-client you may need to set:

  export PKG_CONFIG_PATH="/opt/homebrew/opt/mysql-client/lib/pkgconfig"


Saturday, April 10, 2021

Flutter: UI Toolkit yang Membuat Hati Semakin Berdebar



Tulisan saya kali ini akan membahas tentang Flutter, sebuah UI Toolkit open source besutan Google yang membantu para developer untuk membuat aplikasi multiplatform (web, mobile, dan desktop) dan berjalan di sistem operasi yang beragam pula (Android, iOS, Windows, MacOS, Linux), dari codebase yang sama. Terdengar seru buat developer mobile yang suka dihadapkan dengan pertanyaan klien macam: "Bisa jalan di iOS ga?" (waddahe.. 😳). 

Tiga kunci yang ditawarkan oleh Flutter bagi para developer: Fast Development, Expressive & Flexible UI, dan Native Performance. Dengan fitur hot reload, developer cukup dimanjakan ketika harus berjibaku merevisi kode dan menampilkan pra-tayang (preview) dari aplikasi yang sedang dibangun. Developer tak perlu lagi pusing-pusing memulai aplikasi dari awal, jika hanya mengubah beberapa property dari tampilan UI seperti warna, layout dan hal kecil lainnya. I could say this Fast Development feature helps me so much. :) Ga perlu lagi ngabisin kopi ketika nungguin debug preview. ☕️😂

Widget-widget pada Flutter juga di-bundle dengan feel Material Design (Android) dan Cupertino ala iOS. Jadi ketika harus melakukan kompilasi di sistem operasi yang berbeda, tampilannya tidak terasa asing.

Awalnya Flutter memang ditujukan untuk membuat aplikasi Mobile. Namun sejak merilis versi 2 pada event Flutter Engage, Tim Flutter menyatakan Flutter for web sudah masuk versi stable, dan Flutter for Desktop akan menyusul kemudian sehingga menjadikan Flutter toolkit yang lengkap untuk membangun ekosistem aplikasi multiplatform baik di desktop yang berbasis windows, MacOS, maupun Linux khususnya Ubuntu. Di ranah mobile, Flutter memang sudah menyasar untuk dapat berjalan pada paltform Android dan iOS sejak awal kemunculannya.

Kesan saya pribadi setelah mempelajari Flutter adalah pertama, kemudahan adaptasi terhadap syntax-nya. Oh iya, Flutter menggunakan bahasa pemrograman Dart. Sebuah bahasa pemrograman berorientasi objek buatan Google yang didesain optimal untuk client development. Dengan syntax mirip bahasa C, Dart mendapat influence dari beberapa bahasa pemrograman lain seperti C, Java, hingga Kotlin. Selain itu, buat kamu yang suka iseng buat snippet code dan penasaran bagaimana tampilannya tapi ga bawa alat tempur pribadi, kamu bisa cek lewat dartpad.


Dengan berbagai kemudahan development di atas, Flutter tidak luput dari pro-kontra. Salah satu yang sering disebut adalah terbatasnya akses terhadap native API. Untuk mereka yang lebih banyak bergelut dengan low level API, Flutter mungkin bukan pilihan yang tepat. Bagaimana menurutmu?

Saturday, December 21, 2019

Test Bootable USB Disk

sudo qemu-system-x86_64 -machine accel=kvm:tcg -m 2048 -hda /dev/sdb

Di mana /dev/sdb adalah drive untuk USB

Saturday, November 30, 2019

Instalasi Portainer sebagai Dashboard Docker

Berjibaku dengan comman line di shell untuk menyeting docker container mungkin tidak terlalu masalah bagi mereka yang sudah terbiasa dan yang sudah mahir dalam dunia DevOps. Tapi untuk programmer dan pemula seperti saya, menghafal syntax buat setting environment sambil dikejar target kerja lumayan 'menyiksa', hehe. Solusinya ya portainer: dashboard yang mempermudah segala urusan yang berhubungan dengan Docker.

Install portainernya tetep pakai shell dulu yah..


$ docker volume create portainer_data 
$docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer 

Setelah itu, tinggal akses aja di browser: http://localhost:9000.

Tinggal pull deh image-image yang tersedia di docker. Portainer, teman development programmer dikejar target. Hehe.

Monday, October 7, 2019

Whitenoise untuk Static Files Manager di Django

Install Whitenoise

pip install whitenoise whitenoise[brotli]

Setup pada File settings.py

Tambahkan snippet berikut:

MIDDLEWARE_CLASSES = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
     # ... 
]

STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'

# ... 
STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'

Jalankan perintah Collectstatic

./manage.py collectstatic

Tambahkan Path di urls.py

Terakhir, jangan lupa untuk menambahkan path staticnya:

# ...
from django.conf import settings 
from django.conf.urls.static import static
# ...
]  + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

Saturday, October 5, 2019

Utilisasi Apache Server untuk Aplikasi Berbasis Web

Apache Server sudah menjadi bagian yang tidak bisa dipisahkan dari daur hidup aplikasi berbasis web. Bagi Web Developer, Apache Server adalah opsi yang selalu ada di antara daftar web server yang dapat dijadikan target deployment.

Salah satu cara cepat untuk deployment aplikasi berbasis web adalah dengan menjadikan Apache sebagai proxy ke aplikasi yang ingin di-deploy. Berikut beberapa snippet untuk dapat melakukannya.

Contoh NodeJs
  1. Install modul Apache mod_proxy, mod_proxy_http 
  2. buat Virtual host yang akan menjadi proxy ke port yang digunakan oleh nodejs
  3. Code Snippet-nya sbb:
    <virtualhost>
      ServerName sub.domain.com
      ServerAdmin webmaster@domain.com

      ProxyRequests off

      <proxy *>
        Order deny,allow
        Allow from all
      </proxy>

      <location />
        ProxyPass http://localhost:8100/
        ProxyPassReverse http://localhost:8100/
      </location>
    </virtualhost>

Contoh Python
  1. Jangan lupa untuk menginstall modul Apache mod_proxy, mod_proxy_http.
  2. Contoh di bawah ini adalah menggunakan proxy port 8000 di Apache server sementara port yang digunakan oleh aplikasi adalah 8080
    Listen 8000
    <VirtualHost *:8000>
        ServerAdmin user@domain.com

        ServerName app.domain.com
        ServerAlias app
        SSLEngine on


        # Jika menggunakan SSL certificate
        SSLCertificateFile /path/to/file.crt
        SSLCertificateKeyFile /path/to/file.id.key
        SSLCertificateChainFile /path/to/intermediate.crt
     
        ProxyPreserveHost On
        ProxyPass / http://127.0.0.1:8080/
        ProxyPassReverse / http://127.0.0.1:8080/

        LogLevel debug
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>

Thursday, May 12, 2016

Ketika Samba Rewel Password

Ubuntu 16.04 sudah di-release oleh canonical dengan codename XenialXerus sejak Oktober 2015. Tapi postingan kali ini tidak membahas mendalam tentang relase ini. Justru saya menemukan kendala untuk konektivitas ubuntu versi ini pada samba.

Ketika saya hendak menghubungkan ubuntu versi ini dengan printer yang ada di host windows, samba selalu meminta password. Nah untuk memperbaikinya kita dapat menambahkan script berikut pada file /etc/samba/smb.conf:


client use spnego = no 

Selamat mencoba. :)

Monday, April 4, 2016

Openshift, Deployment Using Git, Pelican

Just explored a couple of things today:
Openshift
  • Installing rhc, a ruby gem to communicate with openshift server
  • Add application (wordpress) in Openshift
Deployment Using Git on Your Own Server
  • Deployment any application couldn't be easier with git-push
  • For a enterprise application there should be a way to do repetitive task related with deployment process. Well, this is known with Continuous Integration: you code, you test, you deploy. Git-push help you deal with deployment automation.
Pelican
A static site generator powered by python. You might familir with jekyll in term of ruby. It's just those things.

Monday, December 14, 2015

Instalasi ViM dengan Plugin Vimplug


Langkah-langkah instalasi vim dengan beberapa plugin dengan menggunakan vimplug::
  1. Install vim sesuai dengan environment masing-masing.
  2. Install vimplug dengan mendownload source dari git menggunakan perintah:
    curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
        https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
  3. Update .vimrc. Contoh vimrc dapat di-download di sini.
  4. Pada vimrc di atas terdapat plugin YouCompleteMe yang baru dapat digunakan jika sudah diinstall terlebih dahulu. Pastikan sudah menginstall python, make, cmake, gcc. Kemudian masuk ke directory home di mana folder .vim berada kemudian masuk ke folder .vim/plugged/YouCompleteMe, lalu jalankan perintah:
    ./install.py
  5. Ketika selesai jalankan vim, kemudian ketikkan perintah:
    :PlugInstall
Vim dan beberapa plugin sudah dapat digunakan untuk development.

Git Pull Merge Strategy

Ketika Pull dari server terkadang adakalanya masing-masing user update file yang sama dan menyebabkan conflict. Strategy merge conflict ini pilihannya adalah: melihat perbedaannya dulu, ikut perubahan server atau mempertahankan yang kita ubah.

1. Melihat perbedaan dulu: cukup dengan perintah pull seperti biasa: git pull origin [dev], lalu edit file yang conflict kemudian add kembali, lalu commit.
2. Memilih perubahan yang sudah di-commit ke server: git pull -X theirs origin [dev]; atau
3. Mempertahankan yang kita buat: git pull -X ours origin [dev]

Tuesday, October 20, 2015

Update Table from Other Tables Values

Yes, you can update table from other table certain fields values. Of course you need at least one field related each other. Syntax please!! Here you go:

UPDATE Table SET Table.col1 = other_table.col1, Table.col2 = other_table.col2 
FROM Table INNER JOIN other_table ON Table.id = other_table.id

Monday, October 5, 2015

Fungsi untuk Mendapatkan Tanggal Saja pada SQL Server

Untuk mendapatkan tanggal saja sementara waktu tepat pada angka 0, kita dapat menggunakan fungsi berikut di SQL Server:

SELECT DATEADD(dd, DATEDIFF(dd,0,GETDATE()), 0)

atau:

SELECT CAST(CONVERT(CHAR(10), GETDATE(), 20) AS DATETIME)

Semoga bermanfaat :)

Sunday, October 4, 2015

Profiling PHP – MSSQL Execution Time

Membatasi waktu eksekusi script php dapat menjadi tolok ukur dalam membangun aplikasi web dari sistem yang efektif dan efisien. Namun terkadang kita dihadapkan dengan kondisi dimana data yang kita retrieve dari database server memerlukan waktu yang cukup panjang dan memaksa kita untuk memperpanjang waktu eksekusi baik script php maupun database query timeout agar tidak terjadi error. Setting keduanya dapat kita temukan pada file php.ini di web server kita.

Pada environment linux, file php.ini biasanya dapat kita temukan pada

Saturday, October 3, 2015

Perintah SSH di Router Mikrotik

Dengan mikrotik kita dengan mudah dapat mengatur login ssh kita langsung menuju mesin server yang kita inginkan, Akan tetapi, bagaimana jika network administrator belum mengatur rule-nya?

Selama kita dapat mengakses router tersebut baik lewat telnet maupun winbox bagi pengguna windows ternyata kita juga tetap dapat mengakses ssh pada lingkungan DMZ router tersebut. perintahnya cukup sederhana. Jika asumsinya server dengan ssh login memiliki IP 192.168.1.7 dengan nama user user1 maka dapat kita akses di terminal mikrotik dengan perintah:

$ /system ssh 192.168.1.7 user=user1

setelah memasukkan password sedianya kita dapat mengakses semua resource server tersebut. Semoga bermanfaat.

Friday, October 2, 2015

Query dari Stored Procedure Layaknya Tabel

Adakalanya kita membutuhkan data yang spesifik dari stored procedure yang sudah kita buat sebelumnya. Di SQL Server berikut salah satu tehniknya:

SELECT * FROM OPENROWSET('SQLOLEDB','NAMA_SERVER';'USERNAME';'PASSWORD','EXEC DBNAME..P_PROCEDURE ''PARAM1'', ''PARAM2''') AS A

Keep doing creative. :)

Thursday, October 1, 2015

Connecting to MSSQL Server from Linux Web Server


It sometime sounds weird to get Linux web server connected with Mi***soft SQL Server database. But trust me, sometime you really need it badly like I do.

Let me show you these steps:

  • Prepare yourself the machine with apache web server installed on it. And of course you won’t miss PHP module. 
  • And then here you go:

     apt-get install libsybdb5 freetds-common php5-sybase 
     service apache2 restart

  • Check with phpinfo() function. 
Good luck!

Wednesday, September 30, 2015

Koneksi Database DB2 IBM iSeries di Linux



Topik kali ini tentang koneksi database dari Linux ke database DB2 yang ada di server iSeries AS/400. Berawal dari kebutuhan kantor untuk dapat mengakses database DB2 yang ada di environment AS/400 server, saya coba membuat koneksinya dengan unixODBC. Untuk itu kita harus menginstalnya terlebih dahulu.

Pada linux berbasis Debian berikut perintahnya:

$ sudo apt-get install unixodbc

Kemudian kita butuh driver databasenya. untuk hal ini kita bisa menginstall iseriesaccess dengan

Monday, September 28, 2015

A New Startup, Reboot Time :)

Finally, I decided to have my blog moved to its new home. I think it's easier to maintain such dynamic activities to decent place it belongs to.

Happy reading. :)