記録として残しておきたいブログ

主にプログラミングについて書きます。現在は http://tmg0525.hatenadiary.jp/ に書いています。

外部のネットワークに接続できない

環境

Raspberry pi3
OS: Raspbian jessie lite

ping google.com でエラーになる

外部のネットワークに接続できない...

pi@raspberrypi:/etc $ ping google.com
connect: Network is unreachable

デフォルトゲートウェイが正しく設定できていなかった

 外部と通信するための出入り口


/etc/network/interfaces に設定を記述することで解決した


ゲートウェイの確認をしてみた

pi@raspberrypi:/usr/bin $ route -v
カーネルIP経路テーブル
受信先サイト    ゲートウェイ    ネットマスク   フラグ Metric Ref 使用数 インタフェース
192.168.3.0     *               255.255.255.0   U     303    0        0 wlan0

ゲートウェイが'*'だと、設定できていないらしい

あれ、 /etc/dhcpcd.conf に書いたんだけどな

# /etc/dhcpcd.conf
static domain_name_servers=192.168.3.1

設定が反映されていないっぽい?


/etc/network/interfaces にゲートウェイの設定を記述する

固定IPにしていて、設定する場合

manual を static にする
address, netmask, gateway を追加する

# /etc/network/intetfaces
...
allow-hotplug wlan0
iface wlan0 inet static
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
    address 192.168.3.14
    netmask 255.255.255.0
    gateway 192.168.3.1


再起動する

外部と通信でるようになった

pi@raspberrypi:~ $ ping google.com
PING google.com (216.58.221.14) 56(84) bytes of data.
64 bytes from nrt13s38-in-f14.1e100.net (216.58.221.14): icmp_seq=1 ttl=55 time=5.90 ms
64 bytes from nrt13s38-in-f14.1e100.net (216.58.221.14): icmp_seq=2 ttl=55 time=9.36 ms
64 bytes from nrt13s38-in-f14.1e100.net (216.58.221.14): icmp_seq=3 ttl=55 time=29.5 ms


参考サイト
weworkweplay.com

CentOS スクリプトを定期的に実行する crontab

環境

OS: CentOS7
Python: 3.6.0
Vagrant上にある

CentOS7で定期的に実行する

これは定期的になにか取得したり、投稿したりしたいときに使えるかも

crontabというものを使う。

cron の設定ガイドをみながらやってみた

crontab -e

で設定を行う

20 02 * * 1 $HOME/.pyenv/shims/python 実行したいファイル

pyenvの場合、$HOME/.pyenv/shims/pythonで実行しないといけないらしい
デフォルトでは、システムにインストールされているpythonで実行されてしまうため

参考サイト
【Python】cronでpyenv環境のPythonが実行されない時の対処法 – あずみ.net

Python Pyhtonからtwitterを使ってみる

環境

Python: 3.6.0
Vagrant上にある

Pythontwitterを使うには

python-twitter というものを使う
python-twitter 3.2.1 : Python Package Index

インストール
pip install twitter-python
Twitter APIの使用の準備

以下のサイトを参考にしました
Twitterのbotをpythonで作成する手順 - Qiita


Twitter Application Managementにアクセスして「Create New App」を押す

こんな感じで入力する

f:id:tmg1998:20170320003637p:plain

Twitterを使用するための値を取得
Consumer Key (API Key)
Consumer Secret (API Secret)
Access Token
Access Token Secret
の4つを取得する

Pythonからツイートしてみる

import twitter

api = twitter.Api(
    consumer_key=取得した Consumer Key,
    consumer_secret=取得した Consumer Secret,
    access_token_key=取得した Access Token,
    access_token_secret=取得した Access Token Secret
)

api.PostUpdate("I love python-twitter!")


これだけで、もうツイートできてしまう。

簡単すぎる...


これで定期的にツイートとかできる!!!!!

Python その日が今年の何週目か datetime

環境

OS: CentOS7
Python: 3.6.0
Vagrant上にあるもの

今日が今年の何週目にあたるか

datetime.isocalendar()でその日が何週目かわかるらしい

8.1. datetime — 基本的な日付型および時間型 — Python 3.6.1 ドキュメント

>>> from datetime import datetime
>>> today = datetime.now()
>>> today
datetime.datetime(2017, 3, 18, 7, 17, 51, 7953)
>>> today.isocalendar()
(2017, 11, 6)
>>>

2017が年、11が週番号、6が曜日となっている

datetime.isocalendar()について

その年の最初の木曜日がある日が1週目になるらしい
2017年の最初の木曜日は1/5(木)のため、
1週目は2017/1/2(月)から2017/1/8(日)となる

2017年1月1日(日)は2016年の52週目だった

>>> from datetime import datetime
>>> datetime(2016, 12, 31).isocalendar()
(2016, 52, 6)
>>> datetime(2017, 1, 1).isocalendar()
(2016, 52, 7)
>>> datetime(2017, 1, 2).isocalendar()
(2017, 1, 1)
>>> datetime(2017, 3, 18).isocalendar()
(2017, 11, 6)
>>>

ちょっと不思議

メモ

指定した日付のdatetimeの生成

>>> from datetime import datetime
>>> testDate = datetime(2017, 3, 18)
>>> testDate
datetime.datetime(2017, 3, 18, 0, 0)
>>>

Python 設定ファイルから値を読み込む

環境

OS: CentOS7
Python3.6.0
vagrant上にあるもの

設定ファイルから値を読み込む

Pythonの標準モジュールの中に configparser というものがあるのでそれを使う

Windowsの設定ファイルのiniによく似た形で記述されているファイルを読み込めるらしい

まず、設定ファイル

# example.conf
[person]
name=HanakoYamada
age=20


Pythonで取得してみる

>>> import configparser
>>> config = configparser.SafeConfigParser()
>>> config.read("example.conf")
['example.conf']
>>> config.get("person", "name")
'HanakoYamada'
>>>


1.configparserをインポート
2.SafeConfigParserという(設定ファイルを読み込むためのオブジェクト?)ものを生成
3.read()で設定ファイルを読み込む
4.get()で値の取得


こんな感じでPythonでは値の読み込みができる


参考サイト
設定ファイル (ConfigParser) - Python入門から応用までの学習サイト
13.2. ConfigParser — 設定ファイルの構文解析器 — Python 2.7.13 ドキュメント
kazuki-nagasawa.hatenablog.com

2017/3/15(水)追記

もし、設定ファイル中に "%" などの記号が入っていた場合
configparser.RawConfigparser() を使用する

参考サイト
stackoverflow.com

Java long型の変数に値を代入するときの注意点

環境

OS: Windows10

Javaでlong型に代入

// Test.java
...
long num = 9223372036854;
...


Test.javaコンパイルすると、次のようなエラーが出る

Test.java:10: エラー: 整数9223372036854が大きすぎます
        long num = 9223372036854;


え、longで定義してるのに何で????


ぐぐってみたらすぐに解決した


long型であることを明示しないとだめらしい

long型に代入するときには数値の最後に L を付ける

// Test2.java
...
long num = 9223372036854L;
...


longだけ何でこんなことを...

豆知識程度に覚えておくことにします


参考サイト
javamania.blog25.fc2.com