<?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>Hello World!!&#187; Programming</title>
	<atom:link href="http://bhags.org/?cat=59&#038;feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://bhags.org</link>
	<description>Welcome to Sinyu&#039;s  site</description>
	<lastBuildDate>Mon, 06 Nov 2017 04:17:27 +0000</lastBuildDate>
	<language>ja</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.8.1</generator>
	<item>
		<title>PHPの歴史</title>
		<link>http://bhags.org/?p=1047</link>
		<comments>http://bhags.org/?p=1047#comments</comments>
		<pubDate>Tue, 31 Oct 2017 11:28:05 +0000</pubDate>
		<dc:creator><![CDATA[bhags]]></dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://bhags.org/?p=1047</guid>
		<description><![CDATA[誕生 現在 PHP として知られているものは、かつて PHP/FI と呼ばれていたソフトウェアの後継[...]]]></description>
				<content:encoded><![CDATA[<h4>誕生</h4>
<ul>
<li>現在 PHP として知られているものは、かつて PHP/FI と呼ばれていたソフトウェアの後継
<li>1994 年に Rasmus Lerdorf
<li>C 言語で作成
<li>Personal Home Page Tools &#8211; PHP Tools
<li>1995年 6月 最初公開
<li>1996 年の 4 月PHP / FIを公開　ー　プログラミング言語として確率（今まではツール群）
<li>AndiとZeevが加わりPHP: Hypertext Preprocessorとして公開
<li>1998 年 6 月世界中から新たな開発者が多く参入した PHP Development Team は、PHP/FI 2.0 の正式な後継として PHP 3.0 をアナウンス
<li>1999年なかごろZend Engine を紹介(ZEed + aNDi)
<li>PHP 4.0は 前のバージョンのおよそ2年後となる2000年5月にリリース
<li>2004年7月 PHP５公開　- コアである Zend Engine 2.0 で新しいオブジェクトモデルがサポート
</ul>
]]></content:encoded>
			<wfw:commentRss>http://bhags.org/?feed=rss2&#038;p=1047</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unity 클로즈업시에 씬이 사라지는 경우</title>
		<link>http://bhags.org/?p=1010</link>
		<comments>http://bhags.org/?p=1010#comments</comments>
		<pubDate>Mon, 25 Jul 2016 12:34:36 +0000</pubDate>
		<dc:creator><![CDATA[bhags]]></dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Unity]]></category>

		<guid isPermaLink="false">http://bhags.org/?p=1010</guid>
		<description><![CDATA[http://answers.unity3d.com/questions/441567/4-spli[...]]]></description>
				<content:encoded><![CDATA[<p>http://answers.unity3d.com/questions/441567/4-split-view-objects-disappearing-when-zooming-too.html</p>
<p>F 키를 눌러서 씬을 하이라이트.</p>
]]></content:encoded>
			<wfw:commentRss>http://bhags.org/?feed=rss2&#038;p=1010</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>swf間でメッソドよびだし</title>
		<link>http://bhags.org/?p=798</link>
		<comments>http://bhags.org/?p=798#comments</comments>
		<pubDate>Sun, 29 Nov 2015 06:32:24 +0000</pubDate>
		<dc:creator><![CDATA[bhags]]></dc:creator>
				<category><![CDATA[Actionscript3]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://bhags.org/?p=798</guid>
		<description><![CDATA[action script3 swf間でのコミュニケーション Official document h[...]]]></description>
				<content:encoded><![CDATA[<p>action script3 swf間でのコミュニケーション</p>
<p>Official document</p>
<p>http://kb2.adobe.com/community/publishing/918/cpsid_91887.html</p>
<p>http://www.fabiobiondi.com/blog/2009/08/swf-to-swf-communication-in-flash-csx-how-to-call-methods-between-swf-files/</p>
<p>Commentの</p>
<p>loader.load( new URLRequest(“Page.swf”), new LoaderContext(false, new ApplicationDomain()));</p>
<p>がkeypoint</p>
]]></content:encoded>
			<wfw:commentRss>http://bhags.org/?feed=rss2&#038;p=798</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>interface メソッド build が互換性のない署名を使用して&#8230;</title>
		<link>http://bhags.org/?p=753</link>
		<comments>http://bhags.org/?p=753#comments</comments>
		<pubDate>Sat, 28 Nov 2015 06:23:36 +0000</pubDate>
		<dc:creator><![CDATA[bhags]]></dc:creator>
				<category><![CDATA[Actionscript3]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://bhags.org/?p=753</guid>
		<description><![CDATA[JavaプログラマーがActionscript3コードを書くと言語仕様に起因する幾つかの問題に直面す[...]]]></description>
				<content:encoded><![CDATA[<p>JavaプログラマーがActionscript3コードを書くと言語仕様に起因する幾つかの問題に直面する。</p>
<p>例えば以下の仕様</p>
<p>- enumの不在</p>
<p>-Abstractの不在</p>
<p>その中で悩みの種となったのはinterfaceの実装の際、戻り値が厳格すぎることである。</p>
<p>例えばinterfaceの戻り値がClass Aのオブジェクトであれば実相時は必ずClass Aのオブジェクトを</p>
<p>返す必要がある。Class AのSuper Class, Sub Class 共にだめである。</p>
<p>以下サイトに識者らのやりとりが参考になる。</p>
<p>http://stackoverflow.com/questions/7837855/actionscript-overriding-methods-in-extended-interfaces-vs-java</p>
]]></content:encoded>
			<wfw:commentRss>http://bhags.org/?feed=rss2&#038;p=753</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vert.x 3.1.0 Tutorial &#8211; 2 : Hello World TEST</title>
		<link>http://bhags.org/?p=727</link>
		<comments>http://bhags.org/?p=727#comments</comments>
		<pubDate>Sun, 08 Nov 2015 04:36:28 +0000</pubDate>
		<dc:creator><![CDATA[bhags]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Vert.x]]></category>

		<guid isPermaLink="false">http://bhags.org/?p=727</guid>
		<description><![CDATA[Vert.x applicationはJUnitとvertx-unitでunitテストが可能なので [...]]]></description>
				<content:encoded><![CDATA[<p>Vert.x applicationはJUnitとvertx-unitでunitテストが可能なので<br />
今回は前回のHello WorldのUnitテスト手順を投稿</p>
<h6>本家の説明は<a title="こちら" href="http://vertx.io/blog/my-first-vert-x-3-application/" target="_blank">こちら</a><br />
前回の記事は<a title="Vert.x 3.1.0 Tutorial – 1 : Hello World" href="http://bhags.org/?p=690" target="_blank">こちら</a><br />
今回のソースは<a title="こちら" href="https://github.com/bhags1981/hello-verticle" target="_blank">こちら</a></h6>
<h1></h1>
<h1>1.依存関係追加</h1>
<p>JUnitとvertx-unitテスト用の依存関係をpom.xmlに追加</p>
<pre>&lt;dependency&gt;
    &lt;groupId&gt;junit&lt;/groupId&gt;
    &lt;artifactId&gt;junit&lt;/artifactId&gt;
    &lt;version&gt;4.12&lt;/version&gt;
    &lt;scope&gt;test&lt;/scope&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
    &lt;groupId&gt;io.vertx&lt;/groupId&gt;
    &lt;artifactId&gt;vertx-unit&lt;/artifactId&gt;
    &lt;version&gt;3.1.0&lt;/version&gt;
    &lt;scope&gt;test&lt;/scope&gt;
&lt;/dependency&gt;</pre>
<p>追加後libraryを更新[Maven Project パネルより-&gt;Reimport all maven projectsを実施]</p>
<h1>2.テストソース</h1>
<p>以下ソースをsrc/test/java/tutorial/vertx/HelloVerticleTest.javaに生成</p>
<pre>/**
 * Created by bhags on 15/11/08.
 */

package tutorial.vertx;
import io.vertx.core.Vertx;
import io.vertx.ext.unit.Async;
import io.vertx.ext.unit.TestContext;
import io.vertx.ext.unit.junit.VertxUnitRunner;

import io.vertx.core.logging.LoggerFactory;
import io.vertx.core.logging.Logger;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(VertxUnitRunner.class)
public class HelloVerticleTest {

    private Vertx vertx;
    private final static Logger log = LoggerFactory.getLogger(HelloVerticleTest.class);
    @Before
    public void setUp(TestContext context) {
        log.info("SETUP");
        vertx = Vertx.vertx();
        vertx.deployVerticle(HelloVerticle.class.getName(),
                context.asyncAssertSuccess());
    }

    @After
    public void tearDown(TestContext context) {
        log.info("TEAR DOWN");
        vertx.close(context.asyncAssertSuccess());
    }

    @Test
    public void testMyApplication(TestContext context) {
        log.info("TEST MY APPLICATION");
        final Async async = context.async();

        vertx.createHttpClient().getNow(8080, "localhost", "/",
                response -&gt; {
                    response.handler(body -&gt; {
                        context.assertTrue(body.toString().contains("Hello"));
                        async.complete();
                    });
                });
    }
}</pre>
<h1>3.TEST 実行</h1>
<pre>mvn clean test</pre>
<h1>4.JUnit テスト Methods</h1>
<p>以上でHelloVeticleの JUnit テストが無事完了した。上記のunitテストはvertx-unitを使っていてcustom runnerを利用している。vertx-unitのおかげでvert.xアプリケージョンの非同期動作を簡単にテストできるようになっている。</p>
<h3>setUp</h3>
<p>setup methodではvertxのインスタンスが生成される。そして、HelloVeticle verticleデプロイしてくれる。また、setUpがTestContextを引数として取っている。このオブジェクトがテストの非同期面をコントロール可能にしてくれている。例えばverticleをデプロイするとそれは非同期で実行されるためそれが正しく実行されるまでプログラム側でチェックすることはできない。そのためdeployVerticleメソッドの2番目の引数としてresult handlerを渡している。それがcontext.axyncAssertSuccess();である。これはverticleが正しく実行されなければ失敗を返す。さらにこれはverticleのstart シーケンスが終了することを待ってくれる。実際にはHelloVerticleのfut.complete()を待つのである。</p>
<h3>tearDown</h3>
<p>tearDownでは単純に生成されたvertx instanceを終了している。</p>
<h3>testMyApplication</h3>
<p>このメソッドは実際にリクエストを発行し結果をチェックしている。リクエストの発行および結果の取得はもちろん非同期である。これらを制御するためにTestContextを利用する。このオブジェクトのasync.complete()を利用することでいつテストが終わるのかを制御できる。</p>
<p>つまり、async handleが生成されるとgetNow()メソッドを利用してHTTPクライアントを作成し,また、テストアプリケージョンによって管理されるhttpリクエストを発行することができる(getNow() は　get(&#8230;).end() のショートカット)。リクエストの結果はlambdaで管理されbodyの中にHelloがあるかを確認している。</p>
<p>context.assert&#8230;はエラーが発生した段階ですぐにテストを中止し、エラーを出力する。非同期のVert.xアプリケージョンでのテストは常にassertionメッソドを利用する必要がある。</p>
]]></content:encoded>
			<wfw:commentRss>http://bhags.org/?feed=rss2&#038;p=727</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vert.x 3.1.0 Tutorial &#8211; 1 : Hello World</title>
		<link>http://bhags.org/?p=690</link>
		<comments>http://bhags.org/?p=690#comments</comments>
		<pubDate>Sat, 07 Nov 2015 11:56:02 +0000</pubDate>
		<dc:creator><![CDATA[bhags]]></dc:creator>
				<category><![CDATA[Infra]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Vert.x]]></category>
		<category><![CDATA[Hello World!]]></category>
		<category><![CDATA[Vert.x 3.1.0]]></category>

		<guid isPermaLink="false">http://bhags.org/?p=690</guid>
		<description><![CDATA[Vert.xの紹介は本家サイト(http://vertx.io/)に譲ってとりあえずHello Wo[...]]]></description>
				<content:encoded><![CDATA[<h1><span style="font-size: 14px; font-weight: normal; line-height: 21px;">Vert.xの紹介は本家サイト(</span><a style="font-size: 14px; font-weight: normal; line-height: 21px;" title="Vert.x" href="http://vertx.io/" target="_blank">http://vertx.io/</a><span style="font-size: 14px; font-weight: normal; line-height: 21px;">)に譲ってとりあえずHello Word！</span></h1>
<h6>まず、今回のソースコードは<a title="こちら" href="https://github.com/bhags1981/hello-verticle" target="_blank">こちら</a></h6>
<h2>0.開発環境</h2>
<hr />
<ul>
<li>Mac OS  X</li>
<li>java 1.8 以上</li>
<li>IntelliJ 14.</li>
</ul>
<h1>1 : IntelliJでmaven新規プロジェクト作成</h1>
<hr />
<ol>
<li>File -&gt;New -&gt; Project</li>
<li>Mavenを選択しNext<a href="http://bhags.org/wp-content/uploads/2015/11/maven_setting.png" target="_blank"><br />
<img class="wp-image-696 aligncenter" alt="Project Setting" src="http://bhags.org/wp-content/uploads/2015/11/maven_setting.png" width="343" height="230" /></a></li>
<li>maven project 設定<a href="http://bhags.org/wp-content/uploads/2015/11/create_mvn_project.png" rel="fancybox[690]" target="_blank"><img class="wp-image-691 aligncenter" alt="maven project create" src="http://bhags.org/wp-content/uploads/2015/11/create_mvn_project.png" width="342" height="229" /></a>
<ul>
<li>GroupId : totorial.vertx</li>
<li>ArtifactId : hello-verticle</li>
<li>Version : 1.0-SNAPSHOT</li>
</ul>
</li>
<li>Project name / location<a href="http://bhags.org/wp-content/uploads/2015/11/project_setting.png" rel="fancybox[690]" target="_blank"><img class=" wp-image-712 aligncenter" alt="project_setting" src="http://bhags.org/wp-content/uploads/2015/11/project_setting.png" width="363" height="245" /></a>
<ul>
<li>name : hello-virticle</li>
<li>location : すきなところへ</li>
</ul>
</li>
</ol>
<h1>2 : pom.xml に依存関係を追加</h1>
<hr />
<p>以下の依存関係およびbuildをpom.xml のversionの下に追加</p>
<pre>&lt;dependencies&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;io.vertx&lt;/groupId&gt;
        &lt;artifactId&gt;vertx-core&lt;/artifactId&gt;
        &lt;version&gt;3.1.0&lt;/version&gt;
    &lt;/dependency&gt;
&lt;/dependencies&gt;

&lt;build&gt;
    &lt;plugins&gt;
        &lt;plugin&gt;
            &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;
            &lt;version&gt;3.3&lt;/version&gt;
            &lt;configuration&gt;
                &lt;source&gt;1.8&lt;/source&gt;
                &lt;target&gt;1.8&lt;/target&gt;
            &lt;/configuration&gt;
        &lt;/plugin&gt;
    &lt;/plugins&gt;
&lt;/build&gt;</pre>
<p>Maven Project Windowより[Reimport All Maven Projects]を実行</p>
<p style="text-align: center;"><a href="http://bhags.org/wp-content/uploads/2015/11/reimport_mavent_project.png" rel="fancybox[690]" target="_blank"><img class="aligncenter  wp-image-720" alt="reimport_mavent_project" src="http://bhags.org/wp-content/uploads/2015/11/reimport_mavent_project.png" width="685" height="371" /></a></p>
<h1>3.Hello Verticle</h1>
<hr />
<p>HelloVerticle 作成</p>
<pre>package tutorial.vertx;

import io.vertx.core.AbstractVerticle;
import io.vertx.core.Future;
/**
 * Created by bhags on 15/11/07.
 */
public class HelloVerticle extends AbstractVerticle {

    @Override
    public void start(Future&lt;Void&gt; fut) {
        vertx
                .createHttpServer()
                .requestHandler(r -&gt; {
                    r.response().end(
                            "&lt;h1&gt;Hello Verticle!!! "&lt;/h1&gt;");
                })
                .listen(8080, result -&gt; {
                    if (result.succeeded()) {
                        fut.complete();
                    } else {
                        fut.fail(result.cause());
                    }
                });
    }
}

</pre>
<p>まず、HelloVerticleは AbstractVerticleを継承している。Vert.xの世界では 全ての<em>verticle</em>はコンポーネントである。AbstractVerticleを継承することでHelloVerticleよりvertxフィールドを取得することができる。</p>
<p>startメソッドはverticleがデプロイされると呼び出される。stopメソッドの実装も必要だがここではVert.xが代わりにGCを行ってくれる。また、startメッソドはFutureオブジェクトを受け取る。Futureメッソドはstartシーケンスの無事終わったか、エラーが発生したかなどをVert.x側に教えられる。Vert.xの特徴の一つとして非同期/non-blockingがある。verticleがデプロイされるとverticleはstart methodの終了を待たない。だからFutureパラメータの終了通知が大事である。</p>
<p>このHelloVerticleのstartではHTTPサーバーを生成しリクエストハンドラーをアタッチしている。request handlerはlambda式でrequestHandlerへ伝達されている。最後にサーバーは8080ポートにバウンドされポートのバウンドに問題なければfut.complete()を問題があれば(8080が使われているなど)fut.fail(失敗)を通知する。</p>
<h1>4:Create fatjar</h1>
<hr />
<p>pom.xmlに以下ソースを追加</p>
<pre>&lt;plugin&gt;
    &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
    &lt;artifactId&gt;maven-shade-plugin&lt;/artifactId&gt;
    &lt;version&gt;2.3&lt;/version&gt;
    &lt;executions&gt;
        &lt;execution&gt;
            &lt;phase&gt;package&lt;/phase&gt;
            &lt;goals&gt;
                &lt;goal&gt;shade&lt;/goal&gt;
            &lt;/goals&gt;
            &lt;configuration&gt;
                &lt;transformers&gt;
                    &lt;transformer
                            implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"&gt;
                        &lt;manifestEntries&gt;
                            &lt;Main-Class&gt;io.vertx.core.Launcher&lt;/Main-Class&gt;
                            &lt;Main-Verticle&gt;tutorial.vertx.HelloVerticle&lt;/Main-Verticle&gt;
                        &lt;/manifestEntries&gt;
                    &lt;/transformer&gt;
                &lt;/transformers&gt;
                &lt;artifactSet/&gt;
                &lt;outputFile&gt;${project.build.directory}/${project.artifactId}-${project.version}-fat.jar&lt;/outputFile&gt;
            &lt;/configuration&gt;
        &lt;/execution&gt;
    &lt;/executions&gt;
&lt;/plugin&gt;</pre>
<p>Run/Debug Configurationsでmaven実行configurationを追加 (Command line : clean package)</p>
<p style="text-align: center;"><a href="http://bhags.org/wp-content/uploads/2015/11/mvn_run_configuration.png" rel="fancybox[690]" target="_blank"><img class="aligncenter  wp-image-722" alt="mvn_run_configuration" src="http://bhags.org/wp-content/uploads/2015/11/mvn_run_configuration.png" width="691" height="389" /></a></p>
<h1>5:結果確認</h1>
<p>targetに生成されたhello-verticle-1.0-SNAPSHOT-fat.jarを実行</p>
<pre>java -jar /path/to/fatjar/hello-verticle-1.0-SNAPSHOT-fat.jar

*以下が表示されれば
11 07, 2015 10:31:44 午後 io.vertx.core.impl.launcher.commands.VertxIsolatedDeployer
情報: Succeeded in deploying verticle</pre>
<p>http://127.0.0.1:8080へアクセス後以下が表示されればOK</p>
<pre>Hello Verticle!!!</pre>
]]></content:encoded>
			<wfw:commentRss>http://bhags.org/?feed=rss2&#038;p=690</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mysql-connector-c ++ on mac</title>
		<link>http://bhags.org/?p=654</link>
		<comments>http://bhags.org/?p=654#comments</comments>
		<pubDate>Wed, 28 Oct 2015 02:25:16 +0000</pubDate>
		<dc:creator><![CDATA[bhags]]></dc:creator>
				<category><![CDATA[c++]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://bhags.org/?p=654</guid>
		<description><![CDATA[macでc++開発メモ c++でmysqlを利用したいので mysql-connector-c++を[...]]]></description>
				<content:encoded><![CDATA[<p>macでc++開発メモ<br />
c++でmysqlを利用したいので<br />
mysql-connector-c++をインストールする。</p>
<p>$brew search mysql</p>
<p>automysqlbackup		   mysql++		      mysql-connector-c++	 mysql-sandbox		    php53-mysqlnd_ms	       php56-mysqlnd_ms<br />
groonga-normalizer-mysql   mysql-cluster	      mysql-connector-odbc	 mysql-search-replace	    php54-mysqlnd_ms<br />
mysql			   mysql-connector-c	      mysql-proxy		 mysqltuner		    php55-mysqlnd_ms</p>
<p>$brew install mysql-connector-c++</p>
]]></content:encoded>
			<wfw:commentRss>http://bhags.org/?feed=rss2&#038;p=654</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>dispatch_asyncの内部コードが実行されない時</title>
		<link>http://bhags.org/?p=648</link>
		<comments>http://bhags.org/?p=648#comments</comments>
		<pubDate>Tue, 13 Oct 2015 02:14:59 +0000</pubDate>
		<dc:creator><![CDATA[bhags]]></dc:creator>
				<category><![CDATA[Objective-c]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[dispatch_async]]></category>
		<category><![CDATA[singletone]]></category>

		<guid isPermaLink="false">http://bhags.org/?p=648</guid>
		<description><![CDATA[dispatch_asyncの内部コードが最後まで実行されず原因を調べた。 原因はsingleton[...]]]></description>
				<content:encoded><![CDATA[<p>dispatch_asyncの内部コードが最後まで実行されず原因を調べた。<br />
原因はsingletone実装の問題があった。</p>
<p>dispatch_asyncで呼ばれたsingletoneオグジェクトが<br />
正しく初期化されないことが原因。</p>
<p>[だめな方法]<br />
+(MyClass) shared<br />
{<br />
    static　MyClass *_sharedInstance = nil;<br />
    if(_sharedInstance == nil){<br />
        dispatch_once_t onceTokeon;<br />
        dispatch_once(&#038;onceTokeon, ^{<br />
            _sharedInstance = [[MyClass alloc] init];<br />
        });<br />
    }<br />
    return _sharedInstance;</p>
<p>}</p>
<p>[正しい方法]<br />
+(MyClass *){<br />
    static MyClass *sharedInstance;<br />
    @synchronized(self) {<br />
        if (sharedInstance == nil) {<br />
            sharedInstance = [[MyClass alloc] init];<br />
        }<br />
    }<br />
    return sharedInstance;<br />
}</p>
<p>[Apple 推奨]<br />
+(MyClass *) shared<br />
{<br />
    static MyClass *_sharedInstance = nil;<br />
    static dispatch_once_t onceToken = 0;<br />
    dispatch_once(&#038;onceToken, ^{<br />
        _sharedInstance = [[MyClass alloc] init];<br />
    });<br />
    return _sharedInstance;<br />
}</p>
]]></content:encoded>
			<wfw:commentRss>http://bhags.org/?feed=rss2&#038;p=648</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Xcode 6 iOS UILabel font size 自動リサイズ</title>
		<link>http://bhags.org/?p=642</link>
		<comments>http://bhags.org/?p=642#comments</comments>
		<pubDate>Sat, 26 Sep 2015 11:21:23 +0000</pubDate>
		<dc:creator><![CDATA[bhags]]></dc:creator>
				<category><![CDATA[Objective-c]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[auto resize]]></category>
		<category><![CDATA[font]]></category>
		<category><![CDATA[UILabel]]></category>

		<guid isPermaLink="false">http://bhags.org/?p=642</guid>
		<description><![CDATA[XCodeで iPad, iPhoneのサイズ別に fontのサイズを自動調節したい場合 元のネタ:[...]]]></description>
				<content:encoded><![CDATA[<p>XCodeで iPad, iPhoneのサイズ別に fontのサイズを自動調節したい場合<br />
元のネタ:</p>
<p>http://stackoverflow.com/questions/30008136/changing-uilabel-font-size-with-autolayout</p>
<p>公式サイト:</p>
<p>https://developer.apple.com/library/ios/recipes/xcode_help-IB_adaptive_sizes/chapters/ChangingtheFontforaSizeClass.html#//apple_ref/doc/uid/TP40014436-CH12-SW1</p>
<p>UILabelのfont設定のところの左にある+ボタンを押して対応<br />
compact width/regular height : iPhone portrait<br />
any width/compact height : iPhone Landscape<br />
regular width/regular height : iPad portrait</p>
]]></content:encoded>
			<wfw:commentRss>http://bhags.org/?feed=rss2&#038;p=642</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone ip address 自動更新 airplane モードをCommand lineで実行</title>
		<link>http://bhags.org/?p=606</link>
		<comments>http://bhags.org/?p=606#comments</comments>
		<pubDate>Mon, 29 Jun 2015 03:01:28 +0000</pubDate>
		<dc:creator><![CDATA[bhags]]></dc:creator>
				<category><![CDATA[Objective-c]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[airplane mode]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[launchctl]]></category>

		<guid isPermaLink="false">http://bhags.org/?p=606</guid>
		<description><![CDATA[[課題] iPhoneのGlobal ip addressを自動更新 [方針] 1.network [...]]]></description>
				<content:encoded><![CDATA[<p>[課題]<br />
iPhoneのGlobal ip addressを自動更新<br />
[方針]<br />
1.network deviceを再起動し更新 (成功)<br />
2.airplane modeをprivate apiを利用し on / off　(成功)</p>
<p>[対策詳細1]<br />
Step<br />
1)iPhone Jail break<br />
2)open-ssh install<br />
3)network restartメッソドを実装<br />
4)アプリをルートアプリに昇格</p>
<p>1) iPhone Jail break<br />
- 7.1.x<br />
- iTunesがインストールされているかを確認すること</p>
<p>http://tools4hack.santalab.me/how-to-ios71-ios711-untethered-jailbreak-pangu.html</p>
<p>2)-open-sshインストール<br />
cydiaよりインストール</p>
<p>3)network refresh method<br />
3-1)ダメな方法<br />
[参考URL] http://www.sinfuliphone.com/showthread.php?t=2144<br />
network commandをインストールしrefreshする方法はwifiは更新できるが<br />
3G/4G回線は更新できなかった。<br />
3-2)成功した方法<br />
system(&#8220;/bin/launchctl  unload -w /System/Library/LaunchDaemons/com.apple.CommCenter.plist&#8221;);<br />
system(&#8220;/bin/launchctl  load -w /System/Library/LaunchDaemons/com.apple.CommCenter.plist&#8221;);<br />
CommCenter自体をリロードすることでネットワークの更新に成功</p>
<p>4)アプリをルートアプリに昇格<br />
3)の実施にはアプリをルートアプリに昇格させる必要がある。<br />
4-1)main.mにルート権限取得コード追加<br />
//setuidとsetgidを実施<br />
int main(int argc, char * argv[]) {<br />
    @autoreleasepool {<br />
        if (!(setuid(0) == 0 &#038;&#038; setgid(0) == 0))<br />
        {<br />
            NSLog(@&#8221;Failed to gain root privileges, aborting&#8230;&#8221;);<br />
        }<br />
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));<br />
    }<br />
}<br />
4-2)iPhoneでアプリをルートに昇格(sample.app)</p>
<p>/private/var/mobile/Applications/xxxrandomstringxxxx/sample.appを<br />
/Applications/へ移行 </p>
<p>/Applications/sample.app/sample を<br />
/Applications/sample.app/sample2へ名前変更</p>
<p>エラー回避の為のDirectory 生成<br />
mkdir -p /var/db/launchd.db/com.apple.launchd</p>
<p>sydiaよりテキスト編集nanoをインストール</p>
<p>nanoで　/Applications/sample.app/sampleを新規生成<br />
下記ソースを追加</p>
<p>権限設定<br />
chown -r root.wheel /Applications/sample.app<br />
chmod 755 /Applications/sample.app/sample<br />
chmod 6775 /Applications/sample.app/sample2</p>
<p>spring boardをリスタート<br />
-端末を再起動するか、cydiaよりrespringアプリをインストールして実行<br />
上記でアプリがルート権限で実行可能になる</p>
<p>[対策詳細2]-airplaneをプログラムでon/off<br />
1)jail break<br />
2)ssh install<br />
3)private api /AppSupport.framework/RadiosPreferences.hを使用<br />
3-1)private frameworkをxcodeへ追加.frameworkの経路は下記<br />
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/PrivateFrameworks/AppSupport.framework<br />
3-2)airplane mode用下記headerを作成</p>
<p>#import <Foundation/Foundation.h><br />
@interface RadiosPreferences : NSObject {<br />
    int _applySkipCount;<br />
    BOOL _cachedAirplaneMode;<br />
    NSObject<OS_dispatch_queue> *_dispatchQueue;<br />
    BOOL _isCachedAirplaneModeValid;<br />
    struct __SCPreferences { } *_prefs;<br />
    BOOL notifyForExternalChangeOnly;<br />
}</p>
<p>@property (nonatomic) BOOL airplaneMode;<br />
@property (nonatomic) BOOL notifyForExternalChangeOnly;</p>
<p>+ (BOOL)shouldMirrorAirplaneMode;</p>
<p>- (BOOL)airplaneMode;<br />
- (void)dealloc;<br />
- (id)delegate;<br />
- (void*)getValueForKey:(id)arg1;<br />
- (id)init;<br />
- (id)initWithQueue:(id)arg1;<br />
- (void)initializeSCPrefs:(id)arg1;<br />
- (BOOL)notifyForExternalChangeOnly;<br />
- (void)notifyTarget:(unsigned int)arg1;<br />
- (void)refresh;<br />
- (oneway void)release;<br />
- (void)setAirplaneMode:(BOOL)arg1;<br />
- (void)setAirplaneModeWithoutMirroring:(BOOL)arg1;</p>
<p>- (void)setDelegate:(id)arg1;<br />
- (void)setNotifyForExternalChangeOnly:(BOOL)arg1;<br />
- (void)setValue:(void*)arg1 forKey:(id)arg2;<br />
- (void)synchronize;<br />
@end</p>
<p>3-3)on / off code<br />
    RadiosPreferences* pref  = [[RadiosPreferences alloc] init];<br />
    pref.airplaneMode = (YES/NO);<br />
    [pref synchronize];<br />
