Nov 29, 2013

http transaction adsense

whats happen on your website ?, ever considering that ?. No one consider except geek programmer. well, sometimes, its very important to you webmaster to make sure that no broken links, specially on your advertisement links.

advertise my website

people always think it, so they search  thousands keyword related to, however either they search for "free advertising website" or "internet advertising". Lets take one some cases about what happen when you put advertisement on your website : you choose to use googleadsense
here's your transaction :

advertise my website

its look like complicated for blogspot-base-hosting, you can see that there are so many links on your page, even just for one page in front.

adsense http transaction 

the simplest http transaction when you put ads-unit on your site is just like this :

adsense http transaction

when you make other complicated website such as free job posting website, or advertising position or other niche with high monthly search, sure its become complicated transaction there.

Read more ...

Nov 28, 2013

customer service chat livesupport online


Implmentation online chat on openerp 7 as livesupport. 

when you implement ERP for whole company elements, they always need your support to use it, the simple solution for that is online web chat.

some people asking me about where i download my instant messaging for open ERP, but really i don't know where, because it was long time ago.

well, i show you my sources, to activate im on openerp 7, you can visit on activate instant messaging on openerp 7.





# -*- coding: utf-8 -*-
##############################################################################
#
#    OpenERP, Open Source Management Solution
#    Copyright (C) 2004-2010 Tiny SPRL ().
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU Affero General Public License as
#    published by the Free Software Foundation, either version 3 of the
#    License, or (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU Affero General Public License for more details.
#
#    You should have received a copy of the GNU Affero General Public License
#    along with this program.  If not, see .
#
##############################################################################

import openerp
import openerp.tools.config
import openerp.modules.registry
from openerp.tools.misc import DEFAULT_SERVER_DATETIME_FORMAT
import datetime
from openerp.osv import osv, fields
import time
import logging
import json
import select

_logger = logging.getLogger(__name__)

def listen_channel(cr, channel_name, handle_message, check_stop=(lambda: False), check_stop_timer=60.):
    """
        Begin a loop, listening on a PostgreSQL channel. This method does never terminate by default, you need to provide a check_stop
        callback to do so. This method also assume that all notifications will include a message formated using JSON (see the
        corresponding notify_channel() method).

        :param db_name: database name
        :param channel_name: the name of the PostgreSQL channel to listen
        :param handle_message: function that will be called when a message is received. It takes one argument, the message
            attached to the notification.
        :type handle_message: function (one argument)
        :param check_stop: function that will be called periodically (see the check_stop_timer argument). If it returns True
            this function will stop to watch the channel.
        :type check_stop: function (no arguments)
        :param check_stop_timer: The maximum amount of time between calls to check_stop_timer (can be shorter if messages
            are received).
    """
    try:
        conn = cr._cnx
        cr.execute("listen " + channel_name + ";")
        cr.commit();
        stopping = False
        while not stopping:
            if check_stop():
                stopping = True
                break
            if select.select([conn], [], [], check_stop_timer) == ([],[],[]):
                pass
            else:
                conn.poll()
                while conn.notifies:
                    message = json.loads(conn.notifies.pop().payload)
                    handle_message(message)
    finally:
        try:
            cr.execute("unlisten " + channel_name + ";")
            cr.commit()
        except:
            pass # can't do anything if that fails

def notify_channel(cr, channel_name, message):
    """
        Send a message through a PostgreSQL channel. The message will be formatted using JSON. This method will
        commit the given transaction because the notify command in Postgresql seems to work correctly when executed in
        a separate transaction (despite what is written in the documentation).

        :param cr: The cursor.
        :param channel_name: The name of the PostgreSQL channel.
        :param message: The message, must be JSON-compatible data.
    """
    cr.commit()
    cr.execute("notify " + channel_name + ", %s", [json.dumps(message)])
    cr.commit()

POLL_TIMER = 30
DISCONNECTION_TIMER = POLL_TIMER + 5
WATCHER_ERROR_DELAY = 10

