John(筋肉)の備忘録的な何か

備忘録的な何かであり、進捗そのものでもあるよ!!怖い人は見ないで!

沼津高専カンファでLTしてきたっ!

前の更新より大分あいてしまいました。John(ペンギン)です。

今回沼津で行われた高専カンファにてLTさせていただいたのでスライドそのまま置いてブログにしちゃおうと思います。

 

発表スライドそのまま

speakerdeck.com

 

感想に満たない何か

楽しかったです。お話してくれた方ありがとうございました!

もっと各位とお話を楽しみたかったのに時間がああぁぁぁ!!って感じで。

 

次は舞鶴高専カンファに行く予定。7月1日だったよね?

ポン・デ・リング買ってきてやるぜっ!

Cのコードである上、シェルに渡しても動作するプログラムっ!

皆さんこんにちは。John(筋肉)です。

部活やら会計やら課題やらでふえぇ。。ってなってしんどい今日此の頃です。

 

先輩のいるやんさんから面白いことを聞いたので備忘録ったろうと思って書いてます。

 

では本題。

このコード、Cのコードとしてどうでしょう?

#define a int main(void){printf("Hello");}

a

コンパイルするとめっちゃwarningやらnoteやら出てきますが、コンパイルできます。

実行すると

 Hello

と返してくれます。

当たり前なんでしょうが、なんちゃってプログラマな僕には「#defineのところにそんなのいれれるのか!へ~!」って感じでしたが。。

 

まだこれではシェルでは動きません。多分。

これを動いたといえるのか??

hoge.c: 2: hoge.c: a: not found

 

次にシェルで動くやつ。

#define echo int main(void){printf("Hello");}

#define Hello

echo Hello

どうでしょう??

 

このコード、めっちゃwarningやnoteが出ますが、コンパイルできますし、

Hello

と、出力もしてくれます。

 

そんでもってシェルに渡すと、、

% sh hoge.c

Hello

%

 こうなります。

 

すごい。。初めに気づいた人しゅごい。。なんの役に立つのかあれだけど。。

 

なして動くのか。

ちゃんと動く理由はシェル上では「#」はコメント扱いになるからです。

なのでシェルが実行してるのは

echo Hello 

 ただそれだけの話となります。

 

うむ。改めて書いてみるとどうでも良さげなあれだね。

Cだと記号が使いづらい、というか使えないのがちょっと悲しい。。まぁ、同一のコードにする必要ないけど。

 

まとめ

Pythonでも同じことができそうだな?え、出来るよね?

 

Python3でスクレイピング!!画像自動ダウンロード!!

皆さんこんにちは。John(筋肉)です。

最近、上司(先輩)であり、尊敬するいるやんさんに勉強会に連れて行っていただきました。

そこで学んだもので少し趣味をしたので、紹介したいと思います。

 

何作ったのかー

あ艦これBlogという艦これのまとめサイトからページを取得して、自動的にそこに貼ってある画像をダウンロードさせていただくプログラムです。

akankore.doorblog.jp

エロサイトちゃうよっ!!

 

これがコードだ!!

まず入れるモジュールからー。

 

import requests

import os

from bs4 import BeautifulSoup

 

それからダウンロードするときの名前設定、ダウンロード先ファイルを指定したり、ダウンロードするための関数を定義。

 

def download(keyword):
    for img in soup.select(keyword):
        file_name = img["src"].split('/')[-1]
        res = requests.get(img["src"],stream=True)
        if res.status_code == 200:
            with open("./downloads/"+number+'/'+file_name,"wb") as file:
                for chunk in res.iter_content(chunk_size=2048):
                    file.write(chunk)
            file.close()

 

Python初心者なので怖い指摘は控えておなシャス!

そんでもって本体?

 

print("akankore's page number: (example:49295408)")
number = input()
url = requests.get("http://akankore.doorblog.jp/archives/"+number+".html")
soup = BeautifulSoup(url.content,"html.parser")
print(soup.title.string)
if os.path.exists("./downloads") == False:
    os.system("mkdir ./downloads")
os.system("mkdir ./downloads/"+number)
download(".t_b a img")
download("a .mt-tweetimg-multi")

 

うん。なんで3行目、urlって名前にしたんだろう。。reqとかが良さげだのに。

ネーミングセンスや正規表現?に関しては許せ下さい。

 

