夢みるアドセンス

情報系の雑記 :インターン行きたいので連絡ください hohoku55_at_yahoo.co.jp

scpコマンドのpermission deniedエラー

初歩的だけど結構ハマったのでメモ。

 

症状

scpコマンドを打つとパスワードを要求されて、パスフレーズを打ってもpermission deniedと表示され、エラーが発生。実行できない。

対象のファイルのpermission確認したけど問題はなかった。

 

解決

リモートホストの中でscpを実行していた。一回logoutしてからローカルで実行する。

 

 

調べてもフォルダとかファイルとかのpermissionのことしか書いてなかったので全然問題に気づかなかった。人に教えてもらってはじめて気づいた。

速い円周率の計算方法

前提

プロコンの問題を解いていたら円周率の問題に当たった。素直にモンテカルロ法で解いたがタイムオーバー。

以下の方法がいいみたいのでメモ。

 

本題

ガウス=ルジャンドルのアルゴリズム - Wikipedia

4つの変数を反復して計算することにより円周率を算出する。

なんと、3往復するだけで19桁の円周率を計算できるっぽい。(モンテカルロ法だと3.14を出すだけでも100万粒必要)

 

補足

floatでは有効数字17桁しか表せないので、せっかく19桁出せても桁落ちしてしまう。

そこで、Decimal クラスを使って有効数字を拡張する必要がある。

参照:

decimal – 固定小数点数と浮動小数点数 - Python Module of the Week

広告みたいに赤くしたい

 ゴール

こういうの

f:id:hohoku:20170724220234j:plain

http://stat.ameba.jp/user_images/20140307/12/horrangi/42/46/j/o0632034512867646326.jpg

 

使ったもの

Python3 PIL(Python Imaging Library)

 

コード
from PIL import Image

im = Image.open('input.jpg')
im.convert('RGB')
width = im.size[0]
height = im.size[1]

for x in range(width):
	for y in range(height):
		pixel = im.getpixel((x, y))
		ave = sum(pixel)/len(pixel)
		ave = int(ave)
		if (pixel[0]>100) and (pixel[1]<45) and (pixel[2]<45):
			im.putpixel((x, y), (pixel[0]+20,pixel[1]-50,pixel[2]-50))
		else:
			im.putpixel((x, y), (ave,ave,ave))
im.save('out.jpg')


結果

f:id:hohoku:20161215132603j:plain f:id:hohoku:20161215132612j:plain

http://lar-japan.com/wp-content/uploads/2015/11/A21289390_m-e1448595674476-300x208.jpg

f:id:hohoku:20161215132622j:plain f:id:hohoku:20161215132628j:plain

http://s1.1zoom.net/big7/613/Roses_Callas_Ranunculus_379558.jpg

 

 

わりと結構うまくできたけど、色の境界がギザギザなのでスムージングするともっといいかも。

Python3でstanford nlp使って品詞タグ付けをする

stanford nlpのPython3導入メモ。

 

大体ここ

Stanford Corenlp をPythonで使う1(インストール〜ダンプ) - ジオマーリン

を参考にしました。

 

stanford nlpは英語の自然言語処理のライブラリ。日本語は扱えない。

 

まず、pipでcorenlp-pythonをインストールしておく。これはjavaで書かれてるcorenlpをpythonで使えるようにしてくれる。

pip3 install corenlp-python

・使ってみる 
import corenlp

parser = corenlp.StanfordCoreNLP(corenlp_path="/usr/local/stanford-corenlp-full-2014-08-27",properties="/user.properties")
result = parser.parse("I saw a man last weekend")
print(result)

まずは、元のcorenlpをダウンロードしておいて適当なところにおいておく。

http://nlp.stanford.edu/software/stanford-corenlp-full-2014-08-27.zip

その場所をcore_pathに記述。

さらに、user.propertiesを作り、必要な処理を記入しておく必要がある。たとえば

annotators = tokenize, ssplit

は入力文を単語に区切って(tokenize)、文に分ける(ssplit)処理をする。さらに、品詞タグ付けを行いたい場合はposを記述する。

各annotatorには依存関係がある。ex)posはtokenize,ssplitを行わないとできない

詳しくは以下に書いてある。

Stanford CoreNLPをPythonから使う - Qiita


あとは.parse()で文章をパースできる。

lemmmaまでやったけど、結構時間がかかった。

 

{'sentences': [{'dependencies': [],
                'indexeddependencies': [],
                'parsetree': [],
                'text': 'I saw a man last weekend',
                'words': [['I',
                           {'CharacterOffsetBegin': '0',
                            'CharacterOffsetEnd': '1',
                            'Lemma': 'I',
                            'PartOfSpeech': 'PRP'}],
                          ['saw',
                           {'CharacterOffsetBegin': '2',
                            'CharacterOffsetEnd': '5',
                            'Lemma': 'see',
                            'PartOfSpeech': 'VBD'}],
                          ['a',
                           {'CharacterOffsetBegin': '6',
                            'CharacterOffsetEnd': '7',
                            'Lemma': 'a',
                            'PartOfSpeech': 'DT'}],
                          ['man',
                           {'CharacterOffsetBegin': '8',
                            'CharacterOffsetEnd': '11',
                            'Lemma': 'man',
                            'PartOfSpeech': 'NN'}],
                          ['last',
                           {'CharacterOffsetBegin': '12',
                            'CharacterOffsetEnd': '16',
                            'Lemma': 'last',
                            'PartOfSpeech': 'JJ'}],
                          ['weekend',
                           {'CharacterOffsetBegin': '17',
                            'CharacterOffsetEnd': '24',
                            'Lemma': 'weekend',
                            'PartOfSpeech': 'NN'}]]}]}

ubuntuインストール時データパーティションが作成できない

Ubuntuをインストールするのに数時間はまったのでメモ。

結論を言うと、swap領域はメモリの2倍の容量が必要。パーティションの設定を変更しよう。

症状

・「ext4ファイルシステムを/にマウントする試行に失敗しました」とエラーが表示される

 

Ubuntuをインストールしようとすると、パーティションを作るところで

ext4ファイルシステムを/にマウントする試行に失敗しました』

とエラーが出て、その先へ進めない。swap領域は作成できてるっぽいが、ext4とかxfsとかのデー タ領域のマウントポイントが作成できない。

ググったらUSBが良くないとか出てきたので、3本くらいライブUSBを作り、ディスクまで作ったが打開できず。

さらに他のディストリビューション(LubuntuやMATE)を試してみても打開できない。

よく見るとこのUbuntuフォーラムの一番下の方に回答があった。

Ubuntu日本語フォーラム / インストール時のエラー「swapタイプのファイルシステムをnoneにマウントする試行に失敗しました。」

解決

swapは物理メモリの2倍の容量がいるだけだった。

自分の場合、メモリを4gb積んでいたので8gbもswap領域を取ることになった。

Pythonの改行文字削除

line[:-1]よりline.rstrip()を使ったほうがいい前者だと最後の1行の最後が切れてしまう

よく出来てると思った

PHP 【保存版!!】PHPからMySQLに接続する方法etc【データベース】 - Qiita

class CrepeShop {
    public function buy($crepe) {
        $message = '';
        if ($crepe == 'チョコ') {
            $message = $crepe.'は330円です';
        } else if ($crepe == '生クリーム') {
            $message = $crepe.'は270円です';
        } else {
            $message = 'クレープを選択して下さい';
        }
        return $message;
    }
}
$customer = new CrepeShop ();
echo $customer->buy ( '生クリーム' );//生クリームは270円です
echo $customer->buy('チョコ');//チョコは330円です