brand new note

ジャズ屋が技術の話をするところ

情報の入出力が増えて思うこと

読みたい技術書が多くなってきて、今までと同じ読み方では全く時間が足りなくなってきているこの頃です。どうやって乗り切ろうかなーとかいうただの独り言です。

限界との付き合い方

誰しも自分の能力には限界があると思うんです、でもいかに限界と向き合うかが大事だと思うんです。自分がそう思っているというよりも、自分の尊敬する人が皆そういったことを言って下さるので、こういう言葉は常に頭の隅にあるんですけど。。。

例えばどれだけ頭の中に高速に知識やら技術やらを詰めこめるかというのは、自分の要領が悪いので日頃考えることが多くなりました。技術書もネット上のドキュメントも専門用語のオンパレードですし、理屈が分かれば楽しい反面理解できないものは苦痛になります。特に「そもそもどう動かしたらいいか分からない」という次元の悩みに関しては今も少なからず頭が拒否反応を起こします。

で、こういうのを「インプット」「アウトプット」に分けて考えると、インプットは読む、話を聞く、ですね。アウトプットは読んだものを理解して検証する、実装する、あるいは人に教える、になります。

で、これらを自力でうまくコントロールするにはある程度のテクニックが必要なんじゃないかと最近思っていて、「ふわっとわかる」「ちゃんとわかる」の切り分けとか、本の読み方の使い分けが大事なんじゃないかと。


自分の専門とする技術はもちろん他の技術領域に比べて深い造詣がありますね。でもそこに達するには専門用語のオンパレードがある、という世界にまず慣れないといけません、まず一度地面に深く穴を掘るようなイメージです。これがつらい。

でもそれができると、技術の背景やアーキテクチャを理解するのが比較的容易な脳になってきます。つらかったことが易しくなる。でも実装となると別の努力が必要です、これもつらい。

でもそのうちコマンドを覚えたり構文を覚えたりして、少しくらいなら実装やらリソース管理やらができるようになってきますね。こうするとまた次のつらそうなインプットに戻っていく。

で、ある程度の所に達するとインプットもアウトプットも、そんなに苦労せずそこそこの文章が読み書きできるようになると思うんです。専門じゃないこともやりたくなるかもしれない。そこまで来たら、自分の力が今どの程度なのか、いまやってることは自分にとってどの位つらいのか、あるいは楽なのか、このへんのバランス感覚を持って動くことがうまくやっていく上で重要かなーと思うんですね。つらいことばっかりやって心がしんどくなってもしょうがないですし、かといって広く浅く楽なことばっかりしてると、ある程度の深さから先の知識に拒否反応を起こす体になってしまうので。。。

f:id:frazz:20180504031245j:plain

レベルアップが早い人は、深い領域に突っ込んでいくつらさに向き合える時間が長い人、あるいは何か一つを既に極めていて、同じ要領で頑張れる人のような気がします。で、そういう人たちは相対的に、広く浅く技術を網羅するスピードも高速になります。そこには個人の意志とかバイタリティとか環境とかテクニックとか、色々関連している気がするので、目指すなら自分にどれが足りないのか意識する必要があります。

それでも個人的には、例えば技術書を一字一句漏らさずに読むことしかできなかったのが、パラパラ読みでも知ってる用語が随所に出てきたとか。あるいはコマンドをググらずに頭で思い出して打てたとか。そういう自分の引き出しが増えた瞬間を楽しめることが大事なのかなーと思います。


未熟者なんで偉そうなこと言える身じゃないんですが、自分にかけるつらさの割合が足りないなーと感じて、自戒も含めだらだら書いてしまいました。個人的に6月がやりたいこともやることも盛り沢山なので、少しずつエンジンかけていきます。進捗がありましたらできるだけ書いていきますね。

技術書典4にお邪魔してきた

4/22にUDXにて行われました技術書典4に行ってきましたので軽く報告です。

techbookfest.org

技術書典

