Nugroho's blog.

Thursday, October 22, 2015

List Files and Folder in Certain Folder in Google Drive using Google App Script

 Here it is.

 I used getFolderById() to determine the folder I want to list the files and folders inside.  I used home as variable name of the folder

 home.getFiles() is used to gets a collection of all files in home.

 home.getFolders() is used to gets a collection of all folders in home.

I have list and row  as array or tuple or 'list' to accommodate the result. Maybe it's wasting time to have two variable, but I plan to write code to list 'files and folders inside subfolders' recursively. I know maybe it didn't even need that array variable, :). But just in case...

function listFilesNFolders(form) {
var list = [];
list.push(['tadaa...<br>']);
list.push(['heheh...']);
var row = [];
row.push('<br> Hello World!!! ');
list.push(row);


var home = DriveApp.getFolderById('0BxZS62a5NdNYUGxySmp2QW41OUU');
// Log the name of every file in the user's Drive.
var files = home.getFiles();
list.push('<br>Files:');
while (files.hasNext()) {
var file = files.next();
list.push('<br>-',file.getName());
//Logger.log(file.getName());
}
// Log the name of every folder in the user's Drive.
var folders = home.getFolders();
list.push('<br>Folders:');
while (folders.hasNext()) {
var folder = folders.next();
list.push('<br>-',folder.getName());
//Logger.log(folder.getName());
}


return list;
}

function doGet(e) {
return HtmlService.createHtmlOutputFromFile('form.html');
}


The Form

  <form id="myForm">
<input type="submit"
value="OK"
onclick="
this.value='Proses';
google.script.run.withSuccessHandler(fileUploaded).listFilesNFolders(this.parentNode);
return false;
"
>

</form>

<div id="output"></div>

<script>
function fileUploaded(status) {
document.getElementById('myForm').style.display = 'none';
document.getElementById('output').innerHTML = status;
}
</script>

<style>
input { display:block; margin: 20px; }
</style>

The Result


Hold on, back up!


 Google App Script is fun, :)

 Here's my simple hello world, :)

What I did is create "form", which actually have no form at all, just submit button to activate listFilesNFolders(form) function on script (Code.gs file)

The code will return output 'tadaa...', 'heheh...', and 'Hello World!!!'.

Notice the html formatting, :)



function listFilesNFolders(form) {
var list = [];
list.push(['tadaa...<br>']);
list.push(['heheh...']);
var row = [];
row.push('<br>Hello World!!! ');
list.push(row);


return list;
}

function doGet(e) {
return HtmlService.createHtmlOutputFromFile('form.html');
}

.
 <form id="myForm">
<input type="submit"
value="OK"
onclick="
this.value='Proses';
google.script.run.withSuccessHandler(fileUploaded).listFilesNFolders(this.parentNode);
return false;
"
>
</form>

.



Wednesday, October 21, 2015

