yn2011's blog

技術メモ

職務経歴書を書いて公開した

転職活動しているわけではないけど書いてみたくなったので書いた。書いたものはこちら→職務経歴書

書いた理由

  • これまでの経験を振り返って自分の立ち位置を明確にしたかった(たいして長いキャリアでもないが)
  • オンライン(TwitterやBlog)で自分を知った人への自己開示
    • 自分に興味を持ってもらえると嬉しい
    • プロフィールページ的役割

書くときに参考にした情報

書くときに意識したこと

  • とにかくシンプルにする

    • 言語や経験等は細かく書きたくなってしまいがちなので選択的に書いた
      • 例えば自分の場合だと大学で1,2年間ぐらいCやJavaPythonやってたけど大して得意というほどでもないし、スキルとして強く主張したいわけでもないので省略した
    • 文は1単語でも短くできるように意識を払う
  • 少しエモさを含める

    • キャリアが浅いと職務経験の列挙だけでは情報不足
      • 自分は何ができて、何がしたい人なのか、どんなキャリアを目指しているのか伝わらない
    • 自分が大事にしていることや、挑戦したいことも軽く書いておく(自分はあまり採用を強く意識してないので現状実践できてないけど)
    • 読んでいる人も退屈しないかも
  • 日本語にする

    • Githubで公開するし、意識が高まって英語で書いてみたくもなりがち
    • でも実際のところ読者のほとんどは日本語ネイティブだと思うので英語で書く意味がない(英語版もあるに越したことはないと思う)

誰でもアクセス可能であるということ

  • 職務経歴書の性質上、分かる人が見れば個人を特定可能なレベルの情報公開になる
    • でも、(ある程度内容を選んだ)職務経歴書を公開できないのは何か自分のキャリアに負い目を感じていたりオンライン上の人格と現実の個人を結び付けられると困るような何かをしているからでは?とも思っている
  • 直近の職歴の部分を細かく書きすぎると自分の思いもよらないところで迷惑だったりするかもしれないのでそこは注意
    • 社名については、今回自分の職務経歴書を書くにあたり公開されている職務経歴書を10数点以上確認したけど明記している例が多かった(ので自分も書いておいた)

技術メモもそうだけど、公開可能な形にアウトプットしておくことで客観的に見れる部分が多くなると思う。アウトプット大事。

Appleサインイン画面で403エラーが発生したのでブラウザのCookieを削除したらエラーが解消した

環境

事象

原因

  • 軽く調べてみたけどCookieと403エラーの関係はよく分からなかった
    • セキュリティ的な問題なのかも
  • 別にAppleWebサービス特有の事象というわけではないっぽい

kakasiとnkf

【問題と解答】jus共催 第37回シェル芸bot生きてるかどうか分からないけどシェル芸bot向けシェル芸勉強会 | 上田ブログのQ7を読んでいていて、kakasiは入力と出力の文字コードを指定できるのかーと思ったので書いた。

環境

nkfによる変換は必要?

  • kakasiの利用例をみると下記のようにnkfを前処理と後処理に使っているものが多い
  • nkfEUC-JPに変換した後にkakasiを通して平仮名に変換しUTF-8に戻して標準出力する場合はこんな感じ
$ echo 漢字 | nkf -e | kakasi -JH | nkf -w
かんじ
  • kakasiのオプションで入力の文字コードを指定する場合はnkfは不要になる
  • シンプルで良い
$ echo 漢字 | kakasi -i utf-8 -JH
かんじ
$ echo 漢字 | kakasi -i utf-8 -o jis -JH
$+$s$8