技術書のみが出展される同人誌の即売会です。コミケは行ったことないのでよくわかんないんですが、あれの規模を小さくしたものというイメージなんだそうです。去年の秋頃に第3回があって、そこで本イベントの存在を知り今回初参加することとなりました。

f:id:frazz:20180429143625j:plain

中は撮影していませんが大盛況でした、おそらく6000人くらい来場したと思われます。行った時間が遅めだったのでピーク時の行列には並ばずに済んだんですが、ちょっと売り切れが出てたのが悔しいですね。今度は朝一で向かわないといけないかも。また、全然面識はありませんがtwitterのTLにいる方々も何人か参加していたようで、一人で感動していました。。

f:id:frazz:20180501152559j:plain

買った本たち。アプリは詳しくないのでインフラ周辺の本をいくつか買って来て、紙媒体のほうが売り切れていたものについてはPDFで購入。あまりペースは早くないですが少しずつ読んでます。中には実際に本を出してみないか?という内容のものもありまして、作業会とか出版までのやりかたとかも頑張れば調べられそうだな、という感触を得ました。技術力に自信があるわけではないですが、書くのは好きなので自分も出版してみたいですね。。。それまでにアウトプットの質を上げておこう。

皆さんも是非一度行ってみてはいかがでしょうか?

倉庫のPCを再生させようとして色々詰まった話

倉庫から引っ張ってきたみたいなPCをもう一度使えるようにしたくて色々やってたんですが、結構躓いたので以下をメモしておきます。同じミスをしないように。


起動時に赤ランプが点滅する理由

結論メモリが差さってなかった。

拾い物のPCの電源を入れたらいつも緑色で点灯するところが赤点灯になりました。このとき機種によって反応は異なりますが、総じてOSが起動できないエラーを教えてくれるものだとまずは覚えておくといいと思います。

それってとてつもない問題なのかというとそうではなくて、ハードウェアやbiosに関連するエラーを教えてくれるんだと思えば大丈夫です。


HPデスクトップPC - コンピューターが起動せず、LEDが点灯したり、ビープ音が鳴る | HP®カスタマーサポート

PCのランプが5回ずつ赤く点滅し起動しなくなった。 -PCの右の起動ラン- デスクトップパソコン | 教えて!goo


結構迷ってる方いらっしゃるんですね。。。

具体的に言うと自分の場合は赤ランプからの長めのビープ音が5回、そこからファンが全力で回転し始めました。これはやばいと思ったのでひとまずPCの蓋を開けたところ、中にメモリが入っていませんでした。これが赤ランプの原因だと思います、周辺にあったメモリ(2GB)を差したらちゃんと緑ランプになりました。


起動時にファンが全力で回転する理由

結論HDDが差さってなかった。

緑ランプに戻ったはいいもののファンは相変わらず全力で回転するし起動もしません。最初はファンが回る理由が埃のせいだと思っていて、(丁度長い間倉庫に入ってて汚かったのもあったので)掃除してみたんですが変化はなし。

で、後から気付いたんですがHDDが入っていませんでした...。そりゃOSも起動しないわけですね。


windows10のPCをログインせずに初期化する方法

2回強制終了する。

結局倉庫に入ってた別のPCを掃除して立ち上げた所、中身もばっちりで起動も一発クリアしたのでそのまま使うことにしました。中の個人データが残っていたので初期化させていただきましたが。。。

Windows 10 をリカバリー ( 初期化 ) する手順 | ドスパラ サポートFAQ よくあるご質問|お客様の「困った」や「知りたい」にお応えします。

ちなみにログインできないPCを完全に初期化するには、windows起動時に2回強制終了するといいらしいです。こうするとOSが勘違いして自動修復モードに入ってくれます。そこからリセット。


ライブファイルシステムとマスターの違い

ミスってDVD-RWを1枚お釈迦にしました。。。

https://pc-karuma.net/windows10-iso-install-media/

