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

Knooooooooob

雑な自己満足を残していくブログ 年度によってテンションが違うっぽい

Swift3始めました

なんかiOS開発をやることになったっぽいので忘備録

 日本語の記事少なくない?

なぜ

  • 某社で某々あったらなんかSwiftをやる話になった

覚えておきたいこと

引数名無しで渡したい時は_をつける.

func squareArea(_ width:Int, _ height:Int) -> Int {
  return width * height
}

squareArea(3,4)

関数名が同じでも引数名が違うとオーバーロードになる.(オーバーロードする?オーバーロードできる?)

func calc(a:Int, b:Int) ->{
  return a + b
}

func calc(c:Int, d:Int) ->{
  return c * d
}

こういう時無駄にどうでもいいことばっか思い浮かんで実験したくなっちゃうよね f:id:Knium:20161113005734p:plain

ジェネリクスな関数というものがある.

ジェネリクス | Swift言語を学ぶ

わかりがあった

func bigger<T>(val1: T, val2: T) -> T {
    return val1 > val2 ? val1 : val2
}

でTが型を指すらしい,例えば Int のbigger()とfloat()版のbigger()をオーバーロードさせずにこれで同じことができるっぽい,すごい

これでも遊んでみたかったけどf:id:Knium:20161113011021p:plain って怒られてググったけど

stackoverflow.com

よくわからないけどジェネリクスな関数で引数に対して演算子を使う時はちゃんとそれが適しているかどうかコンパイル時にはわからないからできないってことはよくわかったのでそのうち理解していきたい

クロージャは名前のない関数のオブジェクト, 未だによくわからず

 5.. <10 # CountableRange(5..<10)
Array(5..<10) # [5, 6, 7, 8, 9]

辞書は当然キーにも型が決まる.

ねむいおやすみ

f:id:Knium:20161113024145j:plain

おいしかった

Falcon punch!!

PythonでfalconというWebフレームワークを始めました.

日本語での資料なくてしんどいけどドキュメントの英語自体は平易なので読める気がする.

RESTとかWSGIとかわからないけど,なんとなくかける気がする.

 $ curl knium.net:8000
{
  "remote_addr": "122.133.212.52",
  "protocol": "http",
  "user_agent": "curl/7.43.0"
}

こんな感じのよくありそうなのを返す奴を雑に作りました.

JSONとかで返すのとかは向いてるけどHTMLをレンダリングして返したりとかはないので普通のWebAppを作りたいときは素直にDjangoやFlaskを使おうねって知見を得た.

import falcon
import json

class Ifconfig(object):

    def on_get(self, req, resp):
        status = {
            'protocol': req.protocol,
            'remote_addr': req.remote_addr,
            'context_type': req.context_type,
        }
        resp.body = json.dumps(status, indent=2)
        resp.status = falcon.HTTP_200

api = application = falcon.API()
content = Ifconfig()
api.add_route('/', content)

あと先週土曜に藍井エイルのライブの「Eir Aoi 5th Anniversary Special Live 2016 ~LAST BLUE~ at 日本武道館」へ行ってきました.

f:id:Knium:20161111222831j:plain

オタク棒初めて買ったり調布祭以外でやるライブに初めて参加したのでめっちゃ楽しかった〜〜〜〜

欲しい

JP HACKS 16に出ました

f:id:Knium:20161101002654j:plain

2016.jphacks.com

出ました.当日は遅刻してたり何したかって言ったらLINE BOT API使ったものを書こうとしたのにHTTPSじゃなきゃ通信できないことに気づけずになかなかダメだったなぁ,チームの人には本当に申し訳ない.

他の人達が作ってた作品がめっちゃ面白そうだった,電通大生も自分ら以外に結構いたらしい.

プログラミングできないなぁって思い知った.(n回目)

できないって嘆いても仕方ないし嘆き飽きたからから手を動かし始めた(n回目)

自分なりにやっていく気持ち.

