Monday, June 28, 2021

Resources for academic writing: word concordance

When I am writing an academic paper, for a journal, or a conference, I used several tools to find the most precise words. Among these, the following are the most I used ones.
Among those resources, the Mendeley is the most I used since it used the words in my field and can be used offline on my local PC. This technique is also intended to avoid the creation of jargon or our own words. Instead of creating "new words", it is better to follow the words already used by other researchers. Below is my search for the word "splitting" that leads to concord with "into".



Abstract Generated by Transformer
I tried Huggingface's Transformer once. Instead of generating word concordance, they complete my abstract given only one sentence.


Saturday, June 26, 2021

Ubuntu on Mac: Home, End, PgUp, PgDn

Here the equivalent keyboard shorctus for Ubuntu on Macbook (it also works for OSX).
Home: Fn + Left Arrow
End: Fn + Right Arrow
Page Up: Fn + Up Arrow
Page Down: Fn + Down Arrow
That's all. Tested on: MBP Mid 2012, Ubuntu 16.04.07.

Tuesday, June 22, 2021

Sympy: Menyelesaikan Persamaan Matrik

Sympy melakukan proses komputasi yang tidak bisa dilakukan oleh Numpy: simbolik. Misal kita punya persamaan berikut

$$2.10^{6}\left[\begin{array}{crr} 1 & -1 & 0 \\ -1 & 2 & -1 \\ 0 & -1 & 1 \end{array}\right]\left\{\begin{array}{l} 0 \\ u_{2} \\ u_{3} \end{array}\right\}=\left[\begin{array}{c} F_{1}+1500 \\ 9000 \\ 7500 \end{array}\right] $$
Dalam bentuk gambar, persamaan di atas dapat ditampilkan di bawah ini (rendering kode Latex/mathjax di atas kadang Luama....).
Untuk menyelesaikan persamaan di atas (u1=0), maka solusi dengan Sympy adalah seperti kode di bawah ini:
from sympy import *

# buat symbol
u2, u3, F1 = symbols('u2 u3 F1')

# matrik sebelah kiri (left-hand)
K = Matrix([[ 1, -1, 0], [-1, 2, -1], [0, -1, 1]]) 
Ke1 = 2e6*K
U = Matrix([0, u2, u3]).reshape(3,1)

# matrik sebelah kanan
F = Matrix([F1+1500, 9000, 7500])

# selesaikan: cari u2, u3, dan F1
sol = solve(Ke1*U-F, (u2, u3, F1))


Jika dijalankan, hasilnya adalah sebagai berikut.
print(sol)
{u2: 0.00825000000000000, u3: 0.0120000000000000, F1: -18000.0000000000}

Monday, June 21, 2021

Numpy: Broadcasting