kakasiのオプション

  • ではnkfを使う例が多い(気がする)のはなぜなのか?
    • オプションがあまり知られていない?
  • manコマンドで詳細を確認する
  • KANJI CODING CONVERSIONより

    Unfortunately, several coding systems are used in Japan and JIS x0208 standard are changed at 1983. Therefore, KAKASI can automatically distinguish the coding system and coding revision and then use the same output coding system if the document does not include JIS x0201 KATAKANA. If JIS x0201 KATAKANA is included or you wish to change kanji coding system, you may use the next options.

  • 上記によるとJIS x0201のカタカナ(JIS x0208から見た半角カナ)が含まれていない限りは自動的に文字コードの識別が可能とのこと

    • しかし自分の環境ではあまり上手く識別されなかった
    • kakasi - manned.orgより引用

      • もしも指定されない場合には入力から判断しようとします。 KAKASIは入力をためこんで統計的に処理する方法がとれないので、 最初の漢字らしい文字をもって判断します。

  • 自動的に識別した場合は入力の文字コードで出力する

  • もちろん明示的にオプションで入出力の文字コードを指定することも可能

C言語のビルドプロセスから理解する"./configure", "make" ,"make install"

Kakasiのインストールをしていて、 そういえば./configure, make ,make installって何しているのかちゃんと分かってないなあと思ったので調べたことをまとめた。
C言語本格入門 ~基礎知識からコンピュータの本質までを参考にさせて頂きました。

前提知識

  • ./configure, make ,make installを理解するには、C言語ソースコードが実行ファイルになるまでの流れを知っておく必要があると思う

C言語ソースコードはそのままでは実行できない

  • 下の図はC言語ソースコードが実行ファイルになるまでの流れを示している
  • 実行するには実行ファイルを作成する必要がある

f:id:pokuwagata:20181109000229p:plain [種田元樹 (2018) . C言語本格入門 ~基礎知識からコンピュータの本質まで 技術評論社 図1-7より引用]

ビルドとは何か

C言語の移植性

Cランタイムとlibc

  • C言語ソースコードを実行する環境の差異を吸収する
  • CランタイムはC言語で書かれたプログラムを実行するための情報を持つファイル
  • libcはC言語で書かれたプログラムを実行するためのライブラリ
  • 実行ファイル=機械語のファイル+Cランタイム+libc

Q&A

Q. ./configure すると何が起こるのか?

  • 実行環境の情報を元にMakefileを作成する
    • Makefileはmakeコマンドによるソースコードのビルドを自動化するための設定ファイル
    • ビルドは色々設定が必要なので設定ファイルがあると毎回書かずに済む
      • リンクするオブジェクトファイル名 (複数)
      • コンパイルオプション
      • リンカオプション
      • etc

Q. なぜ ./configure する必要があるのか?

  • C言語の移植性はCランタイムやlibcによって担保されているから

Q. make すると何が起こるのか?

Q. なぜmakeする必要があるのか?

  • ソースコードの実行ファイルを生成しないとプログラムを実行できないから

Q. make install すると何が起こるのか?

  • makeで生成された実行ファイルをインストールする (指定のディレクトリにコピー)

Q. なぜmake installする必要があるのか?

  • 対象の実行ファイルを呼び出しやすくするため

参考

VSCodeでawkの開発環境を整える (awk-language-client)

awkとしっかり向き合いたい時に役に立つかも。

環境

awk-language-client

marketplace.visualstudio.com

  • Language Serverのawk拡張
  • 拡張子.awkのファイルに対してシンタックスハイライト、補完、構文ミス、関数定義の参照等が可能
  • 意外と最近 (今年の8月ぐらい) に公開されたみたい
  • (他にも色々拡張はあるみたいだけど) この拡張のインストールだけで十分かなという印象

結果

f:id:pokuwagata:20181107092743p:plain

  • 自分が使っているカラーテーマとの相性は微妙だがシンタックスハイライトなしよりは全然良い
  • 補完や構文ミス検出も問題なく動作していたと思う
    • 文末のセミコロンの判定はsettings.jsonawk.stylisticWarnings.missingSemicolon: falseで無効にできる
      • 知らなかったが、awkファイルのアクション内では改行文字を文の区切りにできるのでこの判定を無効にしたい人もいるのかも?
    • 変数をホバーするとグローバルスコープか関数スコープか分かる
      • awkは関数の引数に指定した変数のみが関数スコープで、それ以外はグローバルスコープ
  • awkスクリプト書いていきましょう