windows10のインストールメディア(DVD)を作って再インストール。

ISOファイルを書き込む場合は、CDやDVDをフォーマットしないよ... - Yahoo!知恵袋

富士通Q&A - [Windows 7] CDやDVDにデータを書き込む方法を教えてください。 - FMVサポート : 富士通パソコン

OS(ISOファイル)をDVDに焼くときはマスター形式の書き込みでないといけないらしくて、それを知らずにライブファイルシステムを指定してしまいました。一度しか書き込めない形式をマスターというようで、USBのような読み書き自由なものとは扱いが違うようです。CD,DVDのほかにISOファイルもマスター形式に分類されます。

一度でもライブファイルシステムを指定したりフォーマットしてみたりすると、それはもう使用済みディスクと認定されるのでOSは焼けなくなります、気を付けましょう。USBにlinuxのOS焼いたときはこんなことなかったんだけどな。。。

JANOG41.5 Interim Meetingにお邪魔してきた

4/20に行われましたJANOG41.5 Interim meeting に参加してきたので軽く報告です。

JANOGとは

ネットワーク界隈の方からすると有名だと思うんですが、JANOGはJapan Network Operator's Groupの略で、国内のネットワークおよびインターネットを支える企業、研究者が集い、最新技術や運用について報告し議論するといった内容のイベントです。お話を聞きたかったので今回初参加してきました。

www.janog.gr.jp

ちなみにjanogをはじめとするこういったイベントの中では、同士の集まりのことをBoF(Birds of a Feather)というようです。かっこいいですね。

おはなし

様々なネットワークベンダーさん、ISPさん、大学のネットワーク管理者さんが数分の持ち時間で調査、研究、活動の宣伝を行っていました。

内容としては某W大学の無線ネットワーク構築は多数のキャンパスがある為、WLCを使うと逆に大規模な無線環境の更改しかできなくなって悩みどころなんですよねー、とか、JPNAPは広島でBoFやってきました、とか、conbuでイベントの無線LAN環境構築に参加してみませんか、とか、テレメトリネットワーキンググループが発足しました、とか、JANOGスタッフやってみませんかー、とか、AnsibleをPlaybook無しで気軽に使う方法、とか。。。他にも各ベンダーさんや企業のインフラエンジニアさんのお話を多数伺ってきました。twitterでもちょっと盛り上がりを見せていましたね。。

そんな感じ

初参加でしたが非常に活気のあるイベントでした。

twitterハッシュタグを追うと詳細がまだ見られるのかな?少なくともjanog公式サイトには当日の講演資料が一部掲載されていますので、興味のある方はご覧になるといいかもしれません。また、次回のjanog 42は三重県での開催です。ハッカソンもやるかもしれないそうですよ。

https://www.janog.gr.jp/meeting/janog42/

おまけ

めっちゃオフィスとセミナールームは綺麗でした。。日本にこんな職場があるんだなって思った。

f:id:frazz:20180429002943j:plain

node.jsの3つめのメモ

node.jsの最初のメモ - brand new note

node.jsの2つめのメモ - brand new note

前回(というか昨日の夜)の続き。とりあえずなんか画像を出してくれるやつを考え中です。記事書いて頭の整理をしながらでないとうまくいかないので、もはや他人様の読み物じゃないです。

記事一覧

使えそうなリンクのメモ。

node.jsを使ってサーバサイドで画像合成してみる (node-canvas編) |

ウェブでの画像ファイルの取り扱いについて (Node.js * javascript)

Node.jsで画像アップロードと表示 - Qiita

Expressことはじめ - Qiita

イマドキのJavaScriptの書き方2018 - Qiita

メモ

まず前回の記事と同じ手順をもっかい踏んで環境を作ればいいんですかね、ポートを変えて。写経の繰り返しなのでどこからが自分の実力なのかはっきりしないですね。。。自分の頭の中だけで完結できるもの、手が勝手に動く状態を少しずつ増やしていく感じでしょうか。

