Java: Save/Append Long Values into a Binary Representation and Load Them Back Again

The code below is the code to save or append a set of ong values into a binary representation (in-memory or file) and load it back again.

First, we have a set of Long values. To append these values into a binary representation, we use the ByteArrayOutputStream class as the underlying output stream and the DataOutputStream class to ease saving a Long value. We iterate throughout the set and write the Long value into the ByteArrayOutputStream using the writeLong method owned by the DataOutputStreamWe then assign the result into an intermediate binary representation, the byte array byte[] data.

To read the binary representation, we use the ByteArrayInputStream to read from binary representation (the byte[] data) and DataOutputStream again ease reading the binary representation as Long values. We clear the set just to give an empty set for the values that we are going to read so they are not mixed with the initial values.  We use the  dis.available() > 0 condition for the while statement to iterate throughout the binary representation and dis.readLong() method owned by the DataOutputStream to read the binary format as a Long value. We then add the value into the set.

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.util.HashSet;
import java.util.Set;

public class Main {
    public static void main(String[] args) {
        try {
            Set = new HashSet();
            set.add(0L);
            set.add(1L);
            set.add(2L);

            //write
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            DataOutputStream dos = new DataOutputStream(baos);
            System.out.println("Input: " + set);
            for (Long item : set) {
                dos.writeLong(item);
            }
            byte[] data = baos.toByteArray();

            //read
            ByteArrayInputStream bais = new ByteArrayInputStream(data);
            DataInputStream dis = new DataInputStream(bais);
            set.clear();
            while(dis.available() > 0){
                long value = dis.readLong();
                set.add(value);
            }
            System.out.println("Output: " + set);

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}
Advertisements

Yesus tidak tahu kapan kedatangan-Nya kedua kali?

Pendahuluan

Satu pertayaan yang sering ditanyakan kepada orang-orang yang percaya Yesus sebagai Tuhan mereka adalah, “Jika memang Yesus adalah Tuhan dan Dia dan Bapa adalah satu, mengapa Dia mengatakan tidak mengetahui kapan hari kedatangan-Nya kedua kali?” Pertanyaan ini sering ditanyakan berkaitan dengan ayat Matius 24:36 dan Markus 13:32.

Tetapi tentang hari dan saat itu tidak seorangpun yang tahu, malaikat-malaikat di sorga tidak, dan Anakpun tidak, hanya Bapa sendiri.” (Matius 24:36)

Tetapi tentang hari atau saat itu tidak seorangpun yang tahu, malaikat-malaikat di sorga tidak, dan Anakpun tidak, hanya Bapa saja.” (Markus 13:32)

“Tahu” yang Dimaksud dalam Bahasa Yunani

Menurut biblehub.com, kata “tahu” yang dimaksud dalam Bahasa Yunani-nya adalah “oiden” (perfect form) yang berasalah dari akar kata “eídō” (oida). Kata ini secara harfiah berarti “melihat dengan mata fisik” atau bisa juga diartikan sebagai “melihat secara mental” (I see what you mean) atau “melihat yang membawa kepada pengetahuan / pemahaman”atau berarti “sudah melihat atau mengamati sehingga mengetahui”. Bentuknya yang perfect mengartikan “tidak tahu” pada kedua ayat tersebut sebagai “belum mengetahui”.

Apakah Yesus Benar-benar Tidak Tahu?

Yesus Maha Tahu

Walaupun Yesus mengatakan tidak tahu, ada banyak bagian di Alkitab yang menunjukkan bahwa Ia maha tahu. Sebagai contoh, Yesus menubuatkan kalau Petrus akan menyangkal 3 kali (Lukas 22:31-34). Yesus tahu kalau salah satu dari murid-miridnya akan menghianati Dia (Lukas 22:21-23; Yohanes 6:70). Dia juga tahu bahwa hari-Nya telah dekat dan akan mati di kayu salib (Markus 8:31-32), dan masih banyak lagi ayat-ayat di Alkitab yang menyatakan kemahatahuan Yesus (contoh tambahan: Yohanes 6:64; Matius 12:25; Lukas 6:8; 11:17).

Yesus Tahu Tanda-tanda Kedatangan-Nya Kedua Kali

Masih berkaitan dengan kemahatahuan Yesus, Dia juga tahu tanda-tanda kedatangan-Nya yang kedua kali. Tentang ini diceritakan oleh Nya pada paragraf yang sama di mana Dia mengatakan tidak tahu mengenai kapan kedatangan-Nya kedua kali dan juga paragraf sebelumnya. Dia berkata akan ada kesusahan besar dan bencana alam luar biasa akan terjadi (Matius 24Markus 13).

Anak dan Bapa adalah Satu

Yesus menyatakan bahwa Bapa mengenal Dia dan Dia mengenal Bapa, Bapa dan Dia adalah satu seperti yang diyatakan pada Yohanes 10:15,30 dan Matius 11:27. Tidak terbatas pada dua ayat ini, masih banyak lagi ayat-ayat lain yang menyatakan kesatuan Anak dan Bapa.

Jadi, jika Yesus maha tahu, dan Dia dengan jelas tahu tanda-tanda kedatangan-Nya kedua kali, dan Dia juga mengenal Bapa; Bapa dan Dia adalah Satu. Apakah mungkin Dia tidak tahu kapan hari dan waktu kedatanganya kedua kali?

Apa Maksud Yesus Berkata Tidak?

Gaya komunikasi Yesus

Yesus berkali-kali menggunakan gaya komunikasi yang seakan-akan dia tidak tahu. Tujuannya adalah agar lawan bicaranya dapat lebih menangkap apa yang Dia maksud. Contohnya, pada saat Yesus bercakap-cakap dengan perempuan Samaria (Yohanes 4:5:-43, khususnya ayat 6) atau ketika perempuan yang sakit pendarahan menyentuh Yesus (Lukas 8:43-48).

Ada Maksud Lain Yesus Mengatakan Tidak Tahu

Untuk menemukan apa maksud Yesus mengatakan tidak tahu dapat dilihat pada kalimat-kalimat sesudah Dia menyatakan ketidaktahuan-Nya. Murid-murid-Nya diminta supaya berjaga-jaga karena mereka tidak tahu kapan waktu-Nya, bisa terjadi kapan saja (Matius 24:38-51, Markus 13:33-35). Jika Yesus memberitahukan waktu pasti kedatangan-Nya kedua kali, maka kemungkinan murid-murid-Nya hanya akan bersantai dan tidak berjaga-jaga sebelum waktunya. Jadi, sebaiknya, murid-murid-Nya tidak boleh tahu dan sebaik-Nya tidak tahu kapan hari dan saatnya.

Kapasitas Peran Yesus sebagai Anak

Alasan lain adalah karena Yesus bertindak sesuai dengan kehendak Bapa (Yohanes 8:28; 12:49-50; 14:31). Jika Bapa menghendaki maka Dia akan memberitahukan hari dan waktunya. Dia tidak akan bertindak di luar peran-Nya sebagai Anak. Pada kedua ayat tersebut, Yesus menyatakan “hanya Bapa saja” yang tahu. Dia sadar bahwa memberitahukan waktunya adalah wewenang dari Bapa dan bukan wewenang Dia menyatakan itu kepada murid-murid-Nya.

 

 

 

 

 

Module 01 Halo Dunia dan Administrasi

Python

Python adalah bahasa pemrograman tingkat tinggi (high-level) yang ditujukan untuk pemrograman umum (general-purpose) dan menggunakan interpreter dalam eksekusinya. Bahasa ini memiliki filosofi yang menekankan pada kemudahan untuk membaca kode program dan memudahkan penggunanya penggunanya membuat kode program yang lebih singkat jika dibuat dengan menggunakan Java atau C++. Python mendukung paradigma pemrograman berorientasi objek, prosedural, dan fungsional. Selain itu, Python menggunakan sistem tipe dinamis, manajemen memori otomatis, dan memiliki pustaka standar yang relatif lengkap. Versi intepreter Python tersedia untuk berbagai platform sistem operasi.

Django

Django adalah kerangka kerja aplikasi web yang ditulis dengan menggunakan bahasa pemrograman Python. Django bersifat open source dan menggunakan pola arsitektural Model View Controller. Framework ini dikelola oleh Django Software Foundation (DSF), suatu organisasi independen nonprofit. Django sendiri dibuat dengan tujuan menyederhanakan pembuatan aplikasi web yang menggunakan database sebagai dasar pembangunannya (database-driven). Prinsip-prinsip yang ditekankan antara lain, reusability dan pluggability, rapid development, dan DRY (don’t repeat yourself). Selain itu, Django juga menyediakan fasilitas CRUD (Create, read, update, delete) yang dapat secara dinamis diperbaharui menggunakan introspection.

Hallo Dunia

Sebagai langkah awal untuk mempelajari Rekayasa Web, kita akan membuat aplikasi sederhana Hallo Dunia.

Prasyarat

  1. Pastikan Python 2.7 telah terpasang dan berjalan dengan baik.
  2. Koneksi internet.

Pasang Django

Lakukan langkah-langkah berikut untuk instalasi Django.

>> mkdir Module01    # membuat direktori Module01

>> cd Module01    # pindah ke dalam direktori Module01

>> virtualenv        

Perintah di atas bertujuan membuat virtual environment agar jika terjadi perubahan tidak mengganggu environtment secara keseluruhan.

Lakukan perintah berikut untuk mendownload dan menginstal Python dari internet.

>> pip install django

Perintah berikut akan mengunci versi agar tidak dapat berubah.

>> pip freeze

Membuat Project Django “Hello World”

Perintah berikut akan membuat project Django.

>> django-admin.pystart project helloworld

Kemudian pindah ke direktori helloworld

>> cd helloworld

Jalankan server agak project bisa diakses melalui web browser

>> python manage.py runserver

 

Gunakan web browser untuk mengakses http://127.0.0.1: 8000/.

Administrasi

Migrasi

Django memberikan fasilitas migrasi. Migrasi bertujuan mensinkronkan model yang terdapat dalam project/applikasi ke database.

>> python manage.py migrate

Membuat Superuser

Secara default, Django sudah memberikan fasilitas manajemen user. Untuk itu, perlu dibuat superuser untuk tujuan administrasi. Lakukan perintah berikut untuk membuat superuser.

>> python manage.py createsuperuser

>> Username:

>> Email:

>> Password:

Jalankan server agak project bisa diakses melalui web browser.

>> python manage.py runserver

 

Gunakan web browser untuk mengakses http://127.0.0.1: 8000/admin dan login dengan menggunakan user sesuai dengan username dan password yang baru saja Anda buat.

Aplikasi

Satu project dapat memiliki lebih dari satu aplikasi. Aplikasi dapat dibuat dengan menggunakan perintah berikut.

>> python manage.py startapp myapplication

 

 

 

 

 


 

T-SQL: Konversi Angka ke Terbilang

Berikut ini adalah fungsi query Microsoft SQL Server untuk mengubah angka menjadi terbilang. Misalnya, angka “999.95” akan dikonversi menjadi “Sembilan ratus sembilan puluh sembilan koma sembilan lima”. Cara penggunaannya sebagai berikut:

SELECT dbo.Terbilang(999.95)

Fungsi Terbilang tersebut menerima input NUMERIC(19,6) dan mengembalikan nilai bertipe NVARCHAR(MAX). Berikut adalah kode lengkapnya:

CREATE FUNCTION [dbo].[Terbilang](@number NUMERIC(19,6))

RETURNS NVARCHAR(MAX)

AS

BEGIN

    DECLARE 

    @position INT, 

    @length INT, 

    @words NVARCHAR(MAX), 

    @ends NVARCHAR(MAX), 

    @numStr NVARCHAR(MAX), 

    @foreStr NVARCHAR(MAX), 

    @backStr NVARCHAR(MAX), 

    @char NVARCHAR(1),

    @charafter NVARCHAR(1),

    @charprev NVARCHAR(1),

    @charprev2 NVARCHAR(1)

 

SELECT @numStr = STR(@number, 19, 2)

SELECT @numStr = LTRIM(RTRIM(@numStr))

SELECT @foreStr = SUBSTRING(@numStr, 0, (SELECT CHARINDEX('.', @numStr, 1)))

SELECT @backStr = SUBSTRING(@numStr, (SELECT CHARINDEX('.', @numStr, 1)+1), LEN(@numStr))

SELECT @length = LEN(@foreStr)

SELECT @position = @length

SELECT @words =''

 

    --Memproses "angka di depan koma" 

    WHILE(@position > 0)

    BEGIN    

            

            SELECT @char = SUBSTRING(@numStr, @length+1 - @position, 1)

            SELECT @charafter = SUBSTRING(@numStr, @length+2 - @position, 1)

            SELECT @charprev = SUBSTRING(@numStr, @length - @position, 1)

            SELECT @charprev2 = SUBSTRING(@numStr, @length - @position - 1, 1)

            

            IF ((@char = '1') AND ((SELECT(@position-1)/3.0) = 1) AND 

                (@charafter != '' ) AND ((SELECT CAST(@charprev as INT)) = 0)) 

                SELECT @words = @words + 'se' 

            ELSE

            IF ((@char = '1') AND ((SELECT @position % 3) = 1)) 

                SELECT @words = @words + 'satu ' 

            ELSE

            IF ((@char = '1') AND ((SELECT CAST(@charafter as INT)) > 1) AND 

                ((SELECT @position % 3) = 2))

                BEGIN

                    IF (@charafter = '1') SELECT @words = @words + 'se' ELSE

                    IF (@charafter = '2') SELECT @words = @words + 'dua ' ELSE

                    IF (@charafter = '3') SELECT @words = @words + 'tiga ' ELSE    

                    IF (@charafter = '4') SELECT @words = @words + 'empat ' ELSE    

                    IF (@charafter = '5') SELECT @words = @words + 'lima ' ELSE    

                    IF (@charafter = '6') SELECT @words = @words + 'enam ' ELSE    

                    IF (@charafter = '7') SELECT @words = @words + 'tujuh ' ELSE    

                    IF (@charafter = '8') SELECT @words = @words + 'delapan ' ELSE    

                    IF (@charafter = '9') SELECT @words = @words + 'sembilan '

                END

            ELSE

            IF (@char = '1') SELECT @words = @words + 'se' ELSE

            IF (@char = '2') SELECT @words = @words + 'dua ' ELSE

            IF (@char = '3') SELECT @words = @words + 'tiga ' ELSE    

            IF (@char = '4') SELECT @words = @words + 'empat ' ELSE    

            IF (@char = '5') SELECT @words = @words + 'lima ' ELSE    

            IF (@char = '6') SELECT @words = @words + 'enam ' ELSE    

            IF (@char = '7') SELECT @words = @words + 'tujuh ' ELSE    

            IF (@char = '8') SELECT @words = @words + 'delapan ' ELSE    

            IF (@char = '9') SELECT @words = @words + 'sembilan ' ELSE

            IF ((@char = '0') AND ((SELECT CAST(@charprev as INT)) > 1) AND ((SELECT @position % 3) = 1))

                SELECT @words = @words 

            ELSE

            IF ((@char = '0') AND ((SELECT @charprev) = '0') AND ((SELECT CAST(@charprev2 as INT)) > 0) AND ((SELECT @position % 3) = 1))

                SELECT @words = @words 

            ELSE

            IF (@char = '0') 

            BEGIN

                SELECT @position = @position - 1

                CONTINUE

            END     

            

            IF ((SELECT @position % 3) = 0) SELECT @words = @words + 'ratus ' ELSE    

            IF (((SELECT @position % 3) = 2) AND ((SELECT CAST(@char as INT)) > 1)) 

                SELECT @words = @words + 'puluh ' 

            ELSE    

            IF (((SELECT @position % 3) = 2) AND ((SELECT CAST(@char as INT)) = 1)

                AND ((SELECT CAST(@charafter as INT)) > 0))

            BEGIN 

                SELECT @words = @words + 'belas '

                SELECT @position = @position - 1

            END

            ELSE

            IF (((SELECT @position % 3) = 2) AND ((SELECT CAST(@char as INT)) = 1)

                AND ((SELECT CAST(@charafter as INT)) = 0))

            BEGIN 

                SELECT @words = @words + 'puluh '

                SELECT @position = @position - 1

            END

            

            IF ((SELECT (@position-1)/3.0) = 1) SELECT @words = @words +'ribu ' ELSE

            IF ((SELECT (@position-1)/3.0) = 2) SELECT @words = @words +'juta ' ELSE

            IF ((SELECT (@position-1)/3.0) = 3) SELECT @words = @words +'milyar ' ELSE

            IF ((SELECT (@position-1)/3.0) = 4) SELECT @words = @words +'triliun '

 

        SELECT @position = @position - 1

    END

    

    --Memproses "koma" dan "angka di belakang koma"

    IF((SELECT CAST(@backStr AS INT)) > 0)

    BEGIN

        --Menambahkan "koma" pada terbilang

        

        SELECT @words = @words + 'koma '

        

        --Menambahkan "Angka di belakang koma" pada terbilang

    

        SELECT @length = LEN(@backStr)

        SELECT @position = @length

        

        WHILE( @position > 0)

        BEGIN

        

            SELECT @char = SUBSTRING(@backStr, @length+1 - @position, 1)

            SELECT @words = @words +

            (CASE @char

                WHEN '0'THEN 'nol '

                WHEN '1'THEN 'satu '

                WHEN '2'THEN 'dua '

                WHEN '3'THEN 'tiga '

                WHEN '4'THEN 'empat '

                WHEN '5'THEN 'lima '

                WHEN '6'THEN 'enam '

                WHEN '7'THEN 'tujuh '

                WHEN '8'THEN 'delapan '

                WHEN '9'THEN 'sembilan '

                ELSE ''

             END

            )    

            SELECT @position = @position - 1

        END 

    END

    

    SELECT @words = LTRIM(RTRIM(@words))

    

    -- Huruf pertama huruf besar

    IF LEN(@words) > 0 

    BEGIN

        SET @words = UPPER(left(@words,1)) + RIGHT(@words, LEN(@words)-1)

    END

 

    /* FINAL RETURN */

RETURN (SELECT @words)

END

Connect Your Java Application to SAP B1 HANA and Post Journal Entry using JCO

After several hours looking for a solution of how to connect a java program to SAP Business One HANA, I finally found that SAP B1 HANA provides a wrapper for B1DI library, called JCO (Java Connector). This is an example of how do I connect our java program using JCO to SAP B1 HANA and then post a journal entry document. Hope, this several lines of codes can help you connect your java application to SAP B1 HANA.

/*

 * To change this template, choose Tools | Templates

 * and open the template in the editor.

 */

package hanapostingje;

 

import com.sap.smb.sbo.api.*;

 

/**

 *

 * @author Alfa

 */

public class Application {

// company interface

    public ICompany company;

 

    /**

     * @param args the command line arguments

     */

    public static void main(String[] args) {

// TODO code application logic here

        Application application = new Application();

        application.connect();

    }

 

    /**

     * Create connection and initialize company instance

     *     

* @return 0 if success, -1 if fail

     */

    public int connect() {

        int rc = 0;

        try {

            System.out.println("Connecting to SAP ...");

            company = SBOCOMUtil.newCompany();

            company.setServer("hanaserver:30015");

            company.setCompanyDB("SBODEMOAU");

            company.setUserName("manager");

            company.setPassword("1234");

            company.setDbServerType(SBOCOMConstants.BoDataServerTypes_dst_HANADB);

            company.setUseTrusted(false);

            company.setLanguage(SBOCOMConstants.BoSuppLangs_ln_English);

            company.setDbUserName("SYSTEM");

            company.setDbPassword("MyPassword");

            company.setLicenseServer("hanaserver:40000");

            rc = company.connect();

            if (rc == 0) {

                System.out.println("Connected!");

                this.postJournalEntry();

                this.freeConnection();

            } else {

                SBOErrorMessage errMsg = company.getLastError();

                System.out.println(

                        "Cannot connect to database server: "

                        + errMsg.getErrorMessage()

                        + " "

                        + errMsg.getErrorCode());

            }

        } catch (Exception e) {

            e.printStackTrace();

            return -1;

        }

        return rc;

    }

 

    /**

     * Disconnect application from database and SAP

     */

    public void freeConnection() {

        company.disconnect();

        System.out.println("Application disconnected successfully");

    }

 

    /**

     * Post journal entry to SAP

     */

    public void postJournalEntry() {

        try {

            System.out.println("Posting journal entry ...");

            int retVal = 0;

            IJournalEntries je = SBOCOMUtil.newJournalEntries(company);

            IJournalEntries_Lines jeLines = je.getLines();

            jeLines.setAccountCode("110001");

            jeLines.setDebit(100.0);

            jeLines.add();

            jeLines.setAccountCode("110002");

            jeLines.setCredit(100.0);

            jeLines.add();

            retVal = je.add();

            if (retVal != 0) {

                System.out.println("Posting journal entry failed");

                throw new Exception(company.getLastErrorCode() + " " + company.getLastErrorDescription());

            } else {

                System.out.println("Journal entry posted successfully");

            }

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

}

To utilize the wrapper, you need to include sboapi.jar and sborwrapper.jar into your project library—I was using Netbeans to manage my project. Both of them are located in “C:\Program Files (x86)\SAP\SAP Business One DI API\JCO\LIB” and were installed in your client PC when you installed SAP B1 HANA client.

SAP HANA: Get the First Date and the Last Date of Month from a Given Date

To get the first date of month from a given date, you can run this command. From the example, you can replace the ‘2013-02-28’ date with your own date, or you can use variable when you want to use it inside a procedure.

The code below is code that get the first date of month from a given date. It works by subtracting the given date by the day value of the given date—obtained by using function EXTRACT(DAY FROM [given date]). This will return the last month’s last date. So, to get the first date of then month. You need to add 1 to the the day value of the given date.

--First date of month from a given date

SELECT ADD_DAYS('2013-02-28',-EXTRACT(DAY FROM '2013-02-28') + 1) FROM DUMMY;

The next code is to get the last date of the month. Once you got the first date, you can add 1 month so the date will be the first date of next month and then subtract it by 1 to get the date one day before next month first date which is equal to the last date of given date’s month.

--Last date of month from a given date

SELECT ADD_DAYS(ADD_MONTHS(ADD_DAYS('2013-02-28',-EXTRACT(DAY FROM '2013-02-28') + 1),1),-1) FROM DUMMY;