今週は藍井エイルのライブだったりOSCでめっちゃお世話になった人が話すので遊びに行くついでにステッカー集めたり~~~

Pythonまとめたい

電車の中で半寝してたおっさんに頭殴られておっさんがそのことに気づかなかったから仏のような心でスルーしてあげたのでコーディングしました

デコレータやるつもりが内包表記とジェネレータやってたのでまた明日にでもデコレータやっていく気持ち

github.com

https://github.com/Knium/python-tutorial

入門 Python 3

入門 Python 3

数学とプログラミングに弱い学生が論理パズルをPythonで解きたい話

これ楽しい

この本の名は?: 嘘つきと正直者をめぐる不思議な論理パズル

この本の名は?: 嘘つきと正直者をめぐる不思議な論理パズル

最近バイトでプログラム書いてない 

この本の名は?: 嘘つきと正直者をめぐる不思議な論理パズル

この本の名は?: 嘘つきと正直者をめぐる不思議な論理パズル

この問題をプログラミングで解こう!

てなわけで1問だけ挑戦する.

4人の被告 A,B,C,Dが関与していて次の事実が明らかになった.

  • (1) AとBが有罪ともに有罪なら,Cは共犯者だ.
  • (2) Aが有罪ならば,BかCの少なくとも一人が共犯者だ.
  • (3) Cが有罪ならば,Dは共犯者だ.
  • (4) Aが潔白ならば,Dは有罪だ.

確実に有罪なのは誰で,有罪かどうかを決められないのは誰か.

なるほど,さっぱりわからん.

とりあえず,考えてみると(1)~(4)の条件を回して矛盾が発生した場合の時そのパターンを取り除くみたいな感じが良さそう.

てなわけでソースコードを考える.

(1) AとBが有罪ともに有罪なら,Cは共犯者だ.

AとBが有罪なら,Cも有罪らしい. つまり,

if A.isGuilty && B.isGuilty:
    C.isGuilty = True

うーんなんかおかしい.これ矛盾が発生したときじゃなくて条件を満たしたときだよね.

こう直したほうが良さそう.

def jugge1(*args,**args)
    if A.isGuilty && B.isGuilty:
        if not C.isGuilty:
            break

これなら無視できそう.

以下(2)~(4)を同様の手順で考えると,

(2) Aが有罪ならば,BかCの少なくとも一人が共犯者だ.
def jugge2(*args,**args)
    if A.isGuilty:
        if not C.isGuilty or B.isGuilty:
            break
(3) Cが有罪ならば,Dは共犯者だ.
def jugge3(*args,**args)
    if C.isGuilty:
        if not D.isGuilty:
            break
(4) Aが潔白ならば,Dは有罪だ.
def jugge4(*args,**args)
    if not A.isGuilty:
        if not D.isGuilty:
            break

レッツコーディング

<被告>.isGuiltyって書いたけど普通に2進数でやったほうが早そう.

def jugge1(a,b,c):
    if a == 1 and b == 1:
        if c == 0:
            return True
def judge2(a,b,c):
    if a == 1:
        if b == 0 or c == 0:
            return True

def judge3(c,d):
    if c == 1:
        if d == 0:
            return True

def judge4(a,d):
    if a == 0:
        if d == 0:
            return True
ans = []
for i in range(16):
    beIgonored = [] #この中にTrueが無ければセーフ
    binary = "{0:0>4}".format(bin(i)).replace("b","0") #0000が 0b0ってなるのを変えてる
    binary = list(binary)
    while len(binary) < 4:
        binary.insert(0,"0") #0000が 0b0ってなるのを変えてる

    while len(binary) > 4:
        binary.pop(0)
    a,b,c,d = int(binary[-1]),int(binary[-2]),int(binary[-3]),int(binary[-4])
    beIgonored.append(jugge1(a,b,c))
    beIgonored.append(judge2(a,b,c))
    beIgonored.append(judge3(c,d))
    beIgonored.append(judge4(a,d))
    if not True in beIgonored:
        ans.append("".join(binary))

