SlideShare a Scribd company logo
1 of 43
Download to read offline
1
10080分で
Pythonから
IP Messenger
山田 聡@denzowill
#stapy 2016/01/08
2
WHO ARE YOU?
DBエンジニアです
ノンプログラマ
PostgreSQL
Oracle
3
IP Messeneger
http://ipmsg.org/
4
IP Messenger
● 1996年くらいからある?
● LAN内でメッセージを投げ合うツール
● 国産
● インフラ系の会社では結構みかける?
5
あらすじ:
なんかタスク終わったら自動で
担当者にIPMSGで通知して欲しいって
言われてやってみたら、送信エラーが
でなくて苦しんだので、結局自分で実
装することになった話
6
7
だいたい2種類あった
● プロトコルをPurePythonで実装
● ipmsg.exeをsubprocessで叩く
8
だいたい2種類あった
● プロトコルをPurePythonで実装
● ipmsg.exeをsubprocessで叩く
試したが
送信先がいなくても
エラーにならない
9
だいたい2種類あった
● プロトコルをPurePythonで実装
● ipmsg.exeをsubprocessで叩く
こっち
10
https://github.com/shaung/ipmsg/
11
ipmsg(Pythonパッケージ)
● pipで入る!
● 試したら送れた!
12
ipmsg(Pythonパッケージ)
● pipで入る!
● 試したら送れた!
● importしてから使うときのDocない…
● そーすむずかしい...
●
結局送信エラーにならない...
13
そうだ自分で、つくろう
14
そうだ自分で、つくろう
→1週間以上経過中
15
そうだ自分で、つくろう
→1週間以上経過中
7 * 24 * 60 = 10080
16
IP Messenegerのプロトコル
● プロトコル
● http://ipmsg.org/protocol.txt
● 参考になったサイト
●
http://smart-pda.net/isourou/ipmsg/doc/ipmsg_protocol.html
●
http://libipmsg.osdn.jp/specification.html#format
国産プロトコルで日本語Docだし
比較的シンプル
17
IP Messenegerのメッセージ
以下6要素を:で連結して1行にした文字列で表現
● プロトコルバージョン
●
1固定
● パケット番号
●
インクリメント
●
自分の名前
●
ホスト名
●
コマンド
●
メッセージの属性(32bit)
●
メッセージ
●
本文とかその他パケットの追加情報
18
1:100:denzow:MyHost:8405280:こんにちは
19
#!/usr/bin/env python
# coding:utf-8
import socket
host = 'xxx.xxx.xxx.xxx' # 嫌いな人のIPアドレス
port = 2524
serversock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 嫌いなあの人に100通送る
for i in range(1,100):
send_msg = "1:%s:denzow:MyHost:8405280:こんにちは" % i
print 'Send message...[%s]' % send_msg
serversock.sendto(send_msg, (host, port))
投げるだけなら簡単
20
$ ./send.py
嫌いな上司にめがけて
21
$ ./send.py
嫌いな上司にめがけて
22
Ψ(`▽´)Ψ
23
でも、上司がオフライン
だったら?
24
でも、上司がオフライン
だったら?
$ ./send.py
$echo $?
0
25
でも、上司がオフライン
だったら?
$ ./send.py
$echo $?
0
失敗してても正常終了
26
(´・ω・`)
27
Why?
● そもそもUDP通信
● 受信完了のメッセージを相手が戻す
規定になっていた
28
’・ω・
こんにちは
with :
IPMSG_SENDMSG
IPMSG_SENDCHECKOPT
・_・`
とんでけー
29
’・ω・
こんにちは
with :
IPMSG_SENDMSG
IPMSG_SENDCHECKOPT
・_・`
こんにちは
with :
IPMSG_SENDMSG
IPMSG_SENDCHECKOPT
You got a mail
(届いたかしら)
30
’・ω・
こんにちは
with :
IPMSG_SENDMSG
IPMSG_SENDCHECKOPT
・_・`
こんにちは
with :
IPMSG_SENDMSG
IPMSG_SENDCHECKOPT
IPMSG_RECVMSG
とりあえず応答
おくるでー
(届いたかしら)
31
’・ω・
こんにちは
with :
IPMSG_SENDMSG
IPMSG_SENDCHECKOPT
・_・`
こんにちは
with :
IPMSG_SENDMSG
IPMSG_SENDCHECKOPT
IPMSG_RECVMSGIPMSG_RECVMSG
届いてた!
32
So..
● 送りたいだけなのにリスニング必須
● リスニングしつつ送信なのでスレッド?
●
送信済メッセージも管理必須
33
So..
● 送りたいだけなのにリスニング必須
● リスニングしつつ送信なのでスレッド?
●
送信済メッセージも管理必須
●
受け取ったメッセージのハンドラ必要
● IPわからない場合は名前でおくりたい
● import して普通に使えるようにしたい
● などなど
34
#!/usr/bin/env python
# coding:utf-8
import socket
host = 'xxx.xxx.xxx.xxx' # 嫌いな人のIPアドレス
port = 2524
serversock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 嫌いなあの人に100通送る
for i in range(1,100):
send_msg = "1:%s:denzow:MyHost:8405280:こんにちは" % i
print 'Send message...[%s]' % send_msg
serversock.sendto(send_msg, (host, port))
投げるだけなら簡単
35
while not self.stop_event.is_set():
r, w, e = select.select([self.sock], [self.sock], [], 0)
time.sleep(0.1)
# print((r, w, e))
# recive message
for sk in r:
data, (ip, port) = sk.recvfrom(0x80000)
# parse message
ip_msg = IpmsgMessageParser(ip, port, com.to_unicode(data))
# action for command
self.dispatch_action(ip_msg)
# send message
if w and self.send_que:
# send message loop until que empty.
while self.send_que:
# FIFO
send_msg = self.send_que.popleft()
logger.debug("To[%s:%s]" % (send_msg.addr, send_msg.port))
[logger.debug("t"+x) for x in send_msg.check_flag()]
logger.debug(send_msg.get_full_message())
self.sock.sendto(send_msg.get_full_message(), (send_msg.addr, send_msg.port))
if send_msg.is_sendmsg():
# for check sendmsg success
# if long time in the sended que, the message must be failed.
send_msg.born_time = datetime.datetime.now()
self.sended_que.append(send_msg)
self._cleanup_ques()
投げるだけなら簡単だったのに
サーバ処理の
メインループだけで
これ
36
while not self.stop_event.is_set():
r, w, e = select.select([self.sock], [self.sock], [], 0)
time.sleep(0.1)
# print((r, w, e))
# recive message
for sk in r:
data, (ip, port) = sk.recvfrom(0x80000)
# parse message
ip_msg = IpmsgMessageParser(ip, port, com.to_unicode(data))
# action for command
self.dispatch_action(ip_msg)
# send message
if w and self.send_que:
# send message loop until que empty.
while self.send_que:
# FIFO
send_msg = self.send_que.popleft()
logger.debug("To[%s:%s]" % (send_msg.addr, send_msg.port))
[logger.debug("t"+x) for x in send_msg.check_flag()]
logger.debug(send_msg.get_full_message())
self.sock.sendto(send_msg.get_full_message(), (send_msg.addr, send_msg.port))
if send_msg.is_sendmsg():
# for check sendmsg success
# if long time in the sended que, the message must be failed.
send_msg.born_time = datetime.datetime.now()
self.sended_que.append(send_msg)
self._cleanup_ques()
投げるだけなら簡単だったのに
ソケットをselectで
watchして
37
while not self.stop_event.is_set():
r, w, e = select.select([self.sock], [self.sock], [], 0)
time.sleep(0.1)
# print((r, w, e))
# recive message
for sk in r:
data, (ip, port) = sk.recvfrom(0x80000)
# parse message
ip_msg = IpmsgMessageParser(ip, port, com.to_unicode(data))
# action for command
self.dispatch_action(ip_msg)
# send message
if w and self.send_que:
# send message loop until que empty.
while self.send_que:
# FIFO
send_msg = self.send_que.popleft()
logger.debug("To[%s:%s]" % (send_msg.addr, send_msg.port))
[logger.debug("t"+x) for x in send_msg.check_flag()]
logger.debug(send_msg.get_full_message())
self.sock.sendto(send_msg.get_full_message(), (send_msg.addr, send_msg.port))
if send_msg.is_sendmsg():
# for check sendmsg success
# if long time in the sended que, the message must be failed.
send_msg.born_time = datetime.datetime.now()
self.sended_que.append(send_msg)
self._cleanup_ques()
投げるだけなら簡単だったのに
パケットがきてたら
パケットをメッセージにして
アクション
38
while not self.stop_event.is_set():
r, w, e = select.select([self.sock], [self.sock], [], 0)
time.sleep(0.1)
# print((r, w, e))
# recive message
for sk in r:
data, (ip, port) = sk.recvfrom(0x80000)
# parse message
ip_msg = IpmsgMessageParser(ip, port, com.to_unicode(data))
# action for command
self.dispatch_action(ip_msg)
# send message
if w and self.send_que:
# send message loop until que empty.
while self.send_que:
# FIFO
send_msg = self.send_que.popleft()
logger.debug("To[%s:%s]" % (send_msg.addr, send_msg.port))
[logger.debug("t"+x) for x in send_msg.check_flag()]
logger.debug(send_msg.get_full_message())
self.sock.sendto(send_msg.get_full_message(), (send_msg.addr, send_msg.port))
if send_msg.is_sendmsg():
# for check sendmsg success
# if long time in the sended que, the message must be failed.
send_msg.born_time = datetime.datetime.now()
self.sended_que.append(send_msg)
self._cleanup_ques()
投げるだけなら簡単だったのに
送信キューにメッセージが
あればFIFOで処理
39
while not self.stop_event.is_set():
r, w, e = select.select([self.sock], [self.sock], [], 0)
time.sleep(0.1)
# print((r, w, e))
# recive message
for sk in r:
data, (ip, port) = sk.recvfrom(0x80000)
# parse message
ip_msg = IpmsgMessageParser(ip, port, com.to_unicode(data))
# action for command
self.dispatch_action(ip_msg)
# send message
if w and self.send_que:
# send message loop until que empty.
while self.send_que:
# FIFO
send_msg = self.send_que.popleft()
logger.debug("To[%s:%s]" % (send_msg.addr, send_msg.port))
[logger.debug("t"+x) for x in send_msg.check_flag()]
logger.debug(send_msg.get_full_message())
self.sock.sendto(send_msg.get_full_message(), (send_msg.addr, send_msg.port))
if send_msg.is_sendmsg():
# for check sendmsg success
# if long time in the sended que, the message must be failed.
send_msg.born_time = datetime.datetime.now()
self.sended_que.append(send_msg)
self._cleanup_ques()
投げるだけなら簡単だったのに
送信ミスとかで
キューに長くのこった
メッセージ等のクリーンアップ
40
よかったら
● GitHubにあげるだけあがってます
● https://github.com/denzow/ipymessenger
● Docとコメントは週明けに日本語に変更
●
IPMSGは海外需要ない気がしてきたので…
● 送信は実装済
● 受信は週明けに実装(希望)
41
つまり:
なんかタスク終わったら自動で
担当者にIPMSGで通知して欲しいって
言われてやってみたら、送信エラーが
でなくて苦しんだので、結局自分で実
装することになった話
42
つまり:
なんかタスク終わったら自動で
担当者にIPMSGで通知して欲しいって
言われてやってみたら、送信エラーが
でなくて苦しんだので、結局自分で実
装することになった話
人の、10080分が
短縮できれば幸いです
43
ありがとうございました。

