素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: すかいぷ:javascripter_  か javascripter あっと tsukkun.net skypeのほうがいいです

英文法の話パート3、which,thatの使い方についてなど

パート1: 英文法の話、時勢と動詞のニュアンスについてなど - 素人がプログラミングを勉強していたブログ パート2: 英文法の話パート2、to doとsomething to doの見分け方と使い方についてなど - 素人がプログラミングを勉強していたブログ 質問者 The rumor…

英文法の話パート2、to doとsomething to doの見分け方と使い方についてなど

パート1: 英文法の話、時勢と動詞のニュアンスについてなど - 素人がプログラミングを勉強していたブログ パート3: 英文法の話パート3、which,thatの使い方についてなど - 素人がプログラミングを勉強していたブログ 質問者 I should have taken some medici…

英文法の話、時勢と動詞のニュアンスについてなど

忙しくてブログを全然更新していなかったが、最近、友達に英文法を教えているので、 役に立つかもしれないのでログを載せておく。 パート2: 英文法の話パート2、to doとsomething to doの見分け方と使い方についてなど - 素人がプログラミングを勉強していた…

一つのファイルでサーバーとHTMLファイルとコードを共有するやつ

ちょっと説明がし難いがindex.htmlというファイルがあったとして、ファイルプロトコル経由で file://path/index.html などのように直接ブラウザで起動すると、プロトコルの関係でファイルが読み込めなかったり、エラーになったりすることがよくある。サーバ…

DBにおけるウェブシステムのアカウントの権限管理とセキュリティについて

下記にセキュリティに関する追記あり。読了後、そちらもチェックしてください ユーザーと管理者アカウントがあるウェブサイトで、管理者がユーザーのパスワードをリセットできたりといった風に、アカウントによって権限が違う場合のセキュリティについての考…

計算量とBig-O記法

プログラマであればアルゴリズムに関する話で、O(n)だとかO(log n)だとか、O(n2)だとか、そういった記号を目にすることはよくあると思う。 なんとなく、log n < n < n2の順に計算量が増加していくとかそういうことも知っていると思うが、計算量の増加とは何…

promiseを順番に実行する

