ネタ

medium rare

なんか最近のウェブ肥大しすぎ、という意見を、js/css肥大しすぎなmediumで書いてた奴がいたんすよ。という皮肉なコメントをモチベーションとして、じゃあgoでproxy立ててhtmlマエショリしちゃえばいいんじゃね? ということをやった記事。mediumにターゲットを絞ったおかげで本文抽出のような難しいことをせずに済んでいるのがミソ。

へなちょこーど

写経+練習問題解いたやつ。言語になるといいですね。

かんけいないけどふらすくがよーわからんのでうぇぶさーばじさくするところからべんきょうしたい。

INTEGER, PLUS, MINUS, MUL, DIV, SPACE, EOF = 'INTEGER', 'PLUS', 'MINUS', 'MUL', 'DIV', 'SPACE', 'EOF'
OPS = [PLUS, MINUS, MUL, DIV]

class Token:
    def __init__(self, type, value):
        self.type = type
        self.value = value

    def __str__(self):
        return 'Token({type}, {value})'.format(
                    type=self.type,
                    value=repr(self.value)
                )

    def __repr__(self):
        return self.__str__

class Interpreter:
    def __init__(self, text):
        self.text = text
        self.pos = 0
        self.current_token = None

    def error(self):
        raise Exception("Error parsing input")

    def get_next_token(self):
        text = self.text

        if self.pos > len(text) - 1:
            return Token(EOF, None)

        current_char = text[self.pos]

        if current_char.isdigit():
            token = Token(INTEGER, int(current_char))
            self.pos += 1
            return token

        if current_char == '+':
            token = Token(PLUS, current_char)
            self.pos += 1
            return token

        if current_char == '-':
            token = Token(MINUS, current_char)
            self.pos += 1
            return token

        if current_char == ' ':
            self.pos += 1
            return Token(SPACE, current_char)

        self.error()

    def eat(self, token_type):
        if isinstance(token_type, str):
            if self.current_token.type == token_type:
                self.current_token = self.get_next_token()
            else:
                self.error()
        if isinstance(token_type, list):
            if self.current_token.type in token_type:
                self.current_token = self.get_next_token()
            else:
                self.error()


    def eat_many(self, token_type):
        while self.current_token.type == token_type:
            self.eat(token_type)

    def run(self):
        self.current_token = self.get_next_token()

        self.eat_many(SPACE)

        left = self.current_token
        self.eat(INTEGER)
        while self.current_token.type == INTEGER:
            left.value = left.value*10 + self.current_token.value
            self.eat(INTEGER)

        self.eat_many(SPACE)

        op = self.current_token
        self.eat(OPS)

        self.eat_many(SPACE)

        right = self.current_token
        self.eat(INTEGER)
        while self.current_token.type == INTEGER:
            right.value = right.value*10 + self.current_token.value
            self.eat(INTEGER)

        self.eat_many(SPACE)

        if op.type == PLUS:
            result = left.value + right.value
        elif op.type == MINUS:
            result = left.value - right.value
        elif op.type == MUL:
            result = left.value * right.value
        elif op.type == DIV:
            result = left.value / right.value
        return result

def main():
    while True:
        try:
            text = input('calc> ')
        except EOFError:
            break
        if not text:
            continue
        interpreter = Interpreter(text)
        result = interpreter.run()
        print(result)

if __name__ == '__main__':
    main()

ドナルド・トランプのツイートを元に株式取引を行うPythonスクリプト

ジョークプログラムだと思うがWeb APIマッシュアップとしては秀逸だと思った(こなみ

maxbbraun/trump2cash: A stock trading bot powered by Trump tweets

  • Twitter Streaming APIで発言をリアルタイム抽出
  • Google Cloud Natural Language APIで固有表現抽出と感情分析を行う
    • 企業名を取り出し、それについての発言がポジティブかネガティブかを判断する
  • Wikipedia Query Serviceで会社情報を手にいれる
  • TradeKing APIで取引を実行する
  • Google Cloud Platformで動かすようだがよくしらね

Hacker Newsのほうでなんか株とか詳しそうな人たちが話してるけどこれもーよーわからんね。

Trump2cash – A stock trading bot powered by Trump tweets | Hacker News

CPythonの開発が今週金曜日(2017.02.10)にGitHubに移行予定

掲題の通り。

[Python-Dev] GitHub migration scheduled for Friday

日本時間だと土曜日ごろになるだろうけど、これからはIssue眺めたりして開発追っちゃおっかなー♪

makeなんとかかんとかpygame chap01読み

CC BY-NC-SA 3.0

Make Games with Python - the latest e-book in The MagPi Essentials range! - Raspberry Pi

そのうち訳すかもしれないがメモ書きとして。

四角を描いてみる(hello.py)。

import pygame

pygame.init()

window = pygame.display.set_mode((500, 400))

while True:
    pygame.draw.rect(window, (255, 0, 0),
                             (0, 0, 50, 30))

    pygame.display.update()

9ページに誤植発見。

誤: pygame.display.rect(...)

正: pygame.draw.rect(...)

あとはcircleで円を描き、line, lines命令使って五角形を記述するところまでで一章。

import pygame

pygame.init()
window = pygame.display.set_mode((500, 400))

while True:
    pygame.draw.lines(window, (255, 255, 255), True,
            ((50, 50), (75, 75), (63, 100), (38, 100), (25, 75)), 1)
    pygame.display.update()

linesは閉じることができるがfillできない。章末に Why not try experimenting with Pygame to produce some interesting pixel art?とあるが、これだけだとLOGOより機能低いしどうしろと…という気分になる。

調べたらgfxdrawというのが使えるらしい

import pygame
import pygame.gfxdraw

pygame.init()
window = pygame.display.set_mode((500, 400))

while True:
    pygame.gfxdraw.filled_polygon(window, [(50, 50), (75, 75), (63, 100), (38, 100), (25, 75)], (255, 0, 0))

    pygame.display.update()

これで多角形の塗りつぶしができる。

文字列のパングラム(pangram)判定 in Python

パングラムは文字列に26種のアルファベットそれぞれが1回以上使われているもの。以下は文字列がパングラムならTrue,でなければFalseを返す。

import string

def is_pangram(text):
    A = set(map(lambda x: x.lower(), text.replace(' ', '')))
    B = set(string.punctuation)
    return len(A.difference(B)) == 26

ascii_lowercasetextsubsetになっているかどうかで判定すれば簡潔になる(checkioの優秀回答)。

はてなブログのテーマreportの横幅を広げる

css分かりません。

はてなブログcssはデザインCSSという項目からいじれる。

外側のコンテナの大きさを超えるとfloatがかかってるエレメンツが下にすっ飛んでしまうので、適当に幅を増やした。

div#wrapper {
    width: 760px !important;
}

div#container {
    width: 1000px !important; 
}

本文の幅が広い方が読みやすい派です。