読者です 読者をやめる 読者になる 読者になる

ぷろぐらみんぐ中毒

プログラミングやらなんやら...とにかく情報関連を語るブログだよ!

痛恨のミス

 Gitの使い方をよく分かっていなかった俺は、ついついなんかVSCodeの左にある元に戻す的なボタンを触ってしまった...

さすがGit、ちゃんと元に戻ったのだ。

そう、元に。

すげーとか思ってたんですよ、で、元に戻そうとしたら戻らない。

半分パニックになりながら、ネットで調べてコミット履歴的なものから元に戻そうとしたんですよ。

そしたら、そこはさすがGitの使い方がよく分かっていなかった俺、なんと最後のコミットが二ヶ月前...

二ヶ月かけて書き溜めたソースコードが昇天しましたとさ...

でも、今回Gitの使い方も学べたし良かったということにするか...そうだな...良かったということにしよう。

アセンブリ言語でHelloWorldしよう。

こんにちは、中の人は雨が降ると頭痛がしてくる体質なのでストレスMAXです。

外にも気軽に出ることができないのでWoTばかりやっています(スマホ版)

おかげさまでやっとT-28が、KV-1になりました。

まあ、それは置いておいて、今回はみんな大好きアセンブリ言語でHelloWorldを表示していきましょう。

アセンブラはNASMを使用します。

プログラムを書こう

↓がHelloWorldを表示するプログラムです。

section .text

    global _start

_start:
                                               
    mov eax,4                
    mov ebx,1               
    mov ecx,msg
    mov edx,length
    int 0x80          

    mov eax,1            
    int 0x80  

section .data
    
    msg db 'HelloWorld',0xa    
    length equ $ - msg

初見だと何がなんだかよく分からないですよね…

最初から解説していくと、まず

section .text

global _start

_start:

C言語におけるmain関数のようなものです。 つまり_startからプログラムが始まるのです。 また、section .textはプログラム自体を書く場所?(説明が下手ですみません)のようなものです。

次に

mov eax,4
mov ebx,1
mov ecx,msg
mov edx,length
int 0x80

とあります。 movは値を代入する命令で、例えばiという変数に100を代入したいときには、mov i,100のようにして使います。 ここでは、eax、ebx、ecx、edxなどのレジスタに格納しています。 HelloWorldを表示する際に必要なsys_writeを呼び出すためには、eaxに4(sys_writeに割りつけられた番号のようなものです)、ebxに1(C言語で言うところのstdout、stderrも指定できる)、ecxに表示する文字列、edxに表示する文字列の文字数を格納し、システムコール(int 0x80)をする必要があります。

つぎに

section .data

msg db 'HelloWorld',0xa    
length equ $ - msg

とあります。 section .dataは定数を宣言するための場所のようなものです。ちなみに変数などはsection .bssに宣言します。 msg db ‘HelloWorld’,0xaと書くとmsgという定数にHelloWorldが格納されます。 また、length equ $ - msgと書くとlengthという定数にmsgの長さが格納されます。

全体的なイメージとしては

1.レジスタに定数などのシステムコールをするために必要な情報を格納 2.システムコールをする 3.格納した情報に基づいて実行される。

のような感じですね。 とてもシンプルです。 是非皆様もアセンブリに手を出してみてはいかがでしょうか。

PythonからTwitterAPIを用いてDMを取得してみる

はじめに

こんにちは。 先日、自分用にTwitterクライアントを作成していた際にTwitterのDM(ダイレクトメッセージ)を扱う必要が出てきたのですが、検索してもDM関連についてなかなか書いてあるサイトがないんですよね…(単に僕の検索能力がアレなせいかもしれませんが) というわけで、試行錯誤して何とか実装できたのでその時の事をメモしておきたいと思います。

準備をする

今回は、OAuth関連の処理はrequests-oauthlibに任せました。

Github https://github.com/requests/requests-oauthlib このライブラリは、とても簡単に扱うことができ、AccessToken,AccessTokenSecret,ConsumerKey,ConsumerSecretを渡すだけでパパッと認証をしてくれます。いつもお世話になっています。 しかも、導入もめちゃくちゃ簡単です! ターミナルに

pip install requests requests-oauthlib

と入力するだけです! いやー素晴らしいですね。

では、次に認証に必要なAccessToken,AccessTokenSecret,ConsumerKey,ConsumerSecretを取得しましょう。 AccessTokenなどを取得するには Welcome — Twitter Developers にアクセスします。 ここから取得するまでは、検索(TwitterAPI入門とか)すればたくさん出てくるので省略します。検索してください。 では、ここからはAccessTokenなどが取得できたとして話を進めていきます。

プログラムを書いていく

いよいよ、プログラムを書いていきます。 ここで使う言語はタイトルにもあるようにPythonです。

from requests_oauthlib import OAuth1Session
import json

consumer_key='****************'
consumer_secret='***************'
access_token='***************'
access_token_secret='****************'

token=OAuth1Session(consumer_key,consumer_secret,access_token,access_token_secret)

params={("count",100)}
getlist=token.get("https://api.twitter.com/1.1/direct_messages.json",params=params)
dmlist=json.loads(getlist.text)

for line in dmlist:
    print line["text"]

consumer_key、consumer_secret、access_token、access_token_secretはそれぞれ自分のものに置き換えてください。 以上のプログラムをshowdm.pyのような適当な名前で保存し、python showdm.pyのように実行します。 dmの本文が並んで表示されたら成功です。 一応、上のプログラムでは新しい順から100件取得するようにしています。 また、line[“text”]の"text"の部分を変更することによりidやscreen_nameを取得することもできます。 どのような事柄が取得できるかについては

GET direct_messages — Twitter Developers

を参考にしてください。

ブログ、開設しました。

どうも、こんにちは。

プログラミング関連などについて気がついたことなどは、ブログにまとめておいたらあとで見返しやすく便利なのではないかと思い、このブログを開設してみました。

というわけでのんびり適当に書いていきたいと思います。

よろしくお願いします。