if openerp.evented:
    import gevent
    import gevent.event

    class ImWatcher(object):
        watchers = {}

        @staticmethod
        def get_watcher(db_name):
            if not ImWatcher.watchers.get(db_name):
                ImWatcher(db_name)
            return ImWatcher.watchers[db_name]

        def __init__(self, db_name):
            self.db_name = db_name
            ImWatcher.watchers[db_name] = self
            self.waiting = 0
            self.wait_id = 0
            self.users = {}
            self.users_watch = {}
            gevent.spawn(self.loop)

        def loop(self):
            _logger.info("Begin watching on channel im_channel for database " + self.db_name)
            stop = False
            while not stop:
                try:
                    registry = openerp.modules.registry.RegistryManager.get(self.db_name)
                    with registry.cursor() as cr:
                        listen_channel(cr, "im_channel", self.handle_message, self.check_stop)
                        stop = True
                except:
                    # if something crash, we wait some time then try again
                    _logger.exception("Exception during watcher activity")
                    time.sleep(WATCHER_ERROR_DELAY)
            _logger.info("End watching on channel im_channel for database " + self.db_name)
            del ImWatcher.watchers[self.db_name]

        def handle_message(self, message):
            if message["type"] == "message":
                for waiter in self.users.get(message["receiver"], {}).values():
                    waiter.set()
            else: #type status
                for waiter in self.users_watch.get(message["user"], {}).values():
                    waiter.set()

        def check_stop(self):
            return self.waiting == 0

        def _get_wait_id(self):
            self.wait_id += 1
            return self.wait_id

        def stop(self, user_id, watch_users, timeout=None):
            wait_id = self._get_wait_id()
            event = gevent.event.Event()
            self.waiting += 1
            self.users.setdefault(user_id, {})[wait_id] = event
            for watch in watch_users:
                self.users_watch.setdefault(watch, {})[wait_id] = event
            try:
                event.wait(timeout)
            finally:
                for watch in watch_users:
                    del self.users_watch[watch][wait_id]
                    if len(self.users_watch[watch]) == 0:
                        del self.users_watch[watch]
                del self.users[user_id][wait_id]
                if len(self.users[user_id]) == 0:
                    del self.users[user_id]
                self.waiting -= 1


class LongPollingController(openerp.addons.web.http.Controller):
    _cp_path = '/longpolling/im'

    @openerp.addons.web.http.jsonrequest
    def poll(self, req, last=None, users_watch=None, db=None, uid=None, password=None, uuid=None):
        assert_uuid(uuid)
        if not openerp.evented:
            raise Exception("Not usable in a server not running gevent")
        if db is not None:
            req.session._db = db
            req.session._uid = uid
            req.session._password = password
        req.session.model('im.user').im_connect(uuid=uuid, context=req.context)
        my_id = req.session.model('im.user').get_by_user_id(uuid or req.session._uid, req.context)["id"]
        num = 0
        while True:
            res = req.session.model('im.message').get_messages(last, users_watch, uuid=uuid, context=req.context)
            if num >= 1 or len(res["res"]) > 0:
                return res
            last = res["last"]
            num += 1
            ImWatcher.get_watcher(res["dbname"]).stop(my_id, users_watch or [], POLL_TIMER)

    @openerp.addons.web.http.jsonrequest
    def activated(self, req):
        return not not openerp.evented

    @openerp.addons.web.http.jsonrequest
    def gen_uuid(self, req):
        import uuid
        return "%s" % uuid.uuid1()

def assert_uuid(uuid):
    if not isinstance(uuid, (str, unicode, type(None))):
        raise Exception("%s is not a uuid" % uuid)


