DreamerDreamのブログ

夢想家の夢です。〜揚げたてのモヤっとしたものをラフレシアと共に〜

LinuxへEclipseをインストールして日本語化

最近のLinuxはスゴイ!

Eclipseのインストールがあまりに簡単すぎで驚いた。

 

WindowsMacEclipseをインストールする場合、Eclipseのサイトから該当するファイルをダウンロードしてきて展開し、環境変数を触ってパスを通したり任意の展開場所を指定したりという必要がある。(少なくとも僕が以前にインストールした時は)

 

Linuxはもっと面倒くさい設定やら何やらあるんだろーなーと予想して躊躇していたのだが・・・、

Debianの場合、「Synapticパッケージマネージャ」で

Ubuntuの場合、「Ubuntuソフトウェアセンター」で

Eclipse」を検索するとインストール出来るツールが出て来て選択するだけであっという間にインストールが完了してしまう。

 

Ubuntu

f:id:DreamerDream:20160229084726p:plain

 

Debian

f:id:DreamerDream:20160229084831p:plain

 

普通に出来たアイコンをクリックするとEclipseが起動する

英語バージョンでデフォルトの設定で使う場合はこれだけ。

 

実に簡単だ。

 

日本語化パッケージをダウンロードする場合

Ubuntuで「pleiades」と検索すれば日本語化ファイルがインストールされる

f:id:DreamerDream:20160229085006p:plain

 

Debinの場合先ほどeclipseで検索した画面に関連パッケージとしてpleiadesが表示されているのでチェック入れるだけ。

f:id:DreamerDream:20160229084743p:plain

 

日本語化するにはパッケージをインストールするだけではダメでターミナルから

-- /usr/lib/eclipse/eclipse.ini --に日本語ファイルの場所

-javaagent:/usr/lib/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

と追加して

eclipse -clean

と打ってEclipseを再起動させる必要がある。

 

 

ちなみに、MacのAppStoreで「eclipse」を検索すると

f:id:DreamerDream:20160229090057p:plain

何やら有料の開発ツールが表示されるみたい。

RaspberryPiのシステム用SDカードをバックアップ&復元する

MacからRaspberryPi用のSDカードのバックアップを取るにはターミナルからddコマンドを打てばよい。

 

バックアップ手順

diskutilを利用してsdカードの場所を確認する

diskutil list

 

/dev/disk0
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *320.1 GB disk0
1: EFI 209.7 MB disk0s1
2: Apple_HFS Macintosh HD 319.2 GB disk0s2
3: Apple_Boot Recovery HD 650.0 MB disk0s3
/dev/disk1
#: TYPE NAME SIZE IDENTIFIER
0: FDisk_partition_scheme *15.5 GB disk1
1: Windows_FAT_32 NO NAME 15.5 GB disk1s1

この場合/dev/disk1がsdカード

 

ddを使ってデスクトップにdmg形式でバックアップをとる

sudo dd if=/dev/disk1 of=~/Desktop/raspi.dmg

バックアップが始まったらかなりの時間を要する(8GBのSDカードで1時間ぐらい?16GBのは放置して出かけてたら完了していたので正確な時間は不明)

f:id:DreamerDream:20160207162130p:plain

容量がSDカードの容量になっていれば成功。

 

 

復元方法

バックアップと同じくdiskutilを利用してsdカードの場所を確認する

diskutil list

SDカードの場所を覚えておいて( /dev/sisk1 とする)

アンマウントする

diskutil unmountDisk /dev/disk1

 

次いでSDカードをフォーマット

sudo newfs_msdos -F 16 /dev/disk1

 

デスクトップのバックアップイメージからSDカードに書き込む

sudo dd if=~/Desktop/raspi.dmg of=/dev/disk1

これもかなり時間がかかるので放置した為時間は不明。

 

LINEスタンプの製作代行サービスに思う事

