Read HFS+ from Linux

 The OS X filesystem, HFS+, by default is in read-only mode in my ubuntu.

 So I installed hfsprogs using
  
sudo apt-get install hfsprogs

 (you have to enable universe package-source)

 to mount the “Macintosh HD”, use this

$cd 
$mkdir osx
$sudo mount -t hfsplus -o force,rw /dev/sda2 osx

 Nevertheless, it still mounted as read-only, and some folders refused to open at all.

 Here the trick. We have to have same uid as the os x.

 so, create new user

sudo useradd -d /home/newuser -m -s /bin/bash -G root newuser

sudo passwd newuser

sudo usermod --uid 501 newuser

sudo chown -R 501:newuser /home/newuser

.

 by default the first user on OSX has an uid 501.

 Now, as we have the same uid on linux and OS X. We could freely read the filesystem.

#MelawanAsap

 Sepertinya tahun depan tidak akan ada kebakaran hutan,
 tak ada asap, 
 karena tak ada lagi yang bisa dibakar.

List Folders and Files Recursively using Google App Script.

 I got the problem because using ‘recursive’ as function name, 🙂
 At least now I know that, 🙂
 The next? Beautifying the result, 😀 

.

function listFilesNFolders(form) {
var list = [];
var lv = 0; //lv for level or depth
list.push(['tadaa...<br>']);
list.push(['heheh...']);
var row = [];
row.push('<br> Hello World!!! ');
list.push(row);

var home = DriveApp.getFolderById('0BxZS62a5NdNYUGxySmp2QW41OUU');
list.push('<br>');
list.push(home.getName());
crawl(home,list,lv);
return list;
}

//don't use 'recursive' as function name, it won't work
function crawl(home,list,lv){
lv++;
list.push('<br>tadaa...'+lv+'...');

var files=home.getFiles();
while (files.hasNext()){
var file=files.next();
list.push('<br>f '+file.getName());
}

var folders=home.getFolders();
while (folders.hasNext()){
var folder=folders.next();
list.push('<br>d '+folder.getName());

crawl(folder,list,lv);
}
}

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



.

#MelawanAsap

 Jika MotoGP Sepang gagal karena asap, maka Rossi cukup finish ketiga di Valencia untuk jadi juara dunia, 🙂

#MelawanAsap

 Trik Old Shatterhand di Llano Estacado untuk mendatangkan hujan sepertinya tak berhasil di sini.

 🙁

 (ingat Karl May)

Global Variable on Google App Script

 I have trouble accessed it within function,

 so I pass it to every function,
 not so elegant solution, but it works, 🙂 .

 In the code below, I have global variable named list.

 I have to passed as parameter on function dummy in order to edit its value or it wouldn’t affected or have error message or undefined (I experienced both, 🙂 )

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

dummy('<br> test',list);
return list;
}

function dummy(d,list){
list.push(d);
}

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>

.

#MelawanAsap

 Ini terjadi di Malang, bukan hutan, ini ladang tebu sehabis panen.

 Naik sepeda lewat beginian, hanya 20 meter terpapar asap, rasanya…

 Cuma sekian detik.

 Tak terbayangkan jika terpapar berbulan-bulan, di setiap tempat, di setiap waktu

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>

.