Rabu, 20 September 2017

Sudah tahu Git-ftp?

Buat rekan-rekan yang terbiasa menggunakan git sebagai version control system codenya, dan biasanya terkendala dengan shared hosting yang terkendala fasilitas ini.
Langsung saja, untuk menggunakan ini yang kita butuhkan pastinya protokla ftp. Saya yakin shared hosting hampir semua memberikan fasilitas ini.

sudo apt-get install git-ftp

Setelah beres langsung saja kita konfigurasi dalam project yang pastinya sudah di iniasiasi git nya.

# Setup
git config git-ftp.url "ftp://ftp.example.net:21/public_html"
git config git-ftp.user "ftp-user"
git config git-ftp.password "secr3t"

Setelah di configurasi sekarang tinggal jalankan
# Upload all files
git ftp init

untuk selanjutnya biasanya hanya tinggal git add dan git commit
# add and commit
git add .
# commit
git commit -m "test"

Dan terakhir di push
# push
git ftp push
Terlihat sederhana dan yang pastinya kita lebih leluasa menambahkan atau mengurangi code pada aplikasi yang telah di berada di host.

Semoga berguna.

Salam,



Ref: https://github.com/git-ftp/git-ftp

Selasa, 04 Juli 2017

speed up postgresql: pg_restore

Untuk rekan-rekan yang mau restore data yang cukup besar, bisa menggunakan cara berikut ini:
  1. Open postgresql.conf
  2. Set shared_buffers (misal 512MB)
  3. Set maintenance_work_mem (misal 256MB)
  4. Set full_page_writes jadi off
  5. Set wal_buffers (misal 16MB)
  6. Set autovacuum jadi off
  7. Restart postgresql
Nb: Hanya untuk pg_restore

Rabu, 19 April 2017

Push ke Firebase Cloud Messaging di PHP

Apa itu Firebase?

Saya tidak menjelaskan ke arah sana, karena sudah pasti dan cukup memuaskan apa itu dan mekanisme kerja dari firebase sesuai dengan yang terlihat di websitenya.

Jadi langsung saja..

Sebenernya sudah banyak package yang menyediakan FCM, tapi kita coba kostum dikit sesuai dengan yang sudah dicontohkan di dokumentasi oleh firebase.

Sesuai dengan cara kerjanya sebenernya kita tinggal tembak saja ke app url yang diberikan.

Kita buat saja langsung classnya.
Saya menggunakan package Jyggen CURL, jadi pastikan temen2 sudah menyediakan package tersebut. Jangan lupa server keynya dimasukan.


use \Jyggen\Curl\Curl;
use \Jyggen\Curl\Request as Request;
class FirebaseManager
{
       private $key = 'yourfcmkey';
       private $appURL = 'https://fcm.googleapis.com/fcm/send';
       private $device_target;
       private $data;
       private $response;
       private $notification;
 public function sendPush()
 {
         $headers = array('Authorization:key=' . $this->key, "Content-Type: application/json");
         $fields = array();
         $target = $this->device_target;
         $fields['data'] = $this->data;
         if(is_array($target))
         {
             if (count($target) == 1)
             {
                   $fields['condition'] = "'".$target[0]."' in topics";
             }
             if (count($target) >= 2) 
             {
                   $topics = '';
                   foreach ($target as $k => $v)
                   {
                        if ($topics == '') 
                        {
                             $topics = "'".$v."' in topics";
                        }
                        else
                        {
                             $topics .= " || '".$v."' in topics";
                        }
                   }
                   $fields['condition'] = $topics;
             }
         }
         else
         {
             $fields['condition'] = "'".$target."' in topics";
         }
         $request = new Request($this->appUrl);
         $request->setOption(CURLOPT_POST, true);
         $request->setOption(CURLOPT_HTTPHEADER,$headers);
         $request->setOption(CURLOPT_SSL_VERIFYHOST, 0);
         $request->setOption(CURLOPT_SSL_VERIFYPEER, FALSE);
         $request->setOption(CURLOPT_POSTFIELDS, json_encode($fields));
         $request->execute();
         $this->response = $request->getResponse();
     }
     public function setData($push_data)
     {
      $this->data = $push_data;
     }
   public function setTarget($target)
   {
    $this->device_target = $target;
   }
   public function setNotification($notif)
   {
    $this->notification = $notif;
   }
     public function getResponse()
     {
      return $this->response;
     }
}


Cara pakainya tinggal di instansiasi saja.

$contoh = new FirebaseManager;
$contoh->setData($data);
$contoh->setNotification($notif);
$contoh->setTarget($target);
$contoh->sendPush();

Terimakasih

Rabu, 01 Maret 2017

