Welcome!

I am Andri Johandri Programmer Python Entusiast

View Work Hire Me!

About Me

Device
Networking
Application
Siapa Saya

Andri Johandri

Programmer Aplikasi

25 Tahun menjadi seorang programmer Komputer, bermula dari Programmer Tasm, QBasic, DBase III Plus,Cliper dan FoxPro di tahun 90an.

Kini di era millenial lebih memfokuskan diri pada Pemrograman Python, Pengembangan Teknologi Artificial Intellegence, IoT , Robotika dan Bigdata .

Services

Python Application

Nulla metus metus ullamcorper vel tincidunt sed euismod nibh Quisque volutpat

Development

Nulla metus metus ullamcorper vel tincidunt sed euismod nibh Quisque volutpat

Branding

Nulla metus metus ullamcorper vel tincidunt sed euismod nibh Quisque volutpat

Marketing

Nulla metus metus ullamcorper vel tincidunt sed euismod nibh Quisque volutpat

Our Blog

Orange3 Menambahkan Sentiment Analysis Bahasa Indonesia

Bagi pengguna aplikasi Text Mining Orange3, tentu saja akan mengalami kesulitan saat akan melakukan penghitungan Sentiment Analysis , dkarenakan Orange3 hanya menyediakan dua bahasa dalam proses Sentimen Analysis yaitu bahasa Inggris dan Slovenia dalam method Liu Hiu .

Anda dapat menambahkan Bahasa Indonesia dalam metode Liu Hiu ini dengan sedikit modifikasi dan penambahan script python pada proses Sentiment Analysisnya yaitu dengan menambahkan file yang berisi kumpulan kata yang memiliki makna sentimen negatif dan sentimen positif dalam bahasa Indonesia.