More Related Content

What's hot

20130723 ecシステムにchefを導入してみた v1.0
20130723 ecシステムにchefを導入してみた v1.020130723 ecシステムにchefを導入してみた v1.0
20130723 ecシステムにchefを導入してみた v1.0
NIFTY Cloud
 
クラウド上でのChef活用と ベストプラクティス v0.2.0
クラウド上でのChef活用と ベストプラクティス v0.2.0クラウド上でのChef活用と ベストプラクティス v0.2.0
クラウド上でのChef活用と ベストプラクティス v0.2.0
NIFTY Cloud
 
Linuxサーバのセキュリティ対策 part2 - Apache編
Linuxサーバのセキュリティ対策 part2 - Apache編Linuxサーバのセキュリティ対策 part2 - Apache編
Linuxサーバのセキュリティ対策 part2 - Apache編
Kazunori Inaba
 
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
sasezaki
 

What's hot (20)

Ansible勉強会資料
Ansible勉強会資料Ansible勉強会資料
Ansible勉強会資料
 
Niigata.pm #1
Niigata.pm #1Niigata.pm #1
Niigata.pm #1
 
NDS#31
NDS#31NDS#31
NDS#31
 
phpspecで始めるBDD
phpspecで始めるBDDphpspecで始めるBDD
phpspecで始めるBDD
 