print(" _______________")
print("| D | C | B | A |")
print(" ───────────────")

for a in ans:
    print("| {} | {} | {} | {} |".format(a[0],a[1],a[2],a[3],))
print(" ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾")

クソコードすぎて辛いな??????????

結果

D C B A
1 0 0 0
1 0 1 0
1 1 0 0
1 1 1 0
1 1 1 1

真理値表

A~Dの中で有罪を1,潔白を0とする.

Zは矛盾が生じてない時に1,生じている時を0とする.

Mは条件(1)~(4)の中で条件を満たしたもの.

Nは条件(1)~(4)の中で矛盾が起きたものとする.

D C B A Z M N
0 0 0 0 0 ✖️ (4)
0 0 0 1 0 ✖️ (2)
0 0 1 0 0 ✖️ (4)
0 0 1 1 0 (2) (1)
0 1 0 0 0 ✖️ (3),(4)
0 1 0 1 0 (2) (3)
0 1 1 0 0 ✖️ (3)
0 1 1 1 0 (1),(2) (3)
1 0 0 0 1 (4) ✖️
1 0 0 1 0 ✖️ (2)
1 0 1 0 1 (4) ✖️
1 0 1 1 0 (1) (2)
1 1 0 0 1 (3),(4) ✖️
1 1 0 1 0 (2),(3) (1)
1 1 1 0 1 (3),(4) ✖️
1 1 1 1 1 (1),(2),(3) ✖️

あっなんかあってそう

つまり確実に有罪なのはDっぽい

コード書くより真理値表書くのが一番早いぞ!!!!!

クソコード書くの楽しかったおやすみなさい.

MD練習も兼ねてやっと気づけたこと

前から気づいてたけどやっと文章化しようと思った

大学に入った1年前からプログラミングをなんとなーくやってきた.最近やっと気づけたのが,

  • まず,基礎となる概念(データ型とか配列とかオブジェクトとか)があって
  • そこからそれらを使ってサーバやDBとか色々使って何かWEBサービスとか出来上がる
  • 一概にプログラミングを学ぶ,だけじゃなくてそこから何か面白いものを作るにはやっぱプログラミングだけじゃなくて他の技術的なものを学ばないと出てこない←これもっと早く知りたかった

みたいな,だから今のバイト先で1ヶ月経った時にプログラミング(軽いクローラ書いたりほんのちょっとwebフレームワーク触ってお手伝い)とSQLどっちがいい?みたいな質問でどっちかだけじゃなくてどっちも興味を持って学べる人間が強いんだなあって思った.

(単位がかかってたりしてて)必要だから勉強するってのは割と成功率が高いんだけど,いずれ必要になるから勉強するっていうのはとても難しいからいずれ必要なものに対してどれだけ興味を持って勉強できる人間が強くなれるんだなあと

悟りツイート

今鍵垢だから直接文章として貼ってしまおう

webフレームワークが難しいんじゃなくてフレームワークを利用するのに必要な知識が全く無いことに気付けたので進捗ありです

超どうでもいいんだけど

www.infraexpert.com

某大学の某鯖(80/443しか空いてない)を通して某プロキシ下でバイト先のkibanaにアクセスしようとしたら遮られたので頑張ってVPNで接続しようとしたんだけど仕組みを見る限り非ウェルノウンポートを使ってる(というか80/443しか空いてない)のにVPNでつながる?日本語が支離滅裂なのでまたいつか

時間が無限に欲しい

バイトも週3以上で毎日6時間あったり昼間にやりたい勉強とかするの楽しい(進捗ダメです)しゴロゴロ寝てたいし通学で往復3時間かかるの端的に言ってロスだしアニメ見たいし数学やりたい気持ちあるしTwitterだってしたいし1日24時間足りなくねって感じある.生産的でも非生産的でもいいからとりあえず時間が欲しいなってなんとなく思った.だからバイトの時間に学べるように技術系バイトにしてるところあるけどとりあえずお金も欲しいなぁって.