Untuk menambahkan kata tersebut  adalah sebagai berikut :
  1. Buka folder /usr/local/lib/python3.7/site-packages/orangecontrib/text/sentiment/resources , dalam folder tersebut terdapat dua file yaitu negatif_words_Slolex.txt yang berisi kata negatif dalam bahasa slovenian dan positive_words_Slolex.txt . Selanjutnya copy negatif_words_Slolex.txt menjadi negatif_words_Ina.txt dan selanjutnya file negatif_words_Ina.txt diedit dengan menghapuskan seluruh isi kata dari bahasa slovenia dan menambahkan kata dengan bahasa indonesai yang memiliki nilai negatif , demikain juga dengan file positive_words_Slolex.txt di copy menjadi file positive_words_Ina.txt, sehingga terdapat 4 file pada folder tersebut.
  2. Selanjutnya  buka folder /usr/local/lib/python3.7/site-packages/orangecontrib/text/sentiment , copy  file opinion_lexicon_lso.py menjadi file  opinion_lexicon_ina.py selanjutnya edit sperti script berikut ini:

    import os
    class opinion_lexicon_ina:
        resources_folder = os.path.dirname(__file__)
        @classmethod
        def positive(cls):
            with open(os.path.join(cls.resources_folder,
                                   'resources/positive_words_Ina.txt'),
                      'r') as f:
                return f.read().split('\n')

        @classmethod
        def negative(cls):
            with open(os.path.join(cls.resources_folder,
                                   'resources/negative_words_Ina.txt'),
                      'r') as f:
                return f.read().split('\n')

  3.  Selanjutnya edit file __init__.py :

    import numpy as np
    from nltk.corpus import opinion_lexicon
    from nltk.sentiment import SentimentIntensityAnalyzer

    from orangecontrib.text import Corpus
    from orangecontrib.text.misc import wait_nltk_data
    from orangecontrib.text.preprocess import WordPunctTokenizer
    from orangecontrib.text.vectorization.base import SharedTransform, \
        VectorizationComputeValue
    from orangecontrib.text.sentiment.opinion_lexicon_ina import opinion_lexicon_ina


    class Liu_Hu_Sentiment:
        sentiments = ('sentiment',)
        name = 'Liu Hu'

        methods = {'English': opinion_lexicon,
                   'Indonesia': opinion_lexicon_ina
    }

        @wait_nltk_data
        def __init__(self, language):
            self.language = language
            self.positive = set(self.methods[language].positive())
            self.negative = set(self.methods[language].negative())

        def transform(self, corpus, copy=True):
            scores = []
            tokenizer = WordPunctTokenizer()
            tokens = tokenizer(corpus.documents)

            for doc in tokens:
                pos_words = sum(word in self.positive for word in doc)
                neg_words = sum(word in self.negative for word in doc)
                scores.append([100*(pos_words - neg_words)/max(len(doc), 1)])
            X = np.array(scores).reshape((-1, len(self.sentiments)))

            # set  compute values
            shared_cv = SharedTransform(self)
            cv = [VectorizationComputeValue(shared_cv, col)
                  for col in self.sentiments]

            if copy:
                corpus = corpus.copy()
            corpus.extend_attributes(X, self.sentiments, compute_values=cv)
            return corpus


    class Vader_Sentiment:
        sentiments = ('pos', 'neg', 'neu', 'compound')
        name = 'Vader'

        @wait_nltk_data
        def __init__(self):
            self.vader = SentimentIntensityAnalyzer()

        def transform(self, corpus, copy=True):
            scores = []
            for text in corpus.documents:
                pol_sc = self.vader.polarity_scores(text)
                scores.append([pol_sc[x] for x in self.sentiments])
            X = np.array(scores).reshape((-1, len(self.sentiments)))
            # set  compute values
            shared_cv = SharedTransform(self)
            cv = [VectorizationComputeValue(shared_cv, col)
                  for col in self.sentiments]
            if copy:
                corpus = corpus.copy()
            corpus.extend_attributes(X, self.sentiments, compute_values=cv)
            return corpus

    if __name__ == "__main__":
        corpus = Corpus.from_file('deerwester')
        liu = Liu_Hu_Sentiment('Indonesia')
        corpus2 = liu.transform(corpus[:5])

  4. Agar Widget Sentiment Analysis terdapat pilihan bahasa Indonesia , selanjutnya edit file /usr/local/lib/python3.7/dist-packages/orangecontrib/text/widgets/owsentimentanalysis.py

    from AnyQt.QtCore import Qt
    from AnyQt.QtWidgets import QApplication, QGridLayout, QLabel

    from Orange.widgets import gui, settings
    from Orange.widgets.utils.signals import Input, Output
    from Orange.widgets.widget import OWWidget
    from orangecontrib.text import Corpus
    from orangecontrib.text.sentiment import Vader_Sentiment, Liu_Hu_Sentiment

    class OWSentimentAnalysis(OWWidget):
        name = "Sentiment Analysis"
        description = "Predict sentiment from text."
        icon = "icons/SentimentAnalysis.svg"
        priority = 320

        class Inputs:
            corpus = Input("Corpus", Corpus)

        class Outputs:
            corpus = Output("Corpus", Corpus)

        method_idx = settings.Setting(1)
        autocommit = settings.Setting(True)
        language = settings.Setting('English')
        want_main_area = False
        resizing_enabled = False

        METHODS = [
            Liu_Hu_Sentiment,
            Vader_Sentiment
        ]
        LANG = ['English', 'Indonesia']

        def __init__(self):
            super().__init__()
            self.corpus = None

            form = QGridLayout()
            self.method_box = box = gui.radioButtonsInBox(
                self.controlArea, self, "method_idx", [], box="Method",
                orientation=form, callback=self._method_changed)
            self.liu_hu = gui.appendRadioButton(box, "Liu Hu", addToLayout=False)
            self.liu_lang = gui.comboBox(None, self, 'language',
                                         sendSelectedValue=True,
                                         items=self.LANG,
                                         callback=self._method_changed)
            self.vader = gui.appendRadioButton(box, "Vader", addToLayout=False)

            form.addWidget(self.liu_hu, 0, 0, Qt.AlignLeft)
            form.addWidget(QLabel("Language:"), 0, 1, Qt.AlignRight)
            form.addWidget(self.liu_lang, 0, 2, Qt.AlignRight)
            form.addWidget(self.vader, 1, 0, Qt.AlignLeft)

            ac = gui.auto_commit(self.controlArea, self, 'autocommit', 'Commit',
                                 'Autocommit is on')
            ac.layout().insertSpacing(1, 8)

        @Inputs.corpus
        def set_corpus(self, data=None):
            self.corpus = data
            self.commit()

        def _method_changed(self):
            self.commit()

        def commit(self):
            if self.corpus is not None:
                method = self.METHODS[self.method_idx]
                if self.method_idx == 0:
                    out = method(language=self.language).transform(self.corpus)
                else:
                    out = method().transform(self.corpus)
                self.Outputs.corpus.send(out)
            else:
                self.Outputs.corpus.send(None)

        def send_report(self):
            self.report_items((
                ('Method', self.METHODS[self.method_idx].name),
            ))

    def main():
        app = QApplication([])
        widget = OWSentimentAnalysis()
        corpus = Corpus.from_file('book-excerpts')
        corpus = corpus[:3]
        widget.set_corpus(corpus)
        widget.show()
        app.exec()

    if __name__ == '__main__':
        main()

Selanjutnya anda kini sudah bisa menggunakan Sentiment Analysis dengan menggunakan analisis NLTK dengan menggunakan bahasa indonesia

Migrasi Aplikasi dengan Python


Masih banyak yang masih menganggap pemrograman python adalah pemrogaraman untuk pengerjaan hal-hal analisis data, dan belum banyak yang mau move on untuk menggunakan pemrograman python yang imut imut ini, kecil dan powerful seperti halnya framework  Flask dan Django. 