これからのOpenShiftの話をしよう
これからのOpenShiftの話をしようこれからのOpenShiftの話をしよう
これからのOpenShiftの話をしよう
 
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
 
Zabbixのパフォーマンスチューニング & インストール時の注意点
Zabbixのパフォーマンスチューニング & インストール時の注意点Zabbixのパフォーマンスチューニング & インストール時の注意点
Zabbixのパフォーマンスチューニング & インストール時の注意点
 
Ansible+Docker
Ansible+DockerAnsible+Docker
Ansible+Docker
 
あるインフラエンジニアの過去と未来
あるインフラエンジニアの過去と未来あるインフラエンジニアの過去と未来
あるインフラエンジニアの過去と未来
 
Infrastrucure as a CodeにおけるJenkinsの役割
Infrastrucure as a CodeにおけるJenkinsの役割Infrastrucure as a CodeにおけるJenkinsの役割
Infrastrucure as a CodeにおけるJenkinsの役割
 
5分でインストール!awsでzabbix3.0
5分でインストール!awsでzabbix3.05分でインストール!awsでzabbix3.0
5分でインストール!awsでzabbix3.0
 
Behatで行う、E2Eテスト入門
Behatで行う、E2Eテスト入門Behatで行う、E2Eテスト入門
Behatで行う、E2Eテスト入門
 