class im_message(osv.osv):
    _name = 'im.message'

    _order = "date desc"

    _columns = {
        'message': fields.char(string="Message", size=200, required=True),
        'from_id': fields.many2one("im.user", "From", required= True, ondelete='cascade'),
        'to_id': fields.many2one("im.user", "To", required=True, select=True, ondelete='cascade'),
        'date': fields.datetime("Date", required=True, select=True),
    }

    _defaults = {
        'date': lambda *args: datetime.datetime.now().strftime(DEFAULT_SERVER_DATETIME_FORMAT),
    }
    
    def get_messages(self, cr, uid, last=None, users_watch=None, uuid=None, context=None):
        assert_uuid(uuid)
        users_watch = users_watch or []

        # complex stuff to determine the last message to show
        users = self.pool.get("im.user")
        my_id = users.get_by_user_id(cr, uid, uuid or uid, context=context)["id"]
        c_user = users.browse(cr, openerp.SUPERUSER_ID, my_id, context=context)
        if last:
            if c_user.im_last_received < last:
                users.write(cr, openerp.SUPERUSER_ID, my_id, {'im_last_received': last}, context=context)
        else:
            last = c_user.im_last_received or -1

        # how fun it is to always need to reorder results from read
        mess_ids = self.search(cr, openerp.SUPERUSER_ID, [['id', '>', last], ['to_id', '=', my_id]], order="id", context=context)
        mess = self.read(cr, openerp.SUPERUSER_ID, mess_ids, ["id", "message", "from_id", "date"], context=context)
        index = {}
        for i in xrange(len(mess)):
            index[mess[i]["id"]] = mess[i]
        mess = []
        for i in mess_ids:
            mess.append(index[i])

        if len(mess) > 0:
            last = mess[-1]["id"]
        users_status = users.read(cr, openerp.SUPERUSER_ID, users_watch, ["im_status"], context=context)
        return {"res": mess, "last": last, "dbname": cr.dbname, "users_status": users_status}

    def post(self, cr, uid, message, to_user_id, uuid=None, context=None):
        assert_uuid(uuid)
        my_id = self.pool.get('im.user').get_by_user_id(cr, uid, uuid or uid)["id"]
        self.create(cr, openerp.SUPERUSER_ID, {"message": message, 'from_id': my_id, 'to_id': to_user_id}, context=context)
        notify_channel(cr, "im_channel", {'type': 'message', 'receiver': to_user_id})
        return False

class im_user(osv.osv):
    _name = "im.user"

    def _im_status(self, cr, uid, ids, something, something_else, context=None):
        res = {}
        current = datetime.datetime.now()
        delta = datetime.timedelta(0, DISCONNECTION_TIMER)
        data = self.read(cr, openerp.SUPERUSER_ID, ids, ["im_last_status_update", "im_last_status"], context=context)
        for obj in data:
            last_update = datetime.datetime.strptime(obj["im_last_status_update"], DEFAULT_SERVER_DATETIME_FORMAT)
            res[obj["id"]] = obj["im_last_status"] and (last_update + delta) > current
        return res

    def search_users(self, cr, uid, domain, fields, limit, context=None):
        # do not user openerp.SUPERUSER_ID, reserved to normal users
        found = self.pool.get('res.users').search(cr, uid, domain, limit=limit, context=context)
        found = self.get_by_user_ids(cr, uid, found, context=context)
        return self.read(cr, uid, found, fields, context=context)

    def im_connect(self, cr, uid, uuid=None, context=None):
        assert_uuid(uuid)
        return self._im_change_status(cr, uid, True, uuid, context)

    def im_disconnect(self, cr, uid, uuid=None, context=None):
        assert_uuid(uuid)
        return self._im_change_status(cr, uid, False, uuid, context)

    def _im_change_status(self, cr, uid, new_one, uuid=None, context=None):
        assert_uuid(uuid)
        id = self.get_by_user_id(cr, uid, uuid or uid, context=context)["id"]
        current_status = self.read(cr, openerp.SUPERUSER_ID, id, ["im_status"], context=None)["im_status"]
        self.write(cr, openerp.SUPERUSER_ID, id, {"im_last_status": new_one, 
            "im_last_status_update": datetime.datetime.now().strftime(DEFAULT_SERVER_DATETIME_FORMAT)}, context=context)
        if current_status != new_one:
            notify_channel(cr, "im_channel", {'type': 'status', 'user': id})
        return True

    def get_by_user_id(self, cr, uid, id, context=None):
        ids = self.get_by_user_ids(cr, uid, [id], context=context)
        return ids[0]

    def get_by_user_ids(self, cr, uid, ids, context=None):
        user_ids = [x for x in ids if isinstance(x, int)]
        uuids = [x for x in ids if isinstance(x, (str, unicode))]
        users = self.search(cr, openerp.SUPERUSER_ID, ["|", ["user", "in", user_ids], ["uuid", "in", uuids]], context=None)
        records = self.read(cr, openerp.SUPERUSER_ID, users, ["user", "uuid"], context=None)
        inside = {}
        for i in records:
            if i["user"]:
                inside[i["user"][0]] = True
            elif ["uuid"]:
                inside[i["uuid"]] = True
        not_inside = {}
        for i in ids:
            if not (i in inside):
                not_inside[i] = True
        for to_create in not_inside.keys():
            if isinstance(to_create, int):
                created = self.create(cr, openerp.SUPERUSER_ID, {"user": to_create}, context=context)
                records.append({"id": created, "user": [to_create, ""]})
            else:
                created = self.create(cr, openerp.SUPERUSER_ID, {"uuid": to_create}, context=context)
                records.append({"id": created, "uuid": to_create})
        return records

    def assign_name(self, cr, uid, uuid, name, context=None):
        assert_uuid(uuid)
        id = self.get_by_user_id(cr, uid, uuid or uid, context=context)["id"]
        self.write(cr, openerp.SUPERUSER_ID, id, {"assigned_name": name}, context=context)
        return True

    def _get_name(self, cr, uid, ids, name, arg, context=None):
        res = {}
        for record in self.browse(cr, uid, ids, context=context):
            res[record.id] = record.assigned_name
            if record.user:
                res[record.id] = record.user.name
                continue
        return res

    _columns = {
        'name': fields.function(_get_name, type='char', size=200, string="Name", store=True, readonly=True),
        'assigned_name': fields.char(string="Assigned Name", size=200, required=False),
        'image': fields.related('user', 'image_small', type='binary', string="Image", readonly=True),
        'user': fields.many2one("res.users", string="User", select=True, ondelete='cascade'),
        'uuid': fields.char(string="UUID", size=50, select=True),
        'im_last_received': fields.integer(string="Instant Messaging Last Received Message"),
        'im_last_status': fields.boolean(strint="Instant Messaging Last Status"),
        'im_last_status_update': fields.datetime(string="Instant Messaging Last Status Update"),
        'im_status': fields.function(_im_status, string="Instant Messaging Status", type='boolean'),
    }

    _defaults = {
        'im_last_received': -1,
        'im_last_status': False,
        'im_last_status_update': lambda *args: datetime.datetime.now().strftime(DEFAULT_SERVER_DATETIME_FORMAT),
    }


