去年 → HTML5 Conference 2016 行ってきたよ - やまろぐはてな
自分用まとめです。結構長くなった。
続きを読む
ガチ初心者でgitの操作をCUIで学ぶため、基本1人でmasterで作業するという「いやお前それGit管理じゃないだろそれ」という前提でやってもらます。いいんだよ細かいのはこれから学んでいけば。
作業前にリポジトリとかはどこかで作って置いたほうがよい(Github、Bitbucket、backlogなど)。
git clone https://xxxxxxxx/xxxx.git
※この時もしかしたらログインIDやパスワード聞かれるかもだが、気にせず入力してください
git add -A
git commit -m "commit message"
git push
git pull
右のはあくまでもそうした意味ではなく、イメージ。だいたいこれで足りる。自分は足りた。
cloneした後に「作業 → add → commit → push」を基本ローテーションとして作業。
必要に応じて他の初心者を入れて同様に作業させて、pullを理解してもらう。コンフリクト起こしたら、その時は都度修正、コミットなどしてくれ。
実際Gitは様々なコマンドがあったりフローが存在して、いわゆる「ちゃんと理解できたらちゃんと使える」代物とも言われてるので、使いこなすにはある程度知識や経験が伴う。
とはいえ自分がやってきた中では基本このイメージさえできていれば、後はそれに付随する肉付きをしていけばいいんじゃないかと思っている。
たとえば作業でpushまでしたけど実は違ったものが最新になっていたのでそれを直すというのがあった際に、上記コマンドであれば作業後に再びadd、commit、pushなどをする一連の流れがあるわけだが、そのままだと煩雑なコミットログになりかねない(別に慣れる間であれば気にしなくて良いのだが)
そのためにgit revertだったりresetだったりcheckoutというコマンドが調べて出てくるのだが、そうした時に学んでいけばいいんじゃないかとは思う。
あとGitは丁寧なので、たとえば新しくブランチを切って作業して何も考えずadd、commitしてpushすると「リモートにそんな追従ブランチねーよ」と教えてくれて以下のコマンドを提示してくれます。
git push --set-upstream origin branch
アメリカ語だけど頑張って訳せばそれなりにちゃんと教えてくれてるんだというのがわかる。なので極端に怖がらなくてよいのだ。
極端な言い方をさせてもらえば、やり方次第でなんとかなるのがGitである。
ウチではこうやってるよ的なのを募集しています。
自分のまとめです。
この内容の通りです。https://getstorybook.io/とかhttps://storybooks.io/は視覚的に確認できるのがめっちゃ便利だと思いました。
あと会場内でのReact体験者 - React業務経験者 = だいぶ少ない印象でした。
www.slideshare.net
コロプラの中の人。今回はサイトで使うWebGL(というかThree.js)の紹介。簡単なものから導入してみるのはよいことですね。
パフォーマンスを測る方法など。CPU側とGPU側でボトルネックになり得る箇所があるかもなのでそこを履き違えないようにという感じ。
CPU側(Javascript部分とか)は描画処理以外でもネックになりえている可能性があるので調査は割としやすいかもだけど、自分はGPU側はあまり知り得てないので使うときには軽く触れておくといいかもしれない。
あとThree.jsなどのライブラリには内部にWebGL命令が書かれているので最適化は難しいが、チューニングの仕方を知ったりやノウハウを集めていく(Stackoverflowとかで)やり方がよい。
Google Developer Relations所属。プレゼンというか間のとり方上手いなという印象だった。
Gmail、Android Gmail、Mobile Web Gmail 実はデザインはすべてバラバラ
Project kennedy - ユーザー体験を統一化しようプロジェクト 黒帯メニュー部分がプロジェクトの集大成
Holo フレームワークが登場 ↓ デスクトップとAndroidで違う…
Material Design誕生 異なるプラットフォームでアクセスしても平等なアクセスが出来る ↓ Googleサイト、アプリ以外にも様々なサードパーティでも利用できるように マルチデバイス・クロスブラウザ問題の解消をすすめる
アプリケーションコストを下げられるのではないだろうか?
デザインフレームワークに縛られてほしくない
コミュニティ(Slack) http://design-jp.herokuapp.com
デザインとコードの同時進行が最近の動き 「デザイナーはコード書くべき、ビジネスを知るべきだ!」ニーズ
Sympli
UI構築のスピードアップ
一定以上の品質担保
デザインの最小要素とは何か?
フォースプラットフォーム、すべてで同じ体験をする
例:MailChimp
デザイナー… 全体構成から詳細部分をつくる → 部品から作れない
エンジニア… パーツ単位から全体のサービス → 一貫性がないと二度手間
invision
スタイルガイドの作成など ← ただし必ずうまくいく訳ではない
ドメイン駆動設計 DDD(言葉のズレの解消)
ドメインモデルーーーーーユーザーの目的
オブジェクト指向UX
ユーザー像 → シナリオ → オブジェクト化
コンテンツモデル(例)
レビュー
いったいどういうコンテンツを設計しようとしているのか?
どの製品・サービスでもお客様に「仕事を与えられている」という考え
ユーザー属性は違う…でも同じ目的がある(20代女性、40代男性でも自分の写真を「知人に共有させたい」)
Facebookの写真機能は知人と一緒に見て楽しむ
ユーザーの動機、求められる結果を突き詰める
こんな機能はどうだ?こう使って欲しい
↓
ユーザーの求めている結果に対して詰めてゆく!
それでは皆さんには殺し合いをしていただきます #html5j_c pic.twitter.com/5GNYv9JDz9
— やまのく (@yamanoku) 2016年9月3日
Sublime Text派なんですが、推しの人がそこまで推しておらずいいかげんにしろって感じだよ(怒る)。WebStormは有料だからすごかった。
中島 滋 ledsun
ユーザー数 100万人 1500万ダウンロード
atom-beautify
hyperclick
1 マークダウンで書きたい
2 Railsアプリケーションの修正、slim記法をやるとき
3 html文章を組む時全角半角が混ざっている時
こもりまさあき
必要最低限の機能だけが搭載されたテキストエディタ
いまどきのGUIエディタの大本
何気にかゆいところに手が届くもの
今はいろんなエディタにも対応されているが…
今はいろんなエディタにも対応されているが…
すごいSublimeのプラグイン、笑
— .Hiroya◆9/3HTML5conf (@Soten_Bluesky) 2016年9月3日
#html5j_c pic.twitter.com/IF4OSpE475
山本裕介 @yusuke
WebStormすげぇ! #html5j #html5j_c pic.twitter.com/8NDtqQgbAk
— 山本 裕介 (@yusuke) 2016年9月3日
ルート起点でcode .で起動
terminal起動してコンパイラーを走らせられる
Nodeや.NET/ASP.NETほかウェブブラウザでの環境でもデバッグできる
Visual Studio Code Extensions | Visual Studio Marketplace
個人的なこととしてはプロスマブラーの人が来ていたり、@Stocker_jpの中の人が目の前の席に座っていたのですげーってなりました。
色々他にもセクションはあったと思うのでそこらへんのまとめは他の人にまかせる。というか普通にセッションスライドまとめとか公式で作って欲しい。
こちらからは以上になります。
社内ブログでまとめた内容をこっちでも書いてみる。ただ、フレームワーク使ったりしている中級者以上にはあんま参考にならないと思いますが基本編みたいなノリで御覧ください。
すぐできる対策であり、割と効果的なものがエスケープ処理です。これは問題を起こしうる特殊文字を文字参照に変換して、実行させないようにする処理です。対応する特殊文字は「&」「<」「>」「”」「’」の5つです。
function escapeHTML(str) { str = str.replace(/&/g, '&'); str = str.replace(/</g, '<'); str = str.replace(/>/g, '>'); str = str.replace(/"/g, '"'); str = str.replace(/'/g, '''); return str; }
ちなみにES6であればテンプレートリテラル(=Template strings)を使用して下記処理もできます。
function escapeHTML() { var raw = String.raw.apply(null, arguments) var safe = raw.replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"').replace(/'/g, '''); return safe } var input = "<img src=# onerror=alert(1)>"; var html = escapeHTML`<div>${userinput}</div>`;
テンプレートリテラルの使い方は「`」(バッククオート)で囲むだけです。
URLを取り出し、それをデータとして扱う際に気をつけたいことは、javascriptスキームなど複数のスキームを介在させないために、リンク先がhttp://かhttps://なのかを判断して挿入するようにすることです。
var url = decodeURIComponent(location.href); if( url.match( /^https?:\/\// ) ){ var elm = document.getElementById("link"); elm.setAttribute("href" url); }
javascriptスキームはいわゆるブックマークに登録して便利な機能として使うというのが一般的ですが、それをXSSとして使用されるのを防ぐための策であります。
JSONPはクロスドメイン、つまり同一のドメインのデータでなくても引っ張ってこれるもので便利なものではありますが、同時に他者が仕組んだ悪意のあるJSONPデータも入り込む可能性があります。
JSONPをまったく使用するな、ということではないのですが使用する際は信頼のあるデータであることを証明した上で使用するのが吉です。
そしてJSONほか外部データを使用する際は必ず JSON.parse関数 を使用してください。これは文字列を JSON として解析するためのものなので、eval関数だとJSONの中に実行文が紛れていると実行されてしまう恐れがありますので意識して使いましょう。
主に下記のソースになります。これは上述したエスケープ処理がない場合、確実にXSSの標的になり得ますし、この部分を使って悪用されるおそれがあるかもしれないからです。
element.innerHTML = “…”; element.outerHTML = “…”; document.write(…); document.writeln(…);
jQueryはjsライブラリの1つですが、煩雑なコードを容易に記述しやすくして、デザイナーさんにも扱える簡単なもので今も制作会社で広く使用されていると思われます。
実はjQueryでもXSS対策はできるものがあり、それは text() です。受け取る値をテキストデータにエスケープしてくれる代物なのでinputでの入力を即出力するものには適しています。
$('input').on('keyup', function(e){ $('.hoge').text($(this).val()); });
しかしながら、jQuery自身の長所でもあり弱点としても見られる「DOMの直接操作」部分が割とネックとなってきています。つまりDOM操作によるXSSの介入が起こりうる可能性があるのです。
以前のver.1.6では $(location.hash) の脆弱性が指摘されており、要素の検索や作成などを引数の文字列で判断するため、$()内でスクリプトを記載すると#idで指定したものがそのまま要素として判断されることがありました(ver1.6.3にて修正済み)
http://my-web-app/#<img onerror="alert(1)" src="xxx"> $('#<img onerror="alert(1)" src="xxx">') //ハッシュ値で判断すると左の値で取得する //<img>タグで処理されるようになってしまう。
jQuery自身もver3.0の更新(2016年5月)があったように、日々使いやすくかつ脆弱性を潰してきて、簡単な装飾程度であれば使用する面では問題無いかもですが、セキュリティ面を考えた上でwebサイト・アプリに使い続けるというのは難しい選択のようにも思えます。
なのでjQueryのみに頼り続けるのは危ないかも、というのを念頭に置いておくと良いかもしません。(※使用をやめろ!と固く禁じる訳ではないです)
こちらからは以上です。つまりReact.jsについてちゃんとやれということでした。