#MelawanAsap


 Jika terus-terusan matahari tertutup asap hingga jadi berwarna orange atau malah tidak terlihat sama sekali, saya takut kalo tumbuhan tidak dapat berfotosintesis dengan sempurna dan tidak dapat menghasilkan oksigen yang optimal.

 Sesak karena asap, juga karena kurang oksigen.

 Eh, tunggu..., tumbuhan bukan tak maksimal berfotosintesis, tetapi tidak bisa lagi berfotosintesis, karena sudah jadi arang dan abu, :(

List All Files and Folders into Google Spreadsheet using Google App Script

 I updated my last code, so it will list all folders name too, in addition of files name.

 It will search the files and folders name in certain folder,

 get the name,

 the date it created,

 the size,

 the url address,

 thi file id,

 description,

 and the MIME type (except in folder, I hardcoded it by write string "folder")



 
function uploadFiles(form) {
try {
var dropbox = "Testing";
var folders = DriveApp.getFoldersByName(dropbox);
if (folders.hasNext()) {
var folder = folders.next();
} else {
var folder = DriveApp.createFolder(dropbox);
}
folders = folder.getFoldersByName(form.myNIM);
if(folders.hasNext()){
var anak = folders.next();
} else{
var anak = folder.createFolder(form.myNIM);
}
var blob = form.myFile;
var file = anak.createFile(blob);
file.setDescription("Uploaded by " + form.myName);
// listFilesAndFoldersInFolder(folder)
list_all_files_and_folders_inside_one_folder_without_subfolders()
return "File uploaded successfully " + file.getUrl();

} catch (error) {

return error.toString();
}

}

function list_all_files_and_folders_inside_one_folder_without_subfolders(){
var ss = SpreadsheetApp.openById("11AzGyCcWfvcE_mUltyjAx17wJDghOS-YH5e_zrHT-zc");
SpreadsheetApp.setActiveSpreadsheet(ss);
var sh = SpreadsheetApp.getActiveSheet();
sh.clear();
var folder = DriveApp.getFolderById('0BxZS62a5NdNYUGxySmp2QW41OUU'); // I change the folder ID here
var list = [];
//list.push(['Name','ID','Size']);
list.push(["Name", "Date", "Size", "URL", "Download", "Description", "MIME"]);

var files = folder.getFiles();
while (files.hasNext()){
file = files.next();
var row = []
//row.push(file.getName(),file.getId(),file.getSize());
row.push(file.getName(),
file.getDateCreated(),
file.getSize(),
file.getUrl(),
"https://docs.google.com/uc?export=download&confirm=no_antivirus&id=" + file.getId(),
file.getDescription(),file.getMimeType())

list.push(row);
}
var files = folder.getFolders();
while (files.hasNext()){
file = files.next();
var row = []
//row.push(file.getName(),file.getId(),file.getSize());
row.push(file.getName(),
file.getDateCreated(),
file.getSize(),
file.getUrl(),
"https://docs.google.com/uc?export=download&confirm=no_antivirus&id=" + file.getId(),
file.getDescription(),"folder")

list.push(row);
}

sh.getRange(1,1,list.length,list[0].length).setValues(list);

}

function doGet(e) {
return HtmlService.createHtmlOutputFromFile('form.html');
}



Working with Google Script

 I heard it's powerful,
 it could be integrated with Google Drive,
 so I decided to give it a try.

 Try to make a form Name, NIM, Offering, and a button to upload a file.

 Basically, it's super simple form.

 It will upload file to my Google Drive, place it in folder NIM (or create it if there's no folder match with NIM).

 As addition, I created spreadsheet manually and update its content, the list of files in the folders. (still got a trouble)
 
function uploadFiles(form) {

try {

var dropbox = "Testing";
var folders = DriveApp.getFoldersByName(dropbox);

if (folders.hasNext()) {
var folder = folders.next();
} else {
var folder = DriveApp.createFolder(dropbox);
}

folders = folder.getFoldersByName(form.myNIM);
if(folders.hasNext()){
var anak = folders.next();
} else{
var anak = folder.createFolder(form.myNIM);
}


var blob = form.myFile;
var file = anak.createFile(blob);
file.setDescription("Uploaded by " + form.myName);


listFilesInFolder(folder)


return "File uploaded successfully " + file.getUrl();

} catch (error) {

return error.toString();
}

}

function listFilesInFolder(folderName) {

//var ssNew = SpreadsheetApp.create("Rekap");
//https://drive.google.com/open?id=11AzGyCcWfvcE_mUltyjAx17wJDghOS-YH5e_zrHT-zc
//https://docs.google.com/spreadsheets/d/11AzGyCcWfvcE_mUltyjAx17wJDghOS-YH5e_zrHT-zc/edit#gid=0
//var ss = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/abc1234567/edit');
var ss = SpreadsheetApp.openById("11AzGyCcWfvcE_mUltyjAx17wJDghOS-YH5e_zrHT-zc");

SpreadsheetApp.setActiveSpreadsheet(ss);

var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();

/*
var myNewSheet = activeSpreadsheet.getSheetByName("Rekap");

if (myNewSheet != null) {
activeSpreadsheet.deleteSheet(myNewSheet);
}

myNewSheet = activeSpreadsheet.insertSheet();
myNewSheet.setName("Rekap");

*/
//0BxZS62a5NdNYUGxySmp2QW41OUU
//var folder = DriveApp.getFoldersByName(folderName).next();
var id = '0BxZS62a5NdNYUGxySmp2QW41OUU';
var folder = DriveApp.getFolderById(id);
var contents = folder.getFiles();

var file, data, sheet = SpreadsheetApp.getActiveSheet();
sheet.clear();

sheet.appendRow(["Name", "Date", "Size", "URL", "Download", "Description", "Type"]);
//sheet.appendRow(["Tadaa..."])
for (var i = 0; i < contents.length; i++) {

file = contents[i];

if (file.getFileType() == "SPREADSHEET") {
continue;
}

data = [
file.getName(),
file.getDateCreated(),
file.getSize(),
file.getUrl(),
"https://docs.google.com/uc?export=download&confirm=no_antivirus&id=" + file.getId(),
file.getDescription(),
file.getFileType().toString()
];

sheet.appendRow(data);

}

};

function doGet(e) {
return HtmlService.createHtmlOutputFromFile('form.html');
}



The Forms
< form id="myForm">
Nama <input type="text" name="myName" placeholder="Nama">
NIM <input type="text" name="myNIM" placeholder="NIM">
Offering <input type="text" name="myOff" placeholder="Offering">

Upload File<input type="file" name="myFile">
<input type="submit" value="Upload File"
onclick="this.value='Uploading..';
google.script.run.withSuccessHandler(fileUploaded)
.uploadFiles(this.parentNode);
return false;">

</form>

<div id="output"></div>

<script>
function fileUploaded(status) {
document.getElementById('myForm').style.display = 'none';
document.getElementById('output').innerHTML = status;
}
</script>

<style>
input { display:block; margin: 20px; }
</style>



.

DriveApp don't have getFileType() so I used file.getMimeType() instead, :)

 

function list_all_files_inside_one_folder_without_subfolders(){
var ss = SpreadsheetApp.openById("11AzGyCcWfvcE_mUltyjAx17wJDghOS-YH5e_zrHT-zc");
SpreadsheetApp.setActiveSpreadsheet(ss);
var sh = SpreadsheetApp.getActiveSheet();
sh.clear();
var folder = DriveApp.getFolderById('0BxZS62a5NdNYUGxySmp2QW41OUU'); // I change the folder ID here
var list = [];
//list.push(['Name','ID','Size']);
list.push(["Name", "Date", "Size", "URL", "Download", "Description", "MIME"]);

var files = folder.getFiles();
while (files.hasNext()){
file = files.next();
var row = []
//row.push(file.getName(),file.getId(),file.getSize());
row.push(file.getName(),
file.getDateCreated(),
file.getSize(),
file.getUrl(),
"https://docs.google.com/uc?export=download&confirm=no_antivirus&id=" + file.getId(),
file.getDescription(),file.getMimeType())
//file.getFileType().toString())

list.push(row);
}
sh.getRange(1,1,list.length,list[0].length).setValues(list);
}







Tuesday, October 20, 2015

#MelawanAsap

 Pake jasa pawang hujan seluruh Indonesia?

Working with Audio in Python

 What I did is read a .wav file, extract the raw audio data, (I use first 1/20 data for sample), transform it using Fast Fourier Transform, manipulate it (I only use the first cluster frequency spectrum ), transform it back using InverseFFT.

 I use matplotlib and numpy module to plot and compute.

 I also use sys and wave module as 'interface'.


import matplotlib.pyplot as plt
import numpy as np
import wave
import sys


spf = wave.open('violin2.wav','r')

#Extract Raw Audio from Wav File
signal = spf.readframes(-1)
signal = np.fromstring(signal, 'Int16')
fs = spf.getframerate()
print fs

#If Stereo
if spf.getnchannels() == 2:
print 'Just mono files'
sys.exit(0)

Time=np.linspace(0, len(signal)/fs, num=len(signal))
sample = []
st=[]
for i in np.arange(len(signal)/20):
sample.append( signal[i])
st.append(Time[i])

ft=np.fft.fft(sample)
pft=[]
for i in np.arange(len(ft)):
if i<500: data-blogger-escaped-ample="" data-blogger-escaped-else:="" data-blogger-escaped-from="" data-blogger-escaped-ft="" data-blogger-escaped-i="" data-blogger-escaped-ift="" data-blogger-escaped-ignal="" data-blogger-escaped-ime="" data-blogger-escaped-pft.append="" data-blogger-escaped-pft="" data-blogger-escaped-plt.figure="" data-blogger-escaped-plt.grid="" data-blogger-escaped-plt.plot="" data-blogger-escaped-plt.show="" data-blogger-escaped-plt.title="" data-blogger-escaped-pre="" data-blogger-escaped-rue="" data-blogger-escaped-sample="" data-blogger-escaped-signal="" data-blogger-escaped-st="" data-blogger-escaped-wave...="">
.





Monday, October 19, 2015

:)

 Melihat koreografi Bruno Mars dan The Hooligans, jadinya malah teringat Rhoma Irama dan Soneta

Friday, October 16, 2015

iWork Update on El Capitan

 My Pages, Number and Keynote received new feature.

 ...and hey, my view is increased twofold, :D

(And my Keynote on iPhone 4s is upgraded as well)







Sunday, October 11, 2015

Belajar.

Dulu belajar berbicara.

Sekarang perlu untuk belajar diam.

(The Tales of Tatonka)

Saturday, October 10, 2015

Pasir

Berapa nikmat yang diberikan kepadaku?

Ngawur,

kurang kerjaan.

Sana, mending hitung butiran pasir di pantai saja sana,

tu lebih sedikit, lebih gampang.

(terinspirasi status mbakYu)

Wednesday, October 7, 2015

Lagrange Interpolation using Python

 Here it is. We could set the order of interpolation by changing the value of k


from pylab import *
from random import uniform
k = 11

def l(t):
l = []
for i in arange (len(t)):
l.append(0.)
for j in arange(k+1):
lag = 1.
for m in arange(k+1):
if m!=j:
lag = lag * (t[i]-x[m])/(x[j]-x[m])
l[i] = l[i]+y[j]*lag


return l

def f(x):
f = []
for i in arange (len(x)):
f.append(0.)
f[i] = x[i]+uniform(-10,10)
return f

x = arange(0.0, 2.0, 0.1)
t = arange(0.,2.,0.001)
y = f(x)
z = l(t)

plot(x,y)
plot(t,z)
xlabel('x')
ylabel('y')
title('interpolasi')
grid(True)
axis([0,2,-111,111])
#savefig("test.png")
show()

.

Monday, October 5, 2015

Walking Sine on Visual Python GDisplay

 Look, the wrong way often provide a beautiful result. Yeah, it's not what the program should be, but still I like it, :)


from __future__ import division, print_function
from visual import *
from visual.graph import *

def f(x):
f = sin(pi*x+p)
return f
def g(x):
g = cos(pi*x)
return g

graph1 = gdisplay(x=0, y=0, width=600, height=400,
title='A vs. t', xtitle='t', ytitle='A',
foreground=color.black, background=color.white)
p = 0.
f1 = gcurve(color=color.blue)
f2 = gcurve(color=color.red)

t = arange(-2.,2.,0.01)
s = g(t)
while True:
rate(100)
f1.gcurve.pos=[] #delete this and look at the effect :)
f2.gcurve.pos=[]
u = f(t)
for i in arange(len(s)):
f2.plot(pos=((i-len(s)/2.)*.01,s[i]))
f1.plot(pos=((i-len(s)/2.)*.01,u[i]))
p = p + 0.01
if p >100:
p = 0



















Saturday, October 3, 2015

Fourier Transform using Delphi

 It's not Discrete Fourier Transform.

 Instead, I use continue definition (using Integral, not Sum) to compute the transformation. I know, it's weird, but it's worth a try, :)

 What I did is transform signal with 3 frequency, remove the two frequency and trasform back to time-signal.










unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
Image1: TImage;
Timer1: TTimer;
Memo1: TMemo;
Image2: TImage;
Image3: TImage;
Image4: TImage;
procedure proses;
procedure gambarFungsi;
procedure gambarSumbu;
procedure gambarTransformasi;
procedure olahTransformasi;
procedure gambarOlahTransformasi;
procedure transformasiBalik;
procedure gambarTransformasibalik;
function f(x:real):real;
procedure Timer1Timer(Sender: TObject);
private
public
end;

const
a=200;
b=150;

var
Form1: TForm1;
x0,y0,xm,ym:integer;
s,ss:array[-a..a]of real;
ft:array[-b..b]of real;
implementation
{$R *.dfm}
function tform1.f(x:real):real;
begin
f:=cos(PI*x)+cos(2*PI*x)+cos(4*PI*x);
end;
procedure tform1.transformasiBalik;
var i,j:integer;
t,w,dt:real;
begin{}
dt:=0.1;
for i:=-a to a do begin
w:=i/10;
ss[i]:=0;
for j:=-b to b do begin
t:=j/10;
ss[i]:=ss[i]+ft[j]*cos(w*t)*dt
end;
end;
gambarTransformasiBalik;
end;

procedure tform1.olahTransformasi;
var i:integer;
begin
for i:=-b to b do begin
if abs(i)>50 then ft[i]:=0;
end;
gambarOlahTransformasi;
end;

procedure tform1.proses;
var i,j:integer;
t,w,dt:real;
begin
form1.Caption:='transformasi';
gambarSumbu;
{transformasi}
dt:=0.1;
for i:=-a to a do begin
s[i]:=f(i/30);
end;
for i:=-b to b do begin
w:=i/10;
ft[i]:=0;
for j:=-a to a do begin
t:=j/10;
ft[i]:=ft[i]+f(t)*cos(w*t)*dt
end;
end;
gambarFungsi;
gambarTransformasi;
olahTransformasi;
transformasiBalik;
end;

procedure tform1.gambarFungsi;
var i,xo,yo,xt,yt:integer;
begin
xo:=-a; yo:=0;
for i:=-a to a do begin
xt:=i;
yt:=round(10*s[i]);
with image1.Canvas do begin
moveto(x0+xo,y0-yo);lineto(x0+xt,y0-yt);
end;
xo:=xt;
yo:=yt;
end;
end;

procedure tform1.gambarTransformasibalik;
var i,xo,yo,xt,yt:integer;
begin
xo:=-a; yo:=0;
for i:=-a to a do begin
xt:=i;
yt:=round(10*ss[i]);
with image4.Canvas do begin
moveto(x0+xo,y0-yo);lineto(x0+xt,y0-yt);
end;
xo:=xt;
yo:=yt;
end;
end;

procedure tform1.gambarOlahTransformasi;
var i,xo,yo,xt,yt:integer;
begin
{}
xo:=-b; yo:=0;
for i:=-b to b do begin
xt:=i;
yt:=round(10*ft[i]);
with image3.Canvas do begin
moveto(x0+xo,y0-yo);lineto(x0+xt,y0-yt);
end;
xo:=xt;
yo:=yt;
end;
end;

procedure tform1.gambarTransformasi;
var i,xo,yo,xt,yt:integer;
begin
xo:=-b;yo:=0;
for i:=-b to b do begin
xt:=i;
yt:=round(10*ft[i]);
with image2.Canvas do begin
moveto(x0+xo,y0-yo);lineto(x0+xt,y0-yt);
end;
xo:=xt;
yo:=yt;
end;
end;

procedure tform1.gambarSumbu;
begin
x0:=image1.Width div 2;
y0:=image1.Height div 2;
xm:=image1.Width;
ym:=image1.Height;
with image1.Canvas do begin
moveto(0,y0);lineto(xm,y0);moveto(x0,0);lineto(x0,ym);
end;
with image2.Canvas do begin
moveto(0,y0);lineto(xm,y0);moveto(x0,0);lineto(x0,ym);
end;
with image3.Canvas do begin
moveto(0,y0);lineto(xm,y0);moveto(x0,0);lineto(x0,ym);
end;
with image4.Canvas do begin
moveto(0,y0);lineto(xm,y0);moveto(x0,0);lineto(x0,ym);
end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
timer1.Enabled:=false;
proses;
end;

end.

