Tampilkan postingan dengan label coba tech tech coba. Tampilkan semua postingan
Tampilkan postingan dengan label coba tech tech coba. Tampilkan semua postingan

20100512

Kerjaan Baru yang Bener-Bener Baru

Ceritanya dimulai 1 bulan yang lalu neh. Pak Yan, teman kerja saya, sudah mulai sering nggak masuk karena harus terapi. Ada paketan datang buat Pak Yan. Berhubung beliaunya nggak nongol-nongol sampe 2 hari, Pak Bos besar suruh lihat isi paketan. Setelah bungkusan luarnya sukses saya cabik-cabik, masalah sebenarnya baru saja dimulai.Tulisan di labelnya:MultiTech CDMA modem. Saya cuma bisa garuk-garuk kepala dengerin Pak Bos bersabda.
Pak Bos : "Itu modem yang mau kita pake buat SMS gateway. Nanti kamu yang bikin programnya." Ouch!!! Apes bener gue...Bingung mau mulai darimana ngerjainnya. Sebenernya saya mau pajang foto tuh modem, tapi kelupaan mlulu mau bawa cam ke kantor,hehehe..emang dasar pikunan!
Well, firstly we have to make sure semua-muanya yang dibutuhin sudah lengkap. Lah, emang yang dibutuhin apa aja neh?! Baca documentation dulu deh kalo gitu. Yang perlu kita lakukan ngrakit dulu kelengkapan modem, seperti antena, kebel fuse + adaptornya, dan yang nggak boleh ketinggalan colokin kabel serialnya dan cek si dianya masuk comm port mana karena ketika kita testing dari hyperterminal harus pilih port yang benar. Saya sih gak mau repot-repot nyolokin kabel ke belakang kompi, jadi ya saya tambahin USB to serial punya ATEN. Lagipula ntar modem yang dipake ada beberapa, jadi kalo langsung colokin ke serial gak mungkin cukup buat semua.
Untuk memerintah modem melakukan apa yang kita inginkan, diperlukan command yang biasa disebut AT-Command. Disebut AT-command karena setiap perintah selalu diawali AT dan diteruskan dengan spesifik command yang mau kita pake, misalnya AT+CMGS (command untuk kirim message). Setiap command yang kita kirim pasti ada response yang dikirim balik oleh modem untuk acknowledgement kita, commandnya udah diproses si modem atau belum. Yuk kita coba-coba dulu di hyperterminal biar bisa bikin parser validator yang oke, soalnya kan perlu liat response modem dari masing-masing command.
Off the record yak responsenya apa aja, soalnya kalo diceritain disini semua gak mungkin cukup bo'! Singkat cerita saya mulai coding neh. Semua AT-command yang dibutuhkan dalam list sudah dimasukin ke module, siap dipanggil per-function. Prinsip SMS gateway yang saya buat sebenernya sederhana. SMS yang masuk dari seseorang (tentunya harus terdaftar dulu di grup SMS) disimpan ke dalam database supaya kalo perlu SMS statistic report gak kelamaan request ke provider dan penggunaan SMS bisa diawasi, kan project punya company gak saya bayar sendiri tuh. Setelah SMS masuk ke DB, selanjutnya saya cek si sender mau kirim buat grup SMS yang mana. Mulai deh saya loop send satu persatu sesuai dengan data yang ada di DB, jadi seakan-akan seperti automatic broadcast gitu deh. Kalo semua sudah oke, mark message yang udah di broadcast statusnya jadi READ. Simple banget kan?!
Tapi ada sedikit masalah neh waktu broadcast message. Misalnya dalam 1 grup saya punya contact 10 biji, bisa-bisa 3 diantaranya status sendnya gak beres. How come? Kan mereka kirimnya pake cara yang sama?! Coba saya trace deh... Anehnya kalau di trace satu-satu message ketika send, semua sukses terkirim! Beuh..semakin aneh! Salah gue apa koq sampe apes banget gini :( Akhirnya saya punya ide buat trap output response +CDS untuk ngecek delivery report tiap job send pake cara tradisional tapi manstabs : pake log file aja sih sebenernya, hehehe..jangan lupa nambahin date write to log-nya. Dari situ ketahuan kalo timing munculnya response +CMGS dan command send SMS yang berikutnya terlalu singkat. Artinya saya harus menambahkan sleep selama dia proses send supaya nggak diganggu gugat sama proses yang lain. Dan whalaaaa....sukses juga broadcast SMS yang bejibun tanpa masalah. Ternyata walaupun sudah muncul response +CMGS (yang menandakan proses kirim SMS sudah selesai), provider masih butuh waktu beberapa saat buat kirim message.
Kalau sudah oke gini tinggal maintain phone book deh. Rasanya senang juga satu task udah kelar, tinggal go live aja. Hwaaa...akhirnya..

20100326

Nyebelin Lu!!!

Hari ini kacau!!! Pagi-pagi udah kena complaint user. Data reporting tidak sesuai dengan data DCS. Wait..wait..nggak mungkin! Ini hal yang impossible dan baru terjadi hari ini selama project historian running. Program gak pernah ganti, data collector juga masih oke no lost signal or data, so what's wrong??
1 jam melototin data sheet break akhirnya ketemu juga jawaban atas kejanggalan data! Bego banget deh kenapa nggak dari tadi langsung kepikiran hal ini. Ternyata biang keroknya cuma perbedaan datetime di data collector, shadow server dengan DCS. Ilustrasinya gini neh. Bayangkan DCS punya data dari sensor dengan timestamp sekian. Terus data tadi dibaca sama data collector dan dilakukan perhitungan (average, summary or any else lah, bisa apa aja). Jika timestamp data collector dengan DCS tidak sama, maka range data yang dihitung tidak sama dengan totalizer punya DCS. Jelas aja data yang aku punya sekilas kelihatan gak sama.
Oke, si biang kerok udah ketangkep. Tapi masih ada masalah selanjutnya neh, gimana caranya program yang tak bikin pake timestamp yang sama dengan DCS. Secara ngambil local time DCS susah banget. Berarti sekarang kita perlu tools untuk syncronize local time data collector dengan punya si DCS. Setelah searching2 akhirnya nemu juga. Manfaatin Windows Time Service deh. Di tes dulu ketik di command : NET TIME \\servertosynchwith /SET /YES.
Ternyata it's work!!! Senangnya udah gak perlu mikirin timestamp yang berbeda lagi...
Baru aja happy2nya satu masalah kelar, sejam kemudian eh..user yang satunya complaint lagi. Gimana sih pak, kan udah saya syncronize! What's??? Timestamp data collector balik nggak singkron lagi! How could...??? Well, sepertinya saya harus pasang background job deh. Itu job saya setting every 30 minutes. And now everything just fine..fiuh! Akhirnya...

Belajar Routing

Awal-awal punya modem masih gak berani pake di kantor, jadi gak bisa berekspresi dweh. Soalnya waktu saya colokin modem dan diconnect, intranet saya langsung nge-blank jadi agak takut kalo sewaktu-waktu ada masalah saya gak bisa langsung tau. Tanya-tanya Pak Simon kali aja ada caranya buat ngakali ini, jadi saya bisa colokin modem, tapi intranet juga masih oke. Ini neh, saya share cara manipulasi network routing tables yang saya dapet dari Pak Simon, kata beliau kalo mau rajin cari di official web nya windows, bisa dapet lebih lengkap:

Ketik di cmd: ROUTE [-f] [-p] [command [destination]
[MASK netmask] [gateway] [METRIC metric] [IF interface]

-f Clears the routing tables of all gateway entries. If this is
used in conjunction with one of the commands, the tables are
cleared prior to running the command.
-p When used with the ADD command, makes a route persistent across
boots of the system. By default, routes are not preserved
when the system is restarted. Ignored for all other commands,
which always affect the appropriate persistent routes. This
option is not supported in Windows 95.
command One of these:
PRINT Prints a route
ADD Adds a route
DELETE Deletes a route
CHANGE Modifies an existing route
destination Specifies the host.
MASK Specifies that the next parameter is the 'netmask' value.
netmask Specifies a subnet mask value for this route entry.
If not specified, it defaults to 255.255.255.255.
gateway Specifies gateway.
interface the interface number for the specified route.
METRIC specifies the metric, ie. cost for the destination.

All symbolic names used for destination are looked up in the network database
file NETWORKS. The symbolic names for gateway are looked up in the host name
database file HOSTS.

If the command is PRINT or DELETE. Destination or gateway can be a wildcard,
(wildcard is specified as a star '*'), or the gateway argument may be omitted.

If Dest contains a * or ?, it is treated as a shell pattern, and only
matching destination routes are printed. The '*' matches any string,
and '?' matches any one char. Examples: 157.*.1, 157.*, 127.*, *224*.
Diagnostic Notes:
Invalid MASK generates an error, that is when (DEST & MASK) != DEST.
Example> route ADD 157.0.0.0 MASK 155.0.0.0 157.55.80.1 IF 1
The route addition failed: The specified mask parameter is invalid.
(Destination & Mask) != Destination.

Examples:

> route PRINT
> route ADD 157.0.0.0 MASK 255.0.0.0 157.55.80.1 METRIC 3 IF 2
destination^ ^mask ^gateway metric^ ^
Interface^
If IF is not given, it tries to find the best interface for a given
gateway.
> route PRINT
> route PRINT 157* .... Only prints those matching 157*
> route CHANGE 157.0.0.0 MASK 255.0.0.0 157.55.80.5 METRIC 2 IF 2

CHANGE is used to modify gateway and/or metric only.
> route PRINT
> route DELETE 157.0.0.0
> route PRINT

USUAL
=====

D:\My_Data\Wink\routing>ipconfig /all

Windows IP Configuration

Host Name . . . . . . . . . . . . : C0460
Primary Dns Suffix . . . . . . . : mjt.app.com
Node Type . . . . . . . . . . . . : Hybrid
IP Routing Enabled. . . . . . . . : No
WINS Proxy Enabled. . . . . . . . : No
DNS Suffix Search List. . . . . . : mjt.app.com
mjt.tjiwi.co.id

Ethernet adapter Local Area Connection:

Connection-specific DNS Suffix . : mjt.tjiwi.co.id
Description . . . . . . . . . . . : Broadcom NetXtreme 57xx Gigabit Cont
roller
Physical Address. . . . . . . . . : 00-18-8B-7D-89-51
Dhcp Enabled. . . . . . . . . . . : No
IP Address. . . . . . . . . . . . : 172.16.128.39
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 172.16.128.254
DNS Servers . . . . . . . . . . . : 172.16.148.19
172.16.148.18
Primary WINS Server . . . . . . . : 172.16.148.19
Secondary WINS Server . . . . . . : 172.16.148.18

D:\My_Data\Wink\routing>route print
===========================================================================
Interface List
0x1 ........................... MS TCP Loopback interface
0x10003 ...00 18 8b 7d 89 51 ...... Broadcom NetXtreme 57xx Gigabit Controller
===========================================================================
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 172.16.128.254 172.16.128.39 20
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
172.16.128.0 255.255.255.0 172.16.128.39 172.16.128.39 20
172.16.128.39 255.255.255.255 127.0.0.1 127.0.0.1 20
172.16.255.255 255.255.255.255 172.16.128.39 172.16.128.39 20
224.0.0.0 240.0.0.0 172.16.128.39 172.16.128.39 20
255.255.255.255 255.255.255.255 172.16.128.39 172.16.128.39 1
Default Gateway: 172.16.128.254
===========================================================================
Persistent Routes:
None

Modem ON
=============
D:\My_Data\Wink\routing>ipconfig /all

Windows IP Configuration

Host Name . . . . . . . . . . . . : C0460
Primary Dns Suffix . . . . . . . : mjt.app.com
Node Type . . . . . . . . . . . . : Hybrid
IP Routing Enabled. . . . . . . . : No
WINS Proxy Enabled. . . . . . . . : No
DNS Suffix Search List. . . . . . : mjt.app.com

Ethernet adapter Local Area Connection:

Connection-specific DNS Suffix . : mjt.tjiwi.co.id
Description . . . . . . . . . . . : Broadcom NetXtreme 57xx Gigabit Cont
roller
Physical Address. . . . . . . . . : 00-18-8B-7D-89-51
Dhcp Enabled. . . . . . . . . . . : No
IP Address. . . . . . . . . . . . : 172.16.128.39
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 172.16.128.254
DNS Servers . . . . . . . . . . . : 172.16.148.19
172.16.148.18
Primary WINS Server . . . . . . . : 172.16.148.19
Secondary WINS Server . . . . . . : 172.16.148.18

PPP adapter Provider:

Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : WAN (PPP/SLIP) Interface
Physical Address. . . . . . . . . : 00-53-45-00-00-00
Dhcp Enabled. . . . . . . . . . . : No
IP Address. . . . . . . . . . . . : 114.121.39.118
Subnet Mask . . . . . . . . . . . : 255.255.255.255
Default Gateway . . . . . . . . . : 114.121.39.118
DNS Servers . . . . . . . . . . . : 202.3.208.11
202.3.210.11
Primary WINS Server . . . . . . . : 10.11.12.13
Secondary WINS Server . . . . . . : 10.11.12.14
NetBIOS over Tcpip. . . . . . . . : Disabled

D:\My_Data\Wink\routing>route print
===========================================================================
Interface List
0x1 ........................... MS TCP Loopback interface
0x10003 ...00 18 8b 7d 89 51 ...... Broadcom NetXtreme 57xx Gigabit Controller
0x20004 ...00 53 45 00 00 00 ...... WAN (PPP/SLIP) Interface
===========================================================================
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 114.121.39.118 114.121.39.118 1
0.0.0.0 0.0.0.0 172.16.128.254 172.16.128.39 21
114.121.39.118 255.255.255.255 127.0.0.1 127.0.0.1 50
114.255.255.255 255.255.255.255 114.121.39.118 114.121.39.118 50
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
172.16.128.0 255.255.255.0 172.16.128.39 172.16.128.39 20
172.16.128.39 255.255.255.255 127.0.0.1 127.0.0.1 20
172.16.255.255 255.255.255.255 172.16.128.39 172.16.128.39 20
224.0.0.0 240.0.0.0 172.16.128.39 172.16.128.39 20
224.0.0.0 240.0.0.0 114.121.39.118 114.121.39.118 1
255.255.255.255 255.255.255.255 114.121.39.118 114.121.39.118 1
255.255.255.255 255.255.255.255 172.16.128.39 172.16.128.39 1
Default Gateway: 114.121.39.118
===========================================================================
Persistent Routes:
None

*** DO ***
route add 172.16.0.0 mask 255.255.0.0 172.16.128.254
*** REMOVE ***
route delete 172.16.0.0

*** RESULT ***

D:\My_Data\Wink\routing>route print
===========================================================================
Interface List
0x1 ........................... MS TCP Loopback interface
0x10003 ...00 18 8b 7d 89 51 ...... Broadcom NetXtreme 57xx Gigabit Controller
0x20004 ...00 53 45 00 00 00 ...... WAN (PPP/SLIP) Interface
===========================================================================
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 114.121.39.118 114.121.39.118 1
0.0.0.0 0.0.0.0 172.16.128.254 172.16.128.39 21
114.121.39.118 255.255.255.255 127.0.0.1 127.0.0.1 50
114.255.255.255 255.255.255.255 114.121.39.118 114.121.39.118 50
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
172.16.0.0 255.255.0.0 172.16.128.254 172.16.128.39 1
172.16.128.0 255.255.255.0 172.16.128.39 172.16.128.39 20
172.16.128.39 255.255.255.255 127.0.0.1 127.0.0.1 20
172.16.255.255 255.255.255.255 172.16.128.39 172.16.128.39 20
224.0.0.0 240.0.0.0 172.16.128.39 172.16.128.39 20
224.0.0.0 240.0.0.0 114.121.39.118 114.121.39.118 1
255.255.255.255 255.255.255.255 114.121.39.118 114.121.39.118 1
255.255.255.255 255.255.255.255 172.16.128.39 172.16.128.39 1
Default Gateway: 114.121.39.118
===========================================================================
Persistent Routes:
None

 | 
Daisypath Anniversary tickers