October 30, 2015

Cara memasang event javascript pada object yang digenerate secara dinamik dengan menggunakan jquery

Misal jika kita punya sebuah radio button yang digenerate secara dinamik, yaitu di generate pada saat di picu oleh event lain, maka jika kita menggunakan event yang biasanya tersebut tidak ada akan bisa digunakan
contoh event yang biasa kita gunakan

$("#radioId").click(function(){
  command......
});

perintah ini tidak akan dijalankan, karena pada saat javascript di load halaman web pertama kali, object yang yang dicari yaitu id #radioId belum ada. untuk solusi tersebut bisa menggunakan perintah
$('.general').on('click', '#radioId', function () {
    alert("We have Access!");
});

contoh dari perintah ini .general adalah class yang berada di luar dari #radioId.

October 29, 2015

Cara Install Package Control sublime Text 2 dan jsformat untuk membuat tampilan json lebih mudah dibaca..

1. Klik halaman ini https://packagecontrol.io/installation
2. Lalu pilih Sublime yang digunakan yang versi 2 atau 3
3. Lalu copy kode tersebut.
4. Buka sublime, Pilih menu view -> show console
5. Paste kode tersebut dibagian input pada console. lalu enter
6. Jika sudah terinstall maka buka Package Control dengan menggunakan shortcut ctrl+shift+p
7. Untuk install package/plugin ctrl+shift+p -> Ketik Install Package (Pilih Install Package) -> pilih package yg mau di install. (jsformat)
8. Tunggu hingga selesai terinstall - bisa dilihat dibagian bawah info sudah selesai terinstall apa belum.
9. Jika sudah terinstall bukan file json dan ketik ctrl+alt+f maka tampilan format json sudah bisa terbaca dengan baik.

September 3, 2015

Pengalaman Beli Perlengkapan Komputer dan tablet / handphone di Hitech Mall Surabaya

Sejak pindah ke Surabaya hampir setahun lalu ini baru beberapa kali saja datang ke Hitech Mall /THR. Kebetulan karena kebetulan memerlukan beberapa perlengkapan komputer, dan di mall ini memang isinya para penjual komputer dan accessorisnya. Namun satu hal yang perlu di cermati kalau kita mau beli ditempat ini, yaitu jangan sungkan-sungkan untuk bertanya - tanya terlebih dahulu kepada toko, untuk harganya. Perbanyak referensi harga pada semua toko (jika bisa), karena pengalaman beberapa kali beli disitu ada harga-harga yang tidak wajar alias terlalu mahal jika kita tidak punya banyak referensi harga.

Pernah suatu kali ketika dimintai oleh seorang teman untuk membelikan sebuah laptop, pada waktu itu karena sama istri datengnya ke Hitech Mall sudah terlalu sore menjelang malam yang ternyata sudah banyak yang tutup. Pada waktu itu langsung ditawari oleh salesnya yang berada di pintu masuk langsung aja kita digiring ke tokonya yang berada paling ujung. Ya dikarenakan sudah banyak yang tutup ya mau tidak mau kami ikut saja, Dan langsung disodori beberapa selebaran tentang harga-harga dan sepertinya terkesan memaksa supaya kami membeli laptop tersebut. Namun dikarenakan kami juga kurang sreg akhirnya kami batalkan, dan tampak raut wajah yang kurang senang dari si penjual :).

Setelah dapat info dari temen-temen yang pernah berbelanja laptop di Hitech Mall ada satu toko yang berada di lantai 2, berangkat dari info tersebut akhirnya saya memutuskan besoknya kembali lagi ke Hitech Mall berangkat jam 10 pagi sendiri. Sesampai disana langsung menuju toko tersebut.. Dan ternyata antrian di toko itu sangat panjang sekali. Ntah mengapa bisa sampai begitu, tapi ketika saya cocoknya dengan laptop dengan merek dan spesifikasi yang sama dengan yang kemarin malam saya di tawari itu ternyata beda harganya bisa sampai 500rb keatas. Sungguh terlalu kalau saya sampai deal dengan toko yang buka pada menjelang malam tersebut. perbedaan harga yang signifikan sekali. Akhirnya setelah juga melihat ke beberapa toko, saya putuskan untuk beli di toko tersebut. Karena terlalu ramenya sampai-sampai hampir 1/2 jam an saya perlu mengantri untuk mendapatkan laptop tersebut.