HFS+ (Journaled) Flash Drive on Ubuntu

 I have no problem mount it on Centos, read and write mode.

 But, on Ubuntu, it needs some works.

 Install hfsprogs

 
sudo apt-get install hfsprogs


 umount the drive if it's already meunted


sudo umount /dev/sdb2


create folder to mount the drive


mkdir flash


mount again


sudo mount -t hfsplus -o force,rw /dev/sdb2 flash


It works for me, but it need sudo privilege to write to it. Maybe because it's journaled and ubuntu didn't support journaled HFS+ filesystem.

At least it works, :)

Friday, October 2, 2015

#MelawanAsap

 Yang tak terlupa, saat ada acara pembacaan surat YaaSin di rumah, ikut tradisi setempat, saat bapak meninggal.

 Yeah, bapak meninggal, itu sulit dilupakan.

 Tapi beberapa minggu ini ada yang mengungkit-ungkit kenangan itu lagi, kebakaran di Sumatera dan Kalimantan.

 Bukan tentang bapak yang diungkit (mudah sekali mengingat kejadiaan itu), tetapi tentang asap.

 Apa yang terjadi saat pembacaan surat YaaSin? Tentu saja, membaca surat YaaSin bersama-sama, diawali surat-surat pendek untuk pemanasan, Yaasin, trus doa-doa yang dipimpin secara estafet oleh dua pemuka agama.

 Yang terungkit oleh kebakaran di SwarnaDwipa dan Borneo justru sebelum acara. Ketika tamu mulai datang dan menunggu yang lain. Harus menemui tamu itu jelas, dan kebanyakan mereka adalah perokok! Hm, mereka merokok sebelum mendoakan seseorang yang meninggal akibat rokok, ckckck.

 Ketika acara akan mulai, tamu sudah semakin banyak, delapan puluh lebih. Ruangan sudah penuh hingga meluber ke halaman. Juga asap rokoknya.

 Sehari, ..., OK

 Dua hari, OOOOK...

 Hari ketiga, KO..., ke bidan, kena radang tenggorokan parah, harus minum 7 jenis pil.


 (dan ada dua pil yang mempunyai kandungan sama, sehingga dosisnya tanpa sengaja dobel, efeknya ketiga terbangun jam tiga pagi mau pipis, gak bisa gerak, otot kaku njarem, seperti habis berlari sprint sepuluh kilo, atau habis nabrak sedan diam dengan naik sepeda 80km/jam [sudah pernah mengalami, :) ])

 That's it. Asap, cuma terpapar tiga hari, dan setiap hari hanya sekitar dua jam.

 Bayangkan saudara kita di Sumatera dan Kalimantan.  Mereka di Pulau Emas dan Borneo terpapar setiap saat selama berminggu-minggu. SwarnaDwipa sedang berduka.

Thursday, October 1, 2015

My El Capitan

 On MacbookAir, :)







My VLC crashed

Matplotlib Python module's not working, (visual python's running without problem)









Monday, September 28, 2015

