Google+ Followers

2014年12月22日月曜日

Swift:オプショナル型「!、?」とnil coalescing operator「??」

Swiftコードで見かけて困惑しました。
なんだ、このビックリマークは!
例えば「Int!」「Int?」とかいうキーワード。

なんだこれ??

「??」も含めてまとめてみます。


  • 「?」はオプショナル(Optional)型
  • 「!」は暗黙的開示オプショナル(Implicitly Unwrapped Optional)型
  • 「??」はnil併合演算子(nil coalescing operator)
変数宣言時に使う?と!。
Playgroundで確認してみると怒られているのはInt!にnilを代入しようとする時だけです。

なぜだろうか。

var a: Int? = 10
この宣言は
var a: Optional<Int> = 10
と同等です。
nilが入る可能性があるよという意味らしい。
Intという整数型の値がOptional<>にラッピングされてる!

だから、使うときはラッピングを解いてあげないといけません。
var d = a! - 1
こんな感じです。この作業をアンラッピング(開示)というらしいです。

いちいち面倒くさい!!
暗黙的にやってくれよ!というのが「!」です。
var a: Int! = 10
そうすると、
var d = a - 1
とできます。
var d = a! - 1
としてもエラーは起きないようです。


ちなみに?と!どちらも宣言時はnilが入ってるようです。

?にはOptional Chainingというもう一つ意味があるらしい。
※これはまた今度調べよう。

それよりも「??」が気になる。
ほかの言語でもよく見かける三項演算子の形
var a: Int? = 10
と宣言されているとnilの可能性があるので
var b = a != nil ? a! : 0
というようにnilかどうかチェックするのに便利なのが三項演算子
めんどーーーい!!
var b = a ?? 0
とかけるよ!