Read more ...

Nov 27, 2013

streaming video hosting

streaming video hosting with php handler

i don't know why i use php to do this, but i think php is good enough to do this, the main requirement is  create something like streaming video hosting. well, the basic idea is make sure that you have enough space and temp drive to serve thousand users

moreover, you also need to consider about big-file that user want to watch or download, big framing per buffer can make server down. Some people recommend to use readfile_chunked($stdout) than readfile();

here;s a short simple to make streaming on rtmp protocol in php, the streaming (with rtmp) was runned by OS, the server catch it on stdoutput.

streaming video hosting with php handler

for small size, you can use all in pipes, so it will send on the fly. just like this : 
    $outfile = tempnam(".", "cmd");    $errfile = tempnam(".", "cmd");    $descriptorspec = array(        0 => array("pipe", "r"),        1 => array("pipe", "w"),        2 => array("pipe", "w")    );    $proc = proc_open($cmd, $descriptorspec, $pipes);       if (!is_resource($proc)) return 255;
    fclose($pipes[0]);    //Don't really want to give any input
    $exit = proc_close($proc);
Read more ...

Nov 20, 2013

is it possible to connect openerp from python jsonrpc

main question today is "is it possible to connect openerp from python jsonrpc ?"

sure, actually openerp-client use it,  when you look on to its data to transfer, you will learn about how they communicate, here's the data when we login :


{"jsonrpc":"2.0","method":"call","params":{"db":"latestonair","login":"your_username","password":"your_password","base_location":"http://erp.nubeesystem.com","session_id":"a27057d83d344668b908b4d9520aa666","context":{"lang":"en_US","tz":false,"uid":4}},"id":"r23"}=

so: how ?

import json
import urllib2
import random

data = {
        "jsonrpc": "2.0",
        "method": "login",
        "params": {"db":"latestonair","login":"username","password":"passowrd"},
        "id": random.randint(0, 1000000000),
}
req = urllib2.Request(url='http://localhost:8069/jsonrpc', data=json.dumps(data), headers={
    "Content-Type":"application/json",
})
result = urllib2.urlopen(req)
result = json.load(result)


other data to analyze :