あくまで個人的に思うことなのですが、LINEスタンプについて調べていると代行サービスの宣伝が目に付きます。

安い所では5万以下で請け負ってくれるサービスもあるようです。

 

  • プロのイラストレーターが書いています
  • ○万円も売れた例が複数あります
  • ランキング○位内に入った例があります
  • スタンプの審査は難しく、通りにくいものです

 

のような文句を唱っていますが・・・ちょっと待って下さいよ。

 

そもそもプロのイラストレーターが40個のスタンプをその値段で請け負ってくれるということは、ほぼ片手間で仕上げた値段ですよね。

スタンプ40個作るのに3分で仕上げたとしても1セット2時間かかります。

1時間かけたら40時間かかります。1日8時間労働で5日です。

最低でもプロのイラストレーターさんのお給料+制作会社の利益を合わせた価格が必要です。

5万円以下の価格で請け負えるということは30分以下でチャッチャっと作ったスタンプではないのでしょうか?いや、プロだから30分以内で作るのは余裕かもしれませんが、デザイン含めた30分以内ですから力を入れて作っているとは思えません。

プロのイラストレーターさんを酷使しているか、自称プロを使っているのでは?

 

○万円売り上げたとか○以内に入ったスタンプが何例もあるというが、二例以上あれば「何例も」という表現は間違っていませんし、競争力の低い公式スタンプも請け負っているとするなら当然そのような結果は出ます。

 

審査が厳しいから素人では難しいような表現をしてあるけれど、ラインクリエイターズマーケットの利用方法とガイドラインに書いてあることさえ守れば審査は通ります。

LINE Creators Market

リジェクトといっても素人にも解り易いよう丁寧に「このスタンプのこの表現がダメだから直してね」だと分かりやすいリジェクトメッセージが送られてくるので再審査を依頼すれば良いだけのこと。これはリジェクトが出てしまうと1からやり直しみたいな印象操作ですね。

 

そもそも例に上げてあるスタンプをクリエイターズマーケットの上位であまり見かけないし、それだけ売り上げられる自信があるのなら逆に「良いアイデアなら○万円で買います」となるはずですがそのような会社はない。

LINEスタンプのその後

以前、ふとした思いつきでLINEスタンプを作ってみたという記事を書きました。

dreamerdream.hateblo.jp

 

 

スタンプ作りにはペンタブ↓が良いです。

スタンプの紹介はしませんが、 その後も何種類かスタンプを作ってテストしてみた結果、1月中の売り上げグラフがこちら↓

f:id:DreamerDream:20160201130720p:plain

 