npm init して npm install express --save. モジュールをロードする、ポートを指定して待ち受けを開始する、アプリケーションの処理を書く。

app.get()はappオブジェクトのgetメソッド。

resはレスポンスを返す。res.json(picturelist)はjson形式で画像のリストを返す。()の中は var picturelist のことを指すのでここで名前を揃える。

ちょっとずつサンプルを変えて動かしてみてうまくいかなかったら原因を考える。

というか画像なりテキストなりをちゃんと読み出せているかの確認が出来てないんですよね。これをやって。。。

できない。。。。

constが変わらない数でletが変わる数

アップロードしたら、したものの画像をリスト化して出してくれるようなやつがいいですかね。アップロードボタンが必要。

app.jsと同じディレクトリに画像があれば良くて。

...あれだな、他のサンプルコードからも学習できることがありそうなのでそれからだな。。

node.jsの2つめのメモ

前回の記事はこちら

node.jsの最初のメモ - brand new note

とりあえずインストールはできたので、本記事ではExpressを導入とサンプルの写経でアプリ開発の基本を押さえてみます。といっても下の記事をなぞっているだけなので、こちらも個人的メモの域を出ていません。本記事を読まれる方は併せて下の記事をしっかり読んで頂くといいと思います。

qiita.com

Express

node.jsのフレームワークの王道。REST APIとかと組み合わせるといい感じに開発できます。REST APIは、ざっくり言うとURIの末端をID化することによって同一ドメインで多様な処理を行えるようにする機能です。でも初めて知ったのでこの説明が正しいかちょっと不安です。

0からREST APIについて調べてみた - Qiita

例えば写真や画像のリストを表示するサイトを作ってみたい場合、沢山の画像にIDをつけて管理できれば便利ですよね。URI解析用のコードを書かなくても、node.jsとExpressを使えばシンプルなコードで実現できるようです。

まあ詳しい話は分からないのですが、とにかく便利だから有り難がって使おうということですね(適当)

ディレクトリ作成

まず作業環境を作ります。ほんとはこのあたりをまとめてやってくれるツールもあるんですが、理解のため記事に沿って手作業でやってみます。

mkdir node
cd node
npm init

npm initでプロジェクトを初期化し、いくつかの質問に答えるとそれに合わせたpackage.jsonファイルが生成されます。プログラムの作者のところに名前を書いたりとか、gitのリポジトリを指定したりとかですね。

次にExpressをインストールします。

npm install express --save

--saveをつけるとpackage.jsonにexpressを使っていますという内容が追記されます。

プログラムを書く

サーバ側の処理、クライアント側の処理を分けて書いていきます。参考記事に沿って書いていくと、サーバサイドの処理というのは「画像を保存している場所を参照し、その画像をリスト化してIDをつける」部分を表しているようです。

逆にクライアント側の処理というのはサービスを使う側ができる操作の部分を表しますから、この場合「画像をIDによって検索し選択する」部分となります。で、サーバ側の処理とクライアント側の処理は「app.js」に書いていきます。もちろんデフォルトのファイル名なのでこの名前以外でもできます。

また、UI(ユーザインターフェース)の作り込みに関しても別に作っていく必要があります。これはwebサービスなので主にHTMLとかでいけます。他にもあるみたいですが。。。こちらは「views」ディレクトリ配下に「index.ejs」ファイルを作ることによって実装できます。もちろんデフォルトのディレクトリ名なのでこの名前以外でもできます。

以下写経。

f:id:frazz:20180413025245p:plain
app.js

f:id:frazz:20180413030113p:plain
index.ejs

詳しいコードの内容はちょっとまだ説明できないので元の記事を読んでもらえればと思います、ごめんなさい。

f:id:frazz:20180413030754p:plain