{"jsonrpc":"2.0","method":"call","params":{"model":"sale.order","method":"read_group","args":[[["state","not in",["draft","sent","cancel"]]],["amount_total","partner_id"],["partner_id"]],"kwargs":{"context":{"lang":"en_US","tz":"Asia/Jakarta","uid":12,"show_address":1}},"session_id":"151cc81b332e440999dd7471196499c4","context":{"lang":"en_US","tz":"Asia/Jakarta","uid":12}},"id":"r120"}=

{"jsonrpc":"2.0","method":"call","params":{"model":"sale.order","method":"fields_view_get","args":[false,"graph"],"kwargs":{},"session_id":"151cc81b332e240299dd7471196499c4","context":{"lang":"en_US","tz":"Asia/Jakarta","uid":12}},"id":"r119"}=

{"jsonrpc":"2.0","method":"call","params":{"model":"sale.order","method":"fields_view_get","args":[false,"graph",{"lang":"en_US","tz":"Asia/Jakarta","uid":12,"show_address":1},true],"kwargs":{},"session_id":"151cc81b332e440399dd7471196499c4","context":{"lang":"en_US","tz":"Asia/Jakarta","uid":12}},"id":"r118"}=

{"jsonrpc":"2.0","method":"call","params":{"model":"sale.order","method":"fields_view_get","args":[false,"graph",{"lang":"en_US","tz":"Asia/Jakarta","uid":12,"show_address":1},true],"kwargs":{},"session_id":"151cc81b332e440259dd7471196499c4","context":{"lang":"en_US","tz":"Asia/Jakarta","uid":12}},"id":"r616"}=


{"jsonrpc":"2.0","method":"call","params":{"model":"sale.order","method":"read_group","args":[[["state","not in",["draft","sent","cancel"]]],["amount_total","partner_id"],["partner_id"]],"kwargs":{"context":{"lang":"en_US","tz":"Asia/Jakarta","uid":12,"show_address":1}},"session_id":"151cc81b332e240299dd7471196499c4","context":{"lang":"en_US","tz":"Asia/Jakarta","uid":12}},"id":"r622"}=
Read more ...

Nov 18, 2013

[solved] openerp 7 outgoing gmail error

today, i want to share about how to solve outgoing gmail error. While you trying to access gmail server, gmail will ask you to enter capcha, so: when your application login, it will unable to send and you will get error

OpenErp Authorization failed (534 5.7.9 https://support.google.com/mail/bin/answer.py?answer=78754 


well, the solution is :

1. open your browser, enter your usernam and password

2. goto : https://accounts.google.com/DisplayUnlockCaptcha

disable capcha on sending email on openerp


3. click continue

4. you will get this:
solved openerp gmail error

5. wait about 10 minutes, then try again to access via openerp.

then everything solved,

outgoing server error in openerp 7



Read more ...

customer consideration of LTE Indonesia


define: LTE

Singkat saja dalam mengartikan, LTE adalah teknology yang di temukan oleh seorang dari kediri, yang lebih bagus daripada 3G, dimana speed trasmit nya bisa sampai 1 Gbps.

Bandwidth and throughput LTE

Di Indonesia, para operator harus menyewa pita frequency ke pemerintah untuk menggunakannya dalam operasi mereka, biasanya lebar pita yang digunakan terutama untuk freq-band 2,3 GHz adalah per 5 Mhz. Berikut ini adalah korelasi antara bandwidth per channel dengan throughput dapat digambarkan sebagai berikut:
Bandwidth
Throughput (Mbps)
1.4 MHz
12 Mbps
3 MHz
25 Mbps
5 Mhz
43 Mbps
10 MHz
86 Mbps
15 MHz
129 Mbps
20 MHz
173 Mbps
100 MHz
~ 1 Gbps

Sedangkan untuk LTE sendiri, pemerintah membagi freq-band nya per 15 Mhz, jadi bisa disimpulkan bahwa maximum throughput nya adalah 129 Mbps.

Indonesian Operator for LTE Frequency Winner

dari kominfo, ternyata pemenang tender untuk LTE di indonesia adalah sebagai berikut :

Indonesian Operator for LTE Frequency Winner

Indonesia LTE Zone

sedangkan pembagian zona LTE adalah seperti ini :

Indonesia LTE Zone


Berdasarkan Peraturan Menkominfo nomor 08/PER/M.KOMINFO/01/2009 tanggal 19 Januai 2009 tentang Penetapan Pita Frekuensi Radio Untuk Keperluan Layanan Pita Lebar Nirkabel Pada Pita Frekuensi Radio 2.3 GHz ditetapkan bahwa pita ini menggunakan moda TDD yang terdiri dari 15 nomor blok dimana nomor blok 1 sampai dengan nomor blok 12 masing-masing lebar frekuensinya 5 MHz sedangkan nomor blok 13 dan nomor blok 14 masing-masing lebar frekuensinya 15 MHz (inilah yang akan di tempati oleh LTE Operator) dan nomor blok 15 lebar frekuensinya 10 MHz.


NOMOR BLOK
RENTANG FREKUENSI (MHz)
LAYANAN
1
2300 - 2305
BWA
2
2305 - 2310
BWA
3
2310 - 2315
BWA
4
2315 - 2320
BWA
5
2320 - 2325
BWA
6
2325 - 2330
BWA
7
2330 - 2335
BWA
8
2335 - 2340
BWA
9
2340 - 2345
BWA
10
2345 - 2350
BWA
11
2350 - 2355
BWA
12
2355 - 2360
BWA
13
2360 - 2375
Nomadic BWA
14
2375 - 2390
Nomadic BWA
15
2390 - 2400
USO

Internux LTE  Frequency band

Internux sebagai operator pertama yang menggelar LTE di Indonesia, ternyata hanyalah sebagian kecil dari beberapa operator pemenang lisensi pengguna pita LTE, dimana mereka hanya menang di Jabodetabek dan Banten, hal ini berdasarkan hasil lelang BWA 2.3 GHz nomor blok 13 dan nomor blok 14 pada 2009 adalah sebagai berikut : 


ZONA
AREA
BLOK 13
BLOK 14
1
Sumbagut
First media
Berca
2
Sumbagteng
Berca
Berca
3
Sumbagsel
Berca
Berca
4
Banten & Jabotabek
First media
Internux
5
Jabar minus Botabek
Comtronics
IM2
6
Jabagteng
Telkom
Comtronics
7
Jabagtim
Comtronics
Telkom
8
Balinusra
Berca
Berca
9
Papua
Telkom
WiMAX Ind
10
Maluku & Malut
Telkom
WiMAX Ind
11
Sulbagsel
Berca
Berca
12
Sulbagut
Telkom
Telekomindo
13
Kalbagbar
Berca
Berca
14
Kalbagtim
Berca
Berca
15
Rikep
Berca
WiMAX Ind


sedangkan pemenang lebih detail per zone per PT per freq adalah sebagai berikut : 

SERVICE ZONE


SELECTION WINNER

FREQUENCY
(MHz)
Zone 1
Northern Part of Sumatra
PT. First Media Tbk.
2360 - 2375
PT. Berca Hardayaperkasa
2375 – 2390
Zone 2
Central Part of Sumatra
PT. Berca Hardayaperkasa
2360 - 2375
PT. Berca Hardayaperkasa
2375 – 2390
Zone 3
Southern Part of Sumatra
PT. Berca Hardayaperkasa
2360 - 2375
PT. Berca Hardayaperkasa
2375 – 2390
Zone 4
Banten, Jakarta, Bogor, Depok, Tangerang, Bekasi
PT. First Media Tbk.
2360 - 2375
PT. Internux
2375 – 2390
Zone 5
Western Part of Java except Bogor, Depok, and Bekasi
……..
2360 - 2375
PT. Indosat Mega Media
2375 – 2390
Zone 6
Central Part of Java
PT. Telekomunikasi Indonesia Tbk
2360 - 2375
…….
2375 – 2390
Zone 7
Eastern Part of Java
………
2360 - 2375
PT. Telekomunikasi Indonesia Tbk
2375 – 2390
Zone 8
Bali and Nusa Tenggara
PT. Berca Hardayaperkasa
2360 - 2375
PT. Berca Hardayaperkasa
2375 – 2390
Zone 9
Papua
PT. Telekomunikasi Indonesia Tbk
2360 - 2375
……..
2375 – 2390
Zone 10
Maluku and North Maluku
PT. Telekomunikasi Indonesia Tbk
2360 - 2375
……..
2375 – 2390
Zone 11
Southern Part of Sulawesi
PT. Berca Hardayaperkasa
2360 - 2375
PT. Berca Hardayaperkasa
2375 – 2390
Zone 12
Northern Part of Sulawesi
PT. Telekomunikasi Indonesia Tbk
2360 - 2375
PT. Jasnita Telekomindo
2375 – 2390
Zone 13
Western Part of Kalimantan
PT. Berca Hardayaperkasa
2360 - 2375
PT. Berca Hardayaperkasa
2375 – 2390
Zone 14
Eastern Part of Kalimantan
PT. Berca Hardayaperkasa
2360 - 2375
PT. Berca Hardayaperkasa
2375 – 2390
Zone 15
Riau Islands
PT. Berca Hardayaperkasa
2360 - 2375
……..
2375 – 2390

Trial LTE Indonesia

beberapa operator existing sudah pernah trial LTE di indonesia, seperti di kutip oleh indonesiafinancetoday.com bahwa tsel dan axis sudah pernah mencoba untuk menggunakan 4G di freq 1800 Mhz, 
 "JAKARTA – Two telecommunication (telecom) operators, PT Telekomunikasi Selular (Telkomsel) and PT Axis Telekom Indonesia (Axis), are ready to hold a trial run for 4G or long term evolution (LTE) services in 1,800 Megahertz (MHz) frequency band this year. This frequency is selected as many telecom operators across the globe are using this band for LTE services."

sedangkan menurut  http://www.rcrwireless.com , tsel akan menggelar 4G di tahun 2014
"But for 4G LTE-hungry Indonesia, an upgrade may not be too far off. The government is scheduled to complete its 4G regulations by the end of the year. This will open the door for a commercial rollout in 2014. Bouncing back from its financial woes last year, Telkom Indonesia says that its Telkomsel subsidiary has plans to commercially roll out 4G LTE later this year in four areas: Jakarta, Bali, Medan and Manado. It is not clear, however, which frequency will be used. One thing’s for sure, the government there needs to learn from the mistakes made when failing to rollout WiMAX in Indonesia.  Keep an eye on Indonesia – they’ve lagged, but it sounds like 4G LTE is right around the corner!" 

LTE Devices (UE) for Band 40 (TDD 2300-2400MHz, 100MHz)

berikut adalah list hardware yang mendukung untuk di gunakan di freq 2,3

LTE CPE

1.    Asiatelco ALR-W190
2.    Asiatelco ALR-W191
3.    Huawei B222s-40
4.    Huawei B593s-82
5.    Netcomm 4GT101W-01
6.    Netcomm 4GT101W-04
7.    Nokia Siemens Networks CPE outdoor 7210
8.    Nokia Siemens Network CPE indoor 7212
9.   Huawei B593s-58

LTE Dongles

1.   Asiatelco ALT-C160
2.   Huawei E392u-92
3.   ZTE MF820S2
4.   Huawei E398s-81
5.   BandLuxe C508

Mobile LTE MiFI / hot-spots

1.    Huawei E589u Mi-Fi
2.    Modacom URoad-LTE
3.    ZTE MF91S

Summary  LTE Indonesia 

LTE di Indonesia sudah mulai di gelar, para operator mulai berlomba untuk lebih dulu menguasai pasar, tetapi bagi para customer harus memperhatikan hal2 berikut sebelum memilih :
  • siapa pemenang terbesarnya, dan main di freq berapa, sehingga sebelum membeli device pilihlah yang support dengan mereka tanpa tergantung salah satu (karena masalah locking / beda feq)
  • adakah kemungkinan operator existing juga menggelar LTE, klo ada, maka perhatikan juga freq mereka.
kesimpulan terahir, belilah device yang support 900, 1800, 2100, 2300 Mhz, kenapa ?, karena sudah menjadi masalah klasik di Indonesia bahwa klo gelaran para operator itu sering gak merata, jadi klo signal yang 1 jelek, tinggal ganti kartu untuk gunakan signal yang lebih bagus di situ, termasuk klo ternyata harus pindah ke 3G, maka hardware kita masih tetep compatible untuk itu.

install lte modem ubuntu 13.10 

klo sudah beli,  secara umum cara nginstalnya klo untuk ubuntu bisa di lihat di postingan sebelumnya di sini

Read more ...