Tanpa sadar kita sering melihat konten porno di laman-laman web berita online.
Tanpa sadar atau mungkin sadar tetapi tidak begitu 'ngefek' karena saking seringnya.
Masalahnya, laman-laman tersebut meski telah memberi peringatan semacam 'klik hanya jika usia anda 18+', namun hal tersebut menjadi semacam formalitas saja, komputer tidak akan tahu usia pengguna.
Lebih parah lagi di bagian 'lifestyle' atau 'selebritis', gambar-gambar pemakai baju minimalis dan atau adegan-adegan ciuman diumbar bebas untuk dilihat semua kalangan (blog ini ditulis dengan membuka tab baru di browser yang sedang mengakses laman itu, :) )
Tuesday, June 24, 2014
Sunday, June 22, 2014
Supporter
Jika mendengar suporter yang bilang semacam "ayo Argentina kalahkan iran 3-1 saja" saya selalu tergelitik untuk menganalisa kalimat-kalimat semacam itu.
"Ayo..., kalahkan..." -> cukup logis
"...3-1 saja..." -> nah ini dia, apa maksudnya? Membuat tiga gol itu sungguh sangat sulit sekali, tetapi masih wajar. Yang agak mengganjal adalah kata "3-1" bisa diartikan "masukkan/buat tiga gol dan biarkan lawan memasukkan 1 gol" :)
Monday, June 16, 2014
DIY HLA Cleaning on my 323F Astina
open engine cover
Gonna to do like this one
one bolt free
two bolt free
third bolt is easy too
…, and the last bolt is…
worn out…, not hexagonal anymore,
couldn’t be turned with any type of wrench, oh dear
HLA, I'm coming... (there it is, big coin-head-shaped HLA, not small bullet-shape one )
wait, .....
Open the manual book,
Have to remove timing belt first, whatch out the mark, it must not changed on the assembly,
And then distributor have to be remove too, .....
....
...
ToDo cancelled, ..., maybe next weekend, :)
The Perfect Race
What a race. Rossi is back.
What a respect, Marquez let Pedrosa get through him after he out of track at first corner and had to cut the track; bypassing corner
And heartbreaking final lap, :)
Thursday, June 12, 2014
[Java Android] Array of Pseudo Random Integer on TextView (just for self documentation)
Here the code, the random numbers generated at the creation and at "Start" button click
package com.nugnux.array;
import java.util.Random;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity{
private static String text = "heheh...";//for use as the tag when logging
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
proses();
Button buttonStart = (Button)findViewById(R.id.buttonStart);
buttonStart.setOnClickListener(startListener); // Register the onClick listener with the implementation above
Button buttonStop = (Button)findViewById(R.id.buttonStop);
buttonStop.setOnClickListener(stopListener); // Register the onClick listener with the implementation above
}
private void proses(){
TextView tulisan = (TextView)findViewById(R.id.tulisan);
tulisan.setText("tadaa...\n");
tulisan.append("this is array\n");
Random r = new Random();
int[]arr = new int[5];
for(int i=0;i<arr.length;i++)
{
arr[i] = Math.abs(r.nextInt()%255) +1;
tulisan.append(arr[i] + "\t\t");
}
}
//Create an anonymous implementation of OnClickListener
private OnClickListener startListener = new OnClickListener() {
public void onClick(View v) {
proses();
Toast.makeText(MainActivity.this, "The Start button was clicked.", Toast.LENGTH_LONG).show();
}
};
// Create an anonymous implementation of OnClickListener
private OnClickListener stopListener = new OnClickListener() {
public void onClick(View v) {
Toast.makeText(MainActivity.this, "The Stop button was clicked.", Toast.LENGTH_LONG).show();
TextView tulisan = (TextView)findViewById(R.id.tulisan);
tulisan.setText("tadaa...");
}
};
}
[Java Android] Create Circle and Line using Canvas on Eclipse with ADT (just for self documentation)
here it is,
I just create new Android app and go straigth to MainActivity.java without setting up the interface, so res/value/strings.xml and res/layout/* is left as is
and my activity is mainly in MainActivity :)
I just create new Android app and go straigth to MainActivity.java without setting up the interface, so res/value/strings.xml and res/layout/* is left as is
and my activity is mainly in MainActivity :)
package com.nugnux.gambar;
import android.app.Activity;
//import android.app.ActionBar;
import android.app.Fragment;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
//import android.os.Build;
import android.widget.Toast;
public class MainActivity extends Activity {
private String tulisan="";
private final int interval = 3000; // 1 Second
private Handler handler = new Handler();
private Runnable runnable = new Runnable(){
public void run() {
Toast.makeText(MainActivity.this, "Tadaa...", Toast.LENGTH_SHORT).show();
}
};
DrawView drawView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tulisan = Long.toString(System.currentTimeMillis());
Toast.makeText(MainActivity.this, "Heheh..."+tulisan, Toast.LENGTH_SHORT).show();
drawView = new DrawView(this);
drawView.setBackgroundColor(Color.WHITE);
setContentView(drawView);
//handler.postAtTime(runnable, System.currentTimeMillis()+interval);
handler.postDelayed(runnable, interval);
//handler.postDelayed(r, delayMillis)
}
class DrawView extends View {
Paint paint = new Paint();
public DrawView(Context context) {
super(context);
paint.setColor(Color.BLUE);
}
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawLine(10, 20, 30, 40, paint);
canvas.drawLine(20, 10, 50, 20, paint);
canvas.drawCircle(100, 100, 10, paint);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
return rootView;
}
}
}
...still figuring how to create moveTo lineTo since it'll come handy for drawing curve (sine, cosine, some exotic function) and animating it :)
Wednesday, June 11, 2014
The Impressions
So, after tinkering with Lenovo A3000 for 5 day...
The IPS screen is acceptable
The quadcore processor is doing what it supposed to do, fast enough
Getting used with android onscreen keyboard ( it's my 1st android device, i used iPhone and iPad), no AZERTY layout tough
The Playstore is fairly equal to AppStore. Keep in mind on android open source and open community nature, there's many apps that similar each other, and in some case, apps that has no purpose or simply didn't work.
The treasure (for me) is AIDE, an IDE app to create android app from inside android itself; something that's forbidden in iOS, :)
No home button is definitely problem for me, as it's replacement for my 2 years son's broken iPad. The challenge is how to teach him to use power button to waking up the device. The other solution is set the timeout display to 30 minutes and risk on fast drained battery.
Still give it a chance and time, .....
(My iPad is practically dead brick now, couldn't be charged, got the message like "couldn't charge with this accesories" or "this acessories not support charging" even with new original cable ; it's likely the connector is short circuited and blown away)
(edit: "Charging is not supported with this accessory")
(edit: "Charging is not supported with this accessory")
Create Android Application (Thermometer Converter) on Android Itself, using AIDE
It my early android apps developed using Eclipse and ADT on my Mac and now ported to AIDE on my A3000, which is, say, just copy and paste, :).
The app itself consist of two button, one textview, one edit text and a spinner. The input in edit text is processed based on spinner value and the result is displayed on text edit. The button is just for checking and have fun, :)
That's it, now let's get our hand dirty...
Of course the first step is open AIDE apps, :)
then scroll down until "For Expert" choice appear, I didn't bother to use tutorial, you may like it though, :)
choose "Create new Project here", then choose "New App"
Fill the form
here my main.xml on res/layout

here my strings.xml on res/value
..and my MainActivity.java on src/com/nugnux/thermoaide
and prompt us whether we want to install the built app, of course...
here the result
The app itself consist of two button, one textview, one edit text and a spinner. The input in edit text is processed based on spinner value and the result is displayed on text edit. The button is just for checking and have fun, :)
That's it, now let's get our hand dirty...
Of course the first step is open AIDE apps, :)
then scroll down until "For Expert" choice appear, I didn't bother to use tutorial, you may like it though, :)
choose "Create new Project here", then choose "New App"
Fill the form
here my main.xml on res/layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/tulisan"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="This is a simple two button app. \r\n \r\n Tell your user what your app does here \r\n \r\n \r\n \r\n"
android:textColor="#005500" />
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="10"
android:ems="10" >
<requestFocus />
</EditText>
<Spinner
android:id="@+id/sprOperator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:entries="@array/sprSuhu"
/>
<Button
android:id="@+id/buttonStart"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Start"/>
<Button
android:id="@+id/buttonStop"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Stop"/>
</LinearLayout>

here my strings.xml on res/value
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">ThermometerPram</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
<string-array name="sprSuhu">
<item >C</item>
<item >F</item>
<item >R</item>
<item >K</item>
</string-array>
</resources>
..and my MainActivity.java on src/com/nugnux/thermoaide
package com.nugnux.thermoaide;
import android.app.*;
import android.os.*;
import android.view.*;
import android.widget.*;
import android.view.View.OnClickListener;
public class MainActivity extends Activity
{
private static String logtag = "TwoButtonApp";//for use as the tag when logging
private static String text = "belum di pilih";//for use as the tag when logging
private static int pilihan = 0;//for use as the tag when logging
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Spinner spinner = (Spinner) findViewById(R.id.sprOperator);
final String sprSuhu[] = getResources().getStringArray(R.array.sprSuhu);
ArrayAdapteradapter = ArrayAdapter.createFromResource(this,
R.array.sprSuhu, android.R.layout.simple_spinner_item);
spinner.setAdapter(adapter);
// Set the ClickListener for Spinner
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView adapterView, View view, int i, long l) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this,"Anda memilih satuan "
+ sprSuhu[i]+" ",Toast.LENGTH_SHORT).show();
text=sprSuhu[i];
pilihan=i;
hitung();
}
// If no option selected
public void onNothingSelected(AdapterView arg0) {
// TODO Auto-generated method stub
}
});
}
//Create an anonymous implementation of OnClickListener
private OnClickListener startListener = new OnClickListener() {
public void onClick(View v) {
//Log.d(logtag,"onClick() called - start button");
Toast.makeText(MainActivity.this, "The Start button was clicked.", Toast.LENGTH_LONG).show();
TextView tulisan = (TextView)findViewById(R.id.tulisan);
hitung();
//Log.d(logtag,"onClick() ended - start button");
}
};
// Create an anonymous implementation of OnClickListener
private OnClickListener stopListener = new OnClickListener() {
public void onClick(View v) {
//Log.d(logtag,"onClick() called - stop button");
Toast.makeText(MainActivity.this, "The Stop button was clicked.", Toast.LENGTH_LONG).show();
TextView tulisan = (TextView)findViewById(R.id.tulisan);
tulisan.setText("tadaa...");
//Log.d(logtag,"onClick() ended - stop button");
}
};
public void hitung(){
double hasil,suhu;
EditText editText1 =(EditText)findViewById(R.id.editText1);
TextView tulisan = (TextView)findViewById(R.id.tulisan);
tulisan.setText("hehehe, akhirnya...");
try {
hasil=Double.parseDouble(editText1.getText().toString());
tulisan.append(" \r\n(angka di bawah ini adalah "+Double.toString(hasil)+" )");
//hasil=Math.pow(hasil, 2);
tulisan.append(" \r\n[pangkatnya adalah "+Double.toString(Math.pow(hasil, 2))+" ] \r\nspinner bernilai "+text);
if (pilihan==0){
suhu=9./5.*hasil+32;
tulisan.append("\r\n Suhu "+Double.toString(hasil)+" C jika dikonversi akan menjadi bernilai:");
tulisan.append("\r\n"+Double.toString(suhu)+" F");
suhu=4./5.*hasil;
tulisan.append("\r\n"+Double.toString(suhu)+" R");
suhu=hasil+273;
tulisan.append("\r\n"+Double.toString(suhu)+" K");
}
if (pilihan==1){
suhu=5./9.*(hasil-32);
tulisan.append("\r\n Suhu "+Double.toString(hasil)+" F jika dikonversi akan menjadi bernilai:");
tulisan.append("\r\n"+Double.toString(suhu)+" C");
suhu=4./9.*(hasil-32);
tulisan.append("\r\n"+Double.toString(suhu)+" R");
suhu=(hasil-32)*5./9.+273;
tulisan.append("\r\n"+Double.toString(suhu)+" K");
}
if (pilihan==2){
suhu=9./4.*hasil+32;
tulisan.append("\r\n Suhu "+Double.toString(hasil)+" R jika dikonversi akan menjadi bernilai:");
tulisan.append("\r\n"+Double.toString(suhu)+" F");
suhu=5./4.*hasil;
tulisan.append("\r\n"+Double.toString(suhu)+" C");
suhu=hasil*5./4.+273;
tulisan.append("\r\n"+Double.toString(suhu)+" K");
}
if (pilihan==3){
suhu=9./5.*(hasil-273)+32;
tulisan.append("\r\n Suhu "+Double.toString(hasil)+" K jika dikonversi akan menjadi bernilai:");
tulisan.append("\r\n"+Double.toString(suhu)+" F");
suhu=4./5.*(hasil-273);
tulisan.append("\r\n"+Double.toString(suhu)+" R");
suhu=hasil-273;
tulisan.append("\r\n"+Double.toString(suhu)+" C");
}
} catch (NumberFormatException e) {
tulisan.setText(e.getMessage()+", masukkan angka");
}
}
}
run it

it will build
and prompt us whether we want to install the built app, of course...
here the result
Tuesday, June 10, 2014
Another AIDE ScreenShot on My Lenovo A3000
Empat Saksi
Akhir-akhir ini ada beberapa kasus gugatan yang ditolak oleh pengadilan
Suami yang digugat istri dengan bukti foto pesta seks dari hap sang suami
Istri yang digugat suami dengan bukti rekaman CCTV di sebuah gedung
...dan gugatan tersebut ditolak
...alasannya tidak ada saksi kejadian tersebut
...agar gugatan diterima maka harus ada dua saksi laki-laki atau empat saksi perempuan yang menyaksikan kejadian (lihat betapa laki-laki dibedakan haknya dengan perempuan)
... dan itu sungguh aneh. Dan saya yakin akan ada lebih banyak perselingkuhan setelah berita ini karena mereka tahu bahwa jika mereka melakukan diam-diam (tentu saja) maka tak akan ada yang bilang bahwa mereka selingkuh, secara hukum, ckckck.
Keanehan berikutnya, bagaimana jika memang benar-benar ada saksi? Jika mereka murni saksi, bukan pelapor, bukankah mereka sama saja dengan menyetujui tindakan si tergugat? Dalam keadaan seperti itu, apakah mereka bersedia bersaksi? Sepertinya tidak.
Jika mereka bersedia bersaksi akan sangat membingungkan, bayangkan pertanyaan jaksa "jadi anda melihat kejadian itu? tidak melarang?" dan pertanyaan berikutnya "apa buktinya jika anda telah melihat kejadian itu?" foto? nah, tadi sudah ditolak kan? repot lagi deh... dan kesaksian tidak sah, :)
Dengan logika, sebenarnya klausul "dua saksi laki-laki atau empat perempuan" yang menyaksikan kejadian itu dapat saja sudah sangat memenuhi syarat. Dengan melihat foto atau video kejadian yang telah terbukti bukan rekayasa sebenarnya dapat disimpulkan bahwa perselingkuhan benar-benar terjadi, bagaimana seseorang bisa tidak melihat hal itu? bahkan membantah bahwa itu tak terjadi, atau kurang saksi, jika video/foto itu disaksikan seratus orang, bukankah mereka juga merupakan saksi
...dan yang lebih aneh lagi, si penggugat kadang malah ganti digugat secara pidana karena "mencemarkan nama baik", dan gugatan dapat diproses, waduh
Suami yang digugat istri dengan bukti foto pesta seks dari hap sang suami
Istri yang digugat suami dengan bukti rekaman CCTV di sebuah gedung
...dan gugatan tersebut ditolak
...alasannya tidak ada saksi kejadian tersebut
...agar gugatan diterima maka harus ada dua saksi laki-laki atau empat saksi perempuan yang menyaksikan kejadian (lihat betapa laki-laki dibedakan haknya dengan perempuan)
... dan itu sungguh aneh. Dan saya yakin akan ada lebih banyak perselingkuhan setelah berita ini karena mereka tahu bahwa jika mereka melakukan diam-diam (tentu saja) maka tak akan ada yang bilang bahwa mereka selingkuh, secara hukum, ckckck.
Keanehan berikutnya, bagaimana jika memang benar-benar ada saksi? Jika mereka murni saksi, bukan pelapor, bukankah mereka sama saja dengan menyetujui tindakan si tergugat? Dalam keadaan seperti itu, apakah mereka bersedia bersaksi? Sepertinya tidak.
Jika mereka bersedia bersaksi akan sangat membingungkan, bayangkan pertanyaan jaksa "jadi anda melihat kejadian itu? tidak melarang?" dan pertanyaan berikutnya "apa buktinya jika anda telah melihat kejadian itu?" foto? nah, tadi sudah ditolak kan? repot lagi deh... dan kesaksian tidak sah, :)
Dengan logika, sebenarnya klausul "dua saksi laki-laki atau empat perempuan" yang menyaksikan kejadian itu dapat saja sudah sangat memenuhi syarat. Dengan melihat foto atau video kejadian yang telah terbukti bukan rekayasa sebenarnya dapat disimpulkan bahwa perselingkuhan benar-benar terjadi, bagaimana seseorang bisa tidak melihat hal itu? bahkan membantah bahwa itu tak terjadi, atau kurang saksi, jika video/foto itu disaksikan seratus orang, bukankah mereka juga merupakan saksi
...dan yang lebih aneh lagi, si penggugat kadang malah ganti digugat secara pidana karena "mencemarkan nama baik", dan gugatan dapat diproses, waduh
Monday, June 9, 2014
AIDE
New Android user
Just grab Lenovo A3000 last Saturday
It's a quadcore
Used to programmed on Eclipse with ADT on my mac, ran it on emulator (didnt have the gagdet until yesterday)
Searching Playstore for development tool and... voila... AIDE os in the first list :)
It just like the Eclipse+ADT plus...it can run and install the app on the Android device itself. No need a computer, :)
Friday, June 6, 2014
PCV Valve and Throttle Position Sensor on My 323F Astina
The symptoms began the moment I change the broken PCV valve.
After replaced the old broken PCV valve and installed the new one, there's no change at idle.
Another story when I stepped on throttle pedal, the engine is getting hesitant and the rpm didn't rise smoothly and it had tendency to not rise at all.
Hmm, if broken PCV valve and unplugged TPS proved okay, whilst new PCV valve and unplugged TPS result in trouble, then combination of new PCV valve and plugged TPS maybe solving the problem.
The result is I have low idle rpm, so far so good, and I stomped the throttle pedal, the rpm is increasing smoothly, this getting better and better until rpm reach 3000 and suddenly drop to 1000, ...
I press and hold the throttle pedal, hoping it can reach beyond 3000, to no avail. It drop every time it reach 3000 point.
Here, almost without doubt that the TPS is the trouble maker. Almost, since the idle setting and other setting is done with the TPS unplugged, so maybe my engine have wrong setup since begining, still...
Checked TPS with OhmMeter, the result is fine, no problem.
Checked TPS socket (cable to ECU) using voltmeter, the signal is OK, so the TPS isn't the problem.
My TPS is the switch-type-TPS (from many online source including discussion in Mazda Astina Indonesia ), in opposite to potentiometer-type. So it has three switch position mode. (look at the first pic)
Let us name three connector cable in TPS with A, B and C. The first position is when idle, without step on the throttle pedal, A and B is connected. (second pic)
The second position is when we slightly open throttle; A, B and C is connected together. (third pic)
Finally while we are on full throttle, B and C is connected. (4th pic)
I don't really know, maybe because my "exotic" setup since beginning, my 323F couldn't get right rpm while TPS is plugged, so I manually checked by bypassing it function using jumper.
Bypassing A and B through jumper resulted in erratic rpm, it oscilating from 1000 to 3000, ....., ups..., the throttle cable is stuck, make it right...., ok, rpm at idle is 1000, step the throttle, and...., still drop at 3000, duh....
The same with A, B and C connected together.
Don't have a choice, bypassing B and C and... Idle is 1000, step the pedal, it raise smoothly to 3000 and 3500, 4000 and so on..., huray...
Stick with this setting until now, :)
Thursday, June 5, 2014
Kebebasan
Beberapa hari lalu gencar berita tentang penyerangan dan perusakan rumah pendeta oleh sekelompok orang; beberapa malah tetangga sendiri. Pihak penyerang merasa benar menghancurkan rumah pendeta karena itu adalah "rumah tinggal" dan bukannya "tempat peribadatan".
Beberapa mungkin membenarkan argumen kelompok penyerang.
Beberapa mungkin memahami alur pikiran kelompok penyerang namun menyayangkan tindakan main hakim sendiri kelompok tersebut.
Ada juga yang menyayangkan tindakan kelompok penyerang rumah pendeta itu, apapun alasannya.
Saya sebagai orang Malang yang beberapa tahun tinggal di Jogja sedikit banyak mengerti dengan situasi yang berbeda antara budaya "sini" dan "sana".
Ketika bulan pertama di jogja, tepat pada bulan puasa, saya merasa ada yang aneh.
Tubuh saya telah siap menerima "sesuatu" selama sebulan, namun ternyata di Jogja "sesuatu" itu tidak ada, dan jadilah saya seperti merasa sangat-sangat-sangat jauh dari rumah, meskipun memang iya,...
Lama saya mencari apa yang menyebabkan "sesuatu" tidak muncul, akhirnya ketemu juga jawabannya.
"Sesuatu" itu adalah suara-suara yang biasa saya dengar saat bulan puasa di Malang (mungkin Jawa Timur secara umum).
Seruan jam 3 pagi lewat speaker di musholla untuk bangun makan sahur.
Seruan waktu sahur telah habis.
Suara adzan lengkap tiap musholla, yang di bulan lain hanya saat maghrib dan isya
Dan saat speaker tidak digunakan untuk menyerukan hal-hal tersebut maka suaranya berganti dengan suara mengaji mp3 di speaker semua musholla dari jam 3 pagi sampai jam 12 malam.
Terlepas dari suka atau tidak, karena tidak terelakkan lagi, tubuh saya secara fisik dan mental telah siap dengan itu.
Namun saat di Jogja, semua itu tidak ada, hanya suara adzan normal, tidak ada nyanyian pujian setelah adzan, tak ada suara mengaji yang keras di speaker sampai tengah malam setelah tarwih.
Bahkan setelah bulan puasa pun, tidak ada suara mp3 mengaji di speaker setengah jam sebelum adzan subuh, tidak ada nyanyian pujian setelah adzan.
Tidak ada suara speaker tahlilan rutin seminggu beberapa kali yang diselenggarakan dari rumah ke rumah, sore dan malam.
Dan saya merasa sangat nyaman, :)
.....
nah, kembali ke peristiwa penyerangan rumah pendeta di Ngaglik Sleman Jogja.
Saya membayangkan, jika mereka, para penyerang itu pindah ke Jawa Timur,
apakah mereka akan menyerang tiap rumah yang digunakan untuk tahlilan? (seminggu beberapa kali, tahlil RT, tahlil RW, tahlil bapak-bapak, tahlil ibu-ibu, sore atau malam, pake speaker/salon bawah)
Menyerang rumah ustadz (rumah tinggal) yang digunakan sebagai tempat mengaji anak-anak dan ibu-ibu dari sore hingga malam setiap hari? (suara anak belajar ngaji biasanya disiarkan melalui speaker)
di sini, hampir semua "rumah tinggal" dapat berfungsi sebagai "tempat peribadatan", bahkan sampai luber ke jalan depan rumah, tutup jalan, dan suara speakernya terdengar jelas hingga setengah kilometer.
...bagaimana jika mereka tinggal di lingkungan seperti ini?
Beberapa mungkin membenarkan argumen kelompok penyerang.
Beberapa mungkin memahami alur pikiran kelompok penyerang namun menyayangkan tindakan main hakim sendiri kelompok tersebut.
Ada juga yang menyayangkan tindakan kelompok penyerang rumah pendeta itu, apapun alasannya.
Saya sebagai orang Malang yang beberapa tahun tinggal di Jogja sedikit banyak mengerti dengan situasi yang berbeda antara budaya "sini" dan "sana".
Ketika bulan pertama di jogja, tepat pada bulan puasa, saya merasa ada yang aneh.
Tubuh saya telah siap menerima "sesuatu" selama sebulan, namun ternyata di Jogja "sesuatu" itu tidak ada, dan jadilah saya seperti merasa sangat-sangat-sangat jauh dari rumah, meskipun memang iya,...
Lama saya mencari apa yang menyebabkan "sesuatu" tidak muncul, akhirnya ketemu juga jawabannya.
"Sesuatu" itu adalah suara-suara yang biasa saya dengar saat bulan puasa di Malang (mungkin Jawa Timur secara umum).
Seruan jam 3 pagi lewat speaker di musholla untuk bangun makan sahur.
Seruan waktu sahur telah habis.
Suara adzan lengkap tiap musholla, yang di bulan lain hanya saat maghrib dan isya
Dan saat speaker tidak digunakan untuk menyerukan hal-hal tersebut maka suaranya berganti dengan suara mengaji mp3 di speaker semua musholla dari jam 3 pagi sampai jam 12 malam.
Terlepas dari suka atau tidak, karena tidak terelakkan lagi, tubuh saya secara fisik dan mental telah siap dengan itu.
Namun saat di Jogja, semua itu tidak ada, hanya suara adzan normal, tidak ada nyanyian pujian setelah adzan, tak ada suara mengaji yang keras di speaker sampai tengah malam setelah tarwih.
Bahkan setelah bulan puasa pun, tidak ada suara mp3 mengaji di speaker setengah jam sebelum adzan subuh, tidak ada nyanyian pujian setelah adzan.
Tidak ada suara speaker tahlilan rutin seminggu beberapa kali yang diselenggarakan dari rumah ke rumah, sore dan malam.
Dan saya merasa sangat nyaman, :)
.....
nah, kembali ke peristiwa penyerangan rumah pendeta di Ngaglik Sleman Jogja.
Saya membayangkan, jika mereka, para penyerang itu pindah ke Jawa Timur,
apakah mereka akan menyerang tiap rumah yang digunakan untuk tahlilan? (seminggu beberapa kali, tahlil RT, tahlil RW, tahlil bapak-bapak, tahlil ibu-ibu, sore atau malam, pake speaker/salon bawah)
Menyerang rumah ustadz (rumah tinggal) yang digunakan sebagai tempat mengaji anak-anak dan ibu-ibu dari sore hingga malam setiap hari? (suara anak belajar ngaji biasanya disiarkan melalui speaker)
di sini, hampir semua "rumah tinggal" dapat berfungsi sebagai "tempat peribadatan", bahkan sampai luber ke jalan depan rumah, tutup jalan, dan suara speakernya terdengar jelas hingga setengah kilometer.
...bagaimana jika mereka tinggal di lingkungan seperti ini?
Wednesday, June 4, 2014
[Delphi] n-Order Interpolation (just for self documentation)
Of course, it can be linear, quadratic, cubic or any order interpolation
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Timer1: TTimer;
Image1: TImage;
Memo1: TMemo;
procedure awal;
procedure datamentah;
function newton(v:real):real;
function lagrange(v:real):real;
procedure diferensiasi;
procedure interpolasi;
procedure ilagrange;
function fx(x:real):real;
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const n=11;
orde=n;
skalax=17;
skalay=5;
var
Form1: TForm1;
x,y:array[0..n]of real;
a,f:array[0..orde]of real;
x0,y0:integer;
xi,yi:real;
implementation
{$R *.dfm}
function tform1.lagrange(v:real):real;
var j,m:integer;lag,suku:real;
begin{}
lag:=0;
for j:=0 to orde do begin
suku:=1;
for m:=0 to orde do begin
if j<> m then suku:=suku*(v-x[m])/(x[j]-x[m]);
end;
lag:=lag+y[j]*suku;
end;
lagrange:=lag;
end;
procedure tform1.ilagrange;
var i:integer;v:real;
begin{}
image1.Canvas.Pen.Color:=clred;
image1.Canvas.
MoveTo(x0+round(-n*skalax),y0-round(lagrange(-n)*skalay));
for i:=-n*100 to n*100 do begin
v:=i/100;
image1.Canvas.
LineTo(x0+round(v*skalax),y0-round(lagrange(v)*skalay));
end;
end;
procedure tform1.diferensiasi;
var i,j,k:integer;prod:real;
begin
a[0]:=y[0];
memo1.Lines.Append('a[0] = '+floattostr(a[0]));
for i:=1 to orde do begin
a[i]:=0;
for j:=0 to i do begin
prod:=1;
for k:=0 to i do begin
if (k<>j) then prod:=prod*(x[j]-x[k]);
end;
a[i]:=a[i]+y[j]/prod;
end;
memo1.Lines.Append('a['+inttostr(i)+'] = '+floattostr(a[i]));
end;
end;
function tform1.newton(v:real):real;
var i:integer;newt,suku:real;
begin
newt:=a[0];
suku:=1;
for i:=1 to orde do begin
suku:=suku*(v-x[i-1]);
newt:=newt+a[i]*suku;
end;
newton:=newt;
end;
procedure tform1.interpolasi;
var i:integer;v:real;
begin
diferensiasi;
{plot}
image1.Canvas.Pen.Color:=cllime;
image1.Canvas.
MoveTo(x0+round(-n*skalax),y0-round(newton(-n)*skalay));
for i:=-n*100 to n*100 do begin
v:=i/100;
image1.Canvas.
LineTo(x0+round(v*skalax),y0-round(newton(v)*skalay));
end;
end;
procedure tform1.awal;
begin
randomize;
image1.Width:=400; image1.Height:=400;
x0:=round(image1.Width/2); y0:=round(image1.Height/2);
image1.Canvas. Pen.Color:=clblue;
image1.Canvas.MoveTo(0,y0); image1.Canvas.LineTo(image1.Width,y0);
image1.Canvas.MoveTo(x0,0); image1.Canvas.LineTo(x0,image1.Height);
xi:=1.11; memo1.Text:='';
datamentah; interpolasi;
//ilagrange;
end;
procedure tform1.datamentah;
var i:integer;
begin
for i:=0 to n do begin
x[i]:=i-n/2; y[i]:=fx(x[i]);
with image1.Canvas do begin
pen.Color:=clblue; brush.Color:=clgreen;
pixels[x0+round(x[i]*skalax), y0-round(y[i]*skalay)]:=clred;
Ellipse(x0+round(x[i]*skalax)-7, y0-round(y[i]*skalay)-7,
x0+round(x[i]*skalax)+7, y0-round(y[i]*skalay)+7);
end;
end;
end;
function tform1.fx(x:real):real;
begin
fx:=x*x+random(20)-10;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
timer1.Enabled:=false;
awal;
end;
end.
[Delphi] Linear and Quadratic Regression (just for self documentation)
The code below have the plots and graphs (linear and quadratic regression) included
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Image1: TImage;
Memo1: TMemo;
procedure awal;
procedure datamentah;
procedure plotdata;
procedure regresi;
procedure kuadratis;
procedure plotregresi;
function f(x:real):real;
function fk(x:real):real;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const n=40; skala=3;
var
Form1: TForm1;
x0,y0:integer; x,y:array[-n..n]of real;
a,b:real; c:array[1..3]of real;
matrik:array[1..3,1..4]of real;
implementation
{$R *.dfm}
procedure tform1.kuadratis;
var sxi,sxi2,sxi3,sxi4,syi,syixi,syixi2:real;
i,j,k:integer; jml,simpan:real;
begin
sxi:=0;sxi2:=0;sxi3:=0;sxi4:=0; syi:=0;syixi:=0;syixi2:=0;
{sigma xi} {sigma xi kuadrat} {sigma xi pangkat3} {sigma xi pangkat4}
{sigma yi} {sigma yi*xi} {sigma yi* xi*xi }
for i:=1 to n do begin
sxi:=sxi+x[i]; sxi2:=sxi2+x[i]*x[i];
sxi3:=sxi3+x[i]*x[i]*x[i]; sxi4:=sxi4+x[i]*x[i]*x[i]*x[i];
syi:=syi+y[i]; syixi:=syixi+y[i]*x[i];
syixi2:=syixi2+ y[i]*x[i]*x[i];
end;
{isi matrik}
matrik[1,1]:=n; matrik[1,2]:=sxi;
matrik[1,3]:=sxi2; matrik[1,4]:=syi;
matrik[2,1]:=sxi; matrik[2,2]:=sxi2;
matrik[2,3]:=sxi3; matrik[2,4]:=syixi;
matrik[3,1]:=sxi2; matrik[3,2]:=sxi3;
matrik[3,3]:=sxi4; matrik[3,4]:=syixi2;
{gaus naif}
for k:= 1 to 3 do begin
for i:= k+1 to 3 do begin
simpan:=matrik[i,k];
if simpan=0 then begin end
else begin
for j:=k to 4 do
matrik[i,j]:=
matrik[i,j]/
simpan*
matrik[k,k]-
matrik[k,j];
end;
end;
end;
{subtitusi}
c[3]:=matrik[3,4]/matrik[3,3];for i:=2 downto 1 do begin jml:=0;for j:=i+1
to 3
do jml:=jml+matrik[i,j]*c[j]; c[i]:=(matrik[i,4]-jml)/matrik[i,i];end;
memo1.Lines.Append('c[1] = '+ floattostr(c[1]));
memo1.Lines.Append('c[2] = '+ floattostr(c[2]));
memo1.Lines.Append('c[3] = '+ floattostr(c[3]));
{plot kuadratis}
image1.Canvas.Pen.Color:=clred;
image1.Canvas.MoveTo(x0+round(x[-n]),y0-round(skala*fk(x[-n])));
for i:=-n to n do begin
image1.Canvas.lineto(x0+round(x[i]),y0-round(skala*fk(x[i])));
end;
end;
function tform1.fk(x:real):real;
begin
fk:=c[1]+c[2]*x+c[3]*x*x;
end;
procedure tform1.regresi;
var i:integer; xix,xixx,rx,ry:real;
begin
rx:=0;ry:=0;
for i:=1 to n do begin
rx:=rx+x[i]; ry:=ry+y[i];
end;
rx:=rx/n; ry:=ry/n;
memo1.Lines.Append('rx = '+floattostr(rx)); memo1.Lines.Append('ry = '+floattostr(ry));
xix:=0; xixx:=0;
for i:=1 to n do begin
xix:=xix+(x[i]-rx)*(y[i]-ry); xixx:=xixx+(x[i]-rx)*(x[i]-rx);
end;
b:=xix/xixx; memo1.Lines.Append('b = '+floattostr(b));
a:=ry-b*rx; memo1.Lines.Append('a = '+floattostr(a));
end;
procedure tform1.awal;
begin
randomize; memo1.Text:='';
stringgrid1.Cells[0,0]:='x'; stringgrid1.Cells[1,0]:='y';
stringgrid1.RowCount:=2;
datamentah;
plotdata;
regresi;
plotregresi;
kuadratis;
end;
procedure tform1.plotregresi;
var px,py:real;
begin
px:=-2*n; py:=a+b*(-2*n);
image1.Canvas.pen.Color:=cllime;
image1.Canvas.MoveTo(x0+round(px), y0-skala*round(py));
px:=2*n; py:=a+b*(2*n);
image1.Canvas.lineTo(x0+round(px),y0-skala* round(py));
memo1.Lines.Append('fungsi regresi: y ='+ floattostrf(a,ffGeneral,2,4)+' + '+
floattostrf(b, ffGeneral,2,4)+' x');
end;
procedure tform1.plotdata;
var i:integer;
begin
x0:=round(image1.Width/2); y0:=round(image1.Height/2);
image1.Canvas.MoveTo(0,y0); image1.Canvas.LineTo(image1.Width,y0);
image1.Canvas.MoveTo(x0,0); image1.Canvas.LineTo(x0,image1.Height);
for i:=-n to n do begin
image1.Canvas.Pixels[x0+round(x[i]),y0-round(skala*y[i])]:=clblue;
end;
end;
procedure tform1.datamentah;
var i:integer;
begin
stringgrid1.RowCount:=2*n+1;
for i:=-n to n do begin
x[i]:=i; y[i]:=f(x[i]);
stringgrid1.Cells[0,i+n+1]:=floattostr(x[i]);
stringgrid1.Cells[1,i+n+1]:=floattostr(y[i]);
end;
end;
function tform1.f(x:real):real;
begin
f:=x*x/32+random(20)-10;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
awal;
end;
end.
[Delphi] Differential of Function (just for self documentation)
Here the code, it have the graph of function and plot of it diferential (gradien) line
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Timer1: TTimer;
procedure proses;
procedure awal;
function f(x:real):real;
function df(x:real):real;
function fs(x,xs,ys,m:real):real;
procedure gambar;
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
dx:real=0.01;
x0,y0:integer;
implementation
{$R *.dfm}
procedure tform1.awal;
begin
{gambar sumbu}
x0:=round(image1.Width/2);
y0:=round(image1.Height/2);
with image1.Canvas do begin
moveto(0,y0);
lineto(image1.Width,y0);
moveto(x0,0);
lineto(x0,image1.Height);
end;
end;
function tform1.f(x:real):real;
begin
f:=10*cos(x)+x;
end;
function tform1.df(x:real):real;
begin
df:=(f(x+dx)-f(x))/dx;
end;
function tform1.fs(x,xs,ys,m:real):real;
var c:real;
begin
c:=ys-m*xs;
fs:=m*x+c;
end;
procedure tform1.gambar;
var i:integer;
x,y,x1,y1,m:real;
begin
// image1.Canvas.TextOut(0,0,'f(x)=x^2-2x-8 memiliki gradien '+floattostrf(df(0),ffnumber,8,2)+' di x=0');
image1.Canvas.TextOut(0,0,'f(x)=x^2-2x-8 memiliki gradien '+format('%8.2f',[df(0)])+' di x=0');
with image1.Canvas do begin
{gambar fungsi}
for i:=-200 to 200 do begin
x:=i/8;
y:=f(x);
x1:=(i+1)/8;
y1:=f(x1);
pen.Color:=clblue;
moveto(x0+i,y0-round(y));
lineto(x0+i+1,y0-round(y1));
end;
{gambar garis singgung}
m:=df(0);
for i:=-200 to 200 do begin
x:=i/8;
y:=fs(x,0,f(0),m);
x1:=(i+1)/8;
y1:=fs(x1,0,f(0),m);
pen.Color:=cllime;
moveto(x0+i,y0-round(y));
lineto(x0+i+1,y0-round(y1));
end;
end;
end;
procedure tform1.proses;
begin
awal;
gambar;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
timer1.Enabled:=false;
proses;
end;
end.
[Delphi] Gauss Naif Method (just for self documentation)
Here the code
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const n=3;
var
Form1: TForm1;
a:array[1..n,1..n+1]of real;
x:array[1..n]of real;
kotak:array[1..n] of tedit;
implementation
{$R *.dfm}
procedure bacamatrik;
var i,j:integer;
begin
for i:=1 to n do begin
for j:=1 to n+1 do begin
a[i,j]:=strtofloat(form1.StringGrid1.Cells[j-1,i-1]);
end;end;
end;
procedure tulismatrik;
var i,j:integer;
begin
for i:=1 to n do begin
for j:=1 to n+1 do begin
form1.StringGrid2.Cells[j-1,i-1]:=floattostr(a[i,j]);
end;end;
end;
procedure naif;
var i,j,k:integer;
simpan:real;
begin
for k:= 1 to n do begin
for i:= k+1 to n do begin
simpan:=a[i,k];
if simpan=0 then begin
end else begin
for j:=k to n+1 do a[i,j]:=a[i,j]/simpan*a[k,k]-a[k,j];
end;
end;
end;
end;
procedure subtitusi;
var i,j:integer;
jml:real;
begin
x[n]:=a[n,n+1]/a[n,n];
for i:=n-1 downto 1 do begin
jml:=0;
for j:=i+1 to n do jml:= jml+a[i,j]*x[j];
x[i]:=(a[i,n+1]-jml)/a[i,i];
end;
end;
procedure buatedit;
var i:integer;
begin
for i:=1 to n do begin
kotak[i]:=tedit.Create(form1);
kotak[i].Left:=300;
kotak[i].Top:=40+30*i;
kotak[i].Parent:=form1;
end;
end;
procedure isiedit;
var i:integer;
begin
for i:=1 to n do kotak[i].Text:=floattostr(x[i]);
end;
procedure TForm1.FormCreate(Sender: TObject);
var i,j:integer;
begin
randomize;
stringgrid1.RowCount:=n;
stringgrid2.RowCount:=n;
stringgrid1.ColCount:=n+1;
stringgrid2.ColCount:=n+1;
for i:=1 to n do begin
for j:=1 to n+1 do begin
a[i,j]:=random(20)-10;
stringgrid1.Cells[j-1,i-1]:=floattostr(a[i,j]);
end;end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
bacamatrik;
naif;
subtitusi;
tulismatrik;
buatedit;
isiedit;
end;
end.
[Delphi] Write to File (just for self documentation)
Here the code, the input method is still manual though, :)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Button6: TButton;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Button7: TButton;
procedure proses;
procedure simpanfile;
procedure simpanrecord;
procedure bacarecord;
procedure simpan;
procedure tampilkan;
procedure awal;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button7Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
tmahasiswa = record
nama,nim,alamat,offering,nhuruf:string[30];
umur:integer;
nilai:real;
end;
var
Form1: TForm1;
fileku:textfile;
files: file of tmahasiswa;
mahasiswa: tmahasiswa;
implementation
{$R *.dfm}
procedure tform1.awal;
begin
edit1.Text:='Nama';
edit2.Text:='NIM';
edit3.Text:='18';{umur}
edit4.Text:='Alamat';
edit5.Text:='Offering';
edit6.Text:='81';{nilai}
edit7.Text:='Nilai Huruf';
button6.Caption:='Simpan';
button7.Caption:='Tampilkan';
end;
procedure tform1.simpan;
begin
assignfile(files,'data.mp4');
reset(files);
mahasiswa.nama:=edit1.Text;
mahasiswa.nim:=edit2.Text;
mahasiswa.umur:=strtoint(edit3.Text);
mahasiswa.alamat:=edit4.Text;
mahasiswa.offering:=edit5.Text;
mahasiswa.nilai:=strtofloat(edit6.Text);
mahasiswa.nhuruf:=edit7.Text;
seek(files,filesize(files));
write(files,mahasiswa);
closefile(files);
end;
procedure tform1.tampilkan;
begin memo1.Text:='';bacarecord;end;
procedure TForm1.Button6Click(Sender: TObject);
begin simpan; end;
procedure TForm1.Button7Click(Sender: TObject);
begin tampilkan;end;
procedure tform1.bacarecord;
var text:string;
begin
assignfile(files,'data.mp4');
//filemode:=fmopenread;
reset(files);
while not eof(files) do begin
read(files,mahasiswa);
text:=mahasiswa.nama+' ('+inttostr(mahasiswa.umur)+') '+mahasiswa.nim+' '+mahasiswa.alamat+' '+mahasiswa.offering+' '+floattostr(mahasiswa.nilai)+' ('+mahasiswa.nhuruf+')';
memo1.Lines.Append(text);
end;
closefile(files);
end;
procedure tform1.simpanrecord;
begin
assignfile(files,'data.mp4');
rewrite(files);
mahasiswa.nama:='string';
mahasiswa.nim:='001';
mahasiswa.alamat:='malang';
mahasiswa.offering:='abc';
mahasiswa.nhuruf:='wow+';
mahasiswa.umur:=20;
mahasiswa.nilai:=60;
write(files,mahasiswa);
mahasiswa.nama:='qwerty';
mahasiswa.nim:='002';
mahasiswa.alamat:='malang';
mahasiswa.offering:='abc';
mahasiswa.nhuruf:='wow';
mahasiswa.umur:=22;
mahasiswa.nilai:=55;
write(files,mahasiswa);
mahasiswa.alamat:='tidak di malang';
mahasiswa.offering:='abc';
mahasiswa.nhuruf:='wow-';
mahasiswa.umur:=18;
mahasiswa.nilai:=55;
write(files,mahasiswa);
mahasiswa.nama:='dvorak';
mahasiswa.nim:='004';
mahasiswa.alamat:='batu';
mahasiswa.offering:='nyasar';
write(files,mahasiswa);
closefile(files);
end;
procedure tform1.simpanfile;
var i:integer;
begin
assignfile(fileku,'filesaya.txt');
rewrite(fileku);
write(fileku,'Hello ');
write(fileku,'world');
writeln(fileku);
for i:=1 to 10 do begin
write(fileku, i/2, ' ' );
//writeln(fileku);
end;
writeln(fileku);
for i:=1 to 10 do begin
write(fileku, i/2:5:1, ' ' );
//writeln(fileku);
end;
closefile(fileku);
end;
procedure tform1.proses;
var i:integer;
begin
memo1.Text:='';
for i:=1 to 10 do begin
memo1.Lines.Append('OK, ini adalah baris ke-'+inttostr(i));
end;
memo1.Lines.Strings[5-1]:='dengan';
{}
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
proses;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
simpanfile;
end;
procedure TForm1.Button3Click(Sender: TObject);
var text:string;
begin
assignfile(fileku,'filesaya.txt');
reset(fileku);
while not eof(fileku) do begin
readln(fileku,text);
memo1.Lines.Append(text);
end;
closefile(fileku);
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
simpanrecord;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
bacarecord;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
awal;
end;
end.
<\pre>
[Delphi] Newton Method for Find a Root of a Function (just for self documentation)
Tadaa...
It's my Newton code in Delphi to find a root
It's my Newton code in Delphi to find a root
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function fungsi(x:real):real;
begin fungsi:=x*x-3*x-4;end;
function turunan(x:real):real;
begin turunan:=2*x-3;end;
procedure newton;
var y1,ty1,x1,err:real;
n:integer;
ketemu:boolean;
begin
n:=0;err:=0.01;ketemu:=false;
x1:=strtofloat(form1.Edit1.Text);
while ketemu=false do begin
y1:=fungsi(x1);
ty1:=turunan(x1);
if y1=0 then begin
form1.Edit2.Text:='akarnya adalah '+ floattostr(x1);
ketemu:=true;end;
if abs(y1)<=err then begin
form1.Edit2.Text:='akarnya adalah '+ floattostr(x1);
ketemu:=true;end;
x1:= x1-(y1/ty1);n:=n+1;
form1.Edit3.Text:='langkah ke ' + inttostr(n);
application.ProcessMessages;sleep(100);
end;
end;
procedure gambar;
var x0,y0,y1,i:integer;
begin
x0:=round(form1.Image1.Width/2);
y0:=round(form1.Image1.Height/2);
with form1.Image1.canvas do begin
pen.Color:=clred;
moveto(0,y0);lineto(form1.Image1.Width,y0);
moveto(x0,0);lineto(x0,form1.Image1.Height);
end;
for i:=-100 to 150 do begin
y1:=round(fungsi(i/8));
form1.Image1.Canvas.Pixels[x0+i,y0-y1]:=clblue;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
gambar;
newton;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
button1.Caption:='newton';
edit1.Text:='0';
end;
end.
Friday, May 30, 2014
Bouncing Ball using Python on iPhone
Here the code
I use Pythonista on iOS
class MyScene (Scene):
def setup(self):
self.x=10.
self.y=10.
self.vx=137.
self.vy=153.
self.dt=1/64
pass
def draw(self):
background(1,1,1)
fill(0,1,0)
if(self.x>=self.size.w)or(self.x<=0):
self.vx*=-1
if(self.y>=self.size.h)or(self.y<=0):
self.vy*=-1
self.x+=self.vx*self.dt
self.y+=self.vy*self.dt
ellipse(self.x,self.y,10,10)
run(MyScene())
Game of Life using Python on iPhone
Here the Game of Life code using Python in iOS.
I use Pythonista
from scene import *
from random import choice
class MyScene (Scene):
def setup(self):
# This will be called before the first frame is drawn
self.jalan=-1
self.m =[]
self.n=[]
for i in range(0,32):
self.m.append([])
self.n.append([])
for j in range(0,48):
self.n[i].append(choice([0,1]))
self.m[i].append(0)
def neigh(self,i,j):
n=self.n
sum = n[i-1][j-1]+n[i-1][j]+n[i-1][j+1]+n[i][j-1]+n[i][j+1]+n[i+1][j-1]+n[i+1][j]+n[i+1][j+1]
return sum
def liveOrDie(self,i,j,count):
if(self.n[i][j]==0):
if(count==3):
self.m[i][j]=1
else:
self.m[i][j]=0
else:
if((count > 3)or(count < 2)):
self.m[i][j]=0
else:
self.m[i][j]=1
self.n[i][j]=self.m[i][j]
def drawCell(self):
background(0,.5,0)
for i in range(0,32):
for j in range(0,48):
if (self.n[i][j]==0):
fill(0,.1,0)
else:
fill(0,1,0)
ellipse(i*10,j*10,10,10)
def draw(self):
for i in range(1,31):
for j in range(1,47):
count=self.neigh(i,j)
self.liveOrDie(i,j,count)
self.drawCell()
run(MyScene(),frame_interval=2 )
Friday, May 2, 2014
Logis atau Berpengalaman?
Mayday. Kemarin saya melihat berita-berita di TV. Tidak keluar rumah walau libur karena ancaman macet karena demo.
Ternyata di sini tidak terlalu parah.
Hal lain yang saya perhatikan di berita adalah jika yang demo adalah teman-teman buruh maka tuntutan utamanya adalah hal-hal semacam jaminan kesehatan, hak ibu menyusui, semacam itu.
Namun jika yang demo adalah teman-teman dari mahasiswa, maka tuntutan utamanya adalah kenaikan upah buruh, :).
Kenapa bisa berbeda?
Lebih mendalam lagi, kenapa teman-teman buruh tidak menempatkan kenaikan upah sebagai tuntutan utama?
Ini hanya pemikiran saya, belum tentu sesuai dengan kenyataan. Di sini sepertinya, menurut teman-teman mahasiswa, gaji yang tinggi merupakan hal utama dan sepertinya sangat logis. Mungkin ini adalah bias dari keadaan nyata teman-teman mahasiswa, saat ini prioritas utama bukanlah hal-hal semacam jaminan kesehatan.
Di lain pihak, meskipun sepertinya logis (menurut mahasiswa), kenapa teman-teman buruh tidak menempatkan kenaikan upah sebagai prioritas utama? Secara mengejutkan, ternyata jawaban dari pertanyaan ini bisa angat logis serta mengandung banyak variabel.
Jika mereka menuntut kenaikan upah dan memaksa perusahaan melakukan itu, maka ada beberapa hal yang akan dilakukan perusahaan:
(hanya gumamam)
Ternyata di sini tidak terlalu parah.
Hal lain yang saya perhatikan di berita adalah jika yang demo adalah teman-teman buruh maka tuntutan utamanya adalah hal-hal semacam jaminan kesehatan, hak ibu menyusui, semacam itu.
Namun jika yang demo adalah teman-teman dari mahasiswa, maka tuntutan utamanya adalah kenaikan upah buruh, :).
Kenapa bisa berbeda?
Lebih mendalam lagi, kenapa teman-teman buruh tidak menempatkan kenaikan upah sebagai tuntutan utama?
Ini hanya pemikiran saya, belum tentu sesuai dengan kenyataan. Di sini sepertinya, menurut teman-teman mahasiswa, gaji yang tinggi merupakan hal utama dan sepertinya sangat logis. Mungkin ini adalah bias dari keadaan nyata teman-teman mahasiswa, saat ini prioritas utama bukanlah hal-hal semacam jaminan kesehatan.
Di lain pihak, meskipun sepertinya logis (menurut mahasiswa), kenapa teman-teman buruh tidak menempatkan kenaikan upah sebagai prioritas utama? Secara mengejutkan, ternyata jawaban dari pertanyaan ini bisa angat logis serta mengandung banyak variabel.
Jika mereka menuntut kenaikan upah dan memaksa perusahaan melakukan itu, maka ada beberapa hal yang akan dilakukan perusahaan:
- Jika meyetujui, maka mereka akan menyetujui kenaikan upah sampai margin keuntungan minimal mencapai batas, jika melebihi itu maka perusahaan merugi dan tidak dapat membayar upah. Pekerja jelas tidak menginginkan itu.
- Ada perusahaan yang menyetujui kenaikan upah, namun karena tidak memiliki pos untuk menutup itu, maka diambil dari biaya kesehatan. Berdasarkan pengalaman, membayar sendiri biaya pengobatan lebih berat daripada dibiayai oleh perusahaan. Maka pekerja lebih memilih jaminan kesehatan.
- Ada perusahaan yang menyetujui kenaikan upah namun dengan melakukan pemberhentian sebagian karyawan untuk menutupi pos tersebut. Pekerja yang setiakawan tidak menginginkan ini.
- Ada yang selangkah lebih maju dengan meminta kenaikan UMR atau UMP sehingga semua perusahaan di daerah tersebut harus menaikkan upahnya agar seragam. Hal yang berbahaya di sini adalah beberapa perusahaan (yang setelah melakukan perhitungan mengambil kesimpulan bahwa daerah tersebut tidak lagi menguntungkan sebagai tempat usaha) memilih untuk memindahkan usahanya ke tempat lain yang lebih menguntungkan sehingga karyawan otomatis berhenti atau harus ikut ke tempat baru (yang mungkin sangat jauh). Tentu saja ini tidak diinginkan oleh pekerja.
(hanya gumamam)
Thursday, January 16, 2014
Ubuntu 13.10 Saucy Salamander
On my mid 2009 13 inch macbook pro running Mavericks
(by add vboxvideo module on /etc/modules)
So far so good, no new problem arise ... yet.
Saturday, November 23, 2013
Lazarus on OS X 10.9
Thursday, November 21, 2013
Sumur tanpa Bayangan, Miring, Nol, dan Radioaktif
"Jadi cara menentukan keliling bumi dan sumur adalah dengan cara membandingkan bayangan yang jatuh di sumur kita di siang hari tepat jam duabelas dan sumur lain yang tidak punya bayangan di tempat lain.
"Jika kita tahu jarak kita ke tempat sumur tanpa bayangan tesebut maka kita bisa membuat perbandingan.
"Misal sudut bayangan yang jatuh di sumur kita adalah theta, maka perbandingannya adalah theta dengan 360 dan jarak ke tempat sumur tanpa bayangan dengan keliling bumi.
"Karena kita tahu nilai theta dan jarak ke sumur tanpa bayangan, maka keliling bumi dapat dihitung.
θ/360=jarakKeSumurTanpaBayangan/KelilingBumi
"Sehingga KelilingBumi=jarakKeSumurTanpaBayangan x 360/θ"
"Nol itu nilai apa pak?"
"Nol mana?"
"Di atas 360 itu"
"Oh itu bukan nol tapi theta"
"theta itu apa pak?"
"Theta itu sudut kemiringan sumur, baik saya ganti simbolnya menjadi alpha saja"
"Alpha itu zat radiokatif ya pak?"
"..." (hapus simbol alpha dan diganti dengan tulisan 'sudut')
(suasana di pelatihan guru pembimbing olympiade sains)
Monday, November 18, 2013
iBooks Author Supported Equation with Latex-style Input
Finally, the dream comes true :)
Tonight, I give iBooks Author a try, ehm..., actually second (alright third...) try. I have it since Mountain Lion (or maybe Lion) on my mid 09 13 inch aluminium unibody macbook pro, installed and never touched.
To be fair it's awesome, having simplicity of pages and keynote yet produce a powerfull, beautifull PDF (or ibooks) file.
And guess what... When I scrambling toward menu, there's "Equation" item under "Insert" menu.
Curious
"Insert Latex or XML equation ..."
Wow,... The awesomeness is level up several degree :)
Maybe it'll become my new main weapon replacing VIM+LaTeX combo to write book or publishing.
Maybe
Update:
-no footnote
-no bibliography
Update:
-no footnote
-no bibliography
Thursday, November 14, 2013
Jerawat Programmer
"Eh, itu fotomu pas masih kuliah ya"
"iya"
"wah, jerawatmu kok banyak"
"begitulah"
"Kayaknya kamu banyak pikiran ya"
"err..., mungkin..., sepertinya iya"
"Jangan terlalu banyak mikir, ntar jerawatnya tambah banyak"
"..."
"Emang mikirin apa?"
"mikir kenapa kok aku punya banyak jerawat"
....
Saturday, November 9, 2013
Selalu Minta Struk di SPBU
Yeah, selalu minta struk di SPBU yang ada fasilitas print-out struknya. Karena ada beberapa SBPU, meskipun kita tidak minta struk, mereka tetap menge-print tuk di"simpan", apalagi jika kita beli bensin dalam jumlah banyak. Ada beberapa konsumen SPBU yang meminta struk bernilai besar padahal beli bensin cuma sedikit; buat laporan ke kantor untuk uang pengganti bensin.
Mari kita cegah korupsi semacam ini bersama-sama.
Mari kita cegah korupsi semacam ini bersama-sama.
Friday, November 8, 2013
Beware of Apple ID Theft
Thursday, November 7, 2013
Laggy Mavericks and QuickLook that Neither Quick nor Look on Anything
Don't know what happened, but my Maverick is getting slower and slower.
QuickLook can't preview .f, .py and .tex files (and other files type too as I tried to "quick-looking" other type but fortran, python and latex is what I "quick-looking" most).
QuickLook can't preview .f, .py and .tex files (and other files type too as I tried to "quick-looking" other type but fortran, python and latex is what I "quick-looking" most).
Thursday, October 24, 2013
My new OS X Maverick
Just install it on my mid 2009 Macbook Pro 13 inch and well..., nothing change at the first look. It just like the old Mountain Lion appearance.
Wait, oh yeah, there is iBooks in the Dock and wow..., iOS Maps is there as well.
More importantly, the Safari is quite stable now, at least I didn't use Chrome for 3 hours now, :). Of course it's good signal of Safari direction, I used to use Chrome in Mountain Lion and now glad I can switch back.
Wait, oh yeah, there is iBooks in the Dock and wow..., iOS Maps is there as well.
More importantly, the Safari is quite stable now, at least I didn't use Chrome for 3 hours now, :). Of course it's good signal of Safari direction, I used to use Chrome in Mountain Lion and now glad I can switch back.
Monday, October 21, 2013
Studio Rekaman Tak Terduga
Sudah lama tidak take dan mixing lagu sendiri, kangen juga.
Malam-malam, semua sudah tidur. Buka laptop, buka aplikasi GarageBand dan take... action...
....
loh, kok?
Saking sensitifnya microphone si Mac, suara gemericik air kamar mandi pun sampai terdengar; juga rengekan si kecil yang minta "emak" dot.
Buyar
ups,..., gimana kalo...
akhirnya install GarageBand di iPhone, bawa gitar akustik nylon klasik ke mobil, tutup pintu dan... yes...tak terdengar suara dari luar.
just wait..., setelah ini akan muncul lagu-lagu baru dari super-mini-compact-portable-music-studio: Mazda 323f Astina, :)
Subscribe to:
Posts (Atom)
My sky is high, blue, bright and silent.
Nugroho's (almost like junk) blog
By: Nugroho Adi Pramono
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)