peeコマンドについて混乱したので調べた(シェルスクリプト)

環境

混乱

$ matsuya | pee cat "grep -o ." rev
んどうーレカニミ
ミニカレーうどん
ミ
ニ
カ
レ
ー
う
ど
ん
  • シェルスクリプトってpee cat "grep -o ." revみたいにコマンドを並べられるんだっけ?
  • そもそもpeeを初めて見た。peeとは?

pee

  • teeの出力先がパイプになったコマンド。パイプだからt→pなのかも。
SYNOPSIS
       pee [--[no-]ignore-sigpipe] [--[no-]ignore-write-errors] [["command"...]]
  • teeはこんな感じで引数に複数のファイルを指定できる。
$ echo foo | tee bar.txt baz.txt
$ cat bar.txt
foo
$ cat baz.txt
foo
  • つまりpeeも引数として複数のコマンドを指定できる...?
$ echo foo | pee cat cat cat
foo
foo
foo
  • おお、やはり。
  • ということで最初のワンライナーを見返してみる。これはpeeの引数のコマンドに共通の標準入力を与えているものなのか。
$ matsuya | pee cat "grep -o ." rev

オプション付きコマンドの場合

  • "grep -o ."のダブルクォートはもしかするとコマンドにオプションを付けるときに必要なのかも...?
  • 試しに下記を実行してみる
$ echo foo | pee cat cat "cat -n"
foo
foo
     1  foo
  • 最後のcatだけ行番号付きで出力された。
  • やっぱりコマンドにオプションを指定するときはダブルクォートで囲ってあげる必要があるということみたい。
  • 考えてみれば、シェルスクリプトでは半角スペースが引数の区切りとして解釈されてしまうし仕方ない。

出力順

  • peeの引数に指定されたコマンドは先頭から順に終了するとは限らない。
  • 実際、最初に示した例ではrevcat"grep -o ."の順に標準出力に書き込まれている。
  • 何度か試すと時々順序が入れ替わる様子が観察できたので固定の出力が得られることは期待できないみたい。
  • peeを親とした子プロセスがforkされて個々のコマンドが並行(コンカレント)に実行されているから...だと思う (違っていたらすまん)

xcode-select --installに失敗した

xcode-select --installに失敗したのでXcode Command Line ToolsをApple公式サイトからダウンロードして解決したというお話。

環境

事象

gsedをsedとして呼び出せるようにしようと思いオプション付きでインストール実行。

$ brew install gnu-sed --with-default-names
Error: The following formula
  gnu-sed
cannot be installed as binary package and must be built from source.
Install the Command Line Tools:
  xcode-select --install

なぜか失敗した。このオプションはソースコードのビルドが必要なことがエラーと何か関係していそうではある。
とりあえず指示されたコマンドを実行してみる。

$ xcode-select --install
xcode-select: note: install requested for command line developer tools

すると以下の内容のポップアップウィンドウが表示されてダウンロードに失敗した。

xcode このソフトウェアは、現在ソフトウェア・アップデート・サーバから入手できないため、インストールできません。

解決策

  • Xcode Command Line ToolsはApple公式サイトからも取得することが出来る。
  • More Downloads for Apple DevelopersCommand Line Toolsと検索
  • 自分の環境のOSとXcodeのバージョンの組み合わせに一致するものを選択してダウンロード後にインストール。

インストール成功後に再度コマンドを実行する。

$ brew install gnu-sed --with-default-names
==> Downloading https://ftp.gnu.org/gnu/sed/sed-4.5.tar.xz
######################################################################## 100.0%
==> ./configure --prefix=/usr/local/Cellar/gnu-sed/4.5
==> make install
🍺  /usr/local/Cellar/gnu-sed/4.5: 10 files, 528.5KB, built in 2 minutes 18 seconds

今度は成功。めでたい。

原因不明

  • $ xcode-select --installが失敗する理由はよく分からない...

参考