Dan tidak hanya itu perbedaan harga juga ada ketika membeli sebuah tablet dan memory.  Yang perbedaan harganya bisa lebih dari 100rb an keatas. Untuk itu saran saya jika membeli di Hitech Mall referensi harga sangat penting, jangan sampai kita membayar lebih ketika ada toko yang menawarkan harga lebih murah, padahal merek dan spesifikasi yang sama persis, Dan yang terakhir jika membeli peralatan elektronik selalu tanyakan garansi, karena namanya juga barang elektronik bisa saja pas kita buka dan mau digunakan ternyata tidak berfungsi sebagai mana adanya.

August 17, 2015

Hari Kemerdekaan Indonesia ke 70 tahun.


Selamat hari kemerdekaan Indonesia yang ke 70, semoga Indonesia makin jaya. Merdeka.

August 14, 2015

Review tentang internet Indihome / Speedy / Telkom



Tidak terasa sudah hampir sebulan lebih saya sudah menggunakan internet Speedy/Indihome ini. Dengan kecepatan Up To 3Mbps saya kira sudah cukup untuk segala kebutuhan saya dalam menggunakan internet, streaming youtube.com sudah lumayan tanpa delay namun harus menggunakan resolusi yang tidak terlalu tinggi. Dan untuk urusan pekerjaan sudah tercukup untuk digunakan upload dan download. Sayangnya koneksi Speedy/Indihome ini agak kurang kalau kita gunakan untuk bermain game online terutama game Dota 2, karena kadang koneksi kurang stabil / ping terlalu besar yg akan menyebabkan delay pada saat main game.

Namun tidak hanya internet saja yang saya dapatkan dengan menggunakan Indihome ini, selain itu saya juga mendapatkan set topbox UseeTV yang digunakan untuk TV kabel, untuk kualitas mungkin kurang baik karena bandwith nya terbatas hanya 3Mbps yang digunakan untuk TV Kabel dan Internet jadi kadang ada delay pada saat kita menonton TV Kabel tersebut, namun secara rata-rata sudah cukup lah.

Untuk biaya perbulan hanya perlu mengeluarkan 233rb, itu sudah dapat internet 3Mbps dan UseeTV. Ya lumayan daripada harus ke wifi corner kalau perlu download. Sekarang sudah bisa download di rumah dan sambil bekerja.

July 10, 2015

internet telkom indihome

Telkom, mendengar kata-kata ini pasti saya teringat sejak dulu banyak sekali komplain-komplain yang datang kepadanya, tapi memang BUMN satu ini juga tidak sempurna. Tetapi bagaimanapun tetap menjengkelkan, kadang respon kita yang tidak pernah terjawab oleh mereka,  atau setelah terjawab pun solusi kadang-kadang ya seperti itu, sangat kurang memuaskan. Tapi mungkin itupun tidak hanya melulu tentang telkom, mungkin provider-provider lain juga seperti itu, tapi tidak terlalu masiv seperti telkom, karena mungkin pangsa pasar untuk provider-provider masih sangat kecil.

Sedikit kejengkelan saya ini bermula pada saat beberapa hari yang lalu, saya ingin memasang Indihome, sejujurnya saya ingin pasang provider lain, tapi yang melewati tempat tinggal saya sementara ini hanya provider plat merah tersebut.