Saya coba racuni penggunaan pemrograman python di beberapa institusi yang sudah saya kenal , tapi ya memang nampaknya memang sulit, programmer di Indonesia yang lebih banyak menggunakan Pemrograman PHP dengan Framework CI, Laravel , YI yang mau move on dan mengenal python. Makanya saya coba kerjakan beberapa aplikasi yang gak berbayar dengan menggunkan Flask Python dan membandingkannya dengan aplikasi yang dibangun oleh mereka yang menggunakan bahasa pemrograman yang biasa mereka pergunakan.

Dari templates front end semuanya sama , dan mereka membandingkan hasil kerja dari web yang menggunakan python dengan web yang bukan menggunakan python ( non python ) dan hasilnya mereka tetap saja diam. Mungkin karena nanyanya sama pengguna sehingga mereka tidak mengerti apa bedanya pakai python ataupun yang lain yang penting mereka bisa menggunakan aplikasi tersebut.

Nah inilah yang menjadi tambahan pengalaman  karena ternyata pengguna itu tidak melihat pakai python atau bukan yang penting cepat dan mudah dipakai . Akahirnya kalau mengerjakan aplikasi saya tidak pernah menyebutkan menggunakan python , yang penting mereka para pengguna enjoy menggunakan aplikasi tersebut . dan saya tidak diribetkan dengan bugs yang terkadang membuat celah aplikasi di retas. Kecuali ada orang yang ngerti pemrograman dan nanya pakai apa , baru saya jawab pakai "Python".

Sejak awal mengenali python pada waktu membangun layanan Streaming di tahun 1999 , dan uji coba dibeberapa mesin cloud python . Perkembangan python sangatlah cepat hal ini terjadi karena kebutuhan bahasa pemrograman yang dapat dengan mudah beradaptasi dengan IoT, AI, Cloud, Big Data ataupun data analisis , dan alternatif pemrograman open source yang mampu berikan seluruh proses itu adalah pemrograman python.

Saat ini saya telah buatkan sebuah aplikasi tidak berbayar untuk layanan event , yang secara otomatis aplikasi mambuat layanan qrcode untuk peserta event dan seluruh kontrol event dilakukan oleh aplikasi tersebut dengan cukup menggunakan Qrcode yang di push melalui Json . Semua ini hanya bekerja dengan menggunakan satu database .

So... anda mau migrasi dan outofthebox dari pemrograman biasanya ?

Forum Diskusi Pythonesia menggunakan Flask Microframework

Beberapa kali ujicoba pembuatan aplikasi menggunakan Google Appspot Engine ( yang gratisan ) banyak pembatasannya terutama tidak bisa digunakan untuk membuat database Sqlite , dan untuk untuk upload file harus menggunakan Storage yang terpisah dan harus menggunakan API Storage google . Alternatifnya pakai Pythonanywhere namun itu pun ada batas waktu dan harus direload oleh kita sendiri dalam beberapa waktu yang ditentukan ( catatan ini yang grentongan ya...).

Alternatif percobaan menggunakan openshift , ini lebih full tappi tetap aja grentongannya hanya 3 bulan, beda banget saat masih menggunakan openshift pertama kali yaitu openshift v2 . Jadi akhirnya aku coba cari hosting python yang sedikit miring harganya dan bisa run pyhon , soalnya banyak hostingan cpanel yang tidak menyediakan untuk  python .

Akhirnya dapat juga sebuah hosting yang lumayan miring harganya, saya coba hosting selama 6 bulan dulu. Adaptasi untuk penggunaan cpanel python ini hanya beberapa jam karena sistem kerjanya sama seperti dengan virtenv python. Namanya phusion passenger untuk server webnya.

Selanjutnya satu minggu ini coba saya buatkan aplikasi Forum Diskusi dengan menggunakan Microframework Flask saat ini versi beta sudah aktif , walau masih dalam proses tambahan pemberian komentar diskusi .

Untuk melihat dan mencoba forum diskusi tersebut silahkeun meluncur di https://pythonesia.org . Secara umum aplikasi ini dibuat dengan menggunakan Flask Microframework module yang digunakan adalah :
  1. Flask Mail untuk pengiriman email otomatis ( send mail ).
  2. Module Sqlite3
  3. Module Random string
  4. Module Hash untuk enkripsi
  5. Template menggunakan free template bootstrap yang sederhana
  6. Page halaman template yang digunakan 12 halaman dengan menggunakan teknik Jinja2.
kekurangan dari aplikasi yang saya buat ini adalah saat send mail , maka prosesnya sedikit lama . mungkin dikarenakan pengiriman emailnya yang terkadang butuh bandwidth di server yang cukup lumayan . Tapi mungkin hanya 4 detik saat registrasi dan email sudah terkirim.


Mengatasi Temperatur Panas Lenovo Z470 pada ubuntu 17.04

Bagi anda pengguna laptop Lenovo seri Z470 seperti saya saat ini, tentu akan kaget bila saat Laptop tersebut di Install Operasi System Linux seperti Ubuntu laptop dengan cepat temperaturnya cepat sekali panas. Hal ini terjadi dikarenakan Graphics Nvidia Cuda yang dimiliki oleh Laptop ini, sehingga memaksa processor bekerja lebih cepat ... dan hasilnya ya temperatur laptop cepat panas , dan kalusduah overaheat laptop mati.


Untuk mengatasi hal ini yang perlu diketahui adalah Distro yang digunakan jangan menggunakan Kernel AMD64 atau X64 pergunakan Distro Linux yang menggunakan kernel i386 atau 32 Bit, bila laptop anda menggunakan memory diatas 4 GB ya tinggal install saja kernel-pae , agar memory anda terpakai secara optimal.

Nah, untuk solusi menurunkan panas pada Laptop anda yang tinggi khususnya Lenovo Z470 atau komputer lainnya yang menggunakan Graphics NVidia , install aplikasi bumblebeed sehingga temperature laptop ada akan menjadi normal kembali.

Bagi pengguna Ubuntu 17.04 , silahkan langsung install saja bumblebeed :
# sudo apt-install bumblebeed 
selanjutnya tinggal restart laptop anda selanjutnya setelah anda masuk pada desktop kembali cek status bumblebeed , apakah runing atau tidak , bila running maka masalah panas pada laptop anda terselesaikan . Cara cek statusnya adalah
# sud service bumblebeed status

Untuk mengetahui aplikasi Bumblebeed dapat dilihat disini https://github.com/Bumblebee-Project/Bumblebee/wiki/Install-and-usage

catatan penting pergunakan module kernel nvidia-340 jangan yang lain karena bila menggunakan module kernel nvidia lain selain nvidia-340 temperatur komputer anda akan lebih cepat panas .

Boa Constructor Win 10

andri johandri

Bagi anda yang menggunakan OS Win 10 tentu terkadang sulit untuk menginstall aplikasi Boa Constructor dari https://sourceforge.net/projects/boa-constructor/files/ , saat ini saya telah lakukan compile seluruh source code tersebut menggunakan modul py2exe dan beberapa sedikit modifikasi , kini anda dapat menggunakan Boa Constructor di Win 10.

Compile yang digunakan adalah py2exe , python 2.7 dan wxpython 2.8 , untuk mendapatkan Boa Contructor for win 10 silahkan unduh disini https://sourceforge.net/projects/boa-constructor-win10/

Masalah Python RFC522 dengan Raspbian harus menggunakan Raspbian whezzy

andri johandri

Bila anda sedang ngoprek Raspberry PI dan memanfaatkan GPIO nya , ternyata saat menggunakan GPIO nya yang sambung dengan module RFC522 , terutama saat menggunakan Raspberry PI Versi 3 dan menggunakan OS Raspbian jessy maka RFC522 tidak akan membaca kartu mifare .

Apa masalahnya ? anda telah melakukan cek kabel dari RFC522 ke GPIO Raspberry sesuai dan tidak masalah ... jadi yang masalah adalah boot image jessy pada raspbian terbaru . Nah jalan keluarnya adalah dengan menggunakan raspbian Whezzy , dan untuk mendapatkannya raspbian whezzy untuk raspberry 3 adalah disini .


setalah anda install silahkan jalankan RFC522 anda kembali , dan RFC522 akan kembali dapat membaca kartu mifare 

Selamat Mencoba !

Boa-Constructor wxpython 3 python 2.7

andri johandri

Bila anda masih senang menggunakan Boa-constructor untuk membuat aplikasi Python berbasis GUI kini Boa-contsructor kini telah dikembangkan hingga mampu bekerja dengan menggunakan wxpython 3 dengan catatan dengan tetap menggunakan python2.7.

Untuk mendapatkan source Boa-Constructor terbaru yang dapat digunakan menggunakan wxpython 3 https://bitbucket.org/cwt/boa-constructor/overview. bagi pengguna Mac Os Sierra 10.12.6 dan High Sierra , untuk install wxpython 3 gunakan brew , demikian juga dengan python2 install python 2.7 dengan menggunakan brew :
# brew install python
# brew install wxpython

Setelah anda mendownload boa constructor terbaru di  https://bitbucket.org/cwt/boa-constructor/overview jalankan aplikasi boa Constructor anda kembali :
# python2 Boa.py

Selamat mencoba !

Contact Us

Phone :

+6285743848604

Address :

Perumahan Green Citayam City Blok AA 10 No 1,
Bogor

Email :

me@andrijohandri.id