Ketika bekerja dalam tim, atau dengan tim, tempat penyimpanan data menjadi masalah. Si A menyimpan data di "download", si B di "my document", dan si C di "Files". Untuk menyamakan tempat penyimpanan data di komputer, saya merekomendasikan hal berikut.
Komputer dengan satu harddisk (SSD/HDD)
Untuk komputer dengan satu hardisk, tempat penyimpanan data terbaik adalah di "home", atau "/home/$USER/data", dimana $USER adalah nama user, misal "bagus" (sehingga menjadi "/home/bagus/data"). Di Linux, kita hanya butuh mengetik "cd" untuk "pulang ke rumah". Untuk memanggil path "data", siapapun usernya, dalam python, kita bisa menggunakan Path dari pathlib berikut.
from pathlib import Path
data = Path.home() / "data"
Oya, di era sekarang ini, kita tidak perlu membuat partisi tersendiri untuk data. Beda dengan zaman saya kuliah dulu yang perlu mempartisi satu HDD menjadi beberapa drive agar ketika drive satu rusak, drive lainnya masih bisa digunakan.
Komputer dengan multi harddisk
Untuk komputer dengan multi harddisk, tempat penyimpanan data yang saya rekomendasikan adalah di root, yakni "/data". Siapapun usernya, pathnya pasti akan sama dalam hal ini.
Pro-kontra:
Kenapa satu harddisk di "home" dan multi-hardisk di "/data"? Sebetulnya "/data" lebih universal karena tidak bergantung "User", namun karena lokasinya di "/" (root), menurut saya hal ini rentan masalah. Misalnya jika sistem korup atau clash, biasanya data di bawah root akan terkena juga. Alasan kedua karena sekuriti/akses terhadap root. Home bisanya lebih terisolasi.
Akhirnya, ada platform offline dan online dalam satu portal. Dan platform itu ternyata sudah ada sejak lama. Namanya Standard Notes. Bisa diinstal via snap dengan perintah berikut di Ubuntu.
sudo snap install standard-notes
Saya suka menulis blog, baik itu di blogger, wordpress, medium, atau tumblr. Masalahnya, sejauh pengetahuan saya saat itu, belum ada platform digital yang bisa berlaku baik untuk offline dan online. Misalnya, saat saya punya ide, saya menuliskannya di editor, word processor, atau note taking app. Kemudian saat saya ingin mempublikasikannya, saya salin tulisan offline tadi ke platform blog yang bersangkutan, misalnya Blogger. Sampai saya menemukan platform/aplikasi Standard Notes yang menyatu dengan listed.to.
Dengan platfom ini saya bisa menulis blog on-the-go secara luring, kemudian mempublikasikannya dari perangkat tersebut tanpa harus menyalin dan menempelnya ke internet. Cukup sekali-dua kali klik. Bagi anda yang belum tahu caranya, berikut cara publikasi blog lewat Standard Notes and Listed (www.listed.to).
1. Buka Stantard Notes app atau web app 2. Klik ikon Preferences in sisi kanan bawah 3. Buka seksi Listed 4. Pilih Create New Author
Untuk publikasi dari Standard Notes ke Listed (lihat gambar di bawah). 1. Klik kanan judul note yang akan dipublish 2. Pilih "Listed action" kemudian pilih "Publih to Blog"
Voilla, sekarang catatan datam Standard Notes tersebut telah terpublish dalam Listed.to.
Karena kemudahan itu, besar kemungkinan saya akan mengeblog di Listed. Blog di blogspot ini mungkin akan dormant, wallahua'lam. Saya belum tahu pastinya, mungkin topik-topik professional akan saya taruh disini, catatan harian di Listed, dan quotes di Tumblr.
Dengan demikian, Standard Noted menjadi otak ketiga saya setelah simplenote.
Are you interested in visualizing live audio data from your microphone? Do you want to see the waveform of your voice or any other sound in real time? In this blog post, we’ll explore a Python script that utilizes Matplotlib to plot live microphone signals. This script is a useful tool for understanding and analyzing audio input in real time.
Before we begin, make sure you have sounddevice, Matplotlib, and NumPy installed. If not, you can install them using the following command:
pip install matplotlib numpy sounddevice
Now, let’s dive into the code and see how it works.
The Code
#!/usr/bin/env python3"""Plot the live microphone signal(s) with matplotlib.Matplotlib and NumPy have to be installed."""import argparseimport queueimport sysfrom matplotlib.animation import FuncAnimationimport matplotlib.pyplot as pltimport numpy as npimport sounddevice as sd
The script starts with the usual shebang (#!/usr/bin/env python3) and a brief docstring explaining the purpose of the code. It also imports the necessary modules: argparse, queue, sys, FuncAnimation from matplotlib.animation, plt (alias for matplotlib.pyplot), numpy, and sounddevice.
Next, the code defines two helper functions and two main functions.
def int_or_str(text):"""Helper function for argument parsing."""try:returnint(text)exceptValueError:return textdef audio_callback(indata, frames, time, status):"""This is called (from a separate thread) for each audio block."""if status:print(status, file=sys.stderr)# Fancy indexing with mapping creates a (necessary!) copy: q.put(indata[::args.downsample, mapping])
The int_or_str function is a helper used for parsing command-line arguments. It tries to convert the input text to an integer and returns it if successful; otherwise, it returns the input text as it is.
The audio_callback function is called for each audio block received from the microphone. It receives indata (the audio data), frames (the number of frames), time (the timestamp of the audio data), and status (the status of the audio stream). It prints any status messages to the standard error and puts a copy of the audio data (filtered using downsampling and channel mapping) into a queue (q) for processing later.
def update_plot(frame):"""This is called by matplotlib for each plot update. Typically, audio callbacks happen more frequently than plot updates, therefore the queue tends to contain multiple blocks of audio data. """global plotdatawhileTrue:try: data = q.get_nowait()except queue.Empty:break shift =len(data) plotdata = np.roll(plotdata, -shift, axis=0) plotdata[-shift:, :] = datafor column, line inenumerate(lines): line.set_ydata(plotdata[:, column])return lines
The update_plot function is called by Matplotlib for each plot update. It retrieves audio data from the queue (q) and shifts the existing data to accommodate the new audio block. The function then updates the y-data of the lines on the plot with the new audio data.
if__name__=="__main__":# ... (continued in the next code block)
The script uses the standard Python if __name__ == "__main__": guard to ensure that the following code is only executed when the script is run directly, not when it’s imported as a module.
parser = argparse.ArgumentParser(add_help=False) parser.add_argument('-l', '--list-devices', action='store_true',help='show list of audio devices and exit') args, remaining = parser.parse_known_args()if args.list_devices:print(sd.query_devices()) parser.exit(0)
The code sets up an argument parser with argparse to handle command-line arguments. It allows the user to list available audio devices and exit the program without running the main functionality. If the user specifies the --list-devices flag, the script will print a list of audio devices using sd.query_devices() and then exit.
parser = argparse.ArgumentParser( description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter, parents=[parser]) parser.add_argument('channels', type=int, default=[1], nargs='*', metavar='CHANNEL',help='input channels to plot (default: the first)') parser.add_argument('-d', '--device', type=int_or_str,help='input device (numeric ID or substring)') parser.add_argument('-w', '--window', type=float, default=200, metavar='DURATION',help='visible time slot (default: %(default)s ms)') parser.add_argument('-i', '--interval', type=float, default=30,help='minimum time between plot updates (default: %(default)s ms)') parser.add_argument('-b', '--blocksize', type=int, help='block size (in samples)') parser.add_argument('-sr', '--samplerate', type=float, default=16000, help='sampling rate of audio device') parser.add_argument('-n', '--downsample', type=int, default=1, metavar='N',help='No downsample (default: %(default)s)') args = parser.parse_args(remaining)
The script creates another argument parser, this time with a description based on the script’s docstring. It defines several command-line arguments:
channels: The channels to plot. If not specified, it will default to the first channel.
device: The input audio device to use. It can be specified either by a numeric ID or a substring of the device name.
window: The visible time slot in milliseconds. This controls how much of the audio history is displayed on the plot.
interval: The minimum time between plot updates in milliseconds.
blocksize: The block size (number of samples) for audio processing. If not specified, the default block size of the audio stream will be used.
samplerate: The sampling rate of the audio device. If not specified, it will default to 16000 Hz.
downsample: The factor by which the audio data is downsampled. By default, no downsampling is applied.
The parse_args method is called to parse the remaining command-line arguments (remaining) after handling the --list-devices option.
ifany(c <1for c in args.channels): parser.error('argument CHANNEL: must be >= 1') mapping = [c -1for c in args.channels] # Channel numbers start with 1 q = queue.Queue()
The code checks if any of the specified channels are less than 1. If so, it raises an error with an appropriate message. It then creates a mapping list for the channel indices, as the channel numbers in args.channels start from 1.
Full code is listed below. Actually, it is based on an example from sounddevice documentation [1].
#!/usr/bin/env python3
"""Plot the live microphone signal(s) with matplotlib.
Matplotlib and NumPy have to be installed.
"""
import argparse
import queue
import sys
from matplotlib.animation import FuncAnimation
import matplotlib.pyplot as plt
import numpy as np
import sounddevice as sd
def int_or_str(text):
"""Helper function for argument parsing."""
try:
return int(text)
except ValueError:
return text
def audio_callback(indata, frames, time, status):
"""This is called (from a separate thread) for each audio block."""
if status:
print(status, file=sys.stderr)
# Fancy indexing with mapping creates a (necessary!) copy:
q.put(indata[::args.downsample, mapping])
def update_plot(frame):
"""This is called by matplotlib for each plot update.
Typically, audio callbacks happen more frequently than plot updates,
therefore the queue tends to contain multiple blocks of audio data.
"""
global plotdata
while True:
try:
data = q.get_nowait()
except queue.Empty:
break
shift = len(data)
plotdata = np.roll(plotdata, -shift, axis=0)
plotdata[-shift:, :] = data
for column, line in enumerate(lines):
line.set_ydata(plotdata[:, column])
return lines
if __name__ == "__main__":
parser = argparse.ArgumentParser(add_help=False)
parser.add_argument(
'-l', '--list-devices', action='store_true',
help='show list of audio devices and exit')
args, remaining = parser.parse_known_args()
if args.list_devices:
print(sd.query_devices())
parser.exit(0)
parser = argparse.ArgumentParser(
description=__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter,
parents=[parser])
parser.add_argument(
'channels', type=int, default=[1], nargs='*', metavar='CHANNEL',
help='input channels to plot (default: the first)')
parser.add_argument(
'-d', '--device', type=int_or_str,
help='input device (numeric ID or substring)')
parser.add_argument(
'-w', '--window', type=float, default=200, metavar='DURATION',
help='visible time slot (default: %(default)s ms)')
parser.add_argument(
'-i', '--interval', type=float, default=30,
help='minimum time between plot updates (default: %(default)s ms)')
parser.add_argument(
'-b', '--blocksize', type=int, help='block size (in samples)')
parser.add_argument(
'-sr', '--samplerate', type=float, default=16000, help='sampling rate of audio device')
parser.add_argument(
'-n', '--downsample', type=int, default=1, metavar='N',
help='No downsample (default: %(default)s)')
args = parser.parse_args(remaining)
if any(c < 1 for c in args.channels):
parser.error('argument CHANNEL: must be >= 1')
mapping = [c - 1 for c in args.channels] # Channel numbers start with 1
q = queue.Queue()
try:
if args.samplerate is None:
device_info = sd.query_devices(args.device, 'input')
args.samplerate = device_info['default_samplerate']
length = int(args.window * args.samplerate / (1000 * args.downsample))
plotdata = np.zeros((length, len(args.channels)))
fig, ax = plt.subplots()
lines = ax.plot(plotdata)
if len(args.channels) > 1:
ax.legend([f'channel {c}' for c in args.channels],
loc='lower left', ncol=len(args.channels))
ax.axis((0, len(plotdata), -1, 1))
ax.set_yticks([0])
ax.yaxis.grid(True)
ax.tick_params(bottom=False, top=False, labelbottom=False,
right=False, left=False, labelleft=False)
ax.text(0.01, 0.99, f'Sample rate: {args.samplerate/args.downsample} Hz', transform=ax.transAxes, va='top', ha='left')
fig.tight_layout(pad=0)
stream = sd.InputStream(
device=args.device, channels=max(args.channels),
samplerate=args.samplerate, callback=audio_callback)
ani = FuncAnimation(fig, update_plot, interval=args.interval, blit=True)
with stream:
plt.show()
except Exception as e:
parser.exit(type(e).__name__ + ': ' + str(e))
Save it as sd_plot_input.py (or whatever name.py) and run it with the following commands. See the video above for the sample output.
pc060066:~$ mkdir test
pc060066:~$ cd test
pc060066:test$ ls
pc060066:test$ touch test{1..5}.txt
pc060066:test$ ls
test1.txt test2.txt test3.txt test4.txt test5.txt
pc060066:test$ touch readme.md
pc060066:test$ ls
readme.md test1.txt test2.txt test3.txt test4.txt test5.txt
pc060066:test$ find . -name '*.txt'
./test1.txt
./test3.txt
./test2.txt
./test5.txt
./test4.txt
pc060066:test$ find . -name '*.txt' -delete
pc060066:test$ ls *.txt
ls: cannot access '*.txt': No such file or directory
Jangan lupa single quote diantara ekstensi ('*.txt'); untuk ekstensi lainnya tanda quote ini tidak perlu. Contohnya *.wav. Kita juga bisa mencari (dan menghapus) file ekstensi tertentu dengan nama tertentu. Contohnya menemukan (dan menghapus) file dengan nama berakhiran *_cd16k.wav.
Jadi tanda "-" untuk kurang dari dan "+" untuk lebih dari ukuran file yang dikehendaki. Tidak ada tanda maka hasilnya pada rentang nilai tersebut. Misal 10c untuk 10 bytes, 10k untuk 10 kilobytes, termasuk 10001 bytes sampai dengan 10999 bytes.
Bedakan dengan perintah sebelumnya untuk file, untuk direktori kita perlu argumen "-type d".
Menemukan dan menghapus kecuali
Pola: find [nama-direktori] not -name [kecuali] -delete
Contoh:
find . not -name "*_mono.wav" -delete
Argumen "not" bisa diganti dengan tanda seru "!" agar lebih singkat. Untuk folder yangt tidak kosong (directory is not empty), kita perlu menggunakan "rm -fr" sebagai pengganti argumen "-delete".
This time, I can't install homebrew in (AIST) cluster as I previously did in JAIST cluster. Here are steps to documents how to install SoX, one of the most important library in sound processing, locally in cluster. I tried these steps in abci.ai.
# download sox package, in this case
wget https://nchc.dl.sourceforge.net/project/sox/sox/14.4.2/sox-14.4.2.tar.gz
# extract sox package
tar xvfz sox-14.4.2.tar.gz
# change to extracted sox directory
cd sox-14.4.2
# configure in local directory, I used $HOME
./configure --prefix=$HOME
# make
make
# make install
make install
Then check it by its version
[user13432@es2 ~]$ sox --version
sox: SoX v14.4.2
You may also need to update $PATH to make it works in your enviroment.
Ini adalah catatan saya saat mencoba Kaldi (speech recognition toolkit) pada Ubuntu 18.04. Spesifikasi PC yang saya gunakan adalah CPU i9-7900X dan GPU GTX 1060. Hasil percobaan ini membuahkan satu paper yang saya submit pada ASJ spring meeting 2019.
Instalasi
Instalasi kaldi adalah proses pertama, dan bisa jadi, tersulit. Jika anda "SUCCESS" menginstall Kaldi, proses selanjutnya akan mudah. Jika tidak, akan terhenti. Berikut adalah dasar alur kerja setelah meng-clone Kaldi.
Di zaman serba canggih ini, kita tidak harus memiliki piano untuk bisa bermain piano. Cukup dengan menggunakan laptop dan keyboard laptop-pun bisa dijadikan tuts piano. Begini caranya.
Instalasi
Saya menggunakan Ubuntu 16.04 untuk instalasi aplikasi piano ini. Anda bisa juga menggunakan OS lainnya. Aplikasi yang akan kita gunakan/install adalah vmpk (virtual midi piano keyboard). Untuk menginstallnya cukup mudah,
sudo apt install vmpk
Perintah tersebut juga akan menginstall qsynth, yang akan menginterface (menghubungkan) vmpk dengn sound output Ubuntu (vmpk tidak menghasilkan suara, sehingga perlu interface untuk menghasilkan suara).
Bahasa pemrograman python sedang boooming, menurut IEEE programming language rank, python menempati urutan pertama. Setelah membuat tutorial singkat, learning python: the hardway, saya jarang membukanya dan menggunakannya. Untuk memaksa hal tersebut, saya membuat tutorial lagi, yang saya sadur dari software carpentry. Kali ini saya akan mencatat tentang penggunaan `virtualenv`, module python yang digunakan untuk mengisolasi environment, seperti menggunakan modul versi tertentu dan setup tertentu. Hal ini sangat penting karena beberapa kode yang dibuat hanya berjalan pada versi yang sama, bukan versi di atasnya atau di bawahnya, misalnya deep learning untuk klasifikasi genre musik ini. Virtualenv ini sangat mirip dengan `modulefile` pada HPC (high performance computing).
Instalasi
Ada dua cara yang saya rekomendasikan untuk menginstall virtualenv, cara pertama dengan apt(-get), cara kedua dengan pip. Saya lebih merekomendasikan cara kedua.
Jika memakai cara pertama (apt untuk ubuntu, apt-get untuk debian-based)
sudo apt install virtualenv
Cara kedua (lebih direkomendasikan),
sudo -H pip install virtualenv
Pip adalah `python installing packages`, karena kita sedang menggunakan python, karena itulah saya lebih merekomendasikan cara kedua. Argument -H artinya agar installasi di-set ke user dari Home (alaiu, as long as i understood). Kemudian untuk mengecek apakah sudah terinstal, seperti biasa, cek dengan argumen --version.
virtualenv --version
Membuat virtualev
Untuk membuat python virtualennv, caranya cukup mudah sbb:
Denga perintah itu virtualenv dengan nama `nama_vitual_python` telah dibuat dan diaktivas dengan perintah berikutnya yakni `source activate`. Setelah perintah itu dijalankan, maka kita sudah berada pada python virtual environment dimana kita bisa menginstall dan menggunakan modul/package python dengan versi selain versi modul yang terinstall di komputer. Contohnya sebagai berikut,
Sebagai kebalikan perintah `source activate`, kita bisa menggunakan perintah `deactivate` saja tanpa argumen untuk menon-aktifkan virtualenv python dan kembali ke environment python secara umum di PC kita.
deactivate
Integrasi dengan Jupyter notebook
Dengan Jupyter notebook, pemorgraman python menjadi lebih interaktif seperti Matlab. Kita bisa melihat variabel, mengganti parameter, dan megedit baris tertentu saja tanpa menjalankan keseluruhan program. Seperti halnya alasan kenapa kita menggunakan virtualenv: yakni kita hanya ingin menggunakan paket python versi tertentu saja pada project/direktori tertentu saja, begitu juga pada Jupyter notebook. Alih-alih menggunakan python2 atau python3 sebagai kernel jupyter, kita bisa membuat custom kernel python sendiri dengan menginstall ipykernel dalam virtualenv.
Perhatikan bahwa string sebelum tanda dolar $ bukan merupakan perintah. Singkatnya, baris kedua diatas akan menginstall paket ipykernel pada environment python saat ini, kemudian baris ketiga mengaktifkan paket (kernel) tersebut pada jupyter. Terakhir kita buka jupyter, dan disitu terdapat kernel baru: nama_virtual_python. Selamat mencoba!
Update:
Pada Ubuntu 16.04, by default perintah `pip` akan mengeksekusi pip3 (python3), bukan pip2 (python2), jika virtualenv sudah terinstall dan ada ketika di jalankan keluar "using base prefix '/usr' ", maka tambahkan opsi `--python=python2" saat menjakankan virtualenv sebagai berikut:
virtualenv --python=python2 nama_virtual_python
Update 2018/11/12
Untuk python3, gunakan venv daripada virtualenv. Lebih lengkapnya silahkan ikuti panduannya disini.
Tulisan ini adalah kelanjutan dari tulisan sebelumnya tentang bekerja dalam tim dengan Git disini.
By default, git tidak memiliki fitur git undo karena sebenarnya fitur utama dari git adalah kemampuannya untuk meng-undo secara tak terbatas. Cara meng-undo-nya bergantung pada treatment apa yang sudah anda lakukan: mengundo commit, atau kembali pada versi sebelumnya (misal: karena anda tidak puas pada versi sekarang). Berikut caranya.
Mampu menggunakan perintah dasar pada shell Linux merupakan suatu skill dasar yang harus dimiliki bagi mereka yang ingin menjadi programmer, sysAdmin dan, bahkan, (data) scientist. Shell merupakan jendela ke bahasa pemrograman lainnya seperti python, perl, awk, c/c++. Menguasai shell artinya anda bisa memadukan antara bahasa pemrograman karena shell saat ini dijadikan glue (perekat) antar bahasa pemrograman yang saat ini tidak bisa berdiri sendiri-sendiri. Contoh nyata penggunaan shell adalah pada riset speech synthesis, speech recognition dan data science. Dan hampir semua bidang yang menggunakan komputasi memakai shell pada systemnya. Shell pada Linux dapat digunakan melalui (gnome) terminal, buka dengan Ctrl + Alt + T, dan perintah dasarnya adalah sebagai berikut:
nama-perintah argumen
nama-perintah adalah nama perintah yang digunakan, misal perintah yang akan dibahas dibawah: ls, cp, mkdir dan mv. Sedangkan argumen adalah parameter, argumen atau input dari nama-perintah. Misal perintah "mkdir bagus" akan membuat direktori (mkdir, make directory) dengan nama "bagus" dalam direktori saat ini (current directory).
A post shared by Bagus Tris Atmaja (@bagustris) on
0. <tab>
Tab adalah temanmu, teman terbaikmu! Tombol tab berfungsi sebagai code completion atau pun path dan filename completion. Mulailah dengan mengetik perintah nomor satu (ls), ketik l den tekan tab. Ketil ls (spasi) dan tekan (tab). Ketil " ls Do (tab) ". Dan seterusnya. Tombol (tab) akan menghemat waktu anda, ton of times.
1. ls
ls digunakan untuk me-list file. Berikut contohnya:
ls /usr/bin
# melist secara detail
ls -l
# menampilkan dalam format "human readable" ukuran file
ls -lh
# menampilkan dalam urutan waktu secara detail
ls -lt
# menampilkan dalam urutan waktu secara detail list terbalik (reverse)
ls -ltr
# menghitung total file dalam direktori,wc word count/untuk menghitung kata,
# wc -l untuk menghitung jumlah baris, "|" adalah pipe
ls /usr/bin | wc -l
# menampilkan argumen apa saja yang dimiliki ls
ls --help
Pointer pada bahasa pemrograman C merupakan object yang menunjuk alamat dari sesuatu yang ditunjuk. Berbeda dengan variabel biasa, jika variabel biasa memuat nilai dari variabel tersebut (misal int a=5), maka pointer memuat nilai yang ditunjuk dari variabel berupa pointer tersebut.
Pointer merupakan kekuatan utama dari bahasa pemrograman C/C++ yang jarang dimiliki bahasa pemrograman lainnya. Dengan pointer kita bisa mengalokasikan memory secara dinamik dan meningkatkan performansi program khususnya untuk operasi yang berulang seperti akses nilai dari tabel, data string, dll. Pointer juga menghemat beban komputasi, yakni dengan me-reference/dereference (menginisiasi dan menghancurkan) suatu pointer daripada mengcopy/paste nilai suatu variabel.
Pointer dituliskan dengan menambahkan tanda bintang sebelum nama variabel dan setelah tipe variabel, misal: int * a; int* a; atau int *a. Referensi (address of, alamat dari) ditunjukkan dengan tanda ampersand (&), misal: &a. Penulisan pointer yang lebih disukai adalah int* a (bintang menyatu dengan tipe pointer).
Contoh 1: Pointer yang salah
Contoh pointer yang salah namun sangat berguna untuk memahami pointer adalah sebagai berikut.
Definisi
Saya sangat menyukai wget. Ketika saya stuck dengan firefox dan chromium karena keduanya semakin lama semakin berat, biasanya saya berpindah ke konsole dan mendownload semua yang saya inginkan dengan wget. Wget merupakan no-interactive network downloader yang berjalan di terminal Unix. Wget mengambil file dari web (web-get, maybe) dengan protokol http, https dan ftp. Dinamakan non-interaktif karena bisa berjalan dalam proses 'background', artinya user tidak perlu terus menerus login, proses download tetap berjalan, dan bisa mem-pause atau men-start proses download. Berikut adalah tampilan wget ketika saya mendownload suatu file dari internet.
Ada dua jenis tipe disk ketika kita menginstall OS melalui virtualiasasi, yakni dinamik dan fix. Jika kita menggunakan tipe pertama, ukuran file dalam OS di VirtualBox bisa fleksibel. Kekurangannya, tipe ini akan menyebabkan kinerja OS menjadi lambat (ditambah 'lambat' karena berjalan di virtualiasasi). Sedangkat tipe kedua, tipe fix, ukuran disk ditentukan dari awal. Kekurangannya, ketika data bertambah dan ternyata ukuran disk tersebut tidak cukup, kita tidak bisa memperbesarnya (secara manual). Kelebihannya, tipe ini menghasilkan kinerja OS yang cepat meski berjalan lewat virtualisasi.
Gambar 1. Setting VirtualBox (Storage) dimana file ISO gparted live akan di-attach.
Disk tipe dinamik bukan berarti bisa 'shrink' atau membesar otomatis begitu saja, namun tetap diperlukan 'cara' untuk memperbesar ukuran disknya.
Jika anda memilih tipe pertama saat membuat OS virtual di Virtual Box, maka tipe disk anda akan berekstensi .vdi. Jika tipe yang dipilih adalah tipe fix kedua, ekstensinya adalah .vmdk. Keduanya bisa diperbesar (resize) ukuran disknya, berikut adalah caranya.
CAUTION: back-up file .vdi (copy-paste) sebelum memperbesar ukuran disk dengan cara dibawah ini agar jika terjadi hal-hal yang tidak diinginkan dapat di-recovery lagi dengan mudah.
Ketika saya membeli laptop, biasanya hanya dua parameter yang saya perhatikan: processor dan battery. Keduanya menyangkut produktivitas saya dalam bekerja. Setelah membeli biasanya saya tidak begitu saja percaya pada default setting Laptop tersebut, baik yang ber-OS Windows, Linux atau MacOS. Namun optimasi hanya bisa saya lakukan pada laptop berbasis Linux, khususnya Ubuntu karena dua lainnya sangat susah untuk dioprek (Closed source). Langkah-langkah berikut adalah cara untuk menghemat daya, mereduksi panas dan meningkatkan perfomansi Laptop berbasis Ubuntu.
Install Thermald
sudo apt install thermald
Install lm-sensors
sudo apt install lm-sensors
Install fancontrol (atau macfanctld)
# Untuk fancontrol
$ sudo apt install fancontrol
# untuk macfanctld
$ sudo apt install macfanctld
Sistem operasi Ubuntu mendukung sistem tata suara bawaan dari laptop. By default, perangkat lunak preinstalled Ubuntu mampu menjalankan suara output dan input (recording). Output dari laptop speaker (stereo) dan recording (mono) dari built-in microphone. Secara umum sistem audio pada sistem operasi berbasis Linux terdiri atas beberapa komponen di bawah ini.
Layer-layer Audio pada OS berbasis Linux, Sumber: tuxradar.com [1]
Default sound setting
Setelah menginstall Ubuntu, beberapa setting, apps dan konfigurasi dasar telah tersedia. Di pojok kanan atas, akan ada icon speaker yang bila di-klik menampilkan menu volume speaker, volume microphone, default music apps (Rhythmbox), dan sound setting. Jika ada diantara menu tersebut tidak muncul, artinya ada masalah dalam sound computer/laptop anda. Masalah yang biasanya muncul adalah, internal microphone tidak dikenali, sehingga tidak ada menu volume microphone.
Menu sound pada Ubuntu
Jika menu microphone tidak tersedia, langkah paling awal yang bisa dilakukan adalah menginsall pavucontrol (PulseAudio Volume Control). Caranya,
$ sudo apt install pavucontrol
Pada jendela pavu, anda bisa mengkonfigurasi sound/hardware yang terkoneksi dengan laptop, minimal built-in hardware dari laptop. Untuk masalah microphone, cek konfigurasi, pilih analog stereo duplex. Artinya, laptop kita bisa menerima input (mic) dan mengeluarkan output (speaker). Jika hanya ingin memfungsikan output saja, pilih analog stereo ouput. Dalam hal ini, built-in mic tidak akan bekerja.
Meski kampus saya berlangganan secara resmi Office365 versi profesional, tidak ada salahnya saya tetap menggunakan Libreoffice. Alasannya sederhana: simple, powerful dan opensource. Akan lebih mudah dan powerful bagi saya untuk menggunakan Libreoffice daripada menggunakan Ms Office 2016. Bagaimana bisa? Berikut contoh penggunaan Libreoffice untuk pembuatan laporan/buku serta manajemen sitasi dengan Mendeley plugin.
Templating
Saat membuat buku/laporan/dokumen, biasanya membiarkan setting-nya adalah default. Kemudian saya buat judul dengan style title dan bab-babnya dengan section 1, 2, dst. Jadi dalam satu menit saya sudah punya template dokumen. Untuk memudahkan, saya selalu mengaktifkan sidebar (View >> Sidebar). Contohnya adalah sbb.
Sidebar Libreoffice dengan menu navigation untuk memudahkan mapping halaman
Beberapa perbedaan untuk daftar isi, daftar table, daftar gambar dan daftar Index, adalah pada menu Insert >> Table of Contents or Index >> Table of Content, Index or Bibliography >> Pilih menu yang akan ditampilkan seperti gambar di bawah.
Membuat daftar isi
Untuk membuat daftar isi caranya sangat mudah seperti di atas. Namun terlebih dahulu, anda harus mengatur HEADING 1, HEADING 2 dan HEADING 3 (biasanya saya hanya sampai heading 3 saja), sebagai Bab, Sub-Bab, dan Sub Sub-Bab. Jika anda belum mengetahui cara men-set heading, caranya sangat mudah: Letakkan kursor pada frase yang anda ingin jadikan sebagai heading; pada drop down style pilih heading yang anda inginkan (Lihat gambar dibawah). Setelah itu anda dapat membuat menu daftar isi secara otomatis, Insert >> Table of Contents or Index >> Table of Content, Index or Bibliography.
Rsync adalah tool sinkronisasi terbaik. Dengan rsync anda tidak perlu copy-paste, tidak perlu tool back-up lain, hanya rsync saja. Begitu anda menguasainya, manajemen file terasa mudah.
Perintah pertama akan mengcopy file 'fileSumber' kedalam 'FolderTujuan', sedang perintah kedua akan mensinkronkan file-file didalam 'FolderSumber' kedalam 'FolderTujuan'. Jika tidak ada slash di argumen pertama ('FolderSumber') maka 'FolderSumber' akan dicopy (bukan hanya file-filenya, tapi foldernya) didalam 'FolderTujuan'. Jika ada slash ('FolderSumber/') maka yang dicopy hanya file-filenya saja (bukan foldernya). Opsi -avz adalah archieve, verbose dan compress artinya rsync dilakukan secara rekursif (isi folder), menampilkan informasi sinkronisasi dan mengkompress saat pengiriman.
Skenario 1: Anda punya dua direktori/folder/drive yang akan anda sinkron-kan, misal namanya adalah tes1 dan tes2. Di dalam tes1 ada beberapa file, sedang tes2 masih kosong. Simply speaking, anda ingin memback-up atau mengcopy paste isi file didalam folder tes1 ke dalam folder tes2.
Kondisi 0:
tes1
+--- file1
+--- file2
+--- file3
tes2
Perintah:
Buat folder dan file1..3 dalam folder tes1
$ cd /tmp
$ mkdir -p tes1 && cd $_
$ touch file{1..3}
$ mkdir ../tes2
Dengan perintah diatas skenario kondisi 0 tercapai, kita mempunyai tiga file dalam folder tes1 dan nol file dalam tes2. Sekarang saatnya memback-up atau copy paste dengan rsync,
On HPC cluster (high performance computing/supercomputer), it is often to have multiple version of the same software installed. When the user want to use the specific software which the certain library, changing environment variable like $PATH manually is tedious and sometime difficult, the is the common errors during running job in HPC. To solve the problem, corresponding shell script would have to be written for multiple languages. All of these explicit steps are error prone and difficult to maintain. It is also no simple upgrade path. One exist solution is by using modulefiles, a (Unix) tool for dynamic modification
of a user's environment.
Module Commands
Here are some module commands:
module avail: to check available modulefiles
module list: view current active modules
module purge: delete currently loaded modules
module load <package>: to load default module <package>
module load <package/version>: to load module <package> on specific version.
module unload <package>: unload the package
module show <package>: display command triggered by module load
module whatis <package>: display 1-line info about the module
So I already have Octave 3.8.1 in my machine, Ubuntu 14.04, with signal, control and audio package. I want to upgrade it to the newest one, Octave 4.0.0 which has GUI as default and some improvements. How to install Octave 4.0 on Trusty? Here is how, the defaults didn't works for me (actually it works but has some errors).
Octave 4.0.0 on Ubuntu 14.04 Trusty with GUI as default
Setelah berhasil membangun dan menginstall kluster komputer di VirtualBox, saatnya untuk mengetes kluster tersebut dengan komputasi parallel. Goal yang ingin kita tuju adalah membagi job komputasi (berupa command/script) pada masing-masing node yang sudah kita tambahkan pada master node agar komputar tersebut lebih cepat.
Pertama kita tambahkan user agar bisa login ke kluster dengan perintah useradd (login as root in master),
Perintah-perintah diatas akan menambahkan user (bagus2 dan bagus2), mengeset masing-masing password untuk user dan mensinkronkan user dari master ke nodes.