Annabeth and Magnus Chase, :)



 “I have an uncle and cousin in Boston”.

 (Excerpt From The Blood of Olympus).

 “...a teenager wouldn’t be wrapped in a stinky old sleeping bag, stuck outside in the middle of a Boston winter”.

 “Annabeth. Which meant the sandy-haired man was … Uncle Frederick?”.

 “You’re lucky you live with your momma. Annabeth stacked another domino on......” {Annabeth's not live with her mother (Athena) and/or have problem with her stepmother}

 "Annabeth looked at me. Her grey eyes..."

 "Frederick and Annabeth still lived in Virginia..."



 ( Excerpt From Magnus Chase and The gods of Asgard: The Sword of Summer preview on Percy Jackson and the Greek Heroes)

"He had sandy-colored hair like Annabeth ..."

“Dr. Chase jumped up and started patting his pockets. “My keys…” His wife sighed. “Frederick, honestly. You'd lose ”

“Ah, well. You did leave quite a few half-blood weapons in your room in Virginia, the last time you… left.” Annabeth looked down, embarrassed. I noticed Dr. Chase was very careful not to say ran away.”

(Excerpt From The Titan's Curse)

Yep, apparently they're cousin, :)

Friday, September 25, 2015

Update Value using Slider in Visual Python


 Here's the code.
 The slider act as..., well..., slider... to change the value on TextCtrl. On slight modification, it'll able to change any variable value.



from __future__ import division, print_function
from visual import *
import wx

L = 400
H = 200
d = 20


def setrate(evt):
value = s1.GetValue()
tc.Clear()
tc.write('kecepatan = '+ str(value)) #mengeset kecepatan sesuai slider


w = window(width=2*(L+window.dwidth), height=L+window.dheight+window.menuheight+H,
menus=True, title='Widgets',
style=wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX)

#panel#
p = w.panel

tc = wx.TextCtrl(p, pos=(1.4*L,90), value='Tulisan\n',
size=(150,90), style=wx.TE_MULTILINE)
tc.SetInsertionPoint(len(tc.GetValue())+1)
tc.SetFocus()

s1 = wx.Slider(p, pos=(1.0*L,0.8*L), size=(0.9*L,20), minValue=0, maxValue=100)
s1.Bind(wx.EVT_SCROLL, setrate)
wx.StaticText(p, pos=(1.0*L,0.75*L), label='kecepatan')

#standart mantra for vpython#
while True:
rate(100)

.
.
 

Update Visual.Graph Python

 The code below's from vpython example program, modified here and there, of course, :). It plots 5.0+5.0*cos(-0.2*t-p)*exp(0.015*t). Notice that p is act as phase, so the plot will 'walk'. The essential part is

 funct1.gcurve.pos=[]

 without it, the graph wont refresh the old curve (the old plot wouldn't be erased)



from __future__ import division, print_function
from visual import *
from visual.graph import *
import wx

L = 400
H = 200

w = window(width=2*(L+window.dwidth), height=L+window.dheight+window.menuheight+H,
menus=True, title='Widgets',
style=wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX)

funct1 = gcurve(color=color.cyan)

p = 0.

while True:
rate(100)
funct1.gcurve.pos=[]
for t in arange(-30, 74, 1):
funct1.plot( pos=(t, 5.0+5.0*cos(-0.2*t-p)*exp(0.015*t)) )
p = p + 0.1
if p >100:
p = 0

.



.
 

Friday, September 18, 2015

#MelawanAsap (Misal Mungkin)


 DPR tidak digaji? Mungkinkah? Adakah yang mau jadi wakil rakyat jika demikian?

 Buat aturan/larangan pembabatan hutan, atau pembakaran, dengan alasan apapun. Oh, sudah ada ya.

 Anu, terus kalo negara membutuhkan lahan untuk pangan gimana hayo? Ehm, Jepang sagat kekurangan lahan untuk tanaman pangan, tapi tak ada kabar mereka membakar hutan. Mereka punya jalur aspal mulus ke semua puncak gunung, hingga ada  "Hashiriya", istilah untuk "downhill driver". [Kita nggak mungkin downhill di aspal pegunungan di Indonesia, (misal Panggul, atau Munjungan, Trenggalek, :) )]. Namun meski jalan ke gunung dan hutan sudah mulus, tak ada truk pengangkut kayu illegal hasil pembabatan hutan di sana.



 Bagaimana kebutuhan lahan tuk tanaman pangan kita? Kalau di buku-buku SD saya jaman dulu ada yang namanya intensifikasi dan ekstensifikasi.

 Memang, dengan menggunakan cara-cara baru, awalnya akan sangat susah dan memakan banyak biaya (mungkin itulah kenapa banyak yang membakar hutan [atau tak sengaja hutannya terbakar]), sebuah longshot, keuntungannya baru bisa dinikmati setelah lama kemudian, bertahun-tahun.

 Apa hubungannya dengan DPR yang tidak digaji? Eh, saya juga tidak tahu kenapa menulis itu, tapi mau dihapus juga sayang, bahan tulisan yang bagus, :)

Thursday, September 17, 2015

#MelawanAsap (Angan-angan)



 Buat sensor asap, juga  sudah banyak tersedia atau buat sendiri, hubungkan ke microcontroller.

 Gunakan arduino versi kecil (nano atau mikro), lengkapi dengan modul gsm untuk berkomunikasi dengan pengontrol (yang bisa diletakkan di semacam kantor pengawas/pengendali kebakaran hutan).

 Untuk daya dapat digunakan panel surya kecil (sekaligus pelindung unit dari sinar matahari dan hujan). Kelebihan daya dapat disimpan dengan baterai Li-Ion atau Li-Polymer atau semacam powerbank yang banyak terdapat di pasaran. Baterai ini berfungsi sebagai sumber daya di malam hari.

 Unit harus melaporkan status secara berkala, bisa setiap hari atau setiap jam. Informasi yang dilaporkan ke pangendali melewati modul GSM dapat berupa level asap di sekitar unit, suhu (jika ada). Pelaporan ini juga berfungsi sebagai monitor unit itu sendiri. Jika unit tidak melapor maka kemungkinan unit rusak atau dirusak sehingga perlu ada petugas (mungkin dengan beberapa polisi hutan bersenjata) yang mengecek alat tersebut.


 Satu unit sensor akan berharga kurang dari satu juta. Hal ini karena modul GSM lebih mahal dari arduino (mikrokontroller). Akan lebih murah jika bisa membuat komunikasi dengan hp GSM/CDMA  via AT Command (mungkin bisa, saya belum pernah mencoba kemungkinan yang ini).

 Tentu saja tidak hanya satu sensor yang diletakkan di area hutan atau perkebunan. Beberapa sensor diletakkan sedemikian sehigga dapat mendeteksi asap di radius misal 10 km sehingga jarak antara sensor satu dengan lainnya adalah 20 km. Masing-masing sensor dilengkapi dengan identitas unik yang berisi informasi lokasi sensor tersebut sehingga, jika sebuah unit tidak melapor, petugas akan tahu letak unit tersebut di mana.

 Unit ini bukan pengganti patroli hutan, lebih seperti alat bantu petugas patroli hutan untuk menunjukkan arah  ke area mana yang memerlukan perhatian lebih.

 Modul kamera bisa ditambahkan untuk merekam situasi secara realtime, mounting kamera dibuat sedemikian sehingga kamera dapat berputar 360º untuk merekam kondisi sekitar unit. Hal ini berguna untuk mengetahui misal ada oknum yang merusak unit. Tentu saja penambahan sistem kamera semacam ini akan menambah biaya dan menambah beban baterai.

 Akan terlalu ambisius misal ditambahkan sistem pemadam kebakaran otomatis, selain karena mahal, juga....., yeah,. .. terlalu ambisius, :D

Wednesday, September 2, 2015

In the middle of the night


 Terbangun karena cubitan di bibir

 ...

 Lagi, terbangun karena cubitan di bibir,

 dicubit Alfa.

 "Ayah, maem nasi"

 ...

 Dicubit lagi, "Ayah, maem nasi".

 Bangun, grogi, terhuyung ke dapur, ngelirik jam, setengah duabelas,

 hampir tengah malam.



 Ambil piring coklat favorit alfa, juga sendok kesukaannya yang berkontur lengkung.

 Cukup satu entong.

 "Pake kuah mas?".

  "ndak, nasi tok".

 Susah untuk konsentrasi penuh menyuapi nasi ke mulut Alfa yang kelaparan tapi terlalu ngantuk tuk disuapi sambil duduk, jika terbangun dua menit sebelumnya, di tengah malam, :D.

 12 suapan.

 "Sudah"

 "Minum air putih?"

 "iya"

dengan cangkir biru berpegangan dua

"minumnya sambil duduk no"

dia patuh

"ayah letakkan gela di belakang dulu ya?"

"iya"

saat ayah balik Alfa sudah kembali nyenyak, :)

Monday, August 31, 2015

Tadaa... ternyata Rossi menang, horee...

 Melewatkan MotoGP semalam (menemani Alfa Beta di 'garasi').

 Rossi, Pettrucci, Dovizioso.

Friday, August 21, 2015

"Natural" Chord.

 By natural, its positioning on the keyboard is unique, oh right then... easy positioning, without touching black tuts.

 Of course we already knew three notes "natural" chord

 Starting with C chord, a major one, with C-E-G notes, we could shift our fingers positioning to the right (the white keys, we  won't touch the black here) and we have Dm and then Em, F, G, Am, Bdim.

 Now, add one more note so we have C-E-G-B, yup, thats Cmaj7.

 Shift to the right we'll have Dm7, Em7, Fmaj7, G7, Am7 and Bdim7

 What about adding fifth note? No problem, we have C-E-G-B-D, the Cmaj9 chord

 Again, shift to the right to get Dm9, Em7b9, Fmaj9, G9, Am9, Bdim7b9





5 am.

 After get up.

 Grab the phone or tab.

 Munching the mother made french fries.

 And scrambling to join the wake-up-selfie at the bed, :).







Tuesday, August 18, 2015