これ実行し、49295408と入力すると、

http://akankore.doorblog/archives/49295408.html

の.t_bの中のaの中のimg、またaの中の.mt-tweeting-multiの画像が、./Downloads/49295408/にダウンロードされます!良さ!

49295408は趣m...適当に例としてあげただけだからっ!

 

ちなみにタイトルと入力するべき番号を取得するプログラムも組んだので無限に画像を得ることもできそう。

 

まとめ

僕悪いことしてない。健全。

 

そして無限の可能性を見た。

 

こここうした方がいいよー、とか、こんな楽しい学問もあるよー、とか、優しく教えてくださいな。ありがとうございました。

Emacsコマンドでテキスト上に文字を入力したい

どうもこんにちは。John(筋肉)です。今日3つめです。

今回はEmacsコマンドでテキスト上に文字を入力したいという記事です。

 

これは「次の行に移動」するコマンドと「行の最後に移動」するコマンド、「空白の入力」を一つのショートカットで行ってほしい時、空白の入力に関してパッと調べただけでは出なかったので書きたいと思いました。

 

英単語をまとめたい

始まりはこれでした。持ってる英単語帳をそのままデータ化したかったのです。

 

cease するのをやめる
conclude と結論づける
vanish 姿を消す
bury を埋葬する
collapse 壊れる

 

こういうのを楽に作りたかった。そこで僕は、楽な方法は、

 

cease

conclude

vanish

bury

collapse

 

と入力してから、日本語訳を打ち込むこと。と考えました。

つまり、英単語と空白を入力したあと、次の行に移動し、行の最後に移動し、日本語訳を入力するのが簡単で楽だと。。

 

しかし、英単語のあと空白入力が面倒くさい。

しかも半角空白で入力したいので、日本語訳を入力するたびに全角/半角を入れかえないといけない。

 

なので空白を入力するすべを探しました。

 

init.elにはこう書きました!

 