これらを実行してみたところ、とりあえず参考記事と同じような出力結果を得ることができました。3000番ポートを開けてnode app.jsで実行、ブラウザでhttp://localhost:3000にアクセスすると「New Project」が表示されます。この表示はhtmlで記述した「index.ejs」の内容です。F12キーでjavascriptコンソールを確認してみると、サーバの処理がクライアント側で呼び出されていることを確認できます。photo001,photo002といった画像ファイルの部分がリスト化されて読み込まれています。

おわりに

とりあえずNode.jsのさわりの部分である「クライアント、サーバ、UIを分けて実装する」といった空気感はこの参考記事でかなりつかめるのではないかと思います。写経しただけでは実際に画像を表示できるわけではないですが。。。

また、こうした「app.js」「index.ejs」などなどのワンセットは、「ミドルウェア」で生成することが可能です。同じ方が書かれている下の記事も、順番に読んでみると理解が深まると思います。

Express + Node.jsで基本を理解した次の一歩 - ディレクトリ構成をルーティング・ミドルウェアを理解して考えてみる - Qiita

ここから自分なりに少しずつ理解を深めて、まずはローカルで何かしら動くサービスを作れたらいいなと思います。

node.jsの最初のメモ

1年前にもnodeとかphpとかをやりたくてちょっとだけ書いたことはあるのですが、結局アイデア不足と「プログラミングのこころ」が理解できず挫折。Cだけやってても面白そうなものがすぐには出来そうにないので、ちょっとwebの勉強をします。ずっと前から言ってるのにいつになったら覚えられるのだろうか。。。なお本記事はqiitaを読んだだけの自分用のメモですので、より理解したい方は参照記事及び他サイトを参考にしてください。

node.jsとは

qiita.com

node.js

サーバサイドのjavascriptで、I/Oの処理結果を待たずに処理をするノンブロッキングI/O。

1万台問題っていう処理能力の問題があって、ノンブロッキングI/Oによってこれを解決できるらしい。ストレージの読み書きスピードはCPUやメモリに比べて非常に遅いので、ストレージに書き込めたかを待たずに処理を進める。書き込めたやつからコールバック関数を使って処理する。

キッカケの命令を出すことで動き始める(event driven)つまりクライアントがアクションを起こすことでサーバの中の待機中のプログラムが動き出す?

シングルスレッド

javascriptエンジン(これがなんだかわからない)がgoogle v8ってやつなので高速

アプリの特徴

小さい計算なら早い

メモリを食わない

ローカルとリモートのやり取りをシームレスに行うフレームワークがある

server,clientで処理の共通化ができる

リアルタイム性のあるアプリケーションにあう(常に何か監視し続けていて、的な?)

websocketを使うアプリに合っている

プラットフォームです

nodejsはフレームワークではなくjavascriptアプリケーションのプラットフォーム。フレームワークは開発をするとき便利だから再利用するやつ、プラットフォームは実行ができる環境のこと。言語そのものではない???

framework

Express,Backbone.js,Sails,Meteorなど

これを使えば0からじゃなく容易に開発できるってことですかね

用語

  • callback関数(非同期の処理が終わったら呼ばれるやつ)

  • CommonJS(共通化しようとしている規格)

  • libuv (libev,libeio)非同期I/Oライブラリ、イベントループライブラリ

  • DIRT: データインセンティブリアルタイム

  • npm: node package manager,モジュール管理

クライアントサイドjavascriptとの違い

んーー前に比べたら何を言ってるか理解できるようになった気もします。

インストール

自分のPCがCentOS7なのでこちらを参照します。

qiita.com

最新版をここから確認。

distributions/rpm at master · nodesource/distributions · GitHub

sudo yum install -y gcc-c++ make
curl -sL https://rpm.nodesource.com/setup_9.x | sudo bash -
sudo yum install -y nodejs

インストールできたかどうかバージョンを見て確認します。

f:id:frazz:20180412232722p:plain

これで準備ができました。次以降の記事でなんか作っていこうと思います。

node.jsの2つめのメモ - brand new note