Ini Akkord C7/9, C9 atau Cadd9?

 Di beberapa "buku lagu beserta kunci", terdapat  kunci-kunci "tidak standar" semacam Cadd9, sangat sering, tapi tidak sesering C7.

 Yang kurang sering adalah Cmaj7, kecuali di lagu-lagu yang agak nge-jazz.

 Yang langka di buku-buku lagu yang kita lihat di toko buku adalah kunci-kunci semacam C7#9, hehehe...

 Bagaimana pembentukan kunci-kunci sehingga mendapatkan nama demikian? Well, lumayan mudah, setidaknya jika kita menggunakan keyboard.

 (tapi juga bukan keyboard aneh macam gini, :D )





 Tentu kita harus tahu, (dan mungkin sudah tahu) bahwa kunci C terdiri dari tiga nada C E G, mudah sekali di keyboard, tiga tuts putih, dimulai dari C (tuts putih di sebelah kiri dua tuts hitam), dua nada berikutnya di kanan tuts pertama, masing-masing berjarak satu tuts putih, tak perlu menekan tombol hitam, :)

 OK, tambahkan satu nada lagi, nada B, (jarak satu tuts lagi, :) ), nah, sekarang kita punya kunci Cmaj7, akkord empat nada

 Tambahkan satu nada lagi, nada d, sekarang kita punya kunci Cmaj9, sebuah akkord/kunci dengan lima nada

 Bagaimana jika kita tambahkan satu lagi, nada f, kita akan mendengar kunci Cmaj11 (enam nada). Di beberapa teori musik, Cmaj11 hanya memiliki lima nada, dengan menghilangkan nada d. Artinya Cmaj7 akan menjadi kunci Cmaj11 jika kita tambahkan nada f (nada ke 11).

 Hal yang sama bisa kita lakukan dengan menambahkan kunci Cmaj7 dengan nada a (nada ke13) untuk membentuk kunci Cmaj13.

 Sama seperti akkord Cmaj11, akkord Cmaj13 bisa memiliki nada d ataupun tidak. (nanti akan bepengaruh pada altered akkord, nanti...:P )

 Bagaimana dengan C7, C9, C11, C13? Kita bisa mendapatkan itu dari kunci sebelumnya, dengan menggeser nada maj7 sehingga menjadi nada 7, nada yang mana? Nada B, geser dia menjadi Bb (bes, tuts hitam di kiri B). Semua kunci maj kita sekarang kehilangan "maj" di namanya, :)

 Bagaimana dengan Cm7, Cm9, Cm11, Cm13? Tinggal geser nada ketiga, E, menjadi Eb (Es, tuts hitam di kiri E). Kunci C7 kita akan otomatis jadi Cm7, begitu juga dengan 9,11,13

 Eh, ada lagi, CmMaj7, CmMaj9, CmMaj11, CmMaj13? Itu adalah kunci Cmaj7 dengan nada ketiga diturunkan setengah, yaitu nada E, menjadi Eb (Es, tuts hitam di kiri E)

 Apa beda C9 dengan Cadd9? C9 adalah kunci C7 dengan tambahan nada ke 9 (d), sedangkan Cadd9 adalah kunci C dengan tambahan nada ke 9 (d). Jika kunci C9 memiliki nada C E G Bb d, kunci Cadd9 memiliki nada C E G d.

(Altered Chord)

 Bagaimana dengan kunci C7#9, itu adalah kunci C9 (atau bisa dilihat sebagai C7) tetapi dengan  nada ke sembilan (d) dinaikkan setengah, menjadi d# (dis, tuts hitam di kanan d)

 C7b5, adalah kunci C9 dengan nada ke lima (G) diturunkan setengah nada, menjadi Gb (Ges, tuts hitam di kiri G)

 Dengan cara yang sama kita bisa melihat C7b9b5 sebagai C7 dengan nada ke-9 (d) dan ke-5 (G) diturunkan setengah , menjadi db dan Gb. Juga berbagai variasi altered chord (akkord peralihan) lain, semacam C7#9b5, C7#9#5.

 Jika sudah terbiasa dengan notasi kunci tersebut, kita akan dengan mudah membaca kunci-kunci peralihan lain semacam Cmaj9#11 atau Cmaj7#11

 Variasi penulisan lain biasaya adalah C7/9 atau C7/9/#11

Kebanyakan kunci-kunci peralihan tersebut berbunyi parau atau fals atau "terdengar salah", sehingga hanya digunakan untuk mendapatkan efek dramatis (seperti di film-film horor) atau sebagai pengantar untuk menuju akkord yang lebih manis (seperti Cmaj7 atau Cm7) atau akkord ending yang melayang seperti Cmaj9.

Friday, August 14, 2015

Evolusi Jari

 Saya termasuk terlambat mengenal gitar, akhir kelas satu smp, naik ke kelas dua.

 Dari uang saku dari sunat, jadilah satu gitar akustik merek 'lain', :). Belum bisa beli semacam Yamaha atau Osmond atau entah apa merek terkenal lain.

 Tentu saja sekalian buku "cara cepat bermain gitar" dan buku "mudah bermain gitar".

 Buku yang membuat kecewa.

 Tentu saja setelah beli gitar saya pengin segera gitaran sambil nyanyi lagu-lagu keren sambil nogkrong di teras rumah, dan berharap dua buah buku gitar bisa membantu.

 Sejak kecil saya terbantu oleh buku, saya telah hafal isi tiap buku di perpustakaan SD, kecil sih.
 Perpustakaan SMP sudah terjelajahi di caturwulan kedua kelas satu.



 Tapi dua buku ini tidak mengajari saya nggitar sambil nyanyi. (Harusnya buku Pintar Gitar membuat pembacanya bisa bermain gitar. Harusnya... )

 Buku ini memperkenalkan nama bagian-bagian gitar, memang penting, tapi tidak bagiku.

 Buku ini mengajari langkah-langkah "menyetem" gitar, tunggu dulu, oh, ternyata namanya "menyetem", bukannya "menyetel", hehehe...; tetap saja meski gitar sudah tidak fals, tetap saja tidak bisa nyanyi.

 Tiga perempat bagian buku berikutnya berisi kunci-kunci gitar, what the...

 Ok, kusimpulkan sendiri, untuk nyanyi perlu nada, untuk iringan perlu akkord,  kunci gitar termasuk dalam akkord. Yup, terjunlah saya.

 Hafal kunci dari C hingga B, mayor, minor, diminished, maupun tujuh (7 maupun maj7) beserta aneka alternatif bentuknya, nun jauh di dekat putaran senar sana hingga tinggi mencekik leher gitar. Bahkan bapak yang tidak ngerti musik menyarankan bentuk penjariaan yang sama sekali lain dari yang diajarkan di buku. Penjarian a la bapak, yang kupakai hingga sekarang, lebih praktis dan cepat pindah dari sebuah akord keriting ke akkord keriting lain, :)

 Sekarang sudah lancar kunci, sekarang apa? Kenapa tetap tidak bisa nyanyi?

 Tunggu, tak adakah contoh lagu beserta kunci di buku gitar? Ada tentu saja, tapi tidak masuk akal bagi saya saat itu. Lagu Bengawan Solo dengan kunci Cmaj7 dan G7 terasa fals. Ada lagu entah apa dengan kunci yang enak tanpa 7 tapi masalahnya adalah saya tak tahu lagunya itu bagaimana.

 Bagi saya, kelemahan dua buku gitar itu adalah: memiliki daftar lengkap kunci tanpa menunjukkan cara pemakaian kunci-kunci tersebut dalam konteks lagu.