JavaScript の Promise を返す関数を直列で実行したいので Pinscher というライブラリを作ってみた。 - (define -ayalog '())について。 例えば、非同期に実行されるPromise p1, p2, p3があったとしてcallbackをp1, p2, p3の順番に実行したい場合、reduceが…

ES6のclassは巻き上げがされない

ちょっとハマったのでメモ。 例えば alert(A); function A() { } はできるが、 alert(A); class A { } ができないのはなぜか。 class A { } class B extends A { } 例えば、このようなコードの場合、hoisting(スコープ先端への巻き上げ)をしても問題ないが…

io.jsとES6とトランスパイラまわりの現状

最近いろいろな環境でES6まわりの環境が整いはじめたので、使っていくために下調べしておこうと思う。 ES6の実装状況であるが、ECMAScript 6 compatibility tableにまとめが載っている。 例えば、io.js (nodeのfork)のES6実装状況。stableなES6 featuresが元…

JSライブラリ/フレームワークの良い、悪いメモ

※ただのメモで、未来志向なのであまり真に受けてはいけない。 良いっぽい React.js 早速い/コンポネント志向/APIの設計がいい。JSXと他のトランスパイラの組み合わせという問題はある Promise ネイティブに入った、誰もが使ってる TypeScript ES6時代でも存…

Get mouse coordinates on Yosemite using JavaScript Automation(ターミナルからマウス座標をゲットする)

英語で調べたけどぜんぜん出てこないので英語で書く。Yosemiteでターミナルからマウス座標をゲットするコマンドはこれ。 osascript -l JavaScript -e "ObjC.import('Cocoa');console.log(JSON.stringify($.CGEventGetLocation($.CGEventCreate(null))))" In …

array.indexOf(value) >= 0で要素が含まれてるか検索すると失敗する場合がある

indexOf(val) >= 0の話 配列に要素が含まれているかのチェックに [1, 2, 3].indexOf(2) >= 0; // true のようなコードを使っている場面を極めて頻繁に(それ以外を使っているのを見ることは稀なくらい)見るが、 function contains(a, v) { return a.indexOf…

scrollイベントが呼ばれすぎることへの対処

onscrollを監視していると大量にeventが来てパフォーマンスが劣化するというのはよく聞く話で、 underscore.jsなどでイベントをthrottleやdebounceさせて対処していることが多い。 ただ、scrollに応じてスタイルを変更させたりする場合は、0.1秒くらい遅れが…

forも明示的な加算も使わずに「1から100まで出力する」

1から100までforを使わずに、さらに明示的な加算も使わずに表示するもの、自分で思いついたバージョンを書いておく。非同期である。 var INTERVAL = 1000; var d = Date.now(); var tid = setInterval(function () { var n = (Date.now() - d) / INTERVAL | …

FacebookのReactで綺麗で高速なDOMのView操作

それほど新しい話題でもないが、FacebookがReact | A JavaScript library for building user interfacesというDOMを抽象化したようなView操作のライブラリをリリースした。 Githubが出してるエディタのAtomが実験的にReactを採用したり、Instagramが採用して…

setTimeout, setIntervalを乗っ取って爆速にする

setTimeout() vs ハッカー、仁義なき戦いによると function isNativeFunction(func, name) { for (var o in func) { if (o === "toString") return false; } var match = func.toString().match(/^function (\S+)\(\)\s*{\s*\[native code\]\s*}$/); return …

はてなにログインしてると人のブログを見ただけでユーザー名がバレる

11 August 2014: はてなのサポートから連絡がきた。 いつもはてなをご利用いただきありがとうございます。 ご指摘いただきました件につきまして、ただいま対応を検討しております。 第三者に悪用される可能性もございますので、 もし、脆弱性を確認された場…

Project Parfaitで尋常じゃない速さでpsdファイルからウェブサイトを組み立てる

Project Parfaitとは、adobeが開発してるβ版の、ウェブサイト作成支援のサービス。これを使うと、.psdのデザインファイルからHTMLを書き起こすのが異常に高速になるので、オススメしておこうと思う。 具体的には、psdファイルをアップロードすると、psdファ…

複数の独自ドメインをGithub Pagesで運用する方法&.tokyoドメインをとった

昨日、.tokyoドメインの一般登録が始まったので、ムームードメインでprogrammers.tokyoを取得した。 用途を考えずに取ったので、何か使い道を思いつくまでは仮のindex.htmlでも置いておこうと思い、でもそのためにわざわざ月額払うのももったいないので、Git…

ボキャブラリを増やすのに効果的な英単語解剖プロセス

解剖というほど大それたものではないのだが、最近、新規に英単語を覚えてボキャブラリを増す努力を始めた。 一押しの本 「日本人だけが知らない難解英単語: 阿部, 山村 啓人」という本を使っているのだが、これが予想以上に覚えやすくて、このレベルの英単語…

オープンリダイレクタ脆弱性に気をつける

たまたま通販サイトを見ていたらログインページに脆弱性を発見したので、書いておく。 下記サイトのサポート部門から、システム部門に問い合わせて早急に調査するとの連絡があった。 16 June 2014: 脆弱性を確認したので今日か明日中に修正し修正が終わった…

カタカナ英語の脱却に相手の唇を見ることが有効

タイトルで説明しきった感じがあるが、英語の発音の覚え方とリスニング力の鍛え方について、自分の考えを書いていこうと思う。 ネイティブは英語をリスニングしているのか? ネイティブは、耳だけを頼りに英語を聞いているわけではないということを知ってい…

nodeとstream周り、ジェネレータ、非同期処理

最近調べたnode.jsのstreamに関連した雑多な内容を、思いつくままに適当に書く。 例えば、 function* createPiGenerator() { var result = 0; for (var i = 1;; i += 4) { yield result * 4; result += 1/i - 1/(i + 2); } } こんな感じのジェネレータがあっ…

Web Inspector/Chromeのデバッガで動画を再生する

普段、Web Inspectorはデバッガとして使っていると思うが、Web Inspectorは実は様々な物を表示できる。 例えば、コンソールでライフゲームを表示することができる。 Web Inspector Life Gameに、コードを置いた。タイミングによっては上手く動かないので、コ…

古本をAmazonで買ってスキャンサービスに送ってiPadで読む

海外に住んでいると、日本語の本を入手することの難しさもあって日本語の本を全く読まなくなってしまう。海外の書籍はお店やネット通販で気軽に買えるし、英語圏の電子書籍は日本の電子書籍と比べて品揃えが格段に良いからだ。 英語の本ばかり読むことになる…

Capy CAPTCHAは一瞬で突破できる

Capy CAPTCHA 早速、実証コードが(CAPY IS A VERY READABLE CAPTCHA)出たようだ。このように一瞬で突破されてしまい意味がない。 さきほどインターネットを見ていたらスパム防止用の「読みづらい画像認証」に、日本人が終止符を打った技術が斬新過ぎる!経由…

ルーターの脆弱性を探して侵入する手順

更新し忘れたが、既に下記の脆弱性は修正されている 4/11/2013 6:42 PM 追記: 明日エンジニアと調査するとカスタマーサポートから連絡があり、また近日アップデートパッチを用意するとのことだ。 先日紹介した、Satechi Smart Travel Routerだが、ふと直感的…

モナドについて考えた記録

Promiseってなんとなくモナドっぽいなと思って、ジェネレータ使ってHaskellのdoを再現できないかなあというのがはじまり。結論からいうと、できない。 そもそもPromiseがモナドであるかを考える。 return :: Monad m => a -> m a 値を受け取ってfulfilledさ…

持ち運び出来る小型トラベル用ルーターがすごく便利

Pocket Wifiの話ではなく、電源を使うタイプの、Airport Expressのようなタイプの小型ルーターの話である。 先日、Satechi Smart Travel Routerという、持ち運びできる小型ルータを購入したら予想よりも大幅に便利だったので、紹介しようと思う。 まず、これ…

MutationObserverを使った高速setImmediate/nextTick

MessageChannel / setTimeout / requestAnimationFrame / postMessageを使ったものより異様に速い。 というのも、setTimeout等は、次のサイクル(すなわちnextTick)の開始時に実行する関数を登録し、DOMや画面の更新後に実行されるのだが、 MutationObserve…

オンラインエディタのIME対応などのメモ

世の中に存在するオンラインエディタうち、textareaを直接使っていないものの大半が、適切にIME処理を出来ていない。IME周りの処理は厄介なので、とりあえずどういう感じなのかを調べた結果をメモしておく。後で直したい。 オンラインエディタの仕組み オン…

成人しました

ついに20歳になりました。自分が20代に突入したんだと思うと、なんだかとても奇妙な感じがします。自分が小さい頃は、自分と親の見た目や知識、経験などの差があまりに圧倒的で、子供と大人の差なんて当たり前すぎて、疑問にすら思いませんでした。そして、…

node-webkitでNode.jsをいろんなことに使う

node-webkitとは node-webkit wiki 日本ではあまりnode-webkitは知名度が高くないが、簡単に言うとIntelが開発に関わっている、nodeとWebKitを統合し、DOMコンテキスト上でnode.jsの機能を使えるようにするソフトウェア。一言でいうと言うと、ウェブでnode.j…

なぜ文法は暗記ではないのか、効率的な英文法の覚え方

英文法がただの暗記に思えるのだとしたら、おそらく文法の学習方法が間違っている。 単に「覚えろ」と学校では言われがちな文法にも背景となるロジックがあり、個々の文法が学年や章ごとに分かれているわけではなく繋がっているものだ、ということをここで例…

Web系がモバイルアプリ開発を覚えるまで

昨年末あたりからモバイルアプリ(iPhone, Android)の開発をやっていて、新しい言語とかSDKを一気にいろいろと覚えた。Web開発ばかりやっていてスマホアプリは未体験だったので、今日はスマホアプリ開発について雑感をいろいろ書く。 Titanium Mobile 独自のS…

Google Chromeに入ったジェネレータとPromiseで非同期処理に革命が起きた

Google Chrome Canary(正確にはV8)に、ついにGenerators(yield)が入った。これを上手に使うと、エラー処理を含む非同期コードを同期的に書くことができるようになり、見通しが極めて良くなるので、ここで紹介する。 ここで紹介するものはいずれNode.jsで…

LinuxをUSBメモリブートしようとおもって間違えてMBRを上書きした場合

Windows8マシン上で作業をしているとやはりLinux環境が欲しくなることが多く、Windows自体は消したくないのでLinux MintをUSBメモリに入れてデュアルブートしようと思った。 そうしたら失敗して何故かMBRが書き換えられてしまい、元から入っていたUEFIが消え…

nextTick、setTimeout(fn, 0)の代わり

setTimeout(fn, 0)より高速な関数は最近はこんな感じのを使うといいと思う。 var nextTick; if (typeof setImmediate === 'function') { nextTick = setImmediate; } else if (typeof process === 'object' && typeof process.nextTick === 'function') { ne…

Promises/Deferredsを使うとき

現状ではPromiseを生成する手段がライブラリによって異なるので、統一されたインターフェースを作ってそれを使うようにするとライブラリを自由に変更できて非常に便利である。 今のところ自分が考えた中で一番最大公約数的かつ便利な関数はこんなかんじ。 /*…

僕とRackhubの15日間戦争(Rackhub試してみたメモ)

遠い昔に知人の自宅サーバを間借りしてサイトを作っていたのだがいつの間にオフラインになったのでMacBookで開発をしていたのだが、他人に何かを見せるときはURLがあると良いということで、VPSを借りることにした。 従量課金は不安だし、結局は遊びにしか使…

文字コードとXSS

またXSSか、という感じではあるが、今日は文字コードに関連するXSSを紹介する。 エキサイトを例にとって説明する。エキサイトウェブ検索の&target=パラメータは、文字列を動的に埋め込んでいる。 例えば、 http://www.excite.co.jp/search.gw?search=1&targe…

GPS2点間距離を使用した住所特定の脆弱性

先日、非常に珍しい、GPSつかったチャットの脆弱性を発見したので、ここに注意もかねて書いておく。 簡単に言うと、WebSocketに生で自分でGPS座標を送り、相手との距離差を何度でも取得できる脆弱性で、離れてる、近いくらいしか分からないことを前提にGPS使…

Deferred/Promisesと非同期処理

概念/仕組み Deferred/Promisesは非同期処理を簡単にするための取り決め。 callback hellと呼ばれているような、非同期処理によるコールバックのネストを軽減することができて非常に便利。 慣れれば便利だが、一見どう使えばいいのか分かりづらいので、少し…

MacBook Retinaディスプレイでウェブページを小さくしないユーザーCSS

下記のCSSをユーザCSSとして登録してすべてのウェブページに適用しておくと、QuickResなどのアプリでMacBookのRetinaモデルで画面をドットバイドットにした時に自動的にウェブページが拡大されるようになり、インターネットが快適になる。 html { zoom: 150%…

markdown

はてなブログがmarkdownに対応したようなので、テスト。はてなブログの時代来たかもしれない。でもシンタックスハイライトが使えない? ruby require 'redcarpet' markdown = Redcarpet.new("Hello World!") puts markdown.to_html ```javascript var square…

動画までスクロールする

こういうのをブックマークレットに入れておくと便利なんじゃないでしょうか。 javascript: var _vindex = _vindex || 0; var vall = document.querySelectorAll('iframe[src^="http://flashservice.xvideos.com/embedframe/"]'); if (vall.length) { vall[_v…

料理、続き

最近研究中の、高速料理。電気ケトルと電子レンジとフードコンテナがあれば数分で食べれる状態に持っていける。一つ目。流ししゃぶしゃぶ。 しゃぶしゃぶ用の冷凍肉を買ってくる。 電気ケトルの電源を入れる。 食べる量の肉を手でちぎる。 おはしで肉をつか…

料理

オーストラリアにもどってきた。 最近、レンジでパスタという容器とフードコンテナ(口の広い魔法瓶)という容器を買ったので、料理が楽になった。もはや料理ではないが。 最近はだいたいパスタを食べていて、レンジでパスタを使えばパスタと水をいれてレン…

耳でキーボードのバックライトを聞き分ける

来週末に日本に一週間だけ帰国することにした。久しぶりの東京の夏。秋葉原とかに行きたい。 本題。高周波に敏感らしくて、MacBook Airのキーボードバックライトを点灯したときにジーという高音が聞こえる。バックライトを0にすると消えて、1以上だと同じジ…

最近の発見

流行の音楽が聴きたくなったら、iTunesのダウンロードランキングに行くと良いと思う。サビを認識できればその曲を知ってると言える[要出典]から、iTunesでサビを2〜3回くらい試聴すれば、トータルでだいたい30分で流行の最先端にたどり着ける。歌詞とかプレ…