ぼくの話すことは、全部ネットに書いてある。

週末引きこもり族がカメラ片手に外に出ようとするブログ。

里山を走る/7000円弱で始めるオールドレンズ沼[倉渕村]

先週風邪でダウンしてたらいつの間にか、近所の桜が散ってました。

桜を求めて山の方へ。

f:id:aino123:20180408004504j:plain

新システム導入

悲報OM-2N修理不可フィルムカメラへの取っ掛かりが無くなりました。
朗報OM-2Nのレンズは良好

……ということで。



f:id:aino123:20180408004832j:plain

OM-2Nのレンズを活かすため、マイクロフォーサーズシステムを構築しました!

オールドレンズのマウントアダプターが一番用意されてるマウントではないでしょうか。

  • ボディ:LUMIX GF1:5000円前後で入手可能。m4/3システムの第一世代。恐らくミラーレス一眼の中古で一番安く出回ってます。
  • マウントアダプター:OM→m4/3:2000円弱で入手。

計7000円也

これで気になってたロシアレンズとかにも手が出せます。

古い機種で妥協するなと怒られそうですが、これからC社N社のフルサイズミラーレ控えてるのでそこまで投資できません。PEN-Fとか気になってきましたが……。

里山を走る

今回も明確な目的地もなく、とりあえず妙義山にナビをセットして走り出しました。

途中気になる脇道を見つけたらナビをオフにして気ままにドライブ。

見つけたのは地蔵峠林道という人気の少ない峠道。松井田町倉渕村をつないでいます。

里山が色とりどりの花々に飾られて、日本の原風景といった風情。

ドライブ楽しみすぎて写真撮ってない……。

里山の社:Shrine of woodlands

GF1+OM ZUIKO MC 50mmF1.4。撮って出し。
うまく言葉で表現できないけど、甘いボケ味な気がする。

マニュアルフォーカスでピントが決まるときもちいい。

m4/3は35mm換算だと約2倍の焦点距離なため、だいたい焦点距離100mmになってます。
ちょい画角がきつい。

散り際

GF1+OM ZUIKO MC 50mmF1.4。撮って出し。

まだまだ、このレンズの実力が引き出せてない。
明るいとこだとやっぱファインダーほしいなぁ。液晶だときつい。

若者たちの祭典/ぐんまプログラミングアワード2018見学・撮影してきた

f:id:aino123:20180325191941j:plain

昨年から開催されているぐんまプログラミングアワード

  • ジュニア部門:小・中学生対象。Scratchというプログラミング学習ツールを使って作成したプログラムのプレゼンテーション。
  • テクニカル部門プログラミングコンテストのように問題の解答スピードを競う。
  • アプリケーション部門:アプリケーションのアイディアのプレゼンテーション

という3つの部門でコンテストが行われました。

f:id:aino123:20180325193444j:plain

会場は群馬県庁わきの群馬会館。
写真は群馬県庁=群馬で一番高いビルです(ちなみに2位は高崎市庁)。

ブース出展

f:id:aino123:20180325192543j:plain

協賛企業様のブース出展。子どもを対象としたロボット作成講座などがありました。

f:id:aino123:20180325193139j:plain

乗れる!恐竜ロボット。
やっぱりこういう被写体は人も含めたい。
コミュ障だからなかなか言い出せないんだよなぁ。

コンテストの模様

写真撮影全面OKでした。むしろSNSで拡散してくれとのことです。

迷惑にならないようにバリアングル液晶閉じて撮影しました。
地味な一眼レフ機のメリット。スマホでの撮影より目立たなくていいですね。
ノイズも少ないし。

オープニング/パフォーマンス

来賓席・主賓積にはスーツのおじさんたち。

f:id:aino123:20180325194009j:plain

爆音で始まるあかぎ団(ご当地アイドル)と初音ミクのライブ

ライブ中清聴して、最後に盛大な拍手

オーケストラのコンサートかな?

f:id:aino123:20180325194717j:plain

ゲストのちょまどさん挨拶。

主賓席の最前列が「ちょまどさんご両親席」だったが少し面白かった。

f:id:aino123:20180325195725j:plain

LEDとプロジェクションマッピングを用いたパフォーマンスかぐづち-KAGUZUCHI-

