<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Development &#8211; Like@Lunatic</title>
	<atom:link href="/category/development/feed" rel="self" type="application/rss+xml" />
	<link>/</link>
	<description>Naoki Sekiguchi&#039;s personal Web site.</description>
	<lastBuildDate>Wed, 01 Jan 2025 10:13:52 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.4.5</generator>

<image>
	<url>/wp-content/uploads/2021/01/cropped-og-32x32.png</url>
	<title>Development &#8211; Like@Lunatic</title>
	<link>/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>M1 Mac について調べたことあれこれ</title>
		<link>/2020/11/m1-mac</link>
		
		<dc:creator><![CDATA[Naoki Sekiguchi]]></dc:creator>
		<pubDate>Sun, 22 Nov 2020 07:35:08 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Mac]]></category>
		<guid isPermaLink="false">/?p=1452</guid>

					<description><![CDATA[この3連休にゆっくり情報収集していたら、M1 Mac がとても欲しくなってしまった。買うなら今使ってる MacBook Pro 13-inch の同モデルへの買い替えかな。 とはいえ Homebrew 動かないとか、そういった情報もあり、開発用に簡単に使うには少しハードルがまだある模様。Rosetta 2 を使えばなんとかなるのかな？とも思うけど使用感がわからない。現状そこまで困っていないので、しばらく様子見。 M1 と Apple Silicon について Apple は Aシリーズと名付けた自社製 Soc（Apple Silicon）を iPhone、iPad、Apple Watch、Apple TV などに搭載してきた。Aシリーズを Mac 向けに強化したのが M1。 SoC は「System on a chip」の略で、CPU、GPU、メモリなどの集積回路を1つのパッケージで実現したチップ。モバイルなどの小さなデバイスは大体このチップを使って作られている。 ARM はコアのアーキテクチャの一種で、それを使って各社 SoC を実装しており、Apple Silicon もこのアーキテクチャを採用している。 M1 は 5nm プロセスを採用した初の PC 向けチップで、160 億個のトランジスタを搭載。 M1 Mac について すべて Big Sur (macOS 11) 搭載。 MacBook Air はファンレスでタッチバーなし。MacBook Pro はファンありの冷却システムを持つ分ピーク性能が上。 アプリについて Intel プロセッサ向けバイナリと Apple Silicon 向けバイナリを1つのパッケージでまとめた「Universal Apps」と、Intel プロセッサ向けバイナリを M1 Mac で動作させる「Rosetta 2」を提供。 iOS 向けのアプリが、M1 Mac では直接動作するようになる。 References Apple Silicon搭載MacBook AirとMacBook Pro、Mac miniの違いは？　比較まとめ &#40;1/4&#41; &#45; ITmedia NEWS 初のApple Siliconとなる「M1」チップが登場、5nmプロセスで製造された世界最速のCPU搭載 &#45; GIGAZINE Apple Silicon「M1」搭載Mac登場　MacBook Air、Mac mini、MacBook Proの3機種 &#45; ITmedia NEWS System&#45;on&#45;a&#45;chip &#45; Wikipedia Rebuild: 288: Unidentified Mysterious Animal &#40;hak&#41; 「ARM」という単語の意味を啓蒙する記事 &#45; &#8230; <a href="/2020/11/m1-mac">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p>この3連休にゆっくり情報収集していたら、M1 Mac がとても欲しくなってしまった。買うなら今使ってる MacBook Pro 13-inch の同モデルへの買い替えかな。</p>

<p>とはいえ Homebrew 動かないとか、そういった情報もあり、開発用に簡単に使うには少しハードルがまだある模様。Rosetta 2 を使えばなんとかなるのかな？とも思うけど使用感がわからない。現状そこまで困っていないので、しばらく様子見。</p>

<h2>M1 と Apple Silicon について</h2>

<ul>
<li>Apple は Aシリーズと名付けた自社製 Soc（Apple Silicon）を iPhone、iPad、Apple Watch、Apple TV などに搭載してきた。Aシリーズを Mac 向けに強化したのが M1。</li>
<li>SoC は「System on a chip」の略で、CPU、GPU、メモリなどの集積回路を1つのパッケージで実現したチップ。モバイルなどの小さなデバイスは大体このチップを使って作られている。</li>
<li>ARM はコアのアーキテクチャの一種で、それを使って各社 SoC を実装しており、Apple Silicon もこのアーキテクチャを採用している。</li>
<li>M1 は 5nm プロセスを採用した初の PC 向けチップで、160 億個のトランジスタを搭載。</li>
</ul>

<h2>M1 Mac について</h2>

<ul>
<li>すべて Big Sur (macOS 11) 搭載。</li>
<li>MacBook Air はファンレスでタッチバーなし。MacBook Pro はファンありの冷却システムを持つ分ピーク性能が上。</li>
</ul>

<h2>アプリについて</h2>

<ul>
<li>Intel プロセッサ向けバイナリと Apple Silicon 向けバイナリを1つのパッケージでまとめた「Universal Apps」と、Intel プロセッサ向けバイナリを M1 Mac で動作させる「Rosetta 2」を提供。</li>
<li>iOS 向けのアプリが、M1 Mac では直接動作するようになる。</li>
</ul>

<h2>References</h2>

<ul>
<li><a href="https://www.itmedia.co.jp/news/articles/2011/11/news070.html">Apple Silicon搭載MacBook AirとMacBook Pro、Mac miniの違いは？　比較まとめ &#40;1/4&#41; &#45; ITmedia NEWS</a></li>
<li><a href="https://gigazine.net/news/20201111-apple-silicon-m1/">初のApple Siliconとなる「M1」チップが登場、5nmプロセスで製造された世界最速のCPU搭載 &#45; GIGAZINE</a></li>
<li><a href="https://www.itmedia.co.jp/news/articles/2011/11/news066.html">Apple Silicon「M1」搭載Mac登場　MacBook Air、Mac mini、MacBook Proの3機種 &#45; ITmedia NEWS</a></li>
<li><a href="https://ja.wikipedia.org/wiki/System-on-a-chip">System&#45;on&#45;a&#45;chip &#45; Wikipedia</a></li>
<li><a href="https://rebuild.fm/288/">Rebuild: 288: Unidentified Mysterious Animal &#40;hak&#41;</a></li>
<li><a href="https://essay.zopfco.de/entry/2020/11/21/232504">「ARM」という単語の意味を啓蒙する記事 &#45; Zopfcode Essay</a></li>
<li><a href="https://qiita.com/shibukawa/items/797b7cbb7e530842e6f7">M1 Macの開発環境 &#45; Qiita</a></li>
</ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PHP FPM のチューニング</title>
		<link>/2017/04/php-fpm</link>
		
		<dc:creator><![CDATA[seckie]]></dc:creator>
		<pubDate>Thu, 20 Apr 2017 08:54:22 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">/?p=1229</guid>

					<description><![CDATA[Nginx + WordPress でサイト運用する場合、PHP FPM のチューニングが必要になる場合がある <a href="/2017/04/php-fpm">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p>このサイトはNginx + WordPress で運用しているだが、設置当初はサイトが重くて仕方なかった。<br />
<code>top</code> コマンドで状況を調べてみるとメモリを使い切っていたので、途方に暮れて解決策をググったところ、以下の記事を発見。
有用な記事をありがとうございました。</p>

<p><a href="http://www.crystalsnowman.com/?p=1309">CentOS php&#45;fpmの設定を変更してメモリ消費を減らした方法 &#124; CrystalSnowman&#46;com</a></p>

<p>サーバーはさくらのVPS (Cent OS 6、メモリ 1GB) なので、この記事とまさに同じ状況らしい。
これを参考に PHP FPM の設定 (<code>/etc/php-fpm.d/www.conf</code>) を以下のように変更し、現状運用中。</p>

<pre><code>pm = dynamic
pm.max_children = 10 ; default 50
pm.start_servers = 5
pm.min_spare_servers = 2 ; default 5
pm.max_spare_servers = 6 ; default 35
</code></pre>

<p>設定変更前と比較にならないくらい軽く（というか普通に）なった。ここのようにアクセス数の少ないサイトはこういった設定で問題ないらしい。</p>

<p>PHP FPM はデフォルトで最大50ものプロセスを立ち上げようとするということは、比較的ハイスペックな環境を想定して設計されているのだろうか。果たして。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>[React.js] setStateしても直ちにstateは変更されない</title>
		<link>/2015/07/reactjs-setstate</link>
		
		<dc:creator><![CDATA[Naoki Sekiguchi]]></dc:creator>
		<pubDate>Wed, 08 Jul 2015 13:48:53 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[React]]></category>
		<guid isPermaLink="false">/?p=1175</guid>

					<description><![CDATA[最近仕事でReactをやっている。 今回のネタはひとこと（ひとコード？）で言うと以下のようなこと。 getInitialState () { return { clicked: false }; }, clickHandler () { this.setState({ clicked: true }); console.log(this.state.clicked); // -&#62; false }, render () { console.log(this.state.clicked); // -&#62; true return &#60;button onClick={this.clickHandler}&#62;Click Me&#60;/button&#62;; } インタラクションのハンドラで this.setState したとして、そのハンドラ内でthis.state を参照しても、まだ更新後の値は取れない。render() が呼ばれるタイミングでは更新後の値になっている。実際にステートが更新されるタイミングは意図的に制御されているらしい。トリッキーだ。 更新後の値は変数に入れておいて this.setState しつつ、ハンドラ内ではその変数の値を使うのがおそらく正解だろう。 getInitialState () { return { clicked: false }; }, clickHandler () { var value = true; this.setState({ clicked: value }); console.log(value); // -&#62; true }, render () { console.log(this.state.clicked); // -&#62; true return &#60;button onClick={this.clickHandler}&#62;Click Me&#60;/button&#62;; }]]></description>
										<content:encoded><![CDATA[<p>最近仕事で<a href="https://facebook.github.io/react/">React</a>をやっている。<br />
今回のネタはひとこと（ひとコード？）で言うと以下のようなこと。</p>

<pre><code>getInitialState () {
  return { clicked: false };
},
clickHandler () {
  this.setState({ clicked: true });
  console.log(this.state.clicked); // -&gt; false
},
render () {
  console.log(this.state.clicked); // -&gt; true
  return &lt;button onClick={this.clickHandler}&gt;Click Me&lt;/button&gt;;
}
</code></pre>

<p>インタラクションのハンドラで <code>this.setState</code> したとして、そのハンドラ内で<code>this.state</code> を参照しても、まだ更新後の値は取れない。<code>render()</code> が呼ばれるタイミングでは更新後の値になっている。実際にステートが更新されるタイミングは意図的に制御されているらしい。トリッキーだ。</p>

<p>更新後の値は変数に入れておいて <code>this.setState</code> しつつ、ハンドラ内ではその変数の値を使うのがおそらく正解だろう。</p>

<pre><code>getInitialState () {
  return { clicked: false };
},
clickHandler () {
  var value = true;
  this.setState({ clicked: value });
  console.log(value); // -&gt; true
},
render () {
  console.log(this.state.clicked); // -&gt; true
  return &lt;button onClick={this.clickHandler}&gt;Click Me&lt;/button&gt;;
}
</code></pre>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Chrome 43 からは DOM attribute が prototype プロパティに変更される</title>
		<link>/2015/04/dom-attribute-now-on-the-prototype</link>
		
		<dc:creator><![CDATA[Naoki Sekiguchi]]></dc:creator>
		<pubDate>Sun, 19 Apr 2015 08:45:10 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[JavaScript]]></category>
		<guid isPermaLink="false">/?p=1143</guid>

					<description><![CDATA[DOM Attributes now on the prototype chain それによって… hasOwnProperty()/getOwnPropertyDescriptor()/JSON.stringify() で、DOM attribute が検出できなくなる read-only な DOM attribute を上書きしようとすると例外を投げるようになる だそうな。 他人が作ったフレームワークは特に、それで動かなくなったりするものも出てくるかもしれないので頭の片隅に置いておくとよい。]]></description>
										<content:encoded><![CDATA[<p><a href="http://updates.html5rocks.com/2015/04/DOM-attributes-now-on-the-prototype" title="DOM Attributes now on the prototype chain">DOM Attributes now on the prototype chain</a></p>

<p>それによって…</p>

<ul>
<li>hasOwnProperty()/getOwnPropertyDescriptor()/JSON.stringify() で、DOM attribute が検出できなくなる</li>
<li>read-only な DOM attribute を上書きしようとすると例外を投げるようになる</li>
</ul>

<p>だそうな。<br />
他人が作ったフレームワークは特に、それで動かなくなったりするものも出てくるかもしれないので頭の片隅に置いておくとよい。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Maxのドキュメントを読む その2(Javascript in Max 02 – Basic Techniques)</title>
		<link>/2014/09/jsinmax02</link>
		
		<dc:creator><![CDATA[Naoki Sekiguchi]]></dc:creator>
		<pubDate>Thu, 11 Sep 2014 07:41:19 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Max]]></category>
		<guid isPermaLink="false">/?p=1240</guid>

					<description><![CDATA[JavaScript in Max ドキュメントの日本語備忘録的なエントリー第2弾。 Global Methods Document 以下のメソッドはグローバルコンテキストにあり、どこでも使うことができる。 messnamed (Max object name, message name, any arguments) Document グローバルシンボルに紐付けてネーミングされた Max オブジェクトにメッセージを送る。例えば receive オブジェクトなど。 以下の例は &#8220;jsmessage&#8221; と名付けられたオブジェクトに &#8220;hogehoge&#8221; とメッセージを送る例である。 Test Code function loadbang () { messnamed("jsmessage", "hogehoge"); } cpost (any arguments) Document コンソールにメッセージを出力する。引数とかは次項の post() と同じ。 Test Code function foo(a, b, c) { cpost(a, b, c); } function loadbang() { foo('foo', [ 'a', 'b', 'c' ], { 'hoge': 'fuga' }); } なお、グローバルスコープは jsthis オブジェクト（ブラウザ JavaScript でいうwindow オブジェクト）とドキュメントには書いてあるが、jsthisオブジェクトを呼び出そうとしてもMAXウィンドウに Javascript ReferenceErrod: jsthis is not defined と出て怒られる。 一方、一般的な this オブジェクトは機能している。 function foo() { } post(this.foo === foo); // 1 (true) post (any arguments) Document MAXウィンドウにメッセージを出力する。 \n を含めると改行になる。 post() を新しい行から初めても改行が出力される。 Test Code function foo(a, b, c) { &#8230; <a href="/2014/09/jsinmax02">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p><a href="http://cycling74.com/wiki/index.php?title=Category:Javascript_In_Max_Docs">JavaScript in Max</a> ドキュメントの日本語備忘録的なエントリー第2弾。</p>

<h2 id="Global_Methods">Global Methods</h2>

<p><a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_02_-_Global_Methods#Global_Methods">Document</a></p>

<p>以下のメソッドはグローバルコンテキストにあり、どこでも使うことができる。</p>

<hr />

<h3 id="messnamed">messnamed (Max object name, message name, any arguments)</h3>

<p><a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_02_-_Global_Methods#messnamed_.28Max_object_name.2C_message_name.2C_any_arguments.29">Document</a></p>

<p>グローバルシンボルに紐付けてネーミングされた Max オブジェクトにメッセージを送る。例えば receive オブジェクトなど。
以下の例は &#8220;jsmessage&#8221; と名付けられたオブジェクトに &#8220;hogehoge&#8221; とメッセージを送る例である。</p>

<h4>Test Code</h4>

<pre><code>function loadbang () {
    messnamed("jsmessage", "hogehoge");
}
</code></pre>

<p><img decoding="async" src="1-1.png" alt="messnamed" /></p>

<hr />

<h3 id="cpost">cpost (any arguments)</h3>

<p><a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_02_-_Global_Methods#cpost_.28any_arguments.29">Document</a></p>

<p>コンソールにメッセージを出力する。引数とかは次項の <code>post()</code> と同じ。</p>

<h4>Test Code</h4>

<pre><code>function foo(a, b, c) {
  cpost(a, b, c);
}
function loadbang() {
  foo('foo', [ 'a', 'b', 'c' ], { 'hoge': 'fuga' });
}
</code></pre>

<p><a href="/wp-content/uploads/2014/04/ss02.png"><img fetchpriority="high" decoding="async" src="/wp-content/uploads/2014/04/ss02.png" alt="How Input to the js Object is Handled" width="692" height="429" class="alignnone size-full wp-image-1100" srcset="/wp-content/uploads/2014/04/ss02.png 692w, /wp-content/uploads/2014/04/ss02-300x185.png 300w, /wp-content/uploads/2014/04/ss02-483x300.png 483w" sizes="(max-width: 692px) 100vw, 692px" /></a></p>

<hr />

<p>なお、グローバルスコープは <code>jsthis</code> オブジェクト（ブラウザ JavaScript でいうwindow オブジェクト）とドキュメントには書いてあるが、jsthisオブジェクトを呼び出そうとしてもMAXウィンドウに <code>Javascript ReferenceErrod: jsthis is not defined</code> と出て怒られる。
一方、一般的な this オブジェクトは機能している。</p>

<pre><code>function foo() { }
post(this.foo === foo); // 1 (true)
</code></pre>

<hr />

<h3 id="post">post (any arguments)</h3>

<p><a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_02_-_Global_Methods#post_.28any_arguments.29">Document</a></p>

<p>MAXウィンドウにメッセージを出力する。
<code>\n</code> を含めると改行になる。
<code>post()</code> を新しい行から初めても改行が出力される。</p>

<h4>Test Code</h4>

<pre><code>function foo(a, b, c) {
  post(a, b, c);
}
function loadbang() {
  foo('bar', [ 'a', 'b', 'c' ], { 'hoge': 'fuga' });
}
</code></pre>

<p><a href="/wp-content/uploads/2014/04/ss02.png"><img fetchpriority="high" decoding="async" src="/wp-content/uploads/2014/04/ss02.png" alt="How Input to the js Object is Handled" width="692" height="429" class="alignnone size-full wp-image-1100" srcset="/wp-content/uploads/2014/04/ss02.png 692w, /wp-content/uploads/2014/04/ss02-300x185.png 300w, /wp-content/uploads/2014/04/ss02-483x300.png 483w" sizes="(max-width: 692px) 100vw, 692px" /></a></p>

<hr />

<h2 id="jsthisobject">The jsthis Object</h2>

<p><a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_02_-_Global_Methods#The_jsthis_Object">Document</a></p>

<p>Browser JavaScript だと &#8221;window&#8221; にあたるもの。
<code>jsthis</code> オブジェクトはグローバルコードにおける &#8221;this&#8221; を表す。グローバルコードで関数を定義すればそれは <code>jsthis</code> のメソッドになり、変数を定義すれば <code>jsthis</code> のメソッドになる。<code>jsthis</code> オブジェクトは以下のようなビルトインプロパティとメソッドを持つ。</p>

<h3>autowatch (Number, get/set)</h3>

<p><a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_02_-_Global_Methods#autowatch_.28Number.2C_get.2Fset.29">Document</a></p>

<p>これはとりわけ、1つのソースファイルからいくつかの js インスタンスを作っていて、ソースファイルを変更したらすべてのインスタンスを更新したいような時に便利。外部のテキストエディタでソースファイルを書いている場合も、これを使えばパッチ中の js オブジェクトは自動的に再コンパイルされる。
デフォルトではこの autowatch は <code>0 (off)</code> に設定されている。on にしたいときはグローバルコード中で行うことがベスト。</p>

<h3>box (Maxobj, get)</h3>

<p><a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_02_-_Global_Methods#box_.28Maxobj.2C_get.29">Document</a></p>

<p>js オブジェクトを含む Maxobj を返す。<code>jsui</code> オブジェクトからオブジェクトボックスの長方形を取得する際に便利。
詳しくは <a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_03_-_the_Max_Object">the Max Object</a> を参照のこと</p>

<h3>editfontsize (Number, get/set)</h3>

<p><a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_02_-_Global_Methods#editfontsize_.28Number.2C_get.2Fset.29">Document</a>
スクリプトを編集するウィンドウのフォントサイズを制御する。グローバルコードで書くと、テキスト編集のデフォルトフォントサイズ（Maxウィンドウのフォントサイズ）が変更される。</p>

<h3>inlet (Number, get)</h3>

<p><a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_02_-_Global_Methods#inlet_.28Number.2C_get.29">Document</a>
関数の実行中、 <code>inlet</code> プロパティには、その関数を呼び出したメッセージを受け取ったインレット番号が格納されている。
この番号は一番左のインレットから0で始まる。
グローバルコード中ではこのプロパティは <code>0</code> になる。</p>

<h3>inlets (Number, get/set)</h3>

<p><a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_02_-_Global_Methods#inlets_.28Number.2C_get.2Fset.29">Document</a>
インスタンスがいくつのインレットを持つべきかを指定する。&#8221;inlets&#8221; プロパティはグローバルコード中で指定しなければ効果がない。指定されなかった場合、インレットを1つ持ったオブジェクトが作られる。</p>

<h4>Test Code 1</h4>

<pre><code>function msg_int(a) { // a == 1
  post(a); // 1
}
</code></pre>

<p><a href="/wp-content/uploads/2014/04/ss03-1.png"><img decoding="async" src="/wp-content/uploads/2014/04/ss03-1.png" alt="msg_int" width="884" height="431" class="alignnone size-full wp-image-1101" srcset="/wp-content/uploads/2014/04/ss03-1.png 884w, /wp-content/uploads/2014/04/ss03-1-300x146.png 300w, /wp-content/uploads/2014/04/ss03-1-500x243.png 500w" sizes="(max-width: 884px) 100vw, 884px" /></a></p>

<h4>Test Code 2</h4>

<pre><code>function msg_int(a) { // a == 1
  post(a); // 1
}
function msg_float(a) { // a == 1.23456
  post(a); // 1.23
}
</code></pre>

<p><a href="/wp-content/uploads/2014/04/ss03-2.png"><img decoding="async" src="/wp-content/uploads/2014/04/ss03-2.png" alt="msg_float" width="876" height="423" class="alignnone size-full wp-image-1103" srcset="/wp-content/uploads/2014/04/ss03-2.png 876w, /wp-content/uploads/2014/04/ss03-2-300x144.png 300w, /wp-content/uploads/2014/04/ss03-2-500x241.png 500w" sizes="(max-width: 876px) 100vw, 876px" /></a></p>

<hr />

<h3 id="list">list</h3>

<p><a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_01_-_Basic_Techniques#list">Document</a></p>

<p>inlet に最初の値が int もしくは float の list が入力されると <code>list()</code> が呼ばれる。
<a href="#howinputtothejsobjectishandled">上記の例</a>のように最初の値が String の list はその String 名の関数が呼ばれる。</p>

<h4>Test Code 1</h4>

<pre><code>function list(a, b, c) { // a == 1, b == 2, c == hoge
  post(a, b, c); // 1 2 hoge
  post(arguments.length); // 3
}
</code></pre>

<p><a href="/wp-content/uploads/2014/04/ss03-3.png"><img loading="lazy" decoding="async" src="/wp-content/uploads/2014/04/ss03-3.png" alt="list" width="870" height="418" class="alignnone size-full wp-image-1104" srcset="/wp-content/uploads/2014/04/ss03-3.png 870w, /wp-content/uploads/2014/04/ss03-3-300x144.png 300w, /wp-content/uploads/2014/04/ss03-3-500x240.png 500w" sizes="(max-width: 870px) 100vw, 870px" /></a></p>

<hr />

<h3 id="anything">anything</h3>

<p>inlet に入力されたものに該当する function が定義されていなかった場合、<code>anything()</code> で受け取ることができる。例えば int が入力されたときに <code>msg_int()</code> が未定義だったら <code>anything()</code> が呼ばれる。float や list でも同様。<br />
<code>anything()</code> 内部では <code>messagename</code> と <code>inlet</code> 変数が定義されており、それぞれ inlet に入ったメッセージの種類と、inlet 番号を参照できる。</p>

<h4>Test Code 1</h4>

<pre><code>function anything(a, b, c) { // a == 1, b == 2, c == hoge
  post("messagename", messagename); // messagename list
  post("inlet", inlet); // inlet 0
  post("anything", a, b, c); // anything 1 2 hoge
}
</code></pre>

<p><a href="/wp-content/uploads/2014/04/ss03-4.png"><img loading="lazy" decoding="async" src="/wp-content/uploads/2014/04/ss03-4.png" alt="anything" width="869" height="420" class="alignnone size-full wp-image-1105" srcset="/wp-content/uploads/2014/04/ss03-4.png 869w, /wp-content/uploads/2014/04/ss03-4-300x144.png 300w, /wp-content/uploads/2014/04/ss03-4-500x241.png 500w" sizes="(max-width: 869px) 100vw, 869px" /></a></p>

<hr />

<h3 id="loadbang">loadbang</h3>

<p><a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_01_-_Basic_Techniques#loadbang">Document</a></p>

<p><code>loadbang()</code> はパッチ起動時に呼ばれる。<code>js</code> オブジェクトや <code>jsui</code> オブジェクトを追加した時ではなく、あくまでそれを予め含むパッチ起動時に呼ばれることに注意。<br />
<a href="http://cycling74.com/wiki/index.php?title=loadbang#loadbang_Tips_and_Workarounds">Cmd+Shiftを押しながらパッチを起動すると loadbang を無効化できる</a>が、無効になっているかどうかは <code>max.loadbangdisabled</code> プロパティに 1 が入っているかどうかで分かる。</p>

<h4>Test Code 1</h4>

<pre><code>function loadbang() {
  if (max.loadbangdisabled == 1) {
    post("no loadbang");
  } else {
    post("loadbang!");
  }
}
function bang() {
  post("bang!");
}
</code></pre>

<p>普通にパッチを起動した場合<br />
<a href="/wp-content/uploads/2014/04/ss03-5.png"><img loading="lazy" decoding="async" src="/wp-content/uploads/2014/04/ss03-5.png" alt="loadbang" width="869" height="419" class="alignnone size-full wp-image-1106" srcset="/wp-content/uploads/2014/04/ss03-5.png 869w, /wp-content/uploads/2014/04/ss03-5-300x144.png 300w, /wp-content/uploads/2014/04/ss03-5-500x241.png 500w" sizes="(max-width: 869px) 100vw, 869px" /></a></p>

<p>Cmd+Shiftを押しながらパッチを起動した場合<br />
<a href="/wp-content/uploads/2014/04/ss03-6.png"><img loading="lazy" decoding="async" src="/wp-content/uploads/2014/04/ss03-6.png" alt="noloadbang" width="873" height="418" class="alignnone size-full wp-image-1108" srcset="/wp-content/uploads/2014/04/ss03-6.png 873w, /wp-content/uploads/2014/04/ss03-6-300x143.png 300w, /wp-content/uploads/2014/04/ss03-6-500x239.png 500w" sizes="(max-width: 873px) 100vw, 873px" /></a></p>

<hr />

<h3 id="getvalueof">getvalueof</h3>

<p><a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_01_-_Basic_Techniques#getvalueof">Document</a></p>

<p>JavaScript 内で定義した変数の値（String か Number）を <code>pattr</code> 関連オブジェクトから呼び出せるようにする関数。
→ pattr オブジェクトのことがよく分からないので、テストコードが書けない。後で復習する。</p>

<hr />

<h3 id="setvalueof">setvalueof</h3>

<p><a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_01_-_Basic_Techniques#setvalueof">Document</a></p>

<p><code>pattr</code> 関連オブジェクトから JavaScript 内に変数（Number か String）をパスできるインターフェースを提供する関数。
value が複数の場合、<code>jsthis</code> オブジェクトの <code>arrayfromargs()</code> メソッドで引数を扱うと良いとのこと。<br />
→ pattr オブジェクトのことがよく分からないので、テストコードが書けない。後で復習する。</p>

<hr />

<h3 id="save">save</h3>

<p><a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_01_-_Basic_Techniques#save">Document</a></p>

<p><code>save()</code> を定義すると、JavaScript 内の状態をパッチに保持することができる。
パッチが再読み込みされると、JavaScript 内の状態が復元される。</p>

<p><code>save()</code> 内だけで使える <code>embedmessage()</code> を使い、値を保存する。</p>

<ul>
<li><code>embedmessage()</code> の第1引数には保存された値を渡したいコールバック関数名を文字列で渡す</li>
<li><code>embedmessage()</code> の第2引数以降には保存したい値を渡し、これがコールバック関数の引数に渡される</li>
</ul>

<h4>Test Code 1</h4>

<pre><code>var valuetosave = 0;
function foo(v) {
  valuetosave = v;
}
function save() {
  embedmessage("callback", valuetosave);
}
function callback(v) {
  valuetosave = v;
  post(v);
}
</code></pre>

<p><code>foo 1</code> メッセージを送ったあと、パッチを再起動した場合<br />
<a href="/wp-content/uploads/2014/04/ss03-9-1.png"><img loading="lazy" decoding="async" src="/wp-content/uploads/2014/04/ss03-9-1.png" alt="save" width="873" height="419" class="alignnone size-full wp-image-1109" srcset="/wp-content/uploads/2014/04/ss03-9-1.png 873w, /wp-content/uploads/2014/04/ss03-9-1-300x143.png 300w, /wp-content/uploads/2014/04/ss03-9-1-500x239.png 500w" sizes="(max-width: 873px) 100vw, 873px" /></a></p>

<p><code>foo 2</code> メッセージを送ったあと、パッチを再起動した場合<br />
<a href="/wp-content/uploads/2014/04/ss03-9-21.png"><img loading="lazy" decoding="async" src="/wp-content/uploads/2014/04/ss03-9-21.png" alt="save" width="873" height="417" class="alignnone size-full wp-image-1112" srcset="/wp-content/uploads/2014/04/ss03-9-21.png 873w, /wp-content/uploads/2014/04/ss03-9-21-300x143.png 300w, /wp-content/uploads/2014/04/ss03-9-21-500x238.png 500w" sizes="(max-width: 873px) 100vw, 873px" /></a></p>

<hr />

<h3 id="notifydeleted">notifydeleted</h3>

<p><a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_01_-_Basic_Techniques#notifydeleted">Document</a></p>

<p><code>js</code> オブジェクトが削除されたときに呼ばれる</p>

<h4>Test Code 1</h4>

<pre><code>function notifydeleted() {
  post('js object was deleted.');
}
</code></pre>

<p><a href="/wp-content/uploads/2014/04/ss03-10.png"><img loading="lazy" decoding="async" src="/wp-content/uploads/2014/04/ss03-10.png" alt="notifydeleted" width="866" height="420" class="alignnone size-full wp-image-1113" srcset="/wp-content/uploads/2014/04/ss03-10.png 866w, /wp-content/uploads/2014/04/ss03-10-300x145.png 300w, /wp-content/uploads/2014/04/ss03-10-500x242.png 500w" sizes="(max-width: 866px) 100vw, 866px" /></a></p>

<hr />

<h2 id="Global_Code">Global Code</h2>

<p><a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_01_-_Basic_Techniques#Global_Code">Document</a></p>

<p>グローバルスコープに書かれたコードは編集された後、スクリプトがロードされるかコンパイルされたタイミングで評価される。
<code>js</code> / <code>jsui</code> オブジェクトが完全に作られる前に評価される。
js オブジェクトがいくつ inlet / outlet を持つかはグローバルコードからは分からない。これはグローバルコードから inlet / outlet をいくつにするか定義できることを意味する。しかし言い換えれば、まだ outlet が存在しなければ、使うことはできない。
初期化処理を書きたい場合は <code>loadbang()</code> の中に書くべし。</p>

<h3>グローバルコードでやるべきこと</h3>

<ul>
<li>inlet / outlet の数を定義する</li>
<li><code>jsarguments[]</code> プロパティ（<code>js</code> オブジェクトの引数）にアクセスする</li>
<li>inlet / outlet の値の操作</li>
<li>グローバル変数の定義と初期化</li>
<li>グローバルアプリケーション環境にアクセス＆操作するため、Max オブジェクトを使う</li>
</ul>

<h3>グローバルコードでやるべきでないこと</h3>

<ul>
<li>outlet から何か出力すること</li>
<li><code>js</code> オブジェクトが置かれたパッチ側を参照しようとすること</li>
</ul>

<hr />

<h2 id="Private_28Local29_Functions">Private (Local) Function</h2>

<p><a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_01_-_Basic_Techniques#Private_.28Local.29_Functions">Document</a></p>

<p><code>js</code> オブジェクトへの inlet メッセージから参照されたくないローカル関数を作りたい場合、<code>local</code> プロパティに <code>1</code> をセットする。</p>

<h3>Test Code 1</h3>

<pre><code>function foo() {
  post("Welcome to 'foo' method!");
}
foo.local = 1;
</code></pre>

<p><a href="/wp-content/uploads/2014/04/ss05.png"><img loading="lazy" decoding="async" src="/wp-content/uploads/2014/04/ss05.png" alt="private function" width="875" height="422" class="alignnone size-full wp-image-1114" srcset="/wp-content/uploads/2014/04/ss05.png 875w, /wp-content/uploads/2014/04/ss05-300x144.png 300w, /wp-content/uploads/2014/04/ss05-500x241.png 500w" sizes="(max-width: 875px) 100vw, 875px" /></a></p>

<hr />

<p>未完</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Maxのドキュメントを読む その1 (Javascript in Max 01 &#8211; Basic Techniques)</title>
		<link>/2014/04/jsinmax01</link>
		
		<dc:creator><![CDATA[Naoki Sekiguchi]]></dc:creator>
		<pubDate>Sat, 19 Apr 2014 13:24:38 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Max]]></category>
		<guid isPermaLink="false">/?p=1069</guid>

					<description><![CDATA[最近 Max というビジュアルプログラミング言語を学んでいる。js / jsui オブジェクトというのがあり、その中で JavaScript が書ける、ということでドキュメントを読んでいる。 正直流行っていない言語なので情報が少なく、とにかく公式ドキュメントを読むしかないのである。 読んだドキュメントを備忘録的にエントリーしておく。その第1弾。 注意事項 JavaScriptファイルを更新した場合、MAXパッチを開き直さないと変更が反映されない Arguments Document js オブジェクトに渡した引数は JavaScript 内では jsarguments[] 配列で参照できる。 jsarguments[0] => ファイル名 (required) jsarguments[1] 以降 => その他の引数 (optional) ということになる。 Test Code function bang() { post(jsarguments[0], jsarguments[1], jsarguments[2], jsarguments[3]); } How Input to the js Object is Handled Document js オブジェクトの inlet に foo 1 2 3 というメッセージを送った場合、グローバルスコープの foo() 関数を引数 1,2,3 と共に実行するということになる。 Test Code function foo(a, b, c) { post(a, b, c); } なお、グローバルスコープは jsthis オブジェクト（ブラウザ JavaScript でいう window オブジェクト）とドキュメントには書いてあるが、jsthisオブジェクトを呼び 出そうとしてもMAXウィンドウに Javascript ReferenceErrod: jsthis is not defined と出て怒られる。なんだこれは。 一方、一般的な this オブジェクトは機能している。 function foo() { } post(this.foo === foo); // 1 (true) Special Function Names Document msg_int, msg_float Document inlet に &#8230; <a href="/2014/04/jsinmax01">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p>最近 <a href="http://cycling74.com/products/max/">Max</a> というビジュアルプログラミング言語を学んでいる。<code>js</code> / <code>jsui</code> オブジェクトというのがあり、その中で JavaScript が書ける、ということでドキュメントを読んでいる。
正直流行っていない言語なので情報が少なく、とにかく公式ドキュメントを読むしかないのである。</p>

<p>読んだドキュメントを備忘録的にエントリーしておく。その第1弾。</p>

<hr />

<h2>注意事項</h2>

<ul>
<li>JavaScriptファイルを更新した場合、MAXパッチを開き直さないと変更が反映されない</li>
</ul>

<hr />

<h2 id="argumetns">Arguments</h2>

<p><a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_01_-_Basic_Techniques#Arguments">Document</a></p>

<p>js オブジェクトに渡した引数は JavaScript 内では jsarguments[] 配列で参照できる。</p>

<ul>
<li>jsarguments[0] => ファイル名 (required)</li>
<li>jsarguments[1] 以降 => その他の引数 (optional)</li>
</ul>

<p>ということになる。</p>

<h3>Test Code</h3>

<pre><code>function bang() {
  post(jsarguments[0], jsarguments[1], jsarguments[2], jsarguments[3]);
}
</code></pre>

<p><a href="/wp-content/uploads/2014/04/ss01.png"><img loading="lazy" decoding="async" src="/wp-content/uploads/2014/04/ss01.png" alt="Arguments test" width="700" height="430" class="alignnone size-full wp-image-1098" srcset="/wp-content/uploads/2014/04/ss01.png 700w, /wp-content/uploads/2014/04/ss01-300x184.png 300w, /wp-content/uploads/2014/04/ss01-488x300.png 488w" sizes="(max-width: 700px) 100vw, 700px" /></a></p>

<hr />

<h2 id="howinputtothejsobjectishandled">How Input to the js Object is Handled</h2>

<p><a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_01_-_Basic_Techniques#How_Input_to_the_js_Object_is_Handled">Document</a></p>

<p>js オブジェクトの inlet に <code>foo 1 2 3</code> というメッセージを送った場合、グローバルスコープの foo() 関数を引数 1,2,3 と共に実行するということになる。</p>

<h3>Test Code</h3>

<pre><code>function foo(a, b, c) {
  post(a, b, c);
}
</code></pre>

<p><a href="/wp-content/uploads/2014/04/ss02.png"><img loading="lazy" decoding="async" src="/wp-content/uploads/2014/04/ss02.png" alt="How Input to the js Object is Handled" width="692" height="429" class="alignnone size-full wp-image-1100" srcset="/wp-content/uploads/2014/04/ss02.png 692w, /wp-content/uploads/2014/04/ss02-300x185.png 300w, /wp-content/uploads/2014/04/ss02-483x300.png 483w" sizes="(max-width: 692px) 100vw, 692px" /></a></p>

<p>なお、グローバルスコープは <code>jsthis</code> オブジェクト（ブラウザ JavaScript でいう
window オブジェクト）とドキュメントには書いてあるが、jsthisオブジェクトを呼び
出そうとしてもMAXウィンドウに <code>Javascript ReferenceErrod: jsthis is not defined</code> と出て怒られる。なんだこれは。
一方、一般的な this オブジェクトは機能している。</p>

<pre><code>function foo() { }
post(this.foo === foo); // 1 (true)
</code></pre>

<hr />

<h2 id="specialfunctionnames">Special Function Names</h2>

<p><a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_01_-_Basic_Techniques#Special_Function_Names">Document</a></p>

<h3 id="msg_intmsg_float">msg_int, msg_float</h3>

<p><a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_01_-_Basic_Techniques#msg_int.2C_msg_float">Document</a></p>

<p>inlet に int が入力されると <code>msg_int()</code> が呼ばれる。inlet に float が入力されると <code>msg_float()</code> が呼ばれる。<code>msg_float()</code> が未定義の場合、 <code>msg_int()</code> が代用で呼ばれるが、少数点以下は切り飛ばされる。
なお <code>msg_float()</code> は少数点第3位以下を受け取ることができない。</p>

<h4>Test Code 1</h4>

<pre><code>function msg_int(a) { // a == 1
  post(a); // 1
}
</code></pre>

<p><a href="/wp-content/uploads/2014/04/ss03-1.png"><img loading="lazy" decoding="async" src="/wp-content/uploads/2014/04/ss03-1.png" alt="msg_int" width="884" height="431" class="alignnone size-full wp-image-1101" srcset="/wp-content/uploads/2014/04/ss03-1.png 884w, /wp-content/uploads/2014/04/ss03-1-300x146.png 300w, /wp-content/uploads/2014/04/ss03-1-500x243.png 500w" sizes="(max-width: 884px) 100vw, 884px" /></a></p>

<h4>Test Code 2</h4>

<pre><code>function msg_int(a) { // a == 1
  post(a); // 1
}
function msg_float(a) { // a == 1.23456
  post(a); // 1.23
}
</code></pre>

<p><a href="/wp-content/uploads/2014/04/ss03-2.png"><img loading="lazy" decoding="async" src="/wp-content/uploads/2014/04/ss03-2.png" alt="msg_float" width="876" height="423" class="alignnone size-full wp-image-1103" srcset="/wp-content/uploads/2014/04/ss03-2.png 876w, /wp-content/uploads/2014/04/ss03-2-300x144.png 300w, /wp-content/uploads/2014/04/ss03-2-500x241.png 500w" sizes="(max-width: 876px) 100vw, 876px" /></a></p>

<hr />

<h3 id="list">list</h3>

<p><a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_01_-_Basic_Techniques#list">Document</a></p>

<p>inlet に最初の値が int もしくは float の list が入力されると <code>list()</code> が呼ばれる。
<a href="#howinputtothejsobjectishandled">上記の例</a>のように最初の値が String の list はその String 名の関数が呼ばれる。</p>

<h4>Test Code 1</h4>

<pre><code>function list(a, b, c) { // a == 1, b == 2, c == hoge
  post(a, b, c); // 1 2 hoge
  post(arguments.length); // 3
}
</code></pre>

<p><a href="/wp-content/uploads/2014/04/ss03-3.png"><img loading="lazy" decoding="async" src="/wp-content/uploads/2014/04/ss03-3.png" alt="list" width="870" height="418" class="alignnone size-full wp-image-1104" srcset="/wp-content/uploads/2014/04/ss03-3.png 870w, /wp-content/uploads/2014/04/ss03-3-300x144.png 300w, /wp-content/uploads/2014/04/ss03-3-500x240.png 500w" sizes="(max-width: 870px) 100vw, 870px" /></a></p>

<hr />

<h3 id="anything">anything</h3>

<p>inlet に入力されたものに該当する function が定義されていなかった場合、<code>anything()</code> で受け取ることができる。例えば int が入力されたときに <code>msg_int()</code> が未定義だったら <code>anything()</code> が呼ばれる。float や list でも同様。<br />
<code>anything()</code> 内部では <code>messagename</code> と <code>inlet</code> 変数が定義されており、それぞれ inlet に入ったメッセージの種類と、inlet 番号を参照できる。</p>

<h4>Test Code 1</h4>

<pre><code>function anything(a, b, c) { // a == 1, b == 2, c == hoge
  post("messagename", messagename); // messagename list
  post("inlet", inlet); // inlet 0
  post("anything", a, b, c); // anything 1 2 hoge
}
</code></pre>

<p><a href="/wp-content/uploads/2014/04/ss03-4.png"><img loading="lazy" decoding="async" src="/wp-content/uploads/2014/04/ss03-4.png" alt="anything" width="869" height="420" class="alignnone size-full wp-image-1105" srcset="/wp-content/uploads/2014/04/ss03-4.png 869w, /wp-content/uploads/2014/04/ss03-4-300x144.png 300w, /wp-content/uploads/2014/04/ss03-4-500x241.png 500w" sizes="(max-width: 869px) 100vw, 869px" /></a></p>

<hr />

<h3 id="loadbang">loadbang</h3>

<p><a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_01_-_Basic_Techniques#loadbang">Document</a></p>

<p><code>loadbang()</code> はパッチ起動時に呼ばれる。<code>js</code> オブジェクトや <code>jsui</code> オブジェクトを追加した時ではなく、あくまでそれを予め含むパッチ起動時に呼ばれることに注意。<br />
<a href="http://cycling74.com/wiki/index.php?title=loadbang#loadbang_Tips_and_Workarounds">Cmd+Shiftを押しながらパッチを起動すると loadbang を無効化できる</a>が、無効になっているかどうかは <code>max.loadbangdisabled</code> プロパティに 1 が入っているかどうかで分かる。</p>

<h4>Test Code 1</h4>

<pre><code>function loadbang() {
  if (max.loadbangdisabled == 1) {
    post("no loadbang");
  } else {
    post("loadbang!");
  }
}
function bang() {
  post("bang!");
}
</code></pre>

<p>普通にパッチを起動した場合<br />
<a href="/wp-content/uploads/2014/04/ss03-5.png"><img loading="lazy" decoding="async" src="/wp-content/uploads/2014/04/ss03-5.png" alt="loadbang" width="869" height="419" class="alignnone size-full wp-image-1106" srcset="/wp-content/uploads/2014/04/ss03-5.png 869w, /wp-content/uploads/2014/04/ss03-5-300x144.png 300w, /wp-content/uploads/2014/04/ss03-5-500x241.png 500w" sizes="(max-width: 869px) 100vw, 869px" /></a></p>

<p>Cmd+Shiftを押しながらパッチを起動した場合<br />
<a href="/wp-content/uploads/2014/04/ss03-6.png"><img loading="lazy" decoding="async" src="/wp-content/uploads/2014/04/ss03-6.png" alt="noloadbang" width="873" height="418" class="alignnone size-full wp-image-1108" srcset="/wp-content/uploads/2014/04/ss03-6.png 873w, /wp-content/uploads/2014/04/ss03-6-300x143.png 300w, /wp-content/uploads/2014/04/ss03-6-500x239.png 500w" sizes="(max-width: 873px) 100vw, 873px" /></a></p>

<hr />

<h3 id="getvalueof">getvalueof</h3>

<p><a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_01_-_Basic_Techniques#getvalueof">Document</a></p>

<p>JavaScript 内で定義した変数の値（String か Number）を <code>pattr</code> 関連オブジェクトから呼び出せるようにする関数。
→ pattr オブジェクトのことがよく分からないので、テストコードが書けない。後で復習する。</p>

<hr />

<h3 id="setvalueof">setvalueof</h3>

<p><a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_01_-_Basic_Techniques#setvalueof">Document</a></p>

<p><code>pattr</code> 関連オブジェクトから JavaScript 内に変数（Number か String）をパスできるインターフェースを提供する関数。
value が複数の場合、<code>jsthis</code> オブジェクトの <code>arrayfromargs()</code> メソッドで引数を扱うと良いとのこと。<br />
→ pattr オブジェクトのことがよく分からないので、テストコードが書けない。後で復習する。</p>

<hr />

<h3 id="save">save</h3>

<p><a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_01_-_Basic_Techniques#save">Document</a></p>

<p><code>save()</code> を定義すると、JavaScript 内の状態をパッチに保持することができる。
パッチが再読み込みされると、JavaScript 内の状態が復元される。</p>

<p><code>save()</code> 内だけで使える <code>embedmessage()</code> を使い、値を保存する。</p>

<ul>
<li><code>embedmessage()</code> の第1引数には保存された値を渡したいコールバック関数名を文字列で渡す</li>
<li><code>embedmessage()</code> の第2引数以降には保存したい値を渡し、これがコールバック関数の引数に渡される</li>
</ul>

<h4>Test Code 1</h4>

<pre><code>var valuetosave = 0;
function foo(v) {
  valuetosave = v;
}
function save() {
  embedmessage("callback", valuetosave);
}
function callback(v) {
  valuetosave = v;
  post(v);
}
</code></pre>

<p><code>foo 1</code> メッセージを送ったあと、パッチを再起動した場合<br />
<a href="/wp-content/uploads/2014/04/ss03-9-1.png"><img loading="lazy" decoding="async" src="/wp-content/uploads/2014/04/ss03-9-1.png" alt="save" width="873" height="419" class="alignnone size-full wp-image-1109" srcset="/wp-content/uploads/2014/04/ss03-9-1.png 873w, /wp-content/uploads/2014/04/ss03-9-1-300x143.png 300w, /wp-content/uploads/2014/04/ss03-9-1-500x239.png 500w" sizes="(max-width: 873px) 100vw, 873px" /></a></p>

<p><code>foo 2</code> メッセージを送ったあと、パッチを再起動した場合<br />
<a href="/wp-content/uploads/2014/04/ss03-9-21.png"><img loading="lazy" decoding="async" src="/wp-content/uploads/2014/04/ss03-9-21.png" alt="save" width="873" height="417" class="alignnone size-full wp-image-1112" srcset="/wp-content/uploads/2014/04/ss03-9-21.png 873w, /wp-content/uploads/2014/04/ss03-9-21-300x143.png 300w, /wp-content/uploads/2014/04/ss03-9-21-500x238.png 500w" sizes="(max-width: 873px) 100vw, 873px" /></a></p>

<hr />

<h3 id="notifydeleted">notifydeleted</h3>

<p><a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_01_-_Basic_Techniques#notifydeleted">Document</a></p>

<p><code>js</code> オブジェクトが削除されたときに呼ばれる</p>

<h4>Test Code 1</h4>

<pre><code>function notifydeleted() {
  post('js object was deleted.');
}
</code></pre>

<p><a href="/wp-content/uploads/2014/04/ss03-10.png"><img loading="lazy" decoding="async" src="/wp-content/uploads/2014/04/ss03-10.png" alt="notifydeleted" width="866" height="420" class="alignnone size-full wp-image-1113" srcset="/wp-content/uploads/2014/04/ss03-10.png 866w, /wp-content/uploads/2014/04/ss03-10-300x145.png 300w, /wp-content/uploads/2014/04/ss03-10-500x242.png 500w" sizes="(max-width: 866px) 100vw, 866px" /></a></p>

<hr />

<h2 id="Global_Code">Global Code</h2>

<p><a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_01_-_Basic_Techniques#Global_Code">Document</a></p>

<p>グローバルスコープに書かれたコードは編集された後、スクリプトがロードされるかコンパイルされたタイミングで評価される。
<code>js</code> / <code>jsui</code> オブジェクトが完全に作られる前に評価される。
js オブジェクトがいくつ inlet / outlet を持つかはグローバルコードからは分からない。これはグローバルコードから inlet / outlet をいくつにするか定義できることを意味する。しかし言い換えれば、まだ outlet が存在しなければ、使うことはできない。
初期化処理を書きたい場合は <code>loadbang()</code> の中に書くべし。</p>

<h3>グローバルコードでやるべきこと</h3>

<ul>
<li>inlet / outlet の数を定義する</li>
<li><code>jsarguments[]</code> プロパティ（<code>js</code> オブジェクトの引数）にアクセスする</li>
<li>inlet / outlet の値の操作</li>
<li>グローバル変数の定義と初期化</li>
<li>グローバルアプリケーション環境にアクセス＆操作するため、Max オブジェクトを使う</li>
</ul>

<h3>グローバルコードでやるべきでないこと</h3>

<ul>
<li>outlet から何か出力すること</li>
<li><code>js</code> オブジェクトが置かれたパッチ側を参照しようとすること</li>
</ul>

<hr />

<h2 id="Private_28Local29_Functions">Private (Local) Function</h2>

<p><a href="http://cycling74.com/wiki/index.php?title=Javascript_in_Max_01_-_Basic_Techniques#Private_.28Local.29_Functions">Document</a></p>

<p><code>js</code> オブジェクトへの inlet メッセージから参照されたくないローカル関数を作りたい場合、<code>local</code> プロパティに <code>1</code> をセットする。</p>

<h3>Test Code 1</h3>

<pre><code>function foo() {
  post("Welcome to 'foo' method!");
}
foo.local = 1;
</code></pre>

<p><a href="/wp-content/uploads/2014/04/ss05.png"><img loading="lazy" decoding="async" src="/wp-content/uploads/2014/04/ss05.png" alt="private function" width="875" height="422" class="alignnone size-full wp-image-1114" srcset="/wp-content/uploads/2014/04/ss05.png 875w, /wp-content/uploads/2014/04/ss05-300x144.png 300w, /wp-content/uploads/2014/04/ss05-500x241.png 500w" sizes="(max-width: 875px) 100vw, 875px" /></a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>grunt-contrib-jshint の設定</title>
		<link>/2014/04/grunt-contrib-jshint</link>
		
		<dc:creator><![CDATA[Naoki Sekiguchi]]></dc:creator>
		<pubDate>Wed, 16 Apr 2014 04:38:01 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Grunt]]></category>
		<category><![CDATA[JavaScript]]></category>
		<guid isPermaLink="false">/?p=1079</guid>

					<description><![CDATA[Gruntfile.coffee に以下のように書く。 grunt.loadNpmTasks 'grunt-contrib-jshint' grunt.initConfig( jshint: main: options: jshintrc: true src: [ 'app' + sitePath + 'js/script.js' ] ... watch: js: options: livereload: true files: [ 'app' + sitePath + 'js/*' ] tasks: [ 'jshint' ] ) options.jshintrc = true を設定するとそれ以外の options は無視され同階層に置かれた .jshintrc ファイルを参照するようになる。 .jshintrc はJSON形式で記述する。 結果的に以下のような設定に。 { "node": true, "esnext": true, "bitwise": true, "camelcase": true, "curly": true, ... "globals": { "window": true, "document": true, "jQuery": true, "$": true, "_": true, "Backbone": true }, "-W116": true, "-W041": true } globals には「XXXグローバルオブジェクトがない」的な警告が出るときに、予め「このグローバルオブジェクトはあるから、警告出すな」とJSHint側に伝えておく設定。 -WXXX: true は特定のエラーを無視したいときに追加する設定。このエラーコード（ドキュメントの原文では warning code）は grunt --verbose（もしくは grunt -v）として verbose モードで Grunt タスクを起動すると表示されるようになる。 表示例： ^ [W116] Expected '!==' and instead saw '!='. ここでは W116 というのが warning code なのでそれを &#8230; <a href="/2014/04/grunt-contrib-jshint">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p>Gruntfile.coffee に以下のように書く。</p>

<pre><code class="js">grunt.loadNpmTasks 'grunt-contrib-jshint'
grunt.initConfig(
  jshint:
    main:
      options:
        jshintrc: true
      src: [ 'app' + sitePath + 'js/script.js' ]
  ...
  watch:
    js:
      options:
        livereload: true
      files: [ 'app' + sitePath + 'js/*' ]
      tasks: [ 'jshint' ]
)
</code></pre>

<p><code>options.jshintrc = true</code> を設定するとそれ以外の options は無視され同階層に置かれた .jshintrc ファイルを参照するようになる。</p>

<p>.jshintrc はJSON形式で記述する。<br />
結果的に以下のような設定に。</p>

<pre><code class="js">{
  "node": true,
  "esnext": true,
  "bitwise": true,
  "camelcase": true,
  "curly": true,
  ...
  "globals": {
    "window": true,
    "document": true,
    "jQuery": true,
    "$": true,
    "_": true,
    "Backbone": true
  },
  "-W116": true,
  "-W041": true
}
</code></pre>

<p><code>globals</code> には「XXXグローバルオブジェクトがない」的な警告が出るときに、予め「このグローバルオブジェクトはあるから、警告出すな」とJSHint側に伝えておく設定。<br />
<code>-WXXX: true</code> は特定のエラーを無視したいときに追加する設定。このエラーコード（ドキュメントの原文では warning code）は <code>grunt --verbose</code>（もしくは <code>grunt -v</code>）として verbose モードで Grunt タスクを起動すると表示されるようになる。</p>

<p>表示例：</p>

<pre><code>^ [W116] Expected '!==' and instead saw '!='.
</code></pre>

<p>ここでは <code>W116</code> というのが warning code なのでそれを <code>"-W116": true</code> のように options に追加すると、警告は出なくなる。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