Dalam peta yang terlampir pada saat pendaftaran Indihome tersebut dikatakan daerah tempat tinggal saya sudah bisa terpasang Fiber, yang akhirnya saya jatuhkan pilihan tersebut melalui seorang marketing yang saya temukan di sebuah media sosial di internet. Saya pun melakukan pendaftaran dengan hanya menggunakan scan ktp. Namun beberapa hari setelahnya saya di telp oleh pihak telkom kalau saya ingin mendaftar indihome, namun dijelaskan bahwa paket yang saya pilih itu belum bisa terpasang di tempat saya, yang akhirnya mau tidak mau saya harus menggunakan paket yang dibawah tersebut, karena sarana dan prasarana untuk pemasang Fiber didaerah tempat saya belum terpasang dan harus nunggu sekitar 5 bulan lagi. :( Sedikit menyesal sih tapi mau gimana lagi, sudah ketentuannya seperti itu. 

Tetapi yang agak aneh Gang disebelah tempat tinggal saya itu sudah bisa terpasang dengan Fiber, padahal jalan masuk gang tersebut bersimpangan dengan gang tempat saya tinggal. Kalo pemikiran saya apa susahnya sih kabel itu ditarik dari jalan masuk gang yang sudah ada fibernya tadi. Tapi setelah saya lihat-lihat dan cek kabel-kabel tersebut ternyata di gang saya juga sudah terpasang kabel-kabel, namun box yang ada belum terpasang, sementara gang disebelah tempat tinggal saya sudah terpasang lengkap.

Kadang yang bikin saya sangat heran kenapa harus tunggu kira2 5 bulan lagi. Apa kira-kira telkom yang mau tunggu.......

Ya maklum tempat saya tinggal bukan tempat rumah mewah yang mungkin banyak tersedia provider-provider lain yang sudah memasang infrastrukturnya ditempat tersebut. Ya mau tidak mau harus mengikuti yang sudah ada tersebut.



Mungkin nanti kalo provider-provider lain sudah banyak memasang infrastrukturnya mungkin kita bisa pilih yang terbaik untuk kita gunakan.


June 24, 2015

java, tutorial, spring, api, rest : simple insert,update,delete (CRUD) dengan NamedParameterJdbcTemplate

Kali ini saya akan menuliskan sebuah tutorial aplikasi REST untuk melakukan CRUD dengan menggunakan NamedParameterJdbcTemplate. Mungkin hampir sama sih kalo kita menggunakan JdbcTemplate

1. untuk pertama mungkin kita perlu membuat sebuah domain, misal domain user dengan isi sebagai berikut.

package com.eka.auth.domain;

/**
 *
 * @author pnukeid
 */
public class Users {



    private String username;
    private String password;
    private Boolean enabled;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Boolean getEnabled() {
        return enabled;
    }

    public void setEnabled(Boolean enabled) {
        this.enabled = enabled;
    }

}
 
2. selanjutnya adalah membuat dao interface dan dao implementation.


ini adalah contoh interface dao
package com.eka.auth.dao;

import com.eka.auth.domain.Users;
import com.eka.auth.model.InputPagging;
import java.util.List;

/**

 * @author pnukeid
 */

public interface UsersDao  {
    
    public void save(Users users) throws Exception;
    public void update(Users users) throws Exception;
    public void delete(Users users) throws Exception;
    public Users findByUserName(String username) throws Exception;
    public List<users> findAll(InputPagging pagging) throws Exception;
    public Integer count() throws Exception;
}
dan berikutnya adalah implementation dari dao interface nya.

package com.noi.auth.dao.impl;

import com.eka.auth.dao.UsersDao;
import com.eka.auth.domain.Users;
import com.eka.auth.mapper.UsersExcludePasswordMapper;
import com.eka.auth.mapper.UsersMapper;
import com.eka.auth.model.InputPagging;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.stereotype.Repository;

/**
 *
 * @author pnukeid
 */
@Repository
public class UsersDaoImpl implements UsersDao {


    @Autowired
    private NamedParameterJdbcTemplate namedParameterJdbcTemplate;

    public void save(Users users) throws Exception {
        String SQL = "INSERT INTO users (username, password, enabled) VALUES (:username, :password, :enabled)";
        Map namedParameters = new HashMap();
        namedParameters.put("username", users.getUsername());
        namedParameters.put("password", users.getPassword());
        namedParameters.put("enabled", users.getEnabled());
        namedParameterJdbcTemplate.update(SQL, namedParameters);
    }

    public void update(Users users) throws Exception {
        String SQL = "UPDATE users SET password = :password, enabled = :enabled WHERE username = :username";
        Map namedParameters = new HashMap();
        namedParameters.put("username", users.getUsername());
        namedParameters.put("password", users.getPassword());
        namedParameters.put("enabled", users.getEnabled());
        namedParameterJdbcTemplate.update(SQL, namedParameters);
    }

    public void delete(Users users) throws Exception {
        String SQL = "DELETE FROM users WHERE username = :username";
        Map namedParameters = new HashMap();
        namedParameters.put("username", users.getUsername());
        namedParameterJdbcTemplate.update(SQL, namedParameters);
    }

    public Users findByUserName(String username) throws Exception {

        String SQL = "SELECT count(*) FROM users WHERE username = :username";
        SqlParameterSource sqlParam = new MapSqlParameterSource().addValue("username", username);
        Integer usersCount = namedParameterJdbcTemplate.queryForObject(SQL, sqlParam, Integer.class);

        Users users = null;

        if (usersCount != 0) {
            SQL = "SELECT * FROM users WHERE username = :username";
            SqlParameterSource namedParameters = new MapSqlParameterSource("username", username);
            users = (Users) namedParameterJdbcTemplate.queryForObject(SQL, namedParameters, new UsersMapper());
        } 
        return users;
    }

    public List<users> findAll(InputPagging pagging) throws Exception {
//        namedJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplateOauth);
        String SQL = "SELECT * FROM users LIMIT :offset,:count";
        SqlParameterSource sqlParam = new MapSqlParameterSource().addValue("offset", pagging.getOffset()).addValue("count", pagging.getLimit());
        List<users> users = (List<users>) namedParameterJdbcTemplate.query(SQL, sqlParam, new UsersMapper());
        return users;
    }

    public Integer count() throws Exception {
        String SQL = "SELECT count(*) FROM users";
        SqlParameterSource sqlParam = new MapSqlParameterSource().addValue("", "");
        Integer usersCount = -100;
        return usersCount = namedParameterJdbcTemplate.queryForObject(SQL, sqlParam, Integer.class);
    }

}


3. selanjutnya adalah service. service di java ini berperan sebagai rule bisnisnya. jadi segala kegiatan process bisnis berjalan di service ini. ada kalanya definisi service interface ini tidak jauh beda dengan yang sudah kita definisikan di dao interface.

package com.eka.auth.service;


import com.eka.auth.domain.Users;
import com.eka.auth.model.InputPagging;

import java.util.List;

/**

 * @author pnukeid
 */
public interface UsersService {
    
    public void save(Users users) throws Exception;
    public void delete(String username) throws Exception;
    public Users findUserByUserName(String username) throws Exception;
    public Boolean findUserIsAvailableByUserName(String username) throws Exception;
    public List<users> findAll(InputPagging pagging) throws Exception;
}


dan untuk service implementationnya.

package com.eka.auth.service.impl;


import com.eka.auth.dao.UsersDao;
import com.eka.auth.domain.Users;
import com.eka.auth.model.InputPagging;
import com.eka.auth.service.UsersService;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 *
 * @author pnukeid
 */
@Service
public class UsersServiceImpl implements UsersService {
    
    @Autowired
    private UsersDao usersDao;
     
    @Transactional
    public void save(Users users) throws Exception {
        
        Users users = new Users();        
        users.setUsername(userProfiles.getUsername());
        users.setPassword(userProfiles.getPassword());
        users.setEnabled(userProfiles.getEnabled());

        if(usersDao.findByUserName(userProfiles.getUsername()) == null){
            usersDao.save(users);
        }else{
            usersDao.update(users);
        }
    }

    @Transactional
    public void delete(String username) throws Exception {

        Users users = usersDao.findByUserName(username);
        usersDao.delete(users);
    }

    public List<users> findAll(InputPagging pagging) throws Exception {
        return usersDao.findAll(pagging);
    }
 

    public Users findUserByUserName(String username) throws Exception {
        return usersDao.findByUserName(username);
    }

    public Boolean findUserIsAvailableByUserName(String username) throws Exception {
        Boolean usernameIsAvailable = false;
        
        if(usersDao.findByUserName(username) == null)
            usernameIsAvailable = true;
        
        return usernameIsAvailable;
    }
}


untuk yang terakhir adalah mmebuat REST apinya. yang nantinya aplikasi yang selesai dibuat ini akan bisa diakses oleh apa saja.

package com.eka.auth.admin.controller.ajax;

import com.eka.auth.domain.Users;
import com.eka.auth.model.InputPagging;
import com.eka.auth.model.InputUsername;
import com.eka.auth.service.UsersService;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 *
 * @author pnukeid
 */
@Controller
@RequestMapping("api/v1/admin/user")
public class UserAdminAjaxController {
    
    @Autowired
    private UsersService usersService;
    
    
    /* GET LIST ALL USER FROM DATABASE*/
    @ResponseBody
    @RequestMapping(consumes = {MediaType.APPLICATION_JSON_VALUE}, produces = {MediaType.APPLICATION_JSON_VALUE},
            method = RequestMethod.POST,
            value = "/getdata")
    ResponseEntity<Object> getAllUser(
            @RequestBody InputPagging requestBody,
            HttpServletResponse response) throws Exception {
        Users resultPagging = usersService.findAll(requestBody);
        return new ResponseEntity<Object>(resultPagging, HttpStatus.OK);
    }
    
    /* SAVE / UPDATE USER */
    @ResponseBody
    @RequestMapping(consumes = {MediaType.APPLICATION_JSON_VALUE},
            method = RequestMethod.POST,
            value = "/")
    ResponseEntity<Object> saveUser(
            @RequestBody UsersProfiles requestBody,
            HttpServletResponse response) throws Exception {
        usersService.save(requestBody);
        return new ResponseEntity<Object>("saved", HttpStatus.OK);
    }
    
    /* DELETE USER */
    @ResponseBody
    @RequestMapping(consumes = {MediaType.APPLICATION_JSON_VALUE},
            method = RequestMethod.DELETE,
            value = "/")
    ResponseEntity<Object> deleteUser(
            @RequestBody InputUsername requestBody,
            HttpServletResponse response) throws Exception {
        String username = requestBody.getUsername();
        usersService.delete(username);
        return new ResponseEntity<Object>("deleted", HttpStatus.OK);
    }
    
    /* FIND USERNAME IS AVAILABLE OR NOT*/
    
    @ResponseBody
    @RequestMapping(produces = {MediaType.APPLICATION_JSON_VALUE},
            method = RequestMethod.POST,
            value = "/available")
    ResponseEntity<Object> checkUserName(
            HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        Boolean isAvailable;
        String username = request.getParameter("username");
        isAvailable = usersService.findUserIsAvailableByUserName(username);
        return new ResponseEntity<Object>(isAvailable, HttpStatus.OK);
    }

}
 


sekian.

June 22, 2015

Java, Snippet : penggunaan fungsi split pada java

Misal saya mempunyai sebuah tulisan "Saya,suka,makan,nasi" dan anda ingin mendapatkan satu persatu dari kata tersebut, dan jika anda ingin mendapatkan kata "nasi" saja. Dengan cara yang simpel saya akan tunjukkan didalam pemrograman java.


String kata = "Saya,suka,makan,nasi";
String[] kataSplit = kata.split(",");
writeln("kataSplit[3]");

Hasilnya adalah "nasi"

June 18, 2015

memasang SyntaxHighlighter agar kode program yang ditampilkan pada blog lebih mudah dibaca.

untuk penulis blog yang baru belajaran seperti saya saat ini, plugin ini saya bermanfaat sekali, karena mungkin sebagian besar tulisan saya nanti akan banyak berupa potongan-potongan kode. setelah mencari-cari dengan googling, ternyata saya menemukan http://alexgorbatchev.com/SyntaxHighlighter/ . dan sekarang setelah baca-baca petunjuknya mulailah percobaan memasang. Sedikit membingungkan awalnya, tapi setelah mencari -cara  ketemu dari stackoverflow. berikut cara-caranya..

1. buka template blogger anda.
2. setelah template blogger terbuka maka copy kan code css ini didalam template anda sebelum tag <b:skin>
3. paste kode yang berada dibawah ini sebelum tag </head>
<script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shCore.js" type="text/javascript"></script>
<script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushCpp.js" type="text/javascript"></script>
<script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushCSharp.js" type="text/javascript"></script>
<script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushCss.js" type="text/javascript"></script>
<script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushDelphi.js" type="text/javascript"></script>
<script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushJava.js" type="text/javascript"></script>
<script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushJScript.js" type="text/javascript"></script>
<script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushPhp.js" type="text/javascript"></script>
<script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushPython.js" type="text/javascript"></script>
<script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushRuby.js" type="text/javascript"></script>
<script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushSql.js" type="text/javascript"></script>
<script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushVb.js" type="text/javascript"></script>
<script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushXml.js" type="text/javascript"></script>

4. paste kode dibawah ini sebelum tag </body>
<script language="javascript">
dp.SyntaxHighlighter.BloggerMode();
dp.SyntaxHighlighter.HighlightAll('code');
</script>

5. dan jika sudah benar maka template tersebut bisa disimpan.
6. sekarang penggunaan sintaks sudah bisa dilakukan dengan menambahkan tag <pre></pre> contoh :
<pre name="code">
..Your html-escaped code goes here...
</pre>

<pre name="code" class="php">
echo "I like PHP";
</pre>


ok selamat mencoba..
catatan : sumber

Java : menghitung hasil query sql menggunakan perintah count() dengan NamedParameterJdbcTemplate

untuk versi yang baru dari spring sudah tidak mensupport queryForInt() dan queryForLong() dan alternatifnya bisa menggunakan perintah queryForObject();

berikut contohnya untuk penggunaan queryForObject();

public Integer count() throws Exception {
        String SQL = "SELECT count(*) FROM users";
        SqlParameterSource sqlParam = new MapSqlParameterSource().addValue("", "");
        Integer usersCount = -100;
        return usersCount = namedParameterJdbcTemplate.queryForObject(SQL,sqlParam, Integer.class);
    }

June 17, 2015

Java, Web : HTTP Status 405 - Request method 'POST' not supported

error diatas muncul pada saat saya akan melakukan login pada aplikasi authentifikasi server.

 error tersebut kebetulan muncul setelah mengganti  formLogin().loginProcessingUrl("/login_check") yang semula isinya adalah "/login",

setelah di check pada beberapa controller yang bersangkutan dengan pemanggilan "/login" sudah benar semua, dan ternyata tinggal satu yang belum diganti yaitu pada form login. dan ternyata pada bagian tag form nilai action juga harus dirubah menjadi login_check karena login akan melakukan request POST ke url /login_check.