4)実行権限よentitlement追加<br />
airplaneモードメッソド実行のためにバイナリーへ下記entitlementを追加<br />
4-1)ldidインストール<br />
署名用のldidインストール<br />
git clone git://git.saurik.com/ldid.git<br />
cd ldid<br />
git submodule update &#8211;init<br />
/*<br />
make.sh内のXcodeのpathを修正<br />
*/<br />
./make.sh<br />
cp -f ./ldid　/usr/local/bin/ldid</p>
<p>4-2)アプリケーションを一度端末で起動<br />
上記で端末にアプリケーションが生成される<br />
あとは権限が適用されたバイナリに入れ替える</p>
<p>4-3)権限entitlement.xml</p>
<p><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"></p>
<plist version="1.0">
<dict><br />
    <key>com.apple.SystemConfiguration.SCDynamicStore-write-access</key></p>
<true/>
    <key>com.apple.SystemConfiguration.SCPreferences-write-access</key><br />
    <array><br />
        <string>com.apple.radios.plist</string><br />
    </array><br />
</dict>
</plist>
<p>4-3)権限をバイナリへ適用<br />
cd ~/Library/Developer/Xcode/DerivedData/{sampleapp-randomsting}/Build/Products/Debug-iphoneos/sampleapp.app/<br />
ldid -S/path/to/entitlement.xml sampleapp<br />
注意！-Sの次に空白を入れないこと。でないとエラーが発生</p>
<p>4-4)バイナリsampleappをiphoneへscp移行<br />
scp sampleapp root@iphone.local.ip:~</p>
<p>4-5)iPhoneのshellで<br />
cp ~/sampleapp /private/var/mobile/Applications/{randomstring}/sampleapp.app/</p>
<p>4-6)respring<br />
再起動もしくはcydiaよりrespringアプリをダウンロードしrespring</p>
<p>以上</p>
]]></content:encoded>
			<wfw:commentRss>http://bhags.org/?feed=rss2&#038;p=606</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