(Kelemahan ini, bagi saya "terhapus" di buku seri Its Easy to Bluff dari Joe Bennet, semua serinya, Jazz, Blues, Metal, Rock, memiliki kunci yang khas dan masing-masing bentuk disertai dengan penerapannya pada lagu, ide me/odi dan "sikap tubuh yang keren" saat memainkan kunci tersebut)

 Kelemahan lain adalah tidak disertai ide harmoni untuk melodi. Agak susah untuk menjelaskan, semacam jika kuncinya ini, melodinya harus jatuh di nada ini, atau ini, atau jika ingin ngejazz, jatuhkan di sini, atau tambahkan sedikit disonansi sebelum masuk ketukan berikutnya, ... .

( Saya juga baru tahu beberapa tahun setelah itu, saat menemukan buku kuno tahun 80-an berjudul Gitar Tunggal. Buku yang menjelaskan akkord parsial, bahwa kunci bisa disiratkan dengan dua nda saja, atau satu nada jika sudah ada pemain bass. Juga menjelaskan tentang melodi dengan nada lebih dari satu secara bersamaan. )

 Solusi datang tak terduga. Salah satu band junior di ekstrakurikuler musik di SMP membutuhkan gitaris baru, yang bisa memainkan kunci gitar. Tentu saja karena syaratnya bisa memainkan kunci gitar (bukan nyanyi), dari serombongan yang daftar, saya terpilih.

 Dan gitarku mulai bernyanyi, gitar rhythm, :)

 Masalah baru, bagaimana agar bisa menyanyi dengan gitar akustik?

 Jawaban muncul dalam bentuk gitaris melodi di band baruku. Toni, (mungkin sekarang sudah jadi guru di Donomulyo Malang, atau di daerah Malang Selatan dekat-dekat situ), datang dengan dua lembar kertas berisi lagu Haleluya dan Ku tak Pandang, entah judul  aslinya apa, kami menyebut dua lagu itu dengan nama demikian.

 Dari dua lagu tersebut berkembang ke lagu-lagu Iwan Fals, Toni terpengaruh kakak-kakaknya yang fanatik sama Iwan Fals, mungkin malah anggota OI. Tanpa sadar gitarku mulai bersuara merdu dan "bisa didengarkan", :)

 Tambah lagi seseorang bernama Lilik, (sekarang di daerah Laju Ngantang, :) ), dengan lagu-lagu malaysia, lagu-lagu semacam 'Mungkinkah' dari Stinky dan lagu-lagu "anak muda" saat itu.

 Sementara di malam hari, jam 10, saya berkutat dengan "tembang kenangan" di salah satu gelombang radio, mengasah feel dan pendengaran, mencari kunci-kunci untuk lagu semacam koes plus, panbers, the mercys, lagu-lagu semacam "kasih", "mawar berduri"

 Kunci? Oh iya, dari bejibun kunci yang kukuasai, hanya kunci mayor dan minor dasar yang terpakai. Sesekali kunci C7 dipakai sesaat untuk masuk ke kunci F.

 Dan SMPku berlalu dengan gitar yang sudah bisa bernyanyi.

 Gitarku saat SMU diisi dengan lebih banyak tembang-tembang kenangan di radio jam 10 malam karena lagu "anak muda" tidak begitu banyak yang baru saat itu.

 Membentuk band sisa-sisa band masa SMP yang masuk SMU yang sama, plus tambahan drummer dari teman baru saat SMU.

 Babon Band memiliki sisi ganda, dengan vokalis perempuan membawakan lagu-lagu yang sedang populer saat itu. Bersama vokalis laki-laki membawakan lagu-lagu rock, yang tidak harus lagu yang sedang populer saat itu.

 Lagu-lagu dari band semacam Boomerang, Jamrud, Guns n Roses, Power Metal ternyata lumayan mudah jika sudah tahu caranya. Kuncinya hanya PowerChord, cuma dua nada, tak perlu pusing meributkan mayor atau minor. Yang jadi tantangan adalah melodi di tengah lagu, biasanya setelah reff. Melodi ini yang bisa menjadikan sebuah band mendapat julukan 'keren'; jika bisa menirukan melodi lagu rumit sesuai aslinya. Biasanya yang melibatkan "tapping" "harmonik" atau "divebomb" hampir selalu masuk kategori keren. Dan itu mudah, taping hanyalah akkord yang dibunyikan dalam satu senar, harmonik (pinched, natural, artificial) juga gampang (natural agak sulit jika kita main lagu dengan nada dasar yang beda dengan lagu aslinya). Divebomb adalah natural harmonik apapun yang ditukikkan dengan tremolo (tentu saja harus punya tremolo bar).

 Di akhir SMU ada tantangan baru, diajak masuk band keroncong. Agak rumit, karena gitar berfungsi sebagai melodi yang terus menerus sepanjang lagu. Bisa sangat bosan atau kehabisan ide, :). Sisi menariknya adalah, lagu-lagu keroncong banyak menggunakan kunci 7 di sana sini.

 Kesempatan untuk menggunakan semua kunci akhirny datang di masa kuliah. Ketika diajak masuk DoReMi, sebuah band komunitas, membawakan lagu-lagu oldies, di nikahan dan kafe-kafe, juga di acara semacam malam tahun baru atau inaugurasi kampus.

 Awal gabung langsung shock saat disodori lagu dengan kunci Cmaj7. Bahkan hampir semua lagu memiliki ending maj7.  Di lagu-lagu kLA banyak menggunakan kunci diminished seperti Bdim. Toh lama-lama terbiasa. Hampir semua kunci minor di lagu-lagu band ini menggunakan minor7; Am7, Dm7.

 Lagu-lagu rancak di Maroon 5 dimodif sehingga sebelum Am ada E7/11. Killing me softly menggunakan F/G setelah Dm7 (yang secara formal disebut kunci G7/9/11).

 Bahkan beberapa lagu band, diawali dengan kunci G7#9, kunci yang bikin sound engineer saat rekaman kalangkabut karena dikira ada sesuatu yang error atau gitar studionya gak stem. (Akhirnya mas-nya bernapas lega juga setelah memberanikan diri memastikan "Mas, memang suara awal gitarnya sengaja nyisih gini ya?" [sepertinya tak sampai hati tuk bilang "fals" :D ] )

 Dan ketika gitaran sendiri, jika dulu jari-jari otomatis membentuk kunci C, sekarang otomatis membentuk kunci Cmaj9 atau D7#9. Sekilas nampak keren, namun di situasi dimana saya sedang check sound, reaksi pertama secara umum adalah "itu gitarnya sudah stem kah? Stem dulu!",  :)

 Akhirnya,  jerih payah akrobat jari saat SMP ada gunanya juga.


 (NB: buku-buku "cepat/mahir/pintar/mudah bermain gitar" yang ada saat ini sepertinya lebih tepat kalo diberi judul "Kamus Kunci Gitar. [bonus: lagu-lagu populer beserta kuncinya]" )