(defun end-of-next-line(null)
(interactive "i")
(next-line)
(end-of-line)
(insert " "))
(global-set-key [(C q)] 'end-of-next-line)

 

insertがわかんなかったんだよねぇ。調べてもバッファに文字を出力するやつとかしかでなくて。

 

これのおかげで便利になり、英単語はまとめれたよ!ありがとうinsert!

 

(ありがとうございました。またこんな方法もあるよ!という方教えてくださいお願いします。)

平泳ぎ、背泳ぎで注意するべき点。

どうも。John(筋肉)です。

引き続き水泳に関して書きたいと思います。クロール以外は大して聞いてなく、内容も薄いです。

(前の記事はクロールに関してでした。)

平泳ぎについて

正直よくわかんなかった。専門じゃないから仕方ないね!

腰を高く、重心を前に

手の搔きを小さくし、頭というか、重心を前に持っていくよう言われました。また重心を前に持っていきながら、潜らず、上下運動が少なく、小さくなるようにと。

そして腰が低いとスピードが乗らないとも言われましたね。

 

 

当たり前っちゃ当たり前なので、これ以上何も言えない。。

 

、、専門じゃないし興味ないからこんなでいいかな?

でも備忘録には書きたかったので少し失礼。

 

 

背泳ぎについて

キャッチは肩の上

クロール同様当たり前なことで、難しい。。

しかも、ローリングのせいでさらに難しくなるし。。

 

キャッチの一に関しては、動画でも撮ってもらって確認する方が良さそうですね。

 

しまった。背泳ぎもこれで終わってしまった。クロール中心に聞いていたので、こんなもんかしら?

 

しいてもう1点言うとすれば、キックを均等にってぐらいですかね。僕めっちゃキック汚いので。。

 

 

とまぁ、これだけの内容のないものになってしまい申し訳無いです。技術系も頑張ろう。

クロールで注意するべき点。

皆さんこんにちは。John(筋肉)です。

ネタがない上、今日のメニューがフォームを直すというものだったので、ブログ名の通り備忘録っぽい使い方しようと思います。

コーチがバタフライめっちゃ嫌いな人だったので、バタフライについては聞いてません。

クロールについて

まず、今まで知らなかったことから。。

・軸は2本

今まで早いクロールというのは、「軸は1本、背筋を中心としてローリングを行う形だ」と言われていました。僕もそう思っていました。

f:id:julia-bardera-jb:20170107213821g:plain

www.samoyed.coresv.com

(画像はここから使わせていただきました。)

 

しかし、近年2本の軸を持った泳ぎのほうが早いと言われるようになったらしいです。

実際に「それで泳げ」と言われて泳いでもわかりませんでした。でも楽だし、速いらしい。。

 ローリング苦手なのでありがたい。。

・教本通りの泳ぎはだめ

だめというのは言いすぎな気がしますが、まぁこちらをどうぞ。

f:id:julia-bardera-jb:20170107221237p:plain

よくこんなの見ると思うんですが、これはプル、プッシュを意識させるためにも大きく?大げさに?書いてあるそうです。

(パッと調べてみましたが、競泳に至っては合ってそうです。)

 

まぁ、要するに腕は曲げずにまっすぐ掻こうな!!ってことですね。

僕は真面目健全マンだったので、結構曲げて掻いてました。。

 

・水を掻いて進むんじゃない!水を押して進むのだ!!

自分で書いててあれですが、よくわかんないですね。

何が言いたいのかというと、「水を掻いて水流を作って体が前に行くのではなく、水を持つ手を始点に考え体が前に行く」です!訳わかんねぇ!!

 

まぁ考え方の問題らしいです。体を中心に考えるか、手を中心に考えるか。

考え方以外何も変わらないんですが、考え方で速くなる人もいるのでバカにはできない。。

 

・キャッチは肩の上

当たり前なんですけどね。難しい。

僕はめっちゃ内側に入っちゃう泳ぎをしていてよく注意されちゃいました。

案外外だと思って掻いててもちょうど肩の上だったりするのでわからない。。

 

 

 

とまあ、こんな感じです。思ったより長くなっちゃったので、他の泳法は別記事としたいと思います。ありがとうございました。

PythonとOpenCVでやった画像の最頻値

どうも、こんにちはJohn(筋肉)です。

今回は「艦これの新艦娘ゲットシーンの星が邪魔だな~」と思って、除去するプログラム書いたら、案外行けた話をします。

PythonOpenCVについては省きます。(知ってるだろうし、説明できない。)

 

どんな感じに出来たか

初めてなので、3枚の画像で最頻値を取りました。

まず、入力した3枚をどうぞ。

f:id:julia-bardera-jb:20161231013942j:plain

f:id:julia-bardera-jb:20161231013953j:plain

f:id:julia-bardera-jb:20161231014003j:plain

 

 はい。可愛いですね。推しじゃないけど。

なんか切れちゃってるのはスクショミスったからです。目をつぶってくださいな。

 

そして出力結果がこちら。

f:id:julia-bardera-jb:20161231014158j:plain

 

 

3枚の最頻値なのでちょっと星が残ったりしてますが、いい感じですね。(僕はいい感じだと思ってる)

 

どんなクソコード書いたか

さあ、我がクソコード見せてしんぜよう。こちらだ!

 

import cv2

import numpy as np

def diff_judg(xi,yj,img01,img02):
  if img01[yj,xi,0]==img02[yj,xi,0]:
    if img01[yj,xi,1]==img02[yj,xi,1]:
      if img01[yj,xi,2]==img02[yj,xi,2]:
        return True
      else:
        return False
    else:
      return False
  else:
    return False

img1=cv2.imread("./aaa.jpg")
img2=cv2.imread("./bbb.jpg")
img3=cv2.imread("./ccc.jpg")
x=600
y=360
i=0
j=-1
ans=np.zeros((y,x,3),np.uint8)

while i<x:
  while j<y-1:
    j+=1
    if diff_judg(i,j,img1,img2):
      ans[j,i]=img1[j,i]
      continue
    elif diff_judg(i,j,img1,img3):
      ans[j,i]=img1[j,i]
      continue

              elif diff_judg(i,j,img2,img3):
                     ans[j,i]=img2[j,i]
                     continue
              else:
                     ans[j,i]=img1[j,i]
                     continue

        j=-1
        i+=1

cv2.imwrite("ans.jpg",ans)

 

「 ん?最頻値じゃなくね?」

そのとおりだけど、3枚なので最頻値にはなってる。ので許して。

 

 

とまぁ、こんな感じになります!はい!何書けばいいのかわかんない!!おうちかえる!!

 

改善点あったら言ってほしいです、Python使えないので、お手柔らかに。。