会場がかなり盛り上がりました。

シャッタースピード早すぎて、光の軌跡が途切れる。
静止画で撮るもんじゃないです。


雷光炎舞かぐづち-KAGUZUCHI- Promotion Video Ver6

火はさすがに使ってないけどこんな感じ。

各部門の様子

f:id:aino123:20180325194955j:plain

テクニカル部門は別会場で競技。

f:id:aino123:20180325195145j:plain

ジュニア部門の発表。
ブロックを組み合わせる感じでプログラムが作れるようです。
プログラムも発表もしっかりしていて驚かされました。

f:id:aino123:20180325200659j:plain

アプリケーション部門は大学生~高校生。
需要と収益化を意識した発表が多くさすがといったところ。

f:id:aino123:20180325200737j:plain

気に入ったのが、沖縄からきた高校生2人が発表したサーチマップ

スマホアプリで、目的地に行く途中におすすめスポットがあればお知らせしてくれるというもの。
ターゲットはインスタグラマー。

 

こういった若々しい発表見ると自分もなにか作りたくなりますねぇ。

足元の春。家の周りを散歩してみた

試練:A Trial

今日は祝日なので出かけようと思ったらまさかの雪

春分の日なのに……。

車で出かけるのはやめて、家の周りを散歩してみました。
なんだそりゃって感じですが、小学校以来自宅周りの散歩なんてやったことない気がする。

トップの写真はつくし

雪を耐えてる春の草木を撮りたかった。

やっぱ一眼でローアングル撮影は重量的にキツイ。

f:id:aino123:20180321182835j:plain

Green&White

麦畑とまだ植えられていない畑で色がくっきり別れています。

f:id:aino123:20180321183309j:plain

桜はまだつぼみ。あともう一息で開花です。

さとつの知らないアクセサリーシューの世界

フラッシュとかを取り付けるこの部分。
アクセサリーシューと呼ぶそうです。
特に電子接点があるものはホットシューとも呼ぶと。

ヤシカY35を見てたらアクセサリーシューが付いてたので、フラッシュ以外に何か付けられないか色々調べました。

※注意:Canon製品には特殊規格のホットシューがあり、汎用品が使えない場合があるそうです。自己責任で!「それ使っちゃダメー!」キヤノンのカメラ EOS用のホットシューカバーはコレだよ! – プライベーティア フォトワーカー

アクセサリー系

ホットシューカバー

単純に接点を保護するためのカバーです。

シンプルなものから、フィギュアが乗ってる変わり種とかもあります。

自分は画像と同タイプの水準器付きをD5600につけてます。
ただ、ファインダーと同時に見れないし、ライブビューでも使いにくい。
三脚を使うときは三脚についてる水準器を使ってしまいます。
正直水準器としての出番はないです。

SDカードケース

ケーキ型のケース。かわいいが邪魔ではないだろうか。

ファインダー系

外付ファインダー

カメラによっては外付の電子ビューファインダーが用意されてます。

PLファインダー

PL効果確認用ファインダー

D5600のファインダーで見ても効果がわかりにくいので、ちょっと欲しい。

ドットサイト照準器

超望遠でも被写体を素早くファインダーに捉えることができます。

野鳥撮影とかで大活躍。

フィールドモニタ

みたまんま。ライブビューをでかく表示するためのモニタ。

特殊用途系

リモコンシャッター

www.kickstarter.com

スマホをリモコンにして露出やシャッタースピード、シャッター間隔などを細かく設定できます。

Kickstarter内に類似の製品が幾つも存在している模様。

サムレスト

ホールド感を増すためのグリップです。

アクセサリーシューが平らな天面にあるミラーレスやコンデジ

マイク

動画取る人向け。

露出計

フィルムカメラで、露出を計算するための機械……らしい。

マウント系

スマホ用マウントや

GoPro用マウントがあります。

雑記

最後の方めっちゃ適当……。

それはそれとして、クラウドファンディング中のYashicaから連絡がありました。

The Team have been totally dedicated to the digiFilm Camera Project working hard for the optimum solution in order to make Y35 even better.

Of course, it can’t be an excuse of oversight in updating. We are so sorry for that. We are going to inform the latest status soon and continue to have frequent update posted at regular basis.

意訳

チームは、Y35をより良くするために熱心にやってきたよ!

もちろん、更新低下の言い訳にはならないことは判ってるよ。すまないと思ってる。

最新情報を伝えられるよう努力するよ。

 

PrimeFaces6.1コンポーネントDataTableハック[Java EE/Jakarta EE]

会社で所属部署が変わり、Webアプリケーションの開発を行うことになりました。
使用するのはJakarta EE(Java EE)+GlassFish+PrimeFaces

f:id:aino123:20180312195526p:plainどう見てもトランスフォーマーモチーフ。

業務でJava使うのは初(チームメンバーも案件で使ったことないという……)。

ハックとかそんな大層なものでもないけれど、日本語資料が少ないので記録として残しておきます。

PrimeFacesコンポーネント(DataTable)拡張

PrimeFacesのコンポーネントは便利な半面小回りが効きません。
デモでは単体で動作している機能も、複合して使おうとすると思わぬ競合で動かないときがあります。

そういった時、必要になるのがextend

例1:DataTableのバグを直してみる~ColumnToggler+CellEdit~

表の項目の表示非表示を切り替えられる「ColumnToggler」。
便利ですが、「Cell Edit」と組み合わせると、Tabキーによる移動の挙動がおかしくなります。
PrimeFacesはTab移動を「tabCell」というFunctionで実装していますが、非表示の項目にまでフォーカスを合わせてしまうからです。

修正してみます。

primefaces/datatable.js at 6_1 · primefaces/primefaces · GitHub

GitHubソースコードから、Functionをコピーして追記(バージョンに注意)。

if(PrimeFaces.widget.DataTable) {
    PrimeFaces.widget.DataTable = PrimeFaces.widget.DataTable.extend({
    tabCell: function(cell, forward) {
        var targetCell = forward ? cell.next() : cell.prev();
        if(targetCell.length == 0) {
            var tabRow = forward ? cell.parent().next() : cell.parent().prev();
            targetCell = forward ? tabRow.children('td.ui-editable-column:first') : tabRow.children('td.ui-editable-column:last');
        }
        if(targetCell.is('td.ui-helper-hiden')){ //☆隠されたセルに移動したら再帰
            this.tabCell(targetCell,forward);    //☆
        } else {                                 //☆
            this.showCellEditor(targetCell);
        }                                        //☆
    }
}

☆が追記行です。

私は、上記のようなコードを「primefaces-patches.js」として保存し、JSF側で「<h:outputScript name="primefaces-patches.js" library="js" target="head"/>」のように読み込ませています。

例2:CellEdit中に右クリックしても編集終了しないようにする

CellEditで地味に厄介なのが、テキストボックスの編集中に右クリックすると編集終了してしまうとこ。

コンテキストメニューを使っての編集ができません。
なので、入力領域内での右クリックで編集が終了しないようにします。

if(PrimeFaces.widget.DataTable) {
    PrimeFaces.widget.DataTable = PrimeFaces.widget.DataTable.extend({
    bindEditEvents: function(cell, forward) {
        this.super(); //☆一部の動作を上書きできればいいので、元Functionを呼ぶ。
        var $this = this; //☆
        if(this.cfg.editMode === 'cell') {
            var cellSelector = '> tr > td.ui-editable-column';
            
            this.tbody.off('click.datatable-cell', cellSelector)
                        .on('click.datatable-cell', cellSelector, null, function(e) {
                            $this.incellClick = true;
                            
                            var cell = $(this);
                            if(!cell.hasClass('ui-cell-editing')) {
                                $this.showCellEditor($(this));
                            }
                        });
                        
            $(document).off('click.datatable-cell-blur' + this.id)
                        .on('click.datatable-cell-blur' + this.id, function(e) {                            
                            if(!$this.incellClick && $this.currentCell && !$this.contextMenuClick && !$.datepicker._datepickerShowing) {
                                if($this.cfg.saveOnCellBlur) {          //☆
                                    if(!e.target.classList.contains("ui-inputfield") || e.button !== 2) //入力領域外での右クリックまたは左クリックなら編集終了
                                        $this.saveCell($this.currentCell);
                                }                                       //☆
                                else
                                    $this.doCellEditCancelRequest($this.currentCell);
                            }
                            
                            $this.incellClick = false;
                            $this.contextMenuClick = false;
                        });
}

ちなみに、セル編集中のcontextMenuと行選択時のcontextMenuを使い分けたい時は

<p:contextMenu for="table" beforeShow="return PF('theWidget').currentCell == null;">
    hogehoge
</p:contextMenu>

のようにすればOK。セルが編集中ならcurrentCellに値が入っています。

例3:CellEditにおいてEnterキー、矢印キーで上下移動する

Excelっぽい移動を実装します。

if(PrimeFaces.widget.DataTable) {
    PrimeFaces.widget.DataTable = PrimeFaces.widget.DataTable.extend({
    enterCell: function(cell, forward) {                                 //☆tabCellを元に新規作成
        var tabRow = forward ? cell.parent().next : cell.parent().prev();//☆移動方向判定
        var targetCell = tabRow.children('td.ui-editable-column:first'); //☆次の行の先頭を取得
        for(var i = 0;i < cell[0].cellIndex;i++) {                       //☆
            targetCell = targetCell.next();                              //☆
        }                                                                //☆
        this.showCellEditor(targetCell);                                 //☆
    },                                                                   //☆
    showCurrentCell: function(cell) {
        ~略~
        //bind events on demand
        if(!cell.data('edit-events-bound')) {
            cell.data('edit-events-bound', true);
            
            inputs.on('keydown.datatable-cell', function(e) {
                    var keyCode = $.ui.keyCode,
                    shiftKey = e.shiftKey,
                    key = e.which,
                    input = $(this);
                    
                    if(key === keyCode.ENTER || key == keyCode.NUMPAD_ENTER) {
                        $this.saveCell(cell);
                        
                        $this.enterCell(cell,!shiftKey);                 //☆
                        
                        e.preventDefault();
                    }
                    else if(key === keyCode.UP) {                        //☆
                        $this.saceCell(cell);                            //☆
                        $this.enterCell(cell,false);                     //☆
                        e.preventDefault();                              //☆
                    }                                                    //☆
                    else if(key === keyCode.DOWN) {                      //☆
                        $this.saceCell(cell);                            //☆
                        $this.enterCell(cell,true);                      //☆
                        e.preventDefault();                              //☆
                    }                                                    //☆
                    else if(key === keyCode.TAB) {
                        if(multi) {
                            var focusIndex = shiftKey ? input.index() - 1 : input.index() + 1;
                            
                            if(focusIndex < 0 || (focusIndex === inputs.length) || input.parent().hasClass('ui-inputnumber')) {
                                $this.tabCell(cell, !shiftKey);                                
                            } else {
                                inputs.eq(focusIndex).focus();
                            }
                        }
                        else {
                            $this.tabCell(cell, !shiftKey);
                        }
                        
                        e.preventDefault();
                    }
                    else if(key === keyCode.ESCAPE) {
                        $this.doCellEditCancelRequest(cell);
                        $this.currentCell = null;
                        e.preventDefault();
                    }
                })
                .on('focus.datatable-cell click.datatable-cell', function(e) {
                    $this.currentCell = cell;
                });
        }
    });
}

tabCellを元にenterCellを新規実装。
キーイベントを追加してます。

例4:CellEditで編集した行に色を付ける

DataTableにおいて、行ごとに色を付けるためにはrowStyleClassを用います。

<p;dataTable id="mytable" widgetVar="theWidget" value="#{Bb.view}" var="item" rowKey="#{item.id}"
  editable="true" editMode="cell" selectionMode="single" selection="#{Bb.selected}"
  rowStyleClass="#{Bb.update_item.contains(item) ? 'update' : null}">
    <p:ajax event="cellEdit" listner="#{Bb.onCellEdit}" update=":form:msgs" />
    <hogehoge />
</p:dataTable>

管理ビーンのonCellEditでは、ArrayListであるupdate_itemにselectedをAddしてます。
PrimeFacesのDataTableは編集時、編集が行われた行のみ再描画します。
しかし、rowStyleClassの判定を再実行するためには、DataTable自体の再描画が必要です。

しかしながら、テーブル全体を無理やり再描画してしまうと、再描画とcellEditイベントが競合してしまい、挙動がおかしくなることがあります。

そこで、cellEditRequest発行時にスタイルシートを適応します。

if(PrimeFaces.widget.DataTable) {
    PrimeFaces.widget.DataTable = PrimeFaces.widget.DataTable.extend({
    doCellEditRequest: function(cell) {
        this._super(cell);                 //☆
        cell.parent().addClass('update');  //☆
    });
}

ここで設定する'update'は再描画を行うと消えてしまいますが、再描画時にrowStyleClassの判定が行われることで設定し直されます。

参考資料

stackoverflow.com

逆光撮影のゴースト対策/花粉症の根源へ突っ込む[埼玉県陣見山]

埼玉に用事があったため、それを済ませてから目的地なしのドライブをしました。

身近な春:Familiar spring

田舎道を走っていると、小さな花畑発見。
春の訪れを感じます。
...
カメラ始める前は絶対言わないであろうセリフだなぁ。

ゴーストに対する即席対策

f:id:aino123:20180311214852j:plain

逆光で菜の花を撮ったらゴーストがくっきり。

以前、はてなブログの記事で見た(失礼ながらどの記事か忘れてしまいました)光源対策、「片手フード」を実践しました。

「片手フード」とは、その名の通り、片手でレンズに入る光を遮ること。
黒いうちわとかも使えるそうです。

身近な春:Familiar spring

見事ゴースト撃退に成功!

したのは良いんですが、バリアント液晶使いつつのローアングル+片手で一眼構えると腕がプルプル。
ピント合わせるのめちゃくちゃ難しい。

そういえば記事だと三脚使ってたなぁ。

長瀞八景~間瀬峠と陣見山のビューライン~

とりあえず山を目指す性格のせいか、また長瀞方面へ行ってしまいました。

f:id:aino123:20180311215927j:plain

登り中。単一車線の細い道。登って降りるまで1台しか他の車を見ませんでした。

陣見山という名の通り、児玉町が一望できます。

f:id:aino123:20180311220225j:plain

山の名前も知らずに登っていたのですが、説明の立て看板が有りました。

長瀞八景 間瀬峠と陣見山のビューライン

間瀬峠、陣見山を縦走する陣見山林道は、南に秩父連山、眼下に荒川、腸内全域を眺めることができ、北は遠く赤城・日光連山、関東平野を一望できます。特に、全山を彩る紅葉と、冬晴れた日に眺める夜景はとてもロマンチックです。この素晴らしい林道を「間瀬峠・陣見山ビューライン」と命名しましょう。

「命名しましょう」ってなんやねん。

車窓から

せっかくなのでビューラインからの景色をパチリ。
風景にピントを合わせても撮ったけど、こっちのが好き。

ココらへんではっと気がつく。
自分が天敵の杉に囲まれていることに

甘楽町八幡山散策[市町村ビンゴ]

甘楽町

群馬県甘楽郡甘楽町

お隣の富岡製糸場が有名になりすぎて、影が薄くなってしまった印象がありますが、小幡の桜並木武家屋敷楽山園こんにゃくパークなど見どころ沢山。

そちらは桜の季節にまた訪れたいと思います。
今回は事前情報無くたまたま気になって寄った「小幡八幡神社」。

小幡八幡神社/八幡山

f:id:aino123:20180304002123j:plain

鳥居の奥にシンプルな門

f:id:aino123:20180304002244j:plain

奥の拝殿。織田宗家の守護神を祀っているとか。
本殿の写真は撮り忘れましたが、完全に覆われた形になっています。
内部の公開と御朱印は日曜のみ。行ったのは土曜。残念。

山頂付近

裏手が八幡山。小高い丘ぐらいの高さです。
斜面に寄贈された山茶花が沢山植えてありました。

標準レンズでも望遠側にすればしっかりボケますね。

空の舞台:The stage in the sky

頂上の舞台。ギットギトの現像ですが、この位しないと舞台が映えなかった。

雑記

今回も前日飲み会。SUN&CLOUD持参。

f:id:aino123:20180303220733j:plain

翌朝お昼に起床というコンディション。

帰宅後眠気が酷く、ぼけーっとカメラの掃除を行っていたら部屋の中でSDカード紛失して30分くらい探しました。冷汗かいた。