ブックマーク / qiita.com (234)

  • Goコンパイラをゼロから作って147日でセルフホストを達成した - Qiita

    Go言語コンパイラをスクラッチから書いてセルフホストを達成しました。 Goコンパイラの実装はほとんど見ずに、ほぼ 8cc というCコンパイラから学んだ知識のみで作りました。 特徴 コンパイルするとアセンブリを吐きます 字句解析・構文解析は手書きです。yacc/lex などのツールは使っていません 標準ライブラリも自作です コード行数はテストをのぞくと 9,152行でした。 セルフホストに必要な機能しかないので、Go言語の全機能は網羅していません。 例えば以下の機能は未実装です。 ガベージコレクション go routineとchannel 浮動小数点 設計 70%くらいは 8cc の設計をそのまま引き継いでいます。 残り25%(map,slice,interface,method,型推論等)が自分のオリジナル、残り5%が9cc、くらいな感じです。 かかった期間 2018/10/7に着手し

    Goコンパイラをゼロから作って147日でセルフホストを達成した - Qiita
    cocoasynn
    cocoasynn 2019/05/21
    かっこいい!
  • http.ListenAndServe() をインターネットに公開してはいけない - Qiita

    http.ListenAndServe() を使ったサーバーをプロダクションに投入していたのですが、海外からのアクセスが多くなったころにリソースリークが発覚しました。 ListenAndServeのドキュメント ListenAndServeのソースを見るとこうなっています。 func ListenAndServe(addr string, handler Handler) error { server := &Server{Addr: addr, Handler: handler} return server.ListenAndServe() } addr, handler 以外は http.Server のnil値がそのまま使われている事がわかります。この構造体にはいくつかのタイムアウト値がありまが、nil値で初期化されるとタイムアウトなしの状態になってしまいます。 Server型のドキ

    http.ListenAndServe() をインターネットに公開してはいけない - Qiita
    cocoasynn
    cocoasynn 2019/04/17
  • 【iOS/Android】アプリ内課金 定期購読のサーバーサイド知識総まとめ - Qiita

    はじめに ここ数ヶ月の業務で、iOS/Androidそれぞれのアプリ内課金(In-App Purchase)、特に定期購読1(Subscription)について調査し、サーバーサイドの設計や実装をおこないました。その経験をもとに基事項に始まり、ドキュメントからは読み取れないTips・小ネタまでを今の私に可能な限りまとめてあります。 できるだけ参考情報へのリンクも貼るようにしています。定期購読の実装には必要な知識が数多くあるため、この記事が少しでもその理解の助けとなれば幸いです。 ちなみに、公式ドキュメントにはきちんと目を通した方が良いですが、実態の変更にドキュメントが追いついていない困った部分も多々あります(特に日語ページ)。この記事でもいくつか触れてはいますが、幅広く情報を集めつつ、最終的には実際に手元で試して情報の正しさを検証することをオススメします。 前提・注意事項 この記事は2

    【iOS/Android】アプリ内課金 定期購読のサーバーサイド知識総まとめ - Qiita
    cocoasynn
    cocoasynn 2019/04/03
  • Jenkinsfileの書き方 - Qiita

    Help us understand the problem. What is going on with this article?

    Jenkinsfileの書き方 - Qiita
    cocoasynn
    cocoasynn 2019/03/14
  • "何回閉じても無駄ですよ〜"と無限にアラートを出す10の方法 - Qiita

    function f() { alert('何回閉じても無駄ですよ〜') setTimeout(f) } setTimeout(f)

    "何回閉じても無駄ですよ〜"と無限にアラートを出す10の方法 - Qiita
    cocoasynn
    cocoasynn 2019/03/05
    “掲示板に書き込むと補導または書類送検されるので気をつけてください ”
  • 2019年版Vue.jsを使ってる人には必ず知っていてほしいVue.jsの武器とドキュメントに書かれていないコンポーネントやメンテナンスの際に役立つTips - Qiita

    2019年版Vue.jsを使ってる人には必ず知っていてほしいVue.jsの武器とドキュメントに書かれていないコンポーネントやメンテナンスの際に役立つTipsアーキテクチャVue.jsElmReactAngular2 はじめに 私はVue.js with Vuexを使った業務で1画面30APIを叩く必要のある画面から、たったの数APIしか叩かないけれど、代わりにUIがとても機能的で複雑な画面まで設計し、構築しました。 もちろん、Vue.jsのコンポーネントシステムをフル活用し、Vuexを入れていないプロジェクトの経験もあります。 現在は構築したシステムを保守・運用しています。 また、勉強の為にReactAngular、 最近はElm等にも少し触れています。 その際に得られたノウハウ、Vue.jsが他のライバルフレームワークと比べた際に現時点で当に勝っている利点やノウハウを言語化し、共有

    2019年版Vue.jsを使ってる人には必ず知っていてほしいVue.jsの武器とドキュメントに書かれていないコンポーネントやメンテナンスの際に役立つTips - Qiita
    cocoasynn
    cocoasynn 2019/03/03
  • 我が名は神龍……どんなテストもひとつだけ自動化してやろう - Qiita

    『我が名は神龍……どんなテストもひとつだけ自動化してやろう』 じゃ、じゃあ!このブラウザテストを自動化してください! Chromeで https://kids.yahoo.co.jp/ にアクセスして 検索ワードに ねこ と入力して さがすをクリックして 検索結果にネコ - Wikipedia が含まれていることを確認して 検索結果に 買い方 を追加して さがすをクリックして 探しているのは「の飼い方」?と表示されることを確認して クリックするとの飼い方で再検索されて 検索ボックスを不倫で上書きして さがすをクリックして このページは表示できませんと出ていることを確認 『よかろう……たやすい願いだ』 まずはライブラリのインストールと初期設定をしてやろう…… # [ライブラリのインストール] # CodeceptJSとPuppeteerをインストールします。nodeとnpmが必要ですので

    我が名は神龍……どんなテストもひとつだけ自動化してやろう - Qiita
    cocoasynn
    cocoasynn 2019/02/26
  • Docker の基本学習 ~ Docker のネットワーク - Qiita

    単一ホスト内での Docker のネットワークの仕組みをまとめてみる。 全体像 まず、Docker のネットワークは以下の図ような構成になっている。 ざっとポイントをまとめるとこんな感じ。 * ホストには docker0 という仮想ブリッジが作成される * コンテナは veth を介して仮想ブリッジに接続される * コンテナ内からは eth0 というNIC があるように見える(実体は veth) * コンテナ内の eth0 には、空いているIPアドレスが自動で割り当てられる(なので、IPアドレスは不定)。 * コンテナからホストの外部に通信するには、NAT(IPマスカレード)が使われる * 単一ホスト上のコンテナ間の通信は、仮想ブリッジを経由して行われる(なので、コンテナ内で見える 172.17.0.0/16 のアドレスを使って通信できる) もう少し詳しく 分からないところを調べてみた。

    Docker の基本学習 ~ Docker のネットワーク - Qiita
    cocoasynn
    cocoasynn 2019/02/18
  • DNS over HTTPSの必要性について - Qiita

    なぜ今までのDNSでは問題があるのか インターネット上の通信の多くは、ブラウザを利用したウェブによるものです。 セキュリティ向上のため、GoogleやFireFoxといった大手ブラウザベンダーが平文通信であるHTTPから暗号通信であるHTTPSへの移行を推奨し、盗聴・改竄・なりすましといった問題を解決することが出来ます。 しかしながら、そのHTTPS通信をする前のDNSによるドメイン解決は暗号化されておらず盗聴でアクセスするホスト名を把握される、なりすましで偽の応答を返されるといった可能性があります。 それを防ぐための方法の1つが、DNS over HTTPSです。 DNS over HTTPSとは 今までDNSサーバ(フルリゾルバ)の(主に)UDPポート53番に対して行われていたDNSによる名前解決を、TCPポート443番に対するHTTPS(HTTP/2 over TLS)通信上で行うプ

    DNS over HTTPSの必要性について - Qiita
    cocoasynn
    cocoasynn 2019/02/13
  • オレ プログラム ウゴカス オマエ ゲンシジン ナル - Qiita

    ガイヨウ オレ オマエ ゲンシジンスル プログラム カイタ ゲンシジン ジョシ ツカワナイ ゲンゴショリ スル ジョシ ケス ゲンシジン カンジ ヒラガナ シラナイ ゼンブ カタカナ スル サンプル import requests import json import sys BASE_URL = "https://api.ce-cotoha.com/api/dev/" CLIENT_ID = "オマエ アイディ イレル" CLIENT_SECRET = "オマエ シークレット イレル" def auth(client_id, client_secret): token_url = "https://api.ce-cotoha.com/v1/oauth/accesstokens" headers = { "Content-Type": "application/json", "charse

    オレ プログラム ウゴカス オマエ ゲンシジン ナル - Qiita
    cocoasynn
    cocoasynn 2019/02/13
    コメントのマクダウンわろた
  • Piping Server を介した双方向パイプによる,任意のネットワークコネクションの確立 - Qiita

    nwtgck 氏によって HTTP を用いて2つのホスト間でパイプを構成するサーバ実装が公開されました. https://qiita.com/nwtgck/items/78309fc529da7776cba0 名前を Piping Server と呼ぶそうです. nwtgck 氏は 枯れた技術である HTTP 上に実装されている HTTP 上に実装されているため,ウェブブラウザ,wget,curlなどの慣れ親しんだツール群でデータのやり取りができる パイプ経由で効率的にデータを転送でき,従って送信側・受信側ともにコマンドライン上でパイプをつなげることによりデータの加工がバイトストリーム上で行える データの送信者,受信者ともに TCP ポート番号80または443への外向きのコネクションさえ確立できれば良い といったあたりが Piping Server のアピールポイントであると主張されていま

    Piping Server を介した双方向パイプによる,任意のネットワークコネクションの確立 - Qiita
    cocoasynn
    cocoasynn 2019/02/10
  • ネットワーク越しでパイプしたり、あらゆるデバイス間でデータ転送したい! - Qiita

    何を解決したいか? Mac, Windows, Linux, iPhoneAndroidのスマホ・タブレットとかのデバイス間でデータの転送したいことがあります。 SlackとかLineとかSkypeとかAirDropとかあっても 送りたい相手と共通して使っているサービスを探す必要とか、 GUIのソフトウェアのインストールが必要とか、 AirDropだとApple系OSである必要 があるなどの転送の障壁があって、GUIが使えないデバイスに送りたいときなどは困ってしまいます。 すでにたくさんのファイル共有系のサービスがありますが、コマンドを使ったCUIベースにあまり親切な設計なものはあまりないと思います。 そこで、上記の問題を解決するために、以下のようなファイル転送の仕組みを作りました。 他デバイス間でデータ転送ができ、 別途ソフトウェアのインストール不要で、 パイプにとても親和性が高くエン

    ネットワーク越しでパイプしたり、あらゆるデバイス間でデータ転送したい! - Qiita
    cocoasynn
    cocoasynn 2019/02/07
  • APIとかABIとかシステムコールとか - Qiita

    はじめに 記事はLinux環境における次のようなことをざっくり理解するための記事です。 Application Programming Interface(API)って何? Application Binary Interface(ABI)って何? システムコールとAPIとABIの関係って? それぞれ何がどう違うの? この手の情報はググればwikipediaやらにいろいろ情報が載ってるんですが、初心者が理解するには細かいことまで書かれすぎていて、かつ、それぞれの関係がわかりにくいです。なので、用語を逐一解説するのではなく、ありがちな質問のQAという形をとりました。人によって用語の意味の揺らぎがあったりするんですが、私の解釈ということで。あからさまに間違っていたら指摘していただけると嬉しいです。 これを書こうと思ったきっかけは、以前こんなtweetを見かけたことです。それから「そういえば最

    APIとかABIとかシステムコールとか - Qiita
    cocoasynn
    cocoasynn 2019/02/04
  • GolangでJIS規格の都道府県を扱うライブラリを作った - Qiita

    都道府県をシステムで扱う時、多くの場合JISX0401の規格に基づいたコードが振り分けられることがほとんどかと思います。 都道府県は全部で47件と数が少ないためプログラム中にハードコードされる実装も多いかと思いますが1、 そもそも規格があるのだから規格に沿ったライブラリを公開してそれを利用するほうが、規格という共通認識・その実装の再利用といった観点から良いはずです。 多くのプログラミング言語には、JISX0401に沿った都道府県の情報を得るライブラリが存在しているかと思いますが、Golangにおいてはその存在が確認出来なかったため今回実装して公開を行いました。 ライブラリの名称は過去Rubyを利用していた時代に愛用していたchocoby/jp_prefectureをリスペクトし、同じ名前をつけさせていただきました。 https://github.com/diverse-inc/jp_pre

    GolangでJIS規格の都道府県を扱うライブラリを作った - Qiita
    cocoasynn
    cocoasynn 2019/01/17
  • 俺のlsが遅すぎる - Qiita

    なぜ? 必要に迫られてオレオレなlsを書いたのだがなぜか遅い。大したことしていないのに遅い。 コード 特に変なところはないと思うのだけど... #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <dirent.h> #include <pwd.h> int main(int argc, char** argv) { char fpath[PATH_MAX]; DIR* dir; struct dirent* dp; struct stat st; struct passwd *pw; char *dpath; dpath = (argc != 2) ? "." : argv[1]; dir = opendir(dpath); while ((dp = readd

    俺のlsが遅すぎる - Qiita
    cocoasynn
    cocoasynn 2019/01/15
  • Java 12新機能まとめ - Qiita

    すでにJava12はRampdownフェーズに入り、機能がほぼ確定しており、順調に行けば3月19日にリリースされます。->されました。 ということで、Java12に入る機能をJEP、API、その他にわけてまとめます。 JDK 12 Early-Access Builds JEP まずは大きな機能をまとめたJEPベースの変更 http://openjdk.java.net/projects/jdk/12/ 全部で8個のJEPが入ってます。ふつうのJavaプログラマに影響ありそうなのは上の3つとDefault CDSですかね。残念ながらRaw String Literalsはドロップされました。 189: Shenandoah: A Low-Pause-Time Garbage Collector (Experimental) 230: Microbenchmark Suite 325: Sw

    Java 12新機能まとめ - Qiita
    cocoasynn
    cocoasynn 2019/01/14
  • 低レイヤーを学ぶための技術書をまとめてみる - Qiita

    半年前から低レイヤーに関する勉強をしている。 その中で読んだ技術書の感想、そしておすすめの読む順番をここにまとめてみる。 OS 30日でできる! OS自作入門 おすすめ度:80(満点100) 一言:自作OSの初心者向け 自作OSでまず初めに候補に挙がるのがこの。2006年に出版されたではあるが、OSの根幹を理解するにはとても良い。最初からアセンブリでメモリ操作をがっつり書くため、アセンブリの経験やレジスタ周りの知識が無いと挫折してしまうかも知れない。そこを乗り越えれば楽しくOSを実装していける。 コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方 おすすめ度:95 一言:一からOSを作って学べる格的な指南書 論理回路と呼ばれるレベルからメモリやCPUを作っていき、アセンブリ言語やアセンブラの開発、そして独自言語とそのコンパイラ、OSまで開発する。CPUなど各要点の考え方

    低レイヤーを学ぶための技術書をまとめてみる - Qiita
    cocoasynn
    cocoasynn 2019/01/12
  • ネトゲや配信で使い分けられてるTCPとUDP、RUDPの概念から勉強し直してみた - Qiita

    さて、上記を踏まえた上で、3wayハンドシェイクのステップを見ていきます。 クライアントがサーバーにSYNパケットを送信(000010) サーバーはそれを了承するACKと通信の開始を要求するSYNを一緒に送信(010010) クライアントはサーバーに対してACKを返す(010000) これで1対1の通信を確立し、その後データのやりとりが開始されます。ちなみに切断するときもコントロールフラグを利用して連絡を取り合います。 実際の通信を始める前に コネクションを確立した後には、実際に通信を始める前にお互いが扱える以下のデータ量を確認します。 ヘッダを含めたデータの大きさ(セグメントサイズ) 一度に受け取れるデータの数(ウィンドウサイズ) 上記は送信側、受信側問わずサイズの数字が小さい方にもう片方が合わせる形となります。 データを確実に届けるための仕組み TCPでは、データを届けている途中でデー

    ネトゲや配信で使い分けられてるTCPとUDP、RUDPの概念から勉強し直してみた - Qiita
    cocoasynn
    cocoasynn 2018/12/31
  • Vim script で機械学習 - Qiita

    この記事は Vim Advent Calendar 2018 の最終日 25 日目の記事です。昨日は rhysd さんの「Vim の構文ハイライトでクリスマスツリー🎄を飾ってメリクリする」でした。今年も Vim Advent Calendar は完走しました。皆さんお疲れさまでした。 はじめに 昨今 Vim script は目覚ましい進化を遂げ、Vim script からタイマーも実行でき、プロセスを起動して非同期に通信できる様にもなりました。以前の様にコマンドを実行して Vim でのテキスト入力を妨げる事も少なくなってきました。 Vim script が扱える数値も既に64bit化されています。現在 pull-request されている blob 型 も入れば、ほぼ他の言語と同等の機能を得たと言えるでしょう。1 しかしながら世の中のプログラミング言語は機械学習へと足を延ばし、大量のデー

    Vim script で機械学習 - Qiita
    cocoasynn
    cocoasynn 2018/12/25
    ...(すごすぎてドン引き)
  • GitLab Container RegistryをKubernetesで利用するためのトークン入りSecretの作り方 - Qiita

    この記事は Kubernetes2 Advent Calendar 2018 の14日目の記事です。 過去の日付ですが、未参加だったので、せっかくなので埋めようと思います。 GitLabにはContainer Registryが統合されています。参考 このRegistryをKubernetesで使おう、という記事です。 KubernetesではGitLabへの認証情報をSecretとして保持できるので、このSecretの作り方をまとめます。 Kubernetes上にGitLabを立てる、という記事ではないので、ご注意ください。 TL;DR GitLabで個人ごとにトークンを作成 そのトークンを次の形式でbase64エンコード 任意の文字列:トークン できた文字列を次の形式でbase64エンコード {"GitLabのアドレス":{"auth":"さっき作った文字列"}} できた文字列をdoc

    GitLab Container RegistryをKubernetesで利用するためのトークン入りSecretの作り方 - Qiita
    cocoasynn
    cocoasynn 2018/12/21