Fizz Buzz dan Fibonacci serta Pemecahannya dalam PHP


Tulisan ini sebenarnya hanya untuk pengingat pribadi, karena dasar ini penting sebagai logika kita dalam penyelesaian masalah.

Pertanyaannya yang paling banyak ditemukan adalah mengenai fizz and buzz dan fibonacci.

Contoh kasus:
1. Buatkanlah program php untuk mencetak angka 1-100 dengan kriteria sebagai berikut:
  • apabila bilangan tersebut kelipatan 3 maka bertuliskan fizz
  • apabila bilangan tersebut kelipatan 5 maka bertuliskan buzz
  • apabila bilangan tersebut kelipatan 3&5 maka bertuliskan fizzbuzz
Jawaban:

// Memakai fungsi for dimulai dengan $i=1 dan akan bertambah terus sampai $i<=100
for($i=1; $i<=100; $i++){ 
if($i%3 == 0){
echo "Fizz ";
}
elseif($i%5 == 0){
echo "Buzz ";}
elseif($i%3 == 0 && $i%5 == 0){
echo "FizzBuzz ";}
else{
echo $i." ";}}
 2. Buatkanlah function php untuk mencetak bilangan fibonacci dengan contoh output 10 deret bilangan fibonacci

Jawaban:

function cetak_deret_fibonacci($jumlah){
$bilangan_awal = 0;
$bilangan_kedua = 1;
echo "$bilangan_awal $bilangan_kedua ";
for($i=0; $i<=$jumlah-2; $i++){
$hasil = $bilangan_awal+$bilangan_kedua;
echo "$hasil ";
$bilangan_awal = $bilangan_kedua;
$bilangan_kedua = $hasil;}}
//Cetak dengan function
cetak_deret_fibonacci(10);


Oke Mungkin cukup sekian, semoga berguna dan bermanfaat.
 

Selasa, 14 Februari 2017

Mari Menjaga Keamanan Website

Tulisan ini sebenernya suatu kekesalan saya pribadi terhadap banyaknya developer web yang tidak mengindahkan pentingnya sebuah pengamanan  website.

Setelah beberapa pekan terakhir saya berseluncur khususnya di website-website Indonesia banyak sekali yang saya temukan. Dan akan sedikit saya share disini mengenai yang saya temukan disini, tapi sekali lagi sebelum saya share disini, jauh-jauh hari saya sudah mengingatkan webmasternya atau administratornya dengan contoh melalui email, log, dll.

Apa saja yang saya temukan:


  1. Menampilkan/Mengupload File yang menurut saya tidak semestinya di upload atau Fatal. Silahkan Klasifikan sendiri :p.
    Mau itu terpublish atau tidak. Contoh kasus kita mengupload file .sql(berisi dump database). Pertanyaan selanjutnya apakah file tersebut bisa diselancar dan dicari? Jawabannya kemungkinan bisa! Karena beberapa features mesin pencari google bisa kita gunakan untuk ini. Sekali lagi, mau itu penting, tidak penting, rahasia, atau apapun tolong jangan sekali-kali asal upload ke server yang akhirnya menjadi boomerang untuk web/server tersebut.

    Kita contohkan saja

    Google Dork:
    Inurl:go.id Filetype:sql Intext:INSERT
    Silakan dicoba! Atau kita rubah menjadi Inurl:.id 
  2. Memakai plugin yang memiliki vuln.
    Saya sarankan developer sebelum memasang plugin dalam sebuah website untuk mencari tahu dahulu apa ada atau tidak bugs dalam plugin tersebut. Dan saya sangat sarankan lagi untuk membaca dan memahami kembali coding dalam plugin tersebut, karena biasanya ini bisa menyasar kemana-mana. Atau bisa dibilang efeknya dominos dan berkaitan dengan lainnya.
  3. SQL Injection.
    Ini pun sama, biasanya banyak developer tidak mengindahkan dan memahami apa itu SQL injection. Biasanya dalam feature shared hosting sudah mulai ditutupi dengan plugin plugin untuk menutupi ini. Tapi sekali lagi saya harapkan developer pun menjaga agar code yang dibuatnya tidak memiliki potensi untuk dimasukan sesuatu yang akhirnya menjadi fatal.
    Biasanya bagi mereka yang masih belum memahami ini akhirnya database bisa tercuri dan fatalnya lagi efek ini berkelanjutan. Dalam beberapa kasus seorang yang telah melewati SQL Injection bisa memasuki page administrator dan memasang backdoor. Apa itu shell, atau bahkan bisa sampai root(user tertinggi) dan akhirnya saya tidak perlu memberi tahu lagi apa efeknya.
    Contoh paling yang sangat fatal adalah saya berhasil melihat isian database dari website sumselprov.go.id
    Tapi sekali lagi saya tidak melakukan apa-apa, saya hanya meneliti saja di dalamnya. Dan sudah saya ingatkan melalui beberapa kali email, jawabannya: tidak ada balasan :))
  4. Unrestricted File Upload
    Di beberapa kasus juga biasanya para developer tidak mengindahkan dan memahami code yang dibuatnya. Akhirnya, sekali lagi siapapun bisa mengupload backdoor kedalam server tersebut. Dan efeknya? Silahkan dicoba sendiri :D saya sudah jelaskan diatas.