評判の良いスタンプ(緑線)は順調に3000円以上売り上げていますが評判の悪いスタンプ(赤線)は初日のみ「NEW」で目に付いた人が購入したのみでその後0円をキープしています(悲

身内ネタのスタンプ(オレンジ線)は友達が面白がって購入してくれたので初日に400円代売り上げて、その後チラホラ買ってくれる人がいるようですが、マーケットが少ないので伸びません。

 

クリエイターの手取りは120円のスタンプを1つ購入していただいて31円、LINEプリペイドカードで購入していただいた場合42円付きます。

是非皆さんスタンプはLINEプリカで購入してください。(この11円の差は大きい)

そして1000円以上売り上げないと口座に振り込まれないし、振込手数料が500円かかるので纏まった額に到達するまで払い戻しは気長に待つことになります。

 

スタンプの使用率↓

f:id:DreamerDream:20160201130645p:plain

身内ネタのスタンプ(赤色)は初日に盛り上がっていますが後は低空飛行です。

評判の良いスタンプ(青色)は順調に使用率が上がってトータル1000を超えました。どんどん使ってもらうと宣伝になり、また興味を持った人が購入をしてくれるのでこれは良い状態だと捉えています。

 

何でもかんでも作れば売れるという訳ではなさそうなので「儲ける」よりも、自分で使う用途の「楽しみ」で作るのが良さそうです。「売れたらラッキー」ぐらいな気持ちで。

ちなみに自分で作ったスタンプも自分で決めた額で購入することになります(120円のスタンプならプリカで購入すると42円戻って来るので実質78円での購入です)。

 

売り上げが伸びなくても78円でオリジナルスタンプが使えるというのはホント楽しいです。

Apacheの.htaccessを利用しプロキシ経由のアクセスをブロックするPythonコードを作ってみた

Apacheのログを観察しているとプロキシ経由での不正なアクセスが目立つ。

なのでApacheのアクセス制限を利用してプロキシ経由でのアクセスを予めシャットアウト出来ないかと考えた。

 

まずは普通にIPアドレス制限の方法(以下sampleは任意のディレクトリ若しくは設定ファイル名)

/etc/apahce2/sites-available/sample.conf

<Directory /var/www/sample>
AllowOverride ALL
</Directory>

と追加して後の.htaccessの設定を有効にする必要がある。

これでapacheを再起動させると.htaccessが反映される。

 

sample.conf自体に制限を記述するという方法もあるが、そうすると追加変更があった際にApache自体を再起動させないといけないらしい。

.htaccessなら保存したら即反映されるらしい。

 

/var/www/sample/.htaccess

ディレクトリ内のアクセス制限を設定する

order allow,deny
allow from all
deny from 192.168.0.20

 

このように設定すると

192.168.0.20のアクセスを拒否、他は許可する

という状態になる

参考にさせてもらったページ

ApacheによるWebサーバ構築(9):IP認証によるアクセス制限のテクニック (2/2) - @IT

 

.htaccessの書き方 | murashun.jp

 

これで.htaccessファイル内のdeny fromにプロキシIPアドレスを追加すれば良いわけだ。

 

.htaccessディレクトリ毎に指定可能だそうだが、サブディレクトリに.htaccessが存在しないと親ディレクトリの.htaccessの内容が反映されるようだ。

 

匿名プロキシ紹介サイトはここを利用させてもらうことにした。

www.cybersyndrome.net

 

ここに掲載されているIPアドレス一覧をPythonで取得して

.htaccessに記述するようにした

記述箇所は#--PLOXY_BLOCK--以下に記述するように指定する。

 

order allow,deny
allow from all

#--PLOXY_BLOCK--

(この間にproxyを追加)

#--PLOXY_BLOCK_END--

 

 

 まずはプロキシのリストを取得するコード(悪用厳禁)

 --get_proxy.py--

#!/usr/bin/python

#coding:utf-8

 

import urllib2

url = 'http://www.cybersyndrome.net/pla.html'

 

def get_html(url = ''):

        try:

                fp = urllib2.urlopen(url)

                html = fp.read()

                fp.close()

        except:

                html = ''

        return html

 

def get_proxylist(html = ''):

        proxylist =

        try:

                ar = html.split('</a></li><li>')

                for s in ar:

                        t = s.rsplit(">",1)

                        proxylist.append( t[1] )

        except:

                pass

        return proxylist

 

def split_proxy(proxys = ):

        proxy_port =

        for p in proxys:

                if 1 < len(p):

                        proxy_port.append(p.split(':'))

        return proxy_port

 

def get():

        html = get_html(url)

        proxys = get_proxylist(html) #proxy:port

        proxy_port = split_proxy(proxys)

        return proxy_port

 

if __name__=='__main__':

        lst = get()

        for s in lst:

                print s

 

これをimportしてリスト取得、.htaccessの指定行にdeny from 記述にして書き込むコードを生成、cronで指定時間毎に実行するようにする

設定ファイル /usr/local/etc/proxy_blocker

で書き込む.htaccessファイルを指定してそれらのファイルを書き換えるようにした。

--/usr/local/etc/proxy_blocker--

/var/www/sample/.htaccess

/var/www/hoo/.htaccess

/var/www/hoo/bar/.htaccess

 

このような感じ

 

file_mngは以前作ったもの

dreamerdream.hateblo.jp

 

 

 

--proxy_blocker.py--

#!/usr/bin/python

#coding:utf-8

 

import get_proxy

import file_mng

 

etcfile = '/usr/local/etc/proxy_blocker'

block_start = "#--PLOXY_BLOCK--"

block_end = "#--PLOXY_BLOCK_END--"

 

def load_proxy():

        proxy_list = get_proxy.get()

        return proxy_list

 

def get_deny_text(proxy = ):

        txt = []

        for p in proxy:

                txt.append('deny from ' + p[0])

        txt.append('#update:' + file_mng.get_daytime())

        return txt

 

def get_htlist():

        lst = file_mng.load(etcfile)

        return lst

 

def open_htaccess(htfile):

        return file_mng.load(htfile)

 

def insert_proxys(htaccess,deny_text):

        if block_start in htaccess and block_end in htaccess:

                start = htaccess.index(block_start)

                end = htaccess.index(block_end)

                del htaccess[ start +1 : end ] #delete old list

                for s in deny_text:

                        htaccess.insert(start +1,s)

                return htaccess

 

def save(htaccess_file,htaccess_new):

        text = ''

        for s in htaccess_new:

                text += s + '\n'

        file_mng.save(htaccess_file, text)

 

def write_htaccess(htlist, deny_text):

        for ht in htlist:

                htaccess = open_htaccess(ht)

                if 'not Load' != htaccess:

                        htaccess_new = insert_proxys(htaccess, deny_text)

                        save(ht,htaccess_new)

 

if __name__=='__main__':

        proxy = load_proxy()

        if 1 < len(proxy):

                deny_text = get_deny_text(proxy)

                htlist = get_htlist()

                write_htaccess(htlist, deny_text)

 

 

これを実行すれば/usr/loca/etc/proxy_blockerで指定したファイルの内容が置き換わる

 

 

f:id:DreamerDream:20160128122722p:plain

(略)

f:id:DreamerDream:20160127111130p:plain

後はcronを設定する

sudo crontab -e

0 */1 * * * python /usr/local/lib/proxy_blocker.py &

と記述。毎時0分にバックグラウンドで実行する

参考にさせていただいたサイト

crontabの書き方

 

Wi-Fiが繋がらなくなったら自動的にシステムを再起動させる

RaspberryPiのTypeAをWi--Fiドングル接続してサーバーとして運用していると思わぬトラブルによってWi-Fiがいつの間にか切断されている。という事態に見舞われることがある。

頻繁に無くても年に一度でもこういう事態に陥ると気が付かないまま数日過ごしてしまうということになりかねない。

以前書いたプログラムで気が付いたら物理的スイッチを用いて安全に電源を入れ直すというのは可能だが、 

dreamerdream.hateblo.jp

 

 

その場にいない場合を想定してLAN接続が切れたら自動的にシステムを再起動させるというコードを書いてみた。

 

動作は

  1. socketで適当なサーバー(ルーター)のアドレスに数分おきに適当なGET要求を出す
  2. 適当なGET要求なので繋がれば返信でBadRequestが返って来るので接続出来ていると確認できる。
  3. 繋がらなければ返信が来ない。
  4. その時たまたま繋がらなかっただけかもしれないので5分おきに接続を試みる。
  5. 3回返答がなければ切断されたとみなす。
  6. メモリ領域の他のアプリケーションのログデータを退避させておく。
  7. システムを再起動させる。

以上をデーモンで動作させておく。

dreamerdream.hateblo.jp

 

 

コード内の変数delay_minでチェックする間隔を分単位で指定出来るようにして、5分おきにチェックするようにした。

もし、Wi-Fiドングルやルータが本当に故障で繋がらなくなったとしても5分×3回チェックなので起動後15分は手動で対応出来る時間がある。

15分以内に直にモニタとキーボードを接続してデーモンをストップさせれば良い。

 

 インポートしているfile_mngは以前作ったもの

 file_mng.py

dreamerdream.hateblo.jp

 

 

targetでアクセスするサーバーを指定(僕の場合はルーター)。 

一応どのタイミングで再起動することになったのか解るようにログを残すようにした。

-- rebooterd.py --

#!/usr/bin/python

#coding:utf-8

 

import sys,os

import subprocess

import time

import socket

import file_mng

 

target = '192.168.0.1'

port = 80

delay_min = 5

count_dc = 0

logfile = "/var/tmp/rebooterd.log"

 

def log(logdata):

    data = file_mng.get_daytime() + ' ' + logdata + '\n'

    file_mng.save_add(logfile,data)

 

def backup():

    file_mng.backup_logs()

 

def reboot():

    log("reboot")

    comand = ["sudo", "reboot"]

    try:

        subprocess.call(comand)

    except:

        log("subprocessErrer")

 

def disconected():

    global count_dc

    count_dc += 1

    log("count:" + str(count_dc))

    if 2 < count_dc:

        backup()

        reboot()

 

def access():

    try:

        clientsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        clientsock.connect*1

        clientsock.sendall('GET /RaspberryPi HTTP/1.1')

        clientsock.sendall('\r\n')

        clientsock.sendall('\r\n')

        rcvmsg = clientsock.recv(1024)

        clientsock.close()

    except:

        rcvmsg = 'err'

    return rcvmsg

 

def loop():

    log("start")

    global count_dc

    while True:

        time.sleep(delay_min * 60)

        msg = access()

        if msg == '' or msg == "err":

        #if msg != '':#test

            disconected()

        else:

            count_dc = 0

 

def fork():

    pid = os.fork()

    if pid > 0:         # parent

        f2 = open('/var/run/rebooterd.pid','w')

        f2.write(str(pid)+"\n")

        f2.close()

        sys.exit()

 

    if pid == 0:        # child

        loop()

  

if __name__=='__main__':

        fork()

 

今回このコードを作るにあたり、file_mngとlog_mailにコードを追加したのでそちらのブログのコードも更新しておいた。

dreamerdream.hateblo.jp 

*1:target,port

はてなブログを一ヶ月間連続投稿してみた結果と感想

このブログを開始してからの1日アクセス数グラフ。

f:id:DreamerDream:20160111084652p:plain

 

ほぼRaspberryPi備忘録として使ってるのでブログとしてはかなりアクセスは少ない方だと思う。

僕には是非とも皆にRaspberryPiやLinuxを知って使って欲しい。という思いがある。

RaspberryPiが世に出てかなり時間が経つし、いろんな所で紹介されているので僕の中ではかなり有名な機械だと思っていたけど友達に聞いたら未だに「え?なにそれ?」と返って来る。まあそりゃそうだ。機械が好きじゃない人からしたら僕が女性の化粧品なんかに興味が無いのと同じ感覚だと思う。

 

調べてみると僕がRaspberryPiを初めて触ったのが昨年の4月、もうすぐ一年経つのか・・・もうすっかり虜になってしまった。LinuxCUIだけでこんなにも使えるツールだということを今まで知らなかった。

ざっくりとプログラムが書けてスグ動くスクリプト言語Pythonにも脱帽だ。おかげで最近Javaを弄る機会がグンと減ってしまった。

 

ともかくはてなブログにはまる1ヶ月に渡って備忘録を書いたので自分には便利帳として使えるツールになった。

 

理由はわからないけどGoogleで「raspberrypi 独自ドメイン」と検索するとトップの方に表示されるようになってる。光栄だ。

 

連日投稿はこれでおしまいにすることにするが少しずつこれからもやったこと、やりたい事をメモ代わりに残して行く事にする。

kampa.me