20130723 ecシステムにchefを導入してみた v1.0
20130723 ecシステムにchefを導入してみた v1.020130723 ecシステムにchefを導入してみた v1.0
20130723 ecシステムにchefを導入してみた v1.0
 
Powershellで始める.net プログラミング
Powershellで始める.net プログラミングPowershellで始める.net プログラミング
Powershellで始める.net プログラミング
 
クラウド上でのChef活用と ベストプラクティス v0.2.0
クラウド上でのChef活用と ベストプラクティス v0.2.0クラウド上でのChef活用と ベストプラクティス v0.2.0
クラウド上でのChef活用と ベストプラクティス v0.2.0
 
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
 
Linuxサーバのセキュリティ対策 part2 - Apache編
Linuxサーバのセキュリティ対策 part2 - Apache編Linuxサーバのセキュリティ対策 part2 - Apache編
Linuxサーバのセキュリティ対策 part2 - Apache編
 
Behat+Symfony2ではじめるBDD超入門
Behat+Symfony2ではじめるBDD超入門Behat+Symfony2ではじめるBDD超入門
Behat+Symfony2ではじめるBDD超入門
 
【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
【Unite Tokyo 2019】大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~
 
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
 

Viewers also liked

OpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみたOpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみた
徹 上野山
 

Viewers also liked (17)

excelファイルをプログラムで出力しよう
excelファイルをプログラムで出力しようexcelファイルをプログラムで出力しよう
excelファイルをプログラムで出力しよう
 
本気でPythonで宛名書きした話
本気でPythonで宛名書きした話本気でPythonで宛名書きした話
本気でPythonで宛名書きした話
 
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
 
S08 t0 orientation
S08 t0 orientationS08 t0 orientation
S08 t0 orientation
 
Requestsで始める5分前帰社
Requestsで始める5分前帰社Requestsで始める5分前帰社
Requestsで始める5分前帰社
 
S08 t6 wrapup
S08 t6 wrapupS08 t6 wrapup
S08 t6 wrapup
 
DBエンジニアに必要だったPythonのスキル
DBエンジニアに必要だったPythonのスキルDBエンジニアに必要だったPythonのスキル
DBエンジニアに必要だったPythonのスキル
 
PostgreSQLとPythonとSQL
PostgreSQLとPythonとSQLPostgreSQLとPythonとSQL
PostgreSQLとPythonとSQL
 
bottle.pyをつかったチャットアプリ作成チュートリアル
bottle.pyをつかったチャットアプリ作成チュートリアルbottle.pyをつかったチャットアプリ作成チュートリアル
bottle.pyをつかったチャットアプリ作成チュートリアル
 
Pythonによる画像処理について
Pythonによる画像処理についてPythonによる画像処理について
Pythonによる画像処理について
 
Python/Bottle for Kubo Semi 2014
Python/Bottle for Kubo Semi 2014Python/Bottle for Kubo Semi 2014
Python/Bottle for Kubo Semi 2014
 
bottleで始めるWEBアプリの最初の一歩
bottleで始めるWEBアプリの最初の一歩bottleで始めるWEBアプリの最初の一歩
bottleで始めるWEBアプリの最初の一歩
 
OpenCVの基礎
OpenCVの基礎OpenCVの基礎
OpenCVの基礎
 
OpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみたOpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみた
 
Pythonistaデビュー #PyNyumon 2016/5/31
Pythonistaデビュー #PyNyumon 2016/5/31Pythonistaデビュー #PyNyumon 2016/5/31
Pythonistaデビュー #PyNyumon 2016/5/31
 
SQLite の暗号化
SQLite の暗号化SQLite の暗号化
SQLite の暗号化
 
OpenCV 3.0 on iOS
OpenCV 3.0 on iOSOpenCV 3.0 on iOS
OpenCV 3.0 on iOS
 

Similar to 10080分でPythonからIP Messeneger

GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!
leverages_event
 
2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk
mitamex4u
 
Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419
エイシュン コンドウ
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
Ryosuke IWANAGA
 
Pythonによる並列プログラミング -GPGPUも-
Pythonによる並列プログラミング   -GPGPUも- Pythonによる並列プログラミング   -GPGPUも-
Pythonによる並列プログラミング -GPGPUも-
Yusaku Watanabe
 
おまえらこのライブラリ使ってないの? m9 (2013-07)
おまえらこのライブラリ使ってないの? m9	(2013-07)おまえらこのライブラリ使ってないの? m9	(2013-07)
おまえらこのライブラリ使ってないの? m9 (2013-07)
Toru Furukawa
 

Similar to 10080分でPythonからIP Messeneger (20)

SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテムSmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
 
ゆるかわPhp
ゆるかわPhpゆるかわPhp
ゆるかわPhp
 
第1回鹿児島node.jsの会資料_内村
第1回鹿児島node.jsの会資料_内村第1回鹿児島node.jsの会資料_内村
第1回鹿児島node.jsの会資料_内村
 
Puppet on AWS
Puppet on AWSPuppet on AWS
Puppet on AWS
 
GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!GruntでJavaScript 前作業の自動化!
GruntでJavaScript 前作業の自動化!
 
Apilecture for 2014/02/22 at shannonlab
Apilecture for 2014/02/22 at shannonlabApilecture for 2014/02/22 at shannonlab
Apilecture for 2014/02/22 at shannonlab
 
2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk2008.10.18 L4u Tech Talk
2008.10.18 L4u Tech Talk
 
Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputing
 
Elixir入門「第2回:PC間で通信するアプリをサクっと書いてみる」
Elixir入門「第2回:PC間で通信するアプリをサクっと書いてみる」Elixir入門「第2回:PC間で通信するアプリをサクっと書いてみる」
Elixir入門「第2回:PC間で通信するアプリをサクっと書いてみる」
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
 
Pythonによる並列プログラミング -GPGPUも-
Pythonによる並列プログラミング   -GPGPUも- Pythonによる並列プログラミング   -GPGPUも-
Pythonによる並列プログラミング -GPGPUも-
 
実験心理学者のためのPython
実験心理学者のためのPython実験心理学者のためのPython
実験心理学者のためのPython
 
らくちん Go言語
らくちん Go言語らくちん Go言語
らくちん Go言語
 
Erlangご紹介 websocket編
Erlangご紹介 websocket編Erlangご紹介 websocket編
Erlangご紹介 websocket編
 
おまえらこのライブラリ使ってないの? m9 (2013-07)
おまえらこのライブラリ使ってないの? m9	(2013-07)おまえらこのライブラリ使ってないの? m9	(2013-07)
おまえらこのライブラリ使ってないの? m9 (2013-07)
 
Monit
MonitMonit
Monit
 
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
 
【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門
 
色々なOSSで競技プログラミング
色々なOSSで競技プログラミング色々なOSSで競技プログラミング
色々なOSSで競技プログラミング
 

More from Satoshi Yamada

More from Satoshi Yamada (8)

Pythonで業務改善をしたときにあった問題(ライト版)
Pythonで業務改善をしたときにあった問題(ライト版)Pythonで業務改善をしたときにあった問題(ライト版)
Pythonで業務改善をしたときにあった問題(ライト版)
 
pythonでemlファイルを扱う話
pythonでemlファイルを扱う話pythonでemlファイルを扱う話
pythonでemlファイルを扱う話
 
15分で情シスに怒られる方法
15分で情シスに怒られる方法15分で情シスに怒られる方法
15分で情シスに怒られる方法
 
Djangoで業務改善したい
Djangoで業務改善したいDjangoで業務改善したい
Djangoで業務改善したい
 
PostgreSQL実行計画入門@関西PostgreSQL勉強会
PostgreSQL実行計画入門@関西PostgreSQL勉強会PostgreSQL実行計画入門@関西PostgreSQL勉強会
PostgreSQL実行計画入門@関西PostgreSQL勉強会
 
201505 PostgreSQLアンカンファレンス(PL/Pythonで作るWEBアプリ)
201505 PostgreSQLアンカンファレンス(PL/Pythonで作るWEBアプリ)201505 PostgreSQLアンカンファレンス(PL/Pythonで作るWEBアプリ)
201505 PostgreSQLアンカンファレンス(PL/Pythonで作るWEBアプリ)
 
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
 
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
 

Recently uploaded

Recently uploaded (10)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 

10080分でPythonからIP Messeneger