Sekali lagi sebetulnya masih banyak, tapi hanya itu dulu yang saya sampaikan. Harapan dan saran untuk kita semua untuk menjaga keamanan website sederhanan sekali. Aktif dalam forum, update, baca, dan jangan makan gaji buta:))
Aktif dalam artian memiliki keinginan untuk terus memperbaharui apabila setelah di analisis/dilaporkan memiliki banyak kekurangan dan celah keamanan.
Beberapa kasus disini sekali lagi hanya sebagian besar, dan masih banyak yang belum saya ketahui dari berbagai aspek lainnya. Mungkin nanti dapat ditambahkan oleh teman-teman yang lain.

Jadi kesimpulannya adalah : Mari Menjaga Keamanan Website :)

Sedikit quotes untuk para web developer untuk lebih semangat dan bekreasi:

Most good programmers do programming not cause they expect to get paid/get adulation by the public, but cause it is fun to program. ~Linus Torvalds

Akhir kata, SALAM BERSAMA!! Hehehe



Selasa, 17 Januari 2017

Error Foreign Key lebih dari 1 dalam 1 Table

Dalam pengimplementasian relation table biasanya kita mengenal apa itu foreign key. Permasalahan yang sering ditemui adalah pada saat 1 table mempunyai relasi kolum yang lebih dari 1. Mengapa?


“Error creating foreign key on [table] (check data types)”
#1452 - Cannot add or update a child row: a foreign key constraint fails 
Ini sedikit jawaban permasalahan diatas, saya pun akhirnya menemukan solusinya.

  1. Coba cek atribut kolum yang akan di relasikan apakah UNSIGNED atau tidak.
  2. Tidak hanya kolum atribut jangan lupa di uncentang 
Dan berhasil!


Mungkin cukup sekian, semoga bermanfaat.

Sabtu, 14 Januari 2017

Mari berbangga dengan .ID dan teman-temannya

http://irfan.my.id/wp-content/uploads/2015/10/Bangga-Pakai-ID-Domain-Indonesia-PANDI.png

Transformasi, mungkin itulah kata yang tepat untuk kita sekarang. Mengapa? Karena setelah googling dan saya yang ketinggalan banyak berita :D mulai paham bahwa khususnya pemerintah melalui perangkat-perangkat pelaksananya mulai gencar untuk mengkampanyekan produk atau hal-hal yang berhubungan dengan negeri kita yaitu Indonesia.

Bagi temen-temen yang aktif dalam dunia pembangunan website contohnya. Pemerintah melalui Kementerian Komunikasi dan Informatika sejak 2016(kalau tidak salah) gencar dengan program 1juta.id-nya. Pada dasarnya program ini memberikan gratis 1 tahun domain ID ataupun turunananya (CO.ID/OR.ID dll) beserta hosting minimal 100MB. Dan lebih enaknya lagi kita bisa dibimbing dengan para profesional di bidang ini. Untuk informasi lebih lanjut silahkan kunjungi tautan tadi.

Selanjutnya, untuk temen-temen yang suka menggunakan shortener url biasanya ada bit.ly ataupun shortener yang lain coba kita gunakan salah satu produk lokal buatan temen-temen dari PANDI dengan tautan S.ID sebagai contoh saya pake S.ID/CCID untuk website cangkangsuuk-creative.id.

Apalagi ya...

Oh iya bagi teman-teman developer PHP juga yang biasa menggunakan framework, kita bisa juga gunain PANADAFRAMEWORK. Selain mudah, sederhana, sudah barang tentu ini juga buatan senior-senior kita dari dalam negeri.

Jadi kesimpulannya.. Sudah pasti kita semua paham kan, Mari berbangga dengan .ID dan teman-temannya..

Mungkin sekian dulu, akhir kata mohon maaf bila banyak kekurangan. Mungkin dilain waktu saya bisa tambahkan beberapa 'ajakan' ini. Terimakasih

Salam


Silahkan dibaca juga untuk menambah kebanggaan kita: