Thursday, November 28, 2013

NTP Client

Linux version

#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <arpa/inet.h >

int main(void)
{
    int sockfd = 0, n = 0, ii = 1;
    char recvBuff[1024];
    struct sockaddr_in serv_addr; 
    setvbuf(stdout, NULL, _IONBF, 0);
printf("Retrieving time, please wait ");
    memset(recvBuff, '0',sizeof(recvBuff));
    n=-1;

    while(n<=0)
    {
//    printf("====== attempt %d \n\n", ii);
    printf(".");
    
    if (ii == 50)
    {
   printf("\n");
   ii =0;
   }
    
    if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {
        printf("\n Error : Could not create socket \n");
        return 1;
    } 

    serv_addr.sin_addr.s_addr = inet_addr("64.90.182.55");
//     serv_addr.sin_addr.s_addr = inet_addr("96.47.67.105");
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(13); 

       if( connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
       {
          printf("\n Error : Connect Failed \n");
          return 1;
       } 

       n = read(sockfd, recvBuff, sizeof(recvBuff)-1);
       close(sockfd);
       usleep(10000);
       ii++;
    }
      recvBuff[n] = 0;
      printf("%s\n",recvBuff);

    return 0;
}

Windows version

//============================================================================
// Name        : windows_time_client.cpp
// Author      : Norma Hermawan
// Version     :
// Copyright   : Your copyright notice
// Description : CONNECT TO REMOTE HOST (CLIENT APPLICATION)
//               Include the needed header files.
//               Don’t forget to link libws2_32.a to your program as well
//               2. To set the library
//               Bring up the properties box for the project.
//               Select all configurations.
//               In the linker section on the left handside - select Input and in the right hand side add
//               ws2_32.lib in the Additional Dependencies box

//============================================================================

#include "stdafx.h"
#include <winsock.h>
#include <iostream>

using namespace std;
#define TIMESERV_PORT  13
//#define TIMESERV_IP    "96.47.67.105" // this is time server IP
#define TIMESERV_IP    "64.90.182.55" // this is time server IP
//#define TIMESERV_IP    "128.138.188.172" // this is time server IP
//#define TIMESERV_IP    "211.233.40.78" // this is time server IP
//#define TIMESERV_IP    "203.160.128.178" // this is time server IP
//#define TIMESERV_IP    "113.20.31.30" // this is time server IP

int main() {
SOCKET sfd; //Socket handle
char buffer[80];
int n, ii =1;
time_t prev_stamp;

printf("Retrieving time, please wait ",ii);
do{
//    system ("ping 64.90.182.55");
//Start up Winsock…
// printf("Starting winsock ============================= attempt %d\n\n",ii);
// printf("Retrieving time, attempt %d\n\n",ii);
printf(".");
if (ii==50){
      printf("\n");
      ii = 0;
            }
WSADATA wsadata;

int error = WSAStartup(0x0202, &wsadata);

//Fill out the information needed to initialize a socket…
SOCKADDR_IN addr; //Socket address information

addr.sin_family = AF_INET; // address family Internet
addr.sin_port = htons (TIMESERV_PORT); //Port to connect on
addr.sin_addr.s_addr = inet_addr (TIMESERV_IP); //Target IP

// printf("Create socket\n");
sfd = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP); //Create socket
// printf("Establishing Connection \n");
    int res = connect(sfd, (sockaddr*) &addr, sizeof(addr));
//    printf("Connectition is established \n");
memset(buffer, 0, sizeof(buffer)); //Clear the buffer
// printf("Receiving signal \n\n");
prev_stamp = time(NULL);
//Put the incoming text into our buffer
n = recv (sfd, buffer, sizeof(buffer)-1, 0);//) <= 0) &&((time(NULL) - prev_stamp) < 5))
    
closesocket(sfd);
WSACleanup(); //Clean up Winsock
// Sleep(10);
ii++;
}
while(n<=0);
printf("\nTime: ", n);
buffer[n] = 0;
printf("%s\n",buffer);

system("Pause");
return 0;
}

Tuesday, November 26, 2013

Time Slice Multitasking

This is a code example of time slice multitasking in C.

#include
#define KERNEL_SLEEP_US 1000
#define msleep(x) sleepc++; if(sleepc != x){return;}else{sleepc=0;}
int program_end = 0;

void task1(void) {
static int pc=0,sleepc=0;
switch (pc){
case 0: goto label0;
case 1: goto label1;
case 2: goto label2;
case 3: goto label3;
case 4: goto label4;
case 5: goto label5;
case 6: goto label6;
case 7: goto label7;
default: return;
}                                   // task code section
                                       // ========================================= 
label0:               /* a task code -> */ while(1){
pc=1; return; label1: /* a task code -> */   
pc=2; return; label2: /* a task code -> */   
pc=3; return; label3: /* a task code -> */   
pc=4; return; label4: /* a task code -> */   
pc=5; return; label5: /* a task code -> */   printf("Hello from task 1\n");
pc=6; return; label6: /* a task code -> */   msleep(250);  }
pc=7; return; label7: /* a task code -> */   
pc=8; return;                           // ========================================      
}

void task2(void) {
static int pc=0,sleepc=0,ii;
switch (pc){
case 0: goto label0;
case 1: goto label1;
case 2: goto label2;
case 3: goto label3;
case 4: goto label4;
case 5: goto label5;
case 6: goto label6;
case 7: goto label7;
default: return;
}                                   // task code section
                                       // ========================================= 
label0:               /* a task code -> */   for(ii=0;ii<5 font="" ii="">
pc=1; return; label1: /* a task code -> */     printf("<<-- --="" 2="" d="" font="" ii="" n="" task="">
pc=2; return; label2: /* a task code -> */     msleep(1000); };
pc=3; return; label3: /* a task code -> */   
pc=4; return; label4: /* a task code -> */   program_end = 1;
pc=5; return; label5: /* a task code -> */   
pc=6; return; label6: /* a task code -> */   
pc=7; return; label7: /* a task code -> */   
pc=8; return;                           // =========================================        
}

my_kernel(){
  usleep(KERNEL_SLEEP_US); // sleep 100 ms
}

int main(void)
{
  while(!program_end)
  {
  task1();
  task2();
  my_kernel();
  }
    return 0;
}

Tuesday, August 6, 2013

Mini Transistor Audio Amplifier

When I was childhood, I always curious about how electronic circuitry works. I remembered when I wanted to build a transistor audio amplifier, but didn't have any supporting knowledge. Internet hadn't come to my place at that time, not like today. Well, I need some time to build and test all those circuits. Even if I can design a much more complicated circuit than a simple audio amplifier today, but recalling the romance of the past is always exciting. Someday, when knowledge is no longer needed for my work, I will use it for myself fun.

Source:
link1
link2
link3
link4
link5

1. Class AB 4 Transistor Amplifier

2. Class A Headphone amplifier

3. Small audio amplifier circuit diagram


4. Power Amplifier OTL Cassette Radio Booster by TIP41+TIP42

5. Power Amplifier Class A by Transistor


6. Mic/Guitar Compressor with Transistor Bias Control

7. 50 mW 3 Transistors Amplifier




https://www.eleccircuit.com/4-transistor-audio-amplifier-circuit/
https://www.deeptronic.com/electronic-circuit-design/small-audio-power-amplifier-using-3-transistors/
http://www.bowdenshobbycircuits.info/page8.htm


Monday, July 29, 2013

Sudoku Solver


Sudoku is one of my favorite games. I used to play it a lot. One day, I meet a difficult sudoku problem that I can't solve easily, that simply perturb my mind. Rather than solving the problem, I prefer to make a solver code. I knew there are a lot of sudoku solver out there. But dude, that is the game. Creating a solver is the game itself, at least for me.
Then I did a little research. Wikipedia is always a good introductory. There are at least three methods to implement the solver:
1. Unique / Coloring / Possible Value
2. Booked Space
3. Back Track / Brute Force / Fill Empty Space

the last one is the most simple method for a practically infinite computation resource.
Ok. The solver is implemented and well tested. The screenshot shows a preview of mine.

Bellow is the C source code
link


Thursday, July 25, 2013

The Wavelet Transform


I will bookmark this tutorial for future plan.

Source:
link1
link2

Saturday, June 15, 2013

Move Android Apps to External Memory




I planning make the concise tutorial after testing this links.

Sources:
link1
link2

Root Guide:
link3

Friday, June 14, 2013

Analog Noise Generator


What to do with this circuit? I don't know. This circuit generates noise in audio spectrum. May it will be useful for my next project?
Reference: link

Tuesday, June 11, 2013

Kerja Keras, Rezeki dan Takdir




"Sesungguhnya, orang yang bekerja keras (sampai sedikit tidur) tidak akan menambah rezeki mereka sedikitpun. Dan orang yang hanya menghabiskan hari dengan tidurpun, tidak akan mengurangi rezeki (yang telah dijatahkan) kepada mereka."

Bagi saya, ungkapan di atas isinya menarik untuk direnungi. Ada kalanya seorang manusia sudah berupaya menjemput rezeki dengan sekuat tenaga, namun ternyata dia tidak mendapatkan hasil seperti yang diinginkan. Jika demikian, apakah semua usaha yang telah dilakukan itu sia-sia?
Jawabannya adalah iya! Jika semua usaha itu diniatkan untuk mendapatkan hasil, maka usaha sekeras apapun sama sekali tidak akan mendekatkan seseorang dengan rezeki.
Jika demikian, lalu mengapa manusia harus bekerja?

Jawabannya adalah, untuk menunaikan kewajiban. Rezeki itu memang sudah ditetapkan, namun berusaha itu adalah wajib.
Usahayang diniatkan untuk mendapatkan rezeki adalah sia-sia karena sama sekali kerja keras itu tidak akan mendatangkan rezeki bagi seseorang. Namun jika kerja keras itu diniatkan ikhlas untuk beribadah, maka apapun yang dilakukan manusia tidak akan pernah ada yang sia-sia.

Ada tiga kriteria agar usaha itu dapat dinilai sebagai ibadah:1. Menjalankan amanah yang kita emban atas tugas itu dengan sebaik-baiknya.
2. Tidak melupakan ibadah wajib dengan alibi pekerjaan.
3. Meniatkan rezeki yang akan diperoleh untuk tujuan baik, misalnya untuk menafkahi keluarga.

Rezeki memang telah ditakdirkan namun tidak ada yang tahu takdir manusia selain Allah. Seseorang baru mengetahui takdir setelah melewatinya.
Namun demikian, sebenarnya ada sedikit petunjuk tentang masa depan. Takdir Allah memang telah ditetapkan dan bersifat rahasia, namun sebagian diantaranya dapat diprediksi, yaitu melalui pemahaman terhadap terhadap hukum alam yang memiliki pola konsisten. Pada hakikatnya, hukum alam itu juga merupakan ayat Allah, ciptaan Allah dan takdir Allah.

Ketika seorang Isaac Newton duduk di bawah pohon, kemudian sebuah apel jatuh menimpa kepalanya, dia berpikir, Mengapa apel bisa jatuh ke tanah?
Semakin jauh lagi dia bertanya, mengapa bumi mengelilingi matahari?
Seorang yang beriman percaya bahwa semua itu karena takdir Allah. Sebagian dari takdir Allah itu berjalan sesuai hukum alam yang dapat dipelajari melalui ilmu pengetahuan (sedangkan sebagian lainnya bersifat gaib). Salah satu hukum alam itu adalah teori gravitasi yang telah diamati oleh Newton beberapa abad lalu.

Dalam lingkungan yang normal, statistika menunjukkan bahwa seseorang yang bekerja lebih banyak akan mendapatkan hasil yang lebih banyak pula. Dan itu juga merupakan sebuah hukum alam. Tentu saja kerja keras bukan satu-satunya parameter, karena pasti dipengaruhi faktor-faktor lain yang tidak diketahui, sebutlah itu faktor X. Tidak seorangpun yang tahu Faktor X karena sifatnya gaib dan merupakan kewenangan Allah. Faktor X merupakan hak prerogative Allah yang tidak dapat diintervensi. Usaha maksimum manusia hanyalah sebatas eksploitasi terhadap sifat-sifat hukum alam tersebut, dengan menyerahkan sepenuhnya pengaruh faktor X tersebut kepada Allah.

Yang membedakan seorang muslim dengan atheis adalah, bahwa seorang muslim percaya faktor X itu adalah domain Allah dan bersifat gaib. Sedangkan atheis percaya bahwa faktor X itu tak berpola atau random. Orang Jerman menggunakan kata "Glück" yang artinya keberuntungan. Sebagian lainnya yang sangat memuja sains, bahkan tidak percaya bahwa faktor X itu ada dan menganggap bahwa semua di alam semesta ini memiliki pola.

Pernahkah anda mendengar seseorang yang berkata "Saya lihat sepertinya kamu akan sukses di masa depan"? Bagaimana orang-orang itu dapat berkata demikian?
Beberapa orang, berdasarkan pengalamannya, dapat membaca karakter orang lain, dan dari data-data yang didapatkannya, dia dapat memprediksi masa depan orang tersebut. Tentu saja prediksi itu tidak selalu/harus benar, karena seiring bertumbuhnya jiwa dan bertambahnya pengalaman, karakter manusia dapat saja berubah. Sama halnya dengan cerita Newton yang melihat apel jatuh di atas. Newton dapat memprediksi bahwa apel tersebut akan jatuh ke tanah, bukan karena Newton seorang peramal yang mengetahui hal gaib. Tetapi karena dia memiliki pengetahuan bahwa hukum alam berkata demikian.
Tentu saja apel itu tidak harus jatuh ke tanah, karena itu semua terserah Allah. Jika Allah menghendaki apel tersebut jatuh ke bulan, ya itu bisa saja terjadi. Dan yang demikian itu diluar pengetahuan manusia.

Sebagai penutup, Salah satu sifat Allah adalah maha pemberi. Jika manusia meminta, Dia pasti akan mengabulkan. Meskipun demikian, meminta sesuatu perlu dilakukan dengan etika yang baik. Seseorang yang meminta tidak berhak untuk memaksa kepada yang diminta. Karena kita ini mau meminta, bukan menodong. Manusia tentunya harus sadar, sebagai pihak yang meminta kita harus punya sopan santun. Meskipun kita tahu bahwa Allah itu sangat baik, pengasih, penyayang dan selalu memberi kepada setiap yang meminta.
Kadang kala kita ini sudah mengemis-ngemis, tapi tidak tahu diri. Disuruh ini, merasa berat, disuruh itu tidak mau, dilarang ini membantah,,.. Kita perlu berintrospeks.

Wallahu a’lam

"Sama sekali semua ini bukanlah hasil jerih payahku, kerja kerasku, peras keringatku maupun daya upayaku. Semua ini semata-mata belas kasihan Allah. Jika sewaktu-waktu Dia mengambilnya, aku harus siap mengikhlaskannya. Aku hanya berusaha melakukan yang terbaik yang bisa kulakukan sebagai manusia."
#Hikmah

Sunday, June 9, 2013

Prasangka Baik

Apa yang kita rasakan dan lihat dalam kehidupan ini tergantung dari kacamata yang kita pakai. Dunia ini akan nampak indah jika kita memandang segala sesuatu dengan dengan ketulusan. Sebaliknya, apapun akan terlihat buruk jika kita melihatnya dengan kebencian.

Perjalanan manusia dalam aliran waktu tak selamanya berjalan mulus. Kadangkala, batu kerikil menjadi variasi dalam kehidupan. Ada kalanya kita sudah berkorban untuk sebuah niat baik, tapi seolah-olah semua pengorbanan itu tak berarti apa-apa. Sebenarnya, tidak pernah sia-sia sebuah usaha yang dilandasi dengan niat baik, jika kita melakukannya ikhlas karena Allah. Namun jika kita menyandarkan harapan kita pada makhluk, maka bersiap-siaplah untuk kecewa.

Manusia itu memiliki rasa bosan, bisa melakukan kesalahan maupun lupa. Karena itulah, dalam berinteraksi dengan sesama, sepatutnya jika kita mampu untuk bersikap toleran, bersedia memaafkan dan berkompromi dengan keadaan. Jika kita ingin dapat bertahan dalam lingkungan apapun, kita harus mampu bernegosiasi dengan keadaan. Apalagi dalam sebuah interaksi jangka panjang. Bagaimana mungkin kita bisa bertahan jika kita mengharapkan segalanya terus sempurna tanpa ada kesempatan untuk berkompromi?

Tanpa rasa memaafkan, jiwa ini hanya akan dipenuhi dengan kebencian. Baik itu memaafkan orang lain, maupun memaafkan diri sendiri. Cukuplah sejarah itu membuat manusia untuk belajar dari pengalaman. Agar kita sebagai manusia tidak mengulangi kesalahan yang sama. Berkompromi dengan sejarah dan memaafkan diri sendiri itu perlu. Tetap positif thinking karena kesalahan itu adalah bagian dari sifat manusia. Hidup ini berjalan maju dan tidak berhenti di satu masa.

Kadang kala, pertolongan Allah turun lewat cara yang kurang kita sukai. Padahal mungkin hanya dengan cara itulah kita terselamatkan. Allah menolong kita tetapi justru kita mempersepsikan itu sebagai ujian. Sesuatu yang seharusnya kita syukuri, justru sebaliknya malah kita tangisi. Kita baru dapat memahami semuanya ketika Allah telah menjelaskannya melalui jalan hikmah. Baik itu datang dari hasil perenungan kita maupun kepekaan kita atas ucapan-ucapan makhlukNya.

-"-

Bersyukur

Masa depan seseorang dapat diprediksi dari cara dia menyikapi keadaan. Seseorang yang mampu bersabar ketika diberi ujian, maka ia akan mampu untuk bersyukur ketika diberi nikmat. Sebaliknya, seseorang yang ketika diberi ujian berputus asa, maka dia akan cenderung untuk melupakan Allah ketika mendapat nikmat. Manusia istimewa itu adalah orang yang tetap bersyukur bahkan pada saat diberi ujian. Karena ujian Allah itu, pada hakikatnya tidak seberapa dibanding nikmat yang telah Dia berikan. Karena itulah, dikatakan bahwa syukur adalah tingkatan tertinggi dari kesabaran.
Sebaliknya, manusia yang paling celaka adalah, orang yang telah diberi nikmat, namun tetap ada saja yang dikeluhkan. Mereka itulah orang-orang yang kufur nikmat. Naudzubillah Min Dzalik.
Mudah-mudahan kita semua bukan termasuk orang-orang yang kufur nikmat. Mudah-mudahan Allah tidak mencabut segala nikmat yang telah Dia karuniakan.

Kehidupan ini seperti roda berputar, kadang di atas, kadang di bawah. Kita selalu berdoa agar diberi yang terbaik oleh Allah. Sebenarnya, kondisi yang lebih baik itu ketika putaran roda kehidupan kita sedang di atas, atau justru ketika kita berada di bawah?
Ada tiga kemungkinan respon kita dalam menghadapi setiap keadaan: yaitu mengeluh, bersabar atau bersyukur. Ketika fase hidup kita sedang di atas, maka ada tiga kemungkinan output dari cara kita bersikap. Seyogyanya, ketika kita mendapatkan nikmat, kita menjadi bersyukur. Tetapi kadangkala kita lupa untuk bersyukur. Lupa bahwa semua nikmat itu adalah titipan atau pemberian Allah. Dan yang lebih celaka adalah, jika kita selalu merasa kurang dengan semua pemberian Allah, yang mengakibatkan kita terus mengeluh.
Lain cerita ketika kita sedang terpuruk dalam kehidupan. Jika kita mampu bertahan atas keterpurukan , maka kita dapat termasuk ke dalam golongan orang-orang yang sabar. Kalaupun kita berkeluh kesah kepada Allah, maka hal tersebut dapat dimaklumi, karena setiap orang mempunyai kemampuan yang berbeda dalam menghadapi ujian. Bahkan, ketika dalam kesusahan, kita tetap dapat mengingat pemberian Allah, dan kita mampu bersyukur dalam keterpurukan, mungkin kita bisa menjadi orang yang istimewa.

Ternyata, kondisi kesusahan justru memberi kesempatan kita untuk menjadi orang istimewa, sedangkan kondisi bergelimang kebahagiaan itu bisa jadi merupakan jebakan yang dapat menjerumuskan kita menjadi orang celaka.
Jadi, manakah sebenarnya yang lebih baik? manakah yang lebih patut kita syukuri?
Kita tidak perlu menunda untuk bersyukur, apapun keadaannya.

"Boleh jadi kamu membenci sesuatu, padahal ia amat baik bagimu, dan boleh jadi (pula) kamu menyukai sesuatu, padahal ia amat buruk bagimu"

-"-