Konsep python yang agak susah dipahami adalah operasi broadcasting. Operasi broadcasting merupakan "menyebar" pesan ke seluruh elemen matrik. Contoh sederhana, matrik c saya tambahkan dengan '5', maka semua elemen dalam matrik c akan ditambah dengan nilai 5. Operasi ini, sesuai konsep vektorisasi Numpy, akan jauh lebih cepat dari loop `for'. Syarat operasi broadcasting ini adalah setidaknya harus ada kompatibilitas antar aksisnya, bisa kolomnya, bisa barisnya, atau skalar. Misalnya matrik c  dengan ukuran (3, 3) bisa kita tambah dengan [1, 2, 3] tapi tidak dengan [1, 2, 3, 4].
>>> c = np.array([[ 5,  8, 11],
      [ 6,  9, 12],
      [ 7, 10, 13]])
>>> c +  [1, 2, 3]  # bisa juga dengan list langsung
array([[1,  5,  9],
      [ 2,  6, 10],
      [ 3,  7, 11]])
>>> c + np.array([1, 2, 3, 4])                
------------------------------------------
ValueError   Traceback (most recent call last)
< ipython-input-42-d334d3cf449e> in < module >
----> 1 c + np.array([1, 2, 3, 4])

ValueError: operands could not be broadcast together
with shapes (3,3) (4,)
Contoh lain adalah penjumlahan vektor kolom [1, 2, 3] dengan vektor baris [1, 2, 3]. Contoh ini menunjukkan betapa menariknya operasi broadcasting, kolom dijumlah dengan baris. Pada kolom pertama hasilnya menjadi [2, 3, 4], tiap elemen vektor kolom ditambah 1. Pada kolom 2 tiap elemen vektor kolom ditambah 2, dan pada elemen 3 tiap elemen vektor kolom ditambah dengan 3.
>>> np.array([1, 2, 3])[:, np.newaxis]+np.array([1, 2, 3])                                                                            
array([[2, 3, 4],
       [3, 4, 5],
       [4, 5, 6]])
Tulisan ini melengkapi tulisan ini.

Thursday, June 10, 2021

Membatasi Pen Tablet pada Satu Monitor

Skenario

Menggunakan dua atau lebih monitor menjadikan kita produktif, namun dengan menggunakan pen tablet (misal saya menggunakan Huion 950P) pada dua monitor sangat mengganggu. Pen tablet akan lari kesana kesini karena perbedaan ruang di pad yang kecil dan di dua monitor yang cukup besar. Hal ini berakibat kepada ketidaknyamanan ketika menulis dengan menggunakan aplikasi whitboard seperti xournal. Berikut adalah solusi membatasi pen tablet (khususnya gerakan stylus) hanya pada satu monitor saja di Ubuntu 20.04. 


Pilih monitor mana 

Perintah di terminal adalah
bagus@m049:tmp$ xrandr
Screen 0: minimum 320 x 200, current 3840 x 1080, maximum 16384 x 16384
HDMI-1 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 698mm x 393mm
   1920x1080     60.00*+  50.00    59.94  
   1920x1080i    60.00    50.00    59.94  
   1680x1050     59.88  
   1280x1024     75.02    60.02  
   1440x900      74.98    59.90  
   1280x960      60.00  
   1152x864      75.00  
   1280x720      60.00    50.00    59.94  
   1440x576      50.00  
   1024x768      75.03    70.07    60.00  
   832x624       74.55  
   800x600       75.00    60.32    56.25  
   720x576       50.00  
   720x480       60.00    59.94  
   640x480       75.00    66.67    60.00    59.94  
   720x400       70.08  
DP-1 connected primary 1920x1080+1920+0 (normal left inverted right x axis y axis) 598mm x 336mm
   1920x1080     60.00*+  74.97    50.00    59.94  
   1920x1080i    60.00    50.00    59.94  
   1600x1200     60.00  
   1680x1050     59.95  
   1280x1024     75.02    60.02  
   1440x900      74.98    59.89  
   1280x960      60.00  
   1152x864      75.00  
   1280x720      60.00    50.00    59.94  
   1024x768      75.03    60.00  
   832x624       74.55  
   800x600       75.00    60.32  
   720x576       50.00  
   720x480       60.00    59.94  
   640x480       75.00    60.00    59.94  
   720x400       70.08  
HDMI-2 disconnected (normal left inverted right x axis y axis)
Pada kasus di atas, saya memilih DP-1 sebagai monitor untuk pen stylus. Monitor ini menggunakan koneksi display port sehingga namanya DP-1. 

Pilih divais mana 

Perintah di terminal adalah
bagus@m049:tmp$ xinput
⎡ Virtual core pointer                    	id=2	[master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer              	id=4	[slave  pointer  (2)]
⎜   ↳ Lite-On Technology Corp. USB Multimedia Keyboard Consumer Control	id=11	[slave  pointer  (2)]
⎜   ↳ USB Optical Mouse                       	id=13	[slave  pointer  (2)]
⎜   ↳ Tablet Monitor stylus                   	id=15	[slave  pointer  (2)]
⎜   ↳ Tablet Monitor Dial pad                 	id=16	[slave  pointer  (2)]
⎜   ↳ Tablet Monitor Touch Strip pad          	id=17	[slave  pointer  (2)]
⎜   ↳ Tablet Monitor Pad pad                  	id=18	[slave  pointer  (2)]
⎣ Virtual core keyboard                   	id=3	[master keyboard (2)]
    ↳ Virtual core XTEST keyboard             	id=5	[slave  keyboard (3)]
    ↳ Power Button                            	id=6	[slave  keyboard (3)]
    ↳ Video Bus                               	id=7	[slave  keyboard (3)]
    ↳ Power Button                            	id=8	[slave  keyboard (3)]
    ↳ Sleep Button                            	id=9	[slave  keyboard (3)]
    ↳ Lite-On Technology Corp. USB Multimedia Keyboard	id=10	[slave  keyboard (3)]
    ↳ Lite-On Technology Corp. USB Multimedia Keyboard System Control	id=12	[slave  keyboard (3)]
    ↳ Lite-On Technology Corp. USB Multimedia Keyboard Consumer Control	id=14	[slave  keyboard (3)]
Output yang penting dari output perintah di atas adalah "id". Saya memilih id 15-18 karena itu adalah id pen tablet saya. 

Map ke satu monitor 

Langkah terakhir adalah mapping. Perintahnya adalah berikut
bagus@m049:ptxconf$ xinput map-to-output 15 DP-1
bagus@m049:ptxconf$ xinput map-to-output 16 DP-1
bagus@m049:ptxconf$ xinput map-to-output 17 DP-1
bagus@m049:ptxconf$ xinput map-to-output 18 DP-1
Selesai! Sekarang saya bisa dengan leluasa menggunakan stylus di satu monitor untuk keperluan kuliah online. Berikut contohnya!




Konfigurasi Tambahan dan Menambahkan pada start up application

Agar setting di atas tetap alias tidak berubah pada setiap kali reboot, peintah mapping perlu kita tambahkan pada start up application. Dari empat perintah mapping di atas, perintah mapping stylus merupakan yang utama dan itu saja yang sebenarnya perlu ditambahkan.
 
Buat file 950p.sh di direktori /home/namamu dan isi dengan teks berikut.
MONITOR="DP-1"
PAD_NAME='Tablet Monitor'
ID_STYLUS=$(xinput | grep "Tablet Monitor stylus" | cut -f 2 | cut -c 4-5)
xinput map-to-output $ID_STYLUS $MONITOR

# konfigurasi tambahan untuk Krita, Xournalpp
xsetwacom set "$PAD_NAME Pad pad" button 1 key Ctrl z # undo
xsetwacom set "$PAD_NAME Pad pad" button 2 key Ctrl y # redo
xsetwacom set "$PAD_NAME Pad pad" button 3 key Ctrl shift p # pen
xsetwacom set "$PAD_NAME Pad pad" button 8 key Ctrl shift e # eraser
xsetwacom set "$PAD_NAME Pad pad" button 9 key Ctrl shift h # highlight
xsetwacom set "$PAD_NAME Pad pad" button 10 key Ctrl 1 # shape recognizer
xsetwacom set "$PAD_NAME Pad pad" button 11 key Ctrl shift r # select rect.
xsetwacom set "$PAD_NAME Pad pad" button 12 key Ctrl d # new page after

 
Kemudian, tambahkan perintah pada startup application seperti berikut.
Startup application > Add > Command > huion950p.sh

Bonus

Agar ukuran papan tulis bisa penuh satu monitor, saya membuat 'page' custom di aplikasi whiteboard sesuai ukuran monitor saya yakni 27 inchi (598mm x 336mm). Ukuran tsb juga didapatkan dari output perintah xrandr. Untuk tingginya saya kurangi sedikit karena ada toolbar milik xournal. Sehingga,
width = 59 cm, dan
height = 26 cm.

Wednesday, June 09, 2021

Eight Steps to Structuring an Academic Paper

The following tips are my version of "11 steps to structuring a science paper". I revised it from 11 to 8 because of the following reasons.
  1. It makes sense to draft the topic (concretely a title) before starting to structuring the paper.
  2. After drafting a title, it is necessary to draft an abstract along with the keywords to plan what we want to write. These abstract and keywords will guide and give an overview of the overall content of the paper.
  3. I dropped the writing reference. It should be done automatically via BibTeX. Acknowledgment is not necessary unless your research receive funding or important helps from other researchers/agencies.
Here you are.


Note after finishing writing a compelling introduction, you didn't finish your paper yet. You need to revise it many times, mine usually about ten times. In revising, you should follow the order of your paper, from Title to Reference.


Reference: 
 [1] https://www.elsevier.com/connect/11-steps-to-structuring-a-science-paper-editors-will-take-seriously

Friday, June 04, 2021

Python: List Comprehension

Salah satu fitur di pemrograman Python yang saya suka dan sering pakai adalah list comprehension. Fitur ini menyederhanakan "for" loop dalam satu baris. Berikut contohnya.

Saya punya dua vektor A dan B. Saya ingin mencari dimana kemunculan vektor B dalam vektor A. 

a = np.array([1, 2, 3, 4, 5, 6])
b = np.array([2, 3, 4])
Dengan contoh di atas, jawaban atas pertanyaan saya adalah [1, 2, 3]; posisi/indeks dimana vektor B muncul di vektor A. Solusi pertama dengan "for" loop sebagai berikut:
import numpy as np
for i in b: 
    print(np.where(a == i)) 
Solusi kedua dengan List comprehension seperti berikut (baris kedua merupakan output).
In [26]: [np.where(a==x) for x in b]                                            
Out[26]: [(array([1]),), (array([2]),), (array([3]),)]
Cukup simpel dan intuitif.

Wednesday, June 02, 2021

Membuat Symbolic Link di Windows 10

Salah satu "kesalahan besar" penamaan foder atau direktori adalah membolehkan spasi pada penamaan folder atau direktori tersebut. Hal ini sangat menyulitkan ketika bekerja dengan folder lewat teks (CLI, command line interface). Sebagai contoh nyata, windows membuat direktori OneDrive 365 dengan format "OneDrive Nama Perusahaan". Untuk menghindari kesalahan ketika bekerja di terminal (solusi lainnya: selalu memakai tanda kutip untuk memanggil nama folder di terminal) caranya adalah membuat symbolic link antara dari folder yang memiliki spasi pada nama tadi. Caranya adalah sebagai berikut (lewat Cmd bukan PowerShell).
C:\Users\bagus>mklink /J onedriveAIST "OneDrive - 国立研究開発法人産業技術総合研究所"
Junction created for onedriveAIST <<===>> 'OneDrive - 国立研究開発法人産業技術総合研究所
Dengan membuat symbolic seperti ini (mklink /J destinasi sumber), kita bisa berpindah direktori secara leluasa, khususnya di WSL (Windows Subsystem for Linux).

Update
Perintah di atas sebenarnya sama dengan perintah bash softlink yakni `ln -s`. Jadi pembuatan symbolic link di atas juga bisa dilakukan di terminal WSL sebagai berikut.
ln -sf "OneDrive - 国立研究開発法人産業技術総合研究所" onedriveAIST
Related Posts Plugin for WordPress, Blogger...