This is default featured slide 1 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured slide 2 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured slide 3 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured slide 4 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured slide 5 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

2018年5月23日水曜日

Webブラウザの作り方

勉強の為に転載しました。
転載元はこちら

この記事は何?

ほとんどタイトル通りです。
順番に読み進めていけば簡単なWebページが表示できるレベルのWebブラウザを作ることができるように執筆していく予定です。
またアルゴリズムだけをなるべくわかり易く解説していきたいので、記事内で紹介するコードは誰でも読める程度の擬似コードです。
自分で実装したい方は、面倒かもしれませんがそれぞれの言語に翻訳してください。
必要な知識としては:
  • HTML/CSSが困らない程度に読める
  • やる気
これだけです。
(あとこれはただの宣伝ですが、個人的にWeb ブラウザを作ってるので(http://github.com/maekawatoshiki/naglfar) スターをつけてもらえると喜びます) 

いろいろとパースする

Webページは基本的にHTMLで書かれていますね。あとCSSも。
HTMLもCSSもそのままではただの文字列であって扱いづらいので、パーサを通してDOMノードを作りましょう。
コンパイラなどを作ったことがある方なら ただの字句解析器みたいなものか と思われるかもしれませんが、ここでは知らない人のためにちゃんと説明しようと思います。

HTMLのパース

たとえば以下のようなHTMLがあるとします。(以後、このサンプルを元に解説を進めます)
とりあえず一文字目から、一文字ずつ読み進めてみましょうか。現在^の位置にある文字<を読んでいます。
HTMLで<が見えたら、それはタグであるとすぐにわかりますね。
パーサもそのとおりに実装していきましょう。parse_nodesという関数にパース処理を任せます。
今読んでいる文字が<ならparse_element()にタグの処理を渡し、
<でなければ、それはテキストだということなのでparse_text()に処理を渡します。
またparse_(element|text)は処理した結果を返してくるでしょうから、それをnodesに追加していきます。
また当然ですが、parse_nodes内部のループは文字列の終端にたどり着くか、</に到達するまでの間継続します。
</に到達するまで」というのが現時点ではいまいちよくわからないと思いますが、後ほどということで。

要素のパース

parse_element()の中ではタグの名前やアトリビュート、要素の中身を解析していきますが、この記事では簡単にするためにタグの名前と要素の中身だけを処理することにします。したがって、<div>aaa</div>は扱えますが<div style=''>aaa</div>はダメだということです。
さて、<の次には何が来るのかというと、タグの名前ですね。
現在読んでいる文字を一つ飛ばしましょう。(ここからのコードはすべてparse_element()の中身です)
以下のように、^hを指すようになりました。
すると現在読んでいる文字はタグの名前の一文字目となります。タグは英文字が連続したものなので、英文字が続く限り読み進めていきます。
タグの名前が終われば>が来ます。飛ばしましょう。
タグをひとつ読み終えましたね。
ここからは要素の中身を読んでいきます。
まず、以下のようにparse_nodesを実行します。
そして、</を飛ばして、タグの名前を飛ばして、>を飛ばせばいいですね。
要素についての情報はすべて揃いました。あとは返せばparse_elementの中身は終わりです。
...
ちょっとついていけなくなった方もいると思います。
さきほど、「</に到達するまで」という条件の説明を後回しにしていましたが、それがここで重要になってきます。
上のHTMLでnodes = parse_nodes()とすると、parse_nodes<を見つけてparse_elementを呼んで<body>を読み始めます。
<body>を読み終わったparse_elementnodes = parse_nodes()を実行して、parse_nodesparse_textを呼んでhelloというテキストを読み込みます(テキストの処理は後ほど)。
テキストを読み終えると、</body>に到達しますよね? するとparse_nodes内のループで「</に到達するまで」という条件がtrueになってループを抜けます。そしてparse_element</body>を飛ばして、完成した要素を返します。
この説明じゃちゃんと伝わったのかよくわかりませんね(コメントいただけるとうれしい)。
つまり再帰的に動作するということです。関数がどう呼び出されるかを書き出してみると理解しやすくなるかと思います。

テキストのパース

テキストのパースは簡単です。テキストはタグ(要するに<XXX><という文字)に到達するまでの文字列だと言えるので:
となります。

ここまでのまとめ

ここまでで説明に使ったコードをまとめます。

少し発展

ここまでで説明したパーサだと、imgなどの閉じダグの必要ない要素を処理できませんが、
閉じタグの必要ない要素は定義されているので比較的簡単に対応できます。
処理したい場合 parse_elementを以下のようにします:
また今回作ったパーサだと空白文字を飛ばすことや、エラー時の処理などを完全に省いているので実用には耐えません。
興味を持った方はBlinkやServoなどの実装を読んでみることをおすすめします。

CSSのパース

この章は後で書きますが、
CSSの言語仕様は検索すればすぐに見つかるので、早く作りたい!という方は各自お願いします。

レンダーツリー

レンダーツリーは、スタイルの適応されたHTMLのノード、つまり視覚的な情報を持った矩形が表示される際と同じ正しい順番で並んだものです。
まずはHTMLのノードに、スタイルシートで指定した属性を適応させていきましょう。
.....

レイアウト計算

Block要素

Inline要素

画面への表示

... sorry, coming soon.

参考になりそうなサイト

ブラウザのしくみ 最新ウェブブラウザの内部構造: https://www.html5rocks.com/ja/tutorials/internals/howbrowserswork/#Parsing_general

2018年5月22日火曜日

自己スキル確認用メモ。

HTML5、CSS3、JavaScript、TypeScript、jQuery、Bootstrap、Python、Django、MySQL、MariaDB、MongoDBなど。

広告収入で無料のタクシーnommocノモック

検索結果は
こちら


2018年5月21日月曜日

さくらVPSにオープンソースCloud9を入れて、新規ワークスペースもHDDさえ許せば、-wオプションで無制限に作り放題で、無料で使用可能!

私の場合は、さくらVPSのCentOS7 64bitです。

/home/user/new/
userには、自分で決めた、該当の通常ユーザー名を入れて読み替えて下さい。
先に、newの様な新規フォルダを作成します。

node c9sdk/server.js -p 8080 --listen 0.0.0.0 -a id:pass -w /home/通常user/new/
idは、IDを。passはpassに該当するものをここで指定してBASIC認証とします。
idがkazeでpassがtaniなどでもOKです!
node c9sdk/server.js -p 8080 --listen 0.0.0.0 -a kaze:tani -w /home/user/new/
こんな感じです。

これで、AWS Cloud9で沢山ワークスぺースを作ってHDDをいっぱい使って沢山の有料の使用料金を取られていた方も、さくらVPSでSSDではなく、HDDのプランを選べば、
沢山のワークスペースを作っても、もう大丈夫です!皆さん良かったですね!

今は貧乏で生活困難ですが、そのうちまた働いて稼いだら、
固定IP対応のOCN系列のプロバイダーに乗り換えて、4K放送も将来そのケーブルで見る予定でいて、そこで自宅サーバーを立てて、Gitlabサーバーを立てて、REDMINEと連携し、
さらに、そこにも、オープンソースのClouid9をインストールして使用しようと計画中です。新PCは、AMDの8コア16スレッドTDP65WのRyzen7 2700で、CPUファンレス、
グラボファンレス、電源ファンレスと完全ファンレスPCで、CentOSかUbuntu OSを検討中です。


「千年に一度」の豪雨想定、京都府が浸水区域図公開

勉強の為に転載しました。
http://s.kyoto-np.jp/politics/article/20180513000110

京都府がこのほどまとめた府管理51河川の浸水区域図は、近年相次いだ豪雨災害を受けて「100年に1度程度」とした過去の想定よりも厳しい「千年に1度程度」といった条件を設定し、浸水が継続する時間と木造家屋が流される危険区域も新たに示した。対象の市町では避難の方法や場所の見直しを迫られる可能性があり、梅雨と台風の季節を前に水害対策の強化が急がれる。
 京都府が鴨川で設定した雨量は24時間で736ミリ。近年では昨年の台風21号により綾部市で523ミリを記録しており、国内では過去最大の24時間雨量は851ミリ(2011年、高知県)の例がある。「現実にあり得る数字」(府砂防課)という。
 浸水の深さが3メートルを超えると家屋の1階は水没するとされ、府は2階以上への緊急避難も呼び掛ける。ただ、鴨川の想定では2階部分も水没する深さ5メートル以上の区域が京都市南区に生じるなど、16年前の想定から浸水がさらに深くなっている地点も多い。氾濫による家屋の倒壊や流失が予想される区域も初めて明らかになり、府は「早期に立ち退き避難が必要な区域」の設定が必要としている。
 京都市は近く全戸配布する広報紙で、行政区別に府の想定図を掲載する。河川の氾濫と同時に発生する恐れがある土砂災害の警戒区域も示しており、「地域によっては避難経路の再確認が必要になる」(防災危機管理室)と対応を急ぐ。
 今回想定を公表したのは13市町・51河川で、まだ全体の約7分の1だ。西脇隆俊知事は先月の就任後、全河川の想定公表を急ぐように指示。府は今後5年間で作業を完了させる方針を決めた。国が管理している府南部の淀川水系4河川、北部の由良川水系では既に新たな浸水区域図が示されている。
 府は河川改修を進めているが、財源上の制約があり、府管理河川で時間50ミリの雨に耐えられるのは全体の36%にとどまる。氾濫が予想される地域の福祉施設で避難計画策定が遅れるなど、ソフト面でも課題が山積する。府と市町村は地域団体や民間事業者などと連携を強め、浸水想定図を効果的に使った取り組みが一層求められる。

Go言語のご紹介

Wikipediaより引用

Go (プログラミング言語)

Go
Go
Goのロゴ
パラダイムコンパイラ型言語、構造化プログラミング手続き型プログラミング命令型プログラミング並行計算、マルチパラダイムプログラミング ウィキデータを編集
登場時期2009年
開発者Googleロブ・パイクケン・トンプソン ウィキデータを編集
最新リリース1.10.1/ 2018年3月28日(43日前)[1]
型付け強い静的型付け
主な処理系GC、Gccgo
影響を受けた言語CPython、Oberon-2、Limbo、Active Oberon、Communicating Sequential ProcessesPascalOberon-2Smalltalk、Newsqueak、Modula-2 ウィキデータを編集
ウェブサイト
拡張子go ウィキデータを編集
テンプレートを表示
Goプログラミング言語のひとつ。Googleによって開発されており[2]、設計にロブ・パイクケン・トンプソンらが関わっている。
主な特徴として、軽量スレッディングのための機能、Pythonのような動的型付け言語のようなプログラミングの容易性、などがある。Go処理系としてはコンパイラのみが開発されている。マスコット・キャラクターはGopher(ホリネズミ)。
発表当初はLinuxMac OS Xのみしかサポートしていなかったが[3]、2012年3月にリリースされたバージョン1.0からはWindowsもサポートされている[4]。2014年12月にリリースされたバージョン1.4からAndroidをサポートし[5]、2015年8月19日にリリースされたバージョン1.5からiOSをサポートしている[6]。また、2011年5月10日に公開された Google App Engine 1.5.0 でも、Go言語がサポートされている[7]
ゴーファー君です。