以下のサイト(http://qiita.com/cotrpepe/items/518c4476ca957a42f5f1)と書籍を参考にしています。

2014年12月18日木曜日

iOSアプリの64bit対応義務化

アップルからデベロッパー向けにメールが来ました!
2015/2/1からは64bit対応必須、iOS8でビルドするようにと。

ほとんどはビルドオプションを変更すればいいけど、32bitで作ってる部分は修正が必要そうだ。

今後のXcodeはデフォルトで64bitビルドになるのかな?

2014年11月28日金曜日

Mac YosemiteでChrome39がクラッシュする

Chromeがクラッシュする。
リセットしてもクラッシュする。

とりあえずダウングレードしてバージョン38に戻して回避。
以下の方法がGoogle Chrome Help Forumで提案されてました。

1.Chromeを終了する
2.必要あらば、~/Library/Google/Chromeと~/Library/Preferences/com.google.Chrome.plistをバックアップ
3.アプリケーションからGoogle Chrome.appを削除
4.自動更新を無効にする
$defaults write com.google.Keystone.Agent checkInterval 0
5.ここから38をダウンロードしてインストール
※google chromeについてっていうメニューをみない!ここを見ると更新トリガーが入るようで39になってしまう。

とりあえずこれで回避して、
安定したという情報をゲットしてからアップします。

2014年11月6日木曜日

Mac OS X 10.10 YosemiteでPhp Storm 8が起動しない場合

PhpStormを最近愛用しているけど、Yosemiteにアップデートしたら起動しない。

OS:Mac OS X 10.10 Yosemite
PhpStorm:8
Java:1.7, 1.8 両方ともOracle

Appleのデベロッパーフォーラムですでにスレッドが立っていますが、
(https://devforums.apple.com/thread/246986)
Dyld Error Message:
  Symbol not found: _CGContextSetAllowsAcceleration
  Referenced from: /Library/Java/JavaVirtualMachines/1.6.0_29-b11-397.jdk/Contents/Libraries/libawt.jnilib
  Expected in: /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices

上記のようなエラーが吐かれてPhpStormは落ちます。
問題はJava1.6にあるようですが、いろいろやるのも面倒なので1.8で動くようにしてあげたら起動した。
動作保証外だと思うので自己責任で。
PhpStorm.appのパッケージを表示してContents/Info.plistの
<key>JVMVersion</key>
<string>1.6*</string>
<key>JVMVersion</key>
<string>1.8*</string>
にしちゃう。1.7をインストールしてるひとは1.7でいんじゃないかな?

2014年10月5日日曜日

Magentoのダッシュボード下部に表示される標準の住所を日本語の並び順にする

ダッシュボードの標準住所(購入者住所と配送先住所)が英語圏表記!
直したくてテンプレートファイルを探しまわったけどない。。。

そしたらテンプレートファイル制御じゃなくて管理画面でテンプレートを 編集するとのこと。

システム>設定>顧客設定の下の方に【住所表記テンプレート】がある。
これだ!これのHTMLがそれらしい。

とりあえず、下記のように直した。

{{if postcode}}{{var postcode}}{{/if}}<br/>
{{if region}}{{var region}}{{/if}}{{if city}}{{var city}}{{/if}}
{{if street1}}{{var street1}}<br />{{/if}}
{{depend street2}}{{var street2}}<br />{{/depend}}
{{depend street3}}{{var street3}}<br />{{/depend}}
{{depend street4}}{{var street4}}<br />{{/depend}}
{{depend company}}{{var company}}<br />{{/depend}}
{{depend prefix}}{{var prefix}} {{/depend}}{{var lastname}} {{depend middlename}}{{var middlename}} {{/depend}}{{var firstname}}{{depend suffix}} {{var suffix}}{{/depend}}<br/>
{{depend telephone}}電話番号: {{var telephone}}{{/depend}}
{{depend fax}}<br/>FAX番号: {{var fax}}{{/depend}}
{{depend vat_id}}<br/>VAT: {{var vat_id}}{{/depend}}

VATは表示しない設定だからいらないような気もするが。。。

これで日本式表記になったよ。

Magento1.9で郵便番号自動入力エクステンションを入れる

ベリテワークスのMagentoエクステンションにいつもお世話になっております。

今回、郵便番号自動入力エクステンションをいつものようにインストールしました。
管理画面から有効にして意気揚々と試してみても動かない。

getpostcodeという名の名前空間なのかな?
レイアウトファイルはrack_getpostcode.xmlでした。

中身を見てみると、どうやらbefore_body_endというブロックにコードを吐き出している。
自動入力したいページのマスターテンプレートが2columns-left.phtmlで、
中のコードを除くと、before_body_endがないではないか!!

なんで?!

自分で誤って消したのか、
そもそもなかったのかは定かではないが。

とにかくブロックソースを吐き出すように<?php echo $this->getChildHtml('before_body_end') ?>をフッターブロックの直後に追加してやる。

無事に自動入力ができるようになりました!
シンプルですばらしいエクステンションをいつもありがとうございます。

2014年9月22日月曜日

MagentoのOnePageCheckoutの注文するボタンが動作しなかったら

【不具合の現象】
注文するボタンをクリックAjax処理ダイアログが表示される。
ダイアログが消えても画面遷移しない。


http://www.magentocommerce.com/boards/viewthread/610464/P15/
このページを参考にしてみて下さい。
恐らくCSRF対策のform-keyが付与されていないためかと。

Magento1.9のOnePageCheckoutで不具合?

チェックアウト手続きが先に進まない問題があった。

【不具合の現象】
支払い方法が表示されない

Ajaxの通信結果を見てもデータを読み込んで来てはいる。
なのに表示されない。

いろいろ調べた結果、
idがなかったことが原因だったようです。

       ↓このidを追加したら表示されるようになりました。
<fieldset id="checkout-payment-method-load">    <?php echo $this->getChildHtml('methods') ?></fieldset>

2014年9月11日木曜日

Magentoの商品購入ページの個数選択をテキストフィールドからドロップダウンにする

ユーザが商品個数を入力するのは面倒になるので、
ドロップダウンで選択するようにする。

app/design/frontend/[namespace]/[package]/template/catalog/product/view/addtocart.phtml

下記赤字でコメントアウトしている部分がもともとテキストフィールド入力のためのコード。
<!--        <input type="text" name="qty" id="qty" maxlength="12" value="<?php echo $this->getProductDefaultQty() * 1 ?>" title="<?php echo $this->__('Qty') ?>" class="input-text qty" />-->
        <select name="qty" id="qty" title="<?php echo $this->__('Qty') ?>">
        <?php
          for ($i = 1; $i <= 5; $i++) {
            if ($this->getProductDefaultQty() == $i) {
           echo "<option value='$i' selected='selected'>$i</option>";
            } else {
           echo "<option value='$i'>$i</option>";
            }
          }
        ?>
青字のようにselectに変えてあげるとドロップダウンになります。

もっといい方法があったらおしえてください。

2014年9月3日水曜日

Magentoで商品詳細ページに商品タグのタブを非表示にする方法

商品についているタグを表示しないという時画像のように「商品のタグ」というタブは邪魔。

この「商品のタグ」を非表示にしたい!!

最初catalog.xmlの166行付近のcatalog_product_viewセクションにある、

<block type="catalog/product_view_tabs" name="product.info.tabs" as="info_tabs" template="catalog/product/view/tabs.phtml" >
                    <action method="addTab" translate="title" module="catalog"><alias>description</alias><title>Product Description</title><block>catalog/product_view_description</block><template>catalog/product/view/description.phtml</template></action>
                    <action method="addTab" translate="title" module="catalog"><alias>upsell_products</alias><title>We Also Recommend</title><block>catalog/product_list_upsell</block><template>catalog/product/list/upsell.phtml</template></action>
                    <!--<action method="addTab" translate="title" module="catalog"><alias>additional</alias><title>Additional Information</title><block>catalog/product_view_attributes</block><template>catalog/product/view/attributes.phtml</template></action>-->
これをコメントアウトして消えるかと思いきや消えない。困った。

他にもどっかでaddTabを実行しているXMLがあるのかと探してみたところ、
tag.xmlの66行目付近で以下のように書かれていました。
    <catalog_product_view translate="label">
        <label>Catalog Product View</label>
         <!-- Mage_Tag -->
         <!--<reference name="product.info.tabs">
            <action method="addTab" translate="title" module="tag"><alias>product.tags</alias><title>Product Tags</title><block>tag/product_list</block><template>tag/list.phtml</template></action>
        </reference>-->
        <reference name="product.tags">
            <block type="page/html_wrapper" name="product.tag.list.list.before" as="list_before" translate="label">
                <label>Tags List Before</label>
                <action method="setMayBeInvisible"><value>1</value></action>
            </block>
        </reference>
    </catalog_product_view>

赤字のようにコメントアウトしてキャッシュを消すとタブが表示されなくなりました。
めでたし。


2014年8月28日木曜日

Magentoの注文と返品翻訳対応になっていないのを修正

テンプレートコードをみてみるとそもそも翻訳対応コードになっていなかった。
<select name="oar_type" id="quick_search_type_id" class="select" title="" onchange="showIdentifyBlock(this.value);">
  <option value="email">Email Address</option>
  <option value="zip">ZIP Code</option>
</select>

青字の部分が翻訳できない。
ロケールファイルが適応されない。

修正するためには以下のようにコードを修正します。

<select name="oar_type" id="quick_search_type_id" class="select" title="" onchange="showIdentifyBlock(this.value);">
  <option value="email"><?php echo $this->__('Email Address') ?></option>
  <option value="zip"><?php echo $this->__('ZIP Code') ?></option>
</select>

赤字部分が修正部分です。
Mage_Sales.csvで定義されているEmail AddressとZIP Codeに対応させます。
Magento本体が対応してないので、
バグというか忘れ物な気がします。

ただ、Magento本体のコードからあくまでも切り離したいので、
自分の名前空間のテンプレートをいじってください。

ざっとしか見てませんが以下の2つで翻訳対応してない部分がありました。
template/sales/guest/form.phtml(34-45行目)
template/sales/widget/guest/form.phtml(43-44行目)

修正したらキャッシュを削除して更新して修正されていることを確認してください。


他にも翻訳対応してないところありそうだな。。。

2014年8月22日金曜日

Galleriaの左上にキャプションが表示されてしまう問題

Galleria初期化時に
$j('#galleria').galleria({
  _toggleInfo: false,
  showinfo: false,
  imagePosition: 'center',
  thumbPosition: 'top right',
  responsive: true,
  lightbox: true,
  swipe: true
});

としているにも関わらずshowinfoオプションが全然機能しない!!

目的は表示させないこと。
イラっとしたので根本的に表示させないようにした。
galleria.classic.jpの54〜57行目付近を編集しました。
        } else {
            /*info.show();*/ ←こいつをコメントアウトした
            this.$('info-link, info-close').hide();
        }

もう二度と表示されないように願う。

Magento Connectでインストールエラーが出たら


Can't open file package.xml for writing. Permission denied.

こんなエラーが出たら。。。

var/package/tmp/package.xml

の権限が444になっていないかチェックする。
666に変更してあげましょう。

Magentoでインデックスが再構築できなくなる問題

Magentoでインデックスが「xxxxが実行中です」みたいのが表示されて、
実行できないことが発生しました。

ちょっと強引なやり方かもしれませんが、
データベースのindex_processテーブルの内容を全部削除してしまうことで回避しました。

mysql> delete from index_process where status="pending";

削除後Magentoの管理画面で
1、キャッシュ管理でキャッシュを削除する。
2、インデックス管理でインデックスを全て再構築する。

これでとりあえず動くようになります。

2014年8月21日木曜日

Magentoで顧客の名前の表示を日本に合わせる

Magentoについての説明は他のサイトにお任せして割愛します。

例として以下の名前の登録の場合(ミドルネームは省略します)、
姓:日本
名:太郎

顧客の名前表示は次のようになってしまうはずです。
デフォルトの状態:太郎 日本様など

ここで厄介なのが姓名が逆転して表示されてしまう。
グローバルなお店では問題ないかもしれませんが、
日本国内で商売する店なら「日本 太郎」と表示したいところ。

テンプレートごとにやってもいいと思います。
explode関数などでゴリゴリやるのもありです。

全部のテンプレートファイルをチェックするのも面倒ですし、
見落としが合ってもいやなので根本的な解決法を手探りで探しました。

とりあえず、対策した方法を紹介します。
もっとよい方法があったら教えてくださいm(_ _)m

【注意事項】
・ファイルパスなどは適宜に読み替えて下さいね。
・バックアップをとりましょう。
・自己責任でお願いします。
編集するファイル(code/core/Mage/Customer/Model/Customer.php)の236行目あたり。

【修正箇所】
・標準の国設定を取得するようにした(※日本とそれ以外の国で表示を変えたいため)
$countryCode = Mage::getStoreConfig('general/country/default');
・日本の場合とそれ以外の国で場合分け(※日本のコードはJPでした)
if ($countryCode === 'JP')
 特定の国の表示を変更したい場合はもっと分岐を増やせば対応できそう。
・名前の表示順序
できるだけもとのソースコードを流用したかったので汚いソースコードですが、
そのままif分にぶっこみました。

修正前と修正後の関数を下記に載せておきますので参考までに。

■修正前の元の関数
    public function getName()
    {
        $name = '';
        $config = Mage::getSingleton('eav/config');
        if ($config->getAttribute('customer', 'prefix')->getIsVisible() && $this->getPrefix()) {
            $name .= $this->getPrefix() . ' ';
        }
        $name .= $this->getFirstname();
        if ($config->getAttribute('customer', 'middlename')->getIsVisible() && $this->getMiddlename()) {
            $name .= ' ' . $this->getMiddlename();
        }
        $name .=  ' ' . $this->getLastname();
        if ($config->getAttribute('customer', 'suffix')->getIsVisible() && $this->getSuffix()) {
            $name .= ' ' . $this->getSuffix();
        }
        return $name;
    }

■修正後の関数
    public function getName()
    {
        $name = '';
        $config = Mage::getSingleton('eav/config');
        // Get store country
        $countryCode = Mage::getStoreConfig('general/country/default');
        // Japan
        if ($countryCode === 'JP') {
            $name .=  $this->getLastname();
            if ($config->getAttribute('customer', 'suffix')->getIsVisible() && $this->getSuffix()) {
                $name .= ' ' . $this->getSuffix();
            }
            if ($config->getAttribute('customer', 'middlename')->getIsVisible() && $this->getMiddlename()) {
                $name .= ' ' . $this->getMiddlename();
            }
            if ($config->getAttribute('customer', 'prefix')->getIsVisible() && $this->getPrefix()) {
                $name .= $this->getPrefix() . ' ';
            }
            $name .= ' ' .$this->getFirstname();
        }
        // Other
        else {
            if ($config->getAttribute('customer', 'prefix')->getIsVisible() && $this->getPrefix()) {
                $name .= $this->getPrefix() . ' ';
            }
            $name .= $this->getFirstname();
            if ($config->getAttribute('customer', 'middlename')->getIsVisible() && $this->getMiddlename()) {
                $name .= ' ' . $this->getMiddlename();
            }
            $name .=  ' ' . $this->getLastname();
            if ($config->getAttribute('customer', 'suffix')->getIsVisible() && $this->getSuffix()) {
                $name .= ' ' . $this->getSuffix();
            }
        }
        return $name;
    }

2014年7月22日火曜日

iOS、Yosemiteがともにbeta4に

本日Beta4になったっていうメールが届きました。
CloudKitに関するアナウンスが含まれていた。メールのタイトルが「Updated Requirements for CloudKit」なので。

2014年6月11日水曜日

iOS8にアップデートしてみて

iOSのデベロッパーになってから3ヶ月。
iOS8にしてやろう!とOSファイルをダウンロード。

意気揚々とアップデートしたー!

再起動を繰り返すアイフォン。
対応してないアプリたちがクラッシュしていく。

LINEでさえクラッシュして使い物にならない。

まだまだ不安定なのでどうにかリカバリーモードでiOS7.1に復元。


快適!!!!

2014年4月20日日曜日

XPマシンの救いの手??Ubuntuの次のLTSがでた!

http://news.mynavi.jp/news/2014/04/20/017/

上記の記事によるとUbuntu14.04LTSがリリースされたもよう。
LTSはLong Term Supportの略。そのなのとおり長くメンテされる。

LiunxのデスクトップOSとして人気があるUbuntuのLTSリリースはとても待ち焦がれていました。通常のデスクトップOSとして使うにはサポートがあるかないかでだいぶ違ってくる。

XPのサポートが切れた今のタイミングで、古くなったマシンをUbuntuを載せてみる運用も有意義になってくる。

ユーザーインターフェイスに(操作感)になれれば無料はかなり魅力的だ。

ダウンロードは以下のサイトから日本語サイトからどうぞ。
http://www.ubuntulinux.jp/node/37

XPユーザーが流れさらなるユーザー獲得がありそうだ。
私もアップデートしてみようと思います。

2014年3月31日月曜日

野良サーバで攻撃を観測してみた①

@ozuma5119様の資料にインスパイアされ自分でもやってみたくなりましたので、
やってみた。一部についてブログにしてみます。

@ozuma511様はさくらVPSをレンタルしていて観察していました。
私はVPSを借りれるほどの余裕がないので流行のRaspberryPiをDMZに設定して観察してみました。

しばらく放置してみると、アクセスログにいろいろ面白そうなログがありました。
数回に分けて紹介したいと思います。巡回してスキャンされているようなログでした。

今回は下記のようなログにフィーチャーして考察していきたいと思います。
-----ログ-----
107.155.65.34 - - [18/Mar/2014:00:48:24 +0000] "GET /w00tw00t.at.blackhats.romanian.anti-sec:) HTTP/1.1" 404 489 "-" "ZmEu"
107.155.65.34 - - [18/Mar/2014:00:48:24 +0000] "GET /phpMyAdmin/scripts/setup.php HTTP/1.1" 404 479 "-" "ZmEu"
107.155.65.34 - - [18/Mar/2014:00:48:24 +0000] "GET /phpmyadmin/scripts/setup.php HTTP/1.1" 404 479 "-" "ZmEu"
107.155.65.34 - - [18/Mar/2014:00:48:25 +0000] "GET /pma/scripts/setup.php HTTP/1.1" 404 474 "-" "ZmEu"
107.155.65.34 - - [18/Mar/2014:00:48:25 +0000] "GET /myadmin/scripts/setup.php HTTP/1.1" 404 477 "-" "ZmEu"
107.155.65.34 - - [18/Mar/2014:00:48:25 +0000] "GET /MyAdmin/scripts/setup.php HTTP/1.1" 404 478 "-" "ZmEu"
---------------

とにかくsetup.phpというファイルが存在するかどうかを数パターンのパスでスキャンしているようです。

アクセスしようとしているパスがどこかで見た事あるパスだなー?って思って記憶を辿るとXAMPP使ってたときによく見てたような。。。
それはさておき、実際このログがどういう意味なのかを知りたくなるのでググってみると
意外と多くの方がこういった観察をしていることが分かります。

ググってみるとやはりozuma様のブログ「phpMyAdminを狙った攻撃観察」がヒットして、
しかも分かりやすいので同じログを検出した方は一読する価値はあります。
詳細については是非ozuma様のブログを読んで頂ければと思います。
対策にも触れていてたいへん参考になりました。

折角なので(ozuma様のブログを多々引用してしまうような形になりますが)自分なりに考察していきます。

【w00tw00t】
この意味についてozuma様が説明していました。とても面白かったです。
何だろうと気になっていたのでスッキリしました。悪い人たちもちゃんと名乗っているのだなとw

【107.155.65.34】
アクセス元のIPアドレスについて検索してみると以下のような結果が返ってきました。
IPアドレス問合せ先(取得時間は 0.877秒)
「 whois.arin.net (北アメリカおよびサブサハラ・アフリカ)」
ARINはAmerican Registry for Internet Numbersの頭文字なる組織のようです。
ARINのwhois検索で調べるとこのIPアドレスは「Incero LLC」なる会社のサーバのようです。テキサスのオースティンという場所にある会社のようです。
でも、踏み台にされているだけかもしれませんしこれ以上は追いません。
(というか私みたいな素人では追いきれません。)

【setup.phpまでのパス】
私のところに来たログのパスをまとめると以下のような感じになります。
phpMyAdmin3より古いバージョンにある脆弱性に対する攻撃のようです。
/phpMyAdmin/scripts/(デフォルトのパス)
/phpmyadmin/scripts/(小文字にして)
/pma/scripts/(省略系)
/myadmin/scripts/(省略系2)
/MyAdmin/scripts/(省略系3)
数パターンでスキャンしている。自動的に生成しているパスではなく定型パターンでスキャンしている感じ。おおよそこんな感じにしているだろうという考えのもとなのか、適当なのか。共通しているのはscriptsというところでした。


とまぁほとんどozuma様のブログと被ってしまったような考察になってしまいたいへん恐縮ですが勉強になりました。
phpMyAdminはMySQLをGUIでいじれるのは楽なので欠かせないツールだと思います。
インストールしっぱなしではなく最新のセキュリティ情報に気をつけて運用することが重要です。

次回は私もファイルがあるように見せかけて、次の一手は何をしてくるのかというのを見てみたいので実践する予定です。

2014年3月16日日曜日

ラズベリーパイでAndroid Debug Bridge(adb)を動かす

ラズベリーパイにWheezyをインストールしています。
インストールしているというかSDカードに入れています。

【やりたい事】
1.ラズパイのUSBにAndroid端末を接続
2.Adbサーバを起動して端末に接続
3.Adbkitで面白そうなアプリを作って動かす

1.は簡単にできます。
気をつける事は、ラズパイの電源を入れた状態でUSBを接続すると再起動しちゃう。
面倒という方は電源オフの状態でUSB接続してから起動するといいと思います。

2.Android公式サイトのLinux向けバンドルをダウンロードしてもそのままでは実行できませんでした。なるほど、そりゃそーか。と納得して。
誰かしら動かしてるだろうと調べる。案の定いました!
この人の記事にヒットしてリンク先のソースをダウンロードしました。
adb起動もうまく行った。

3.Node.js環境をapt-getコマンドで整える。nodejs、npmコマンドが使えればおけかと思っていました。
3.1.自分で書いたAdbkitアプリをダウンロードしてnpm installを実行すればpackage.jsonに従ってモジュールをインストールしてくれるかと思いきや!
apt-getでインストールしたnodejsのバージョンが低すぎたようだ。
仕方ないので自分でインストールする。
バージョンが頻繁に変わるのでnvmを導入するのがいいということで、
このサイト(http://d.hatena.ne.jp/hosikiti/20130925/1380093487)を参考にインストールします。

コンパイルにかなり時間を要するのでお気をつけを。

package.jsonがいけないのかnpm installだけではインストールできない。
モジュールのnode用モジュールを別々にインストールする。

$npm install ejs
$npm install express
$npm install adbkit
$npm install coffee-script

coffee-scriptは開発に使うのでインストールします。
$node app.jsを実行すれば上記のような画面が表示されて実行されました。

めでたし。

2014年1月29日水曜日

Java3Dでキーフレームアニメーションを更新してもアニメーションが動かない!

Java3Dを使ってオブジェクトをアニメーションさせる機会があって、
その際につまづいたことがあるのでメモ程度に書いておきます。

【目的】
連続で流れてくるデータに沿ってオブジェクトの位置をアニメーションしながら動かしたい。

【つまづいたこと】
位置は更新されるけど、アニメーションが動かない。
1回目はアニメーションされるけど2回目以降がアニメーションされない。


いろいろ試しましたよー

ちゃんとKBKeyFrameの更新も正しくできているのになぜアニメーションしないんだ!

で結局原因はAlphaクラスのsetStartTimeを呼び出していなかったことが原因でした。

alpha.setStartTime(System.currentTimeMillis()); // 現在時刻から開始

しっかりとこのサイトでも書いてありました。
ちゃんとドキュメントは読まないといけませんね。。。とほほ
http://j3dbook.javaopen.org/text/program7.html

2014年1月18日土曜日

3Dプリンター「Robo3D」が届いた!

2013年は3Dプリンターの話題をよく耳にしました。
低価格化により一般消費者でも購入できる価格帯になりました。
筆者も3Dプリンターに興味を持っており1台欲しいと思っていたのでいろいろと探しました。
そこで見つけたのが「Robo3D」でした。
599ドルか699ドルの2タイプでした。送料込みで8万ちょいでした。
かなりいいお値段ですが、ここは勢いだと誰かが言っていたのでポチった。
2013年5月26日に注文しました。
オーダー番号は1200番台でした。夏頃に届けばいいかなと軽い気持ちでポチった結果、
先日ようやく届きました。
半年以上かかるとは想像もしていませんでしたw

とりあえず届いたので開けてみる。

事前のメールで中国で大量に生産する拠点を作ったと知らせがきていた。
その通りのようで中国から荷物が届いた。
赤いシールが中国語のようだ。

箱の横にサイズが書いてある。
以外に大きいがケースがデカいだけ。

さて、いよいよ開けます。

箱を開けると一番上に電圧に関する注意書きが書いてある紙が目に入ってくる。
AC挿入口は封がしてあって、電圧を間違えないようにとの配慮だろう。
梱包は全体的に雑な感じがした。
付属品のドライバーもサイズが合わないし...本当にQCをパスしたのだろうかと心配しました。でも早期の製品に期待し過ぎてはいけないので先に進みましょう。


AC挿入口にある封を取ると電源ケーブルを接続できるようになっています。シールがはがしづらいので丁寧に拭き取ってあげるなどが必要です。

全体てはこんな感じです。フィラメントロールを掛ける付属品が簡易的すぎて心配です。
お試し用のフィラメントが付属されていると思い込んでいましたがありません。
箱から出したのはいいけどなにもできません...残念!!!!


正面から見るとこんな感じです。箱の中はすかすかですね。
高さなどのキャリブレーションがかなり必要な感じでした。


フィラメントロールを掛けるところです。単なる滑り止めが付いたカバーです。


Z軸のストッパースイッチ部分です。ノズルヘッドが土台に接触しないように調整します。解説動画によるとノズルと土台は紙1枚がスルスル通るくらいにするために手動で回して調整しました。


X軸かな?を操作するモーター部分とノズルヘッド部分です。オレンジ色のシールがしてある部分がノズルヘッドです。シャーペンの先を大きくしたような形でした。


今回はフィラメントがないので開封しただけで終わりました。次回は初期設定と出力を頑張ってしてみたいと思います。
















Robo3Dでいろいろ試みてる人は多くいるので切磋琢磨で頑張ってやりたいと思います。
次回をお楽しみに。