Thursday, August 13, 2015

My Little Family

Main-main di loteng, :)









The Vids


Setting up


The performance

Custom

Entah kenapa gak tahan tuk tidak 'menggambari' sesuatu yang flat, :).

Dan beginilah hasilnya, pake spidol permanen plus pasta glow in the dark, :).

Sunday, July 12, 2015

Sachsenring

Brake instruction from Rossi's director.

TTTTT from Pedrosa's, (full Throtle?)

Marquez, Pedrosa, Rossi

:)

Wednesday, July 8, 2015

Hey


 "Kerja adalah cinta, yang ngejawantah.

 Dan jika kau 
 tiada sanggup bekerja dengan cinta; 
 hanya dengan enggan

 Maka lebih baik jika kau meninggalkannya. 
 Lalu mengambil tempat di depan gapura candi.

 Meminta sedekah dari mereka.
 Yang bekerja dengan suka cita.

 Dari sang Nabi, 

 [Kahlil Gibran] "




 Hey! Angkat wajahmu.
 Bermuram durja tak guna.
 Susunlah lagi rencana yang harus engkau benahi.
 Bangun jiwa, bangun raga bijana.

 Hey! Bertahanlah.
 Kegagalan adalah satu sukses tertunda.
 Jangan ragu, tetap pada arahmu sejak dulu.
 Keyakinan, pengharapan, teguh dalam tujuan.

 Bekerja dengan cinta
 bagai Sang Pencipta
 membentuk citra insaninya.
 Satukan dirimu seutuhnya...

 Hey! Siagalah.
 Raih kesempatan begitu kau jumpa.
 Atur nadimu seiring irama bumi mengalun.
 Bangun jiwa, bangun raga bijana.

 Bekerja dengan cinta.
 bagai Sang Pencipta
 membentuk citra insaninya.
 Satukan dirimu seutuhnya...

 Sebar benih penuh kemesraan.
 Hingga panen tiba.
 Kita tuai kegirangan...
 Satukan dirimu seutuhnya...

(Katon Bagaskara & Adi Adrian)
 KLa Project
 Klakustik #2

Blackberry Messengers' ID

An internal error has occured. Please try again.

Familiar with that? It's in red, in the BBM registration/sign in form above email box.

No? Well, you're lucky then. I'm stuck on that for three days on my Andromax C.

Neither reinstall BBM nor using old apk's solve that problem.

And I have no problem set it up on my Andromax I3S. Bought at the same day. Actually, my C's bonus, part of 'buy one get one' promotion.

Before this, I have BBM on my iPhone and Genymotion. Both's installed without error.

And...

I found the solution accidentally

My BBM email IDs on my other device, real and virtual, have either aravir@mail.com or ara.vir@mail.com
pattern

On my Smartfren Andromax C, I'm using email with a.ra.vir@mail.com, notice the double dot.

Apparently BBM couldn't handle this.

What if we insist using the email? It's okay, just remove the dot. Some email provider like gmail ignore the dot at the address. So a.ra.vir identic with aravir. However BBM treat them as different address.

Try again with the same address but without he dots.

And it's success, horay..., :)

Tuesday, July 7, 2015

Writers' Block

No new post for weeks?

Blocked mind?

No, it's not running out idea.

It's being fermented, :)

Thursday, July 2, 2015

Sekolah Hari Pertama Alfa

 Gak mau bangun.

 Gak mau mandi.

 Gak mau pake seragam.
 (Pake baju Thomas atau MacQueen saja).

 Gak mau pake sepatu.
 (sandal Angry Bird pink saja).




.....

dan akhirnya berangkat juga

ke rumah Budhe, yang ngasuh Alfa sama Beta

(gak jadi berangkat sekolah, :) )

Saturday, June 27, 2015

Assen (MotoGP)

 What a race!!!

 Rossi, Marquez, Lorenzo.

Friday, June 19, 2015

Nulis status tentang bulan puasa ah, :)


 Eh, atau minta maaf saja, heheh...

 Atau copy-paste puisi

 atau kata mutiara yang bagus

 atau tips makanan berbuka

 atau khasiat kulit buah anu (ingat, harus kulit buah, bukan buahnya)

 atau sesuatu yang aneh-aneh.

 Sebarluaskan ke semua teman, entah mereka suka atau tidak, yang penting kita sudah nulis "sekedar sharing", atau "hapus saja jika tidak berkenan".

 nyampah di timeline teman?
 bikin penuh inbox?
 invite game yang aneh-aneh?
 masukkan grup?

 Kan sudah diberi embel-embel "hapus jika tidak berkenan"

 mengganggu?
 kan sudah diberi awalan "sekedar sharing"


 walaupun itu copy paste dari teman yang copy paste juga dari teman lain yang copy paste....

 walau yang dicopy paste itu belum tentu benar

 walaupun itu mengganggu

 ...
 ...

 sekedar sharing

 :)

 #edisiError

Thursday, June 18, 2015

My Last Trip, According to Google, :)

 From my trip to Yogyakarta, compiled by google auto awesome

.
here's the story by google, and the first
.



Jalan Kaki, :)

.
A photo posted by Aravir Rose (@nugnux) on
.
.
A photo posted by Aravir Rose (@nugnux) on

A photo posted by Aravir Rose (@nugnux) on
.

Monday, June 15, 2015

Alfa Beta

A photo posted by Aravir Rose (@nugnux) on

.
323f (5) amp (1) android (12) apple (7) arduino (18) art (1) assembler (21) astina (4) ATTiny (23) blackberry (4) camera (3) canon (2) cerita (2) computer (106) crazyness (11) debian (1) delphi (39) diary (286) flash (8) fortran (6) freebsd (6) google apps script (8) guitar (2) HTML5 (10) IFTTT (7) Instagram (7) internet (12) iOS (5) iPad (6) iPhone (5) java (1) javascript (1) keynote (2) LaTeX (6) lazarus (1) linux (29) lion (15) mac (28) macbook air (8) macbook pro (3) macOS (1) Math (3) mathematica (1) maverick (6) mazda (4) microcontroler (35) mountain lion (2) music (37) netbook (1) nugnux (6) os x (36) php (1) Physicist (29) Picture (3) programming (189) Python (109) S2 (13) software (7) Soliloquy (125) Ubuntu (5) unix (4) Video (8) wayang (3) yosemite (3)