2016年3月25日金曜日

【参加レポート】第8回 スマホUXラボ 「ユーザーテストLive!見学会 ~無料学習アプリ編~」

こんばんは、舟橋です。

今回は3/15(火)に参加した

第8回 スマホUXラボ 「ユーザーテストLive!見学会 ~無料学習アプリ編~」


の内容を簡単な感想を書きたいと思います。

今回の会場は、普段展示でしか訪れない「高円寺」。
駅前の飲み屋の多い通りから一本入ったところに会場である「val研究所」がありました。

(会場に着くと明るい声でペッパー君がお出迎えをしてくれました...)


内容はUX/ユーザビリティ評価法の第一人者である樽本徹也さんの監修のもと
「無料学習アプリShareWis(シェアウィズ)」のユーザーテストの見学と簡単なワークショップでした。
ShareWis:3分動画と1問クイズの完全無料学習コース)


▼今回のユーザープロフィール


①男性 リテラシー(中) 
②男性 リテラシー(上) 
③男性 リテラシー(低) 

▼ユーザーテスト内容

シチュエーション:


「以前からなんとなく学んでみたかった“マーケティング”について、ShareWisのアプリで学んでみようと思っている。」

タスク:


1.学びたい理由を述べる
2.アプリを使ってコースを選ぶ
3.コースで学ぶ
4.他のコースを選ぶ
5.コースで学ぶ

本当に簡単にまとめるとこんな感じでした。

感想はと言いますと、、、
結論、ユーザーへのサービスの質(ここでは動画)が何よりも重要と感じました。
当り前のことですが、
“ユーザーのペルソナにフィットしていなければ、どんな内容でも正当な価値をもたない”
ということです。

ここでいう正当な価値というのも怪しいですが、
ふんわりと「マーケティングを学びたい」と感じている人に対していきなり「SWOT」やら「SECIモデル」という内容を、早口の3分間で学ぶことが本当にフィットしているのかという疑問です。

このことは、UIにばかり注目していた私にとって重要な発見でした。
接客の世界だけでなく、見目細やかなホスピタリティが結局のところ大事なのだと思いました。
(以前参加したサービスデザインのカンファレンスでも話題になった言葉、「エンパシー」と「エコシステム」について改めて考えさせられる内容でした・・)


ユーザーテストについてまだ勉強中ではありますが、
今回の内容で簡単なテストであればすぐできる!と確認できたので
遊びもかねて、友人で試してみようかと思います。。笑

それでは、本日もお疲れ様でした!











2016年3月22日火曜日

CASE式を使用して、主キーを入れ替える方法 SQL

こんにちは山田です。

気温もぐーんとあがり、
やっと春らしくなってきました。今日この頃。

さて、SQLの話題です。既存コードをリファクターできそうなものを見つけたので、その備忘録になります。

■目的
「主キー」もしくは「ユニークキー」の値を入れ替えて、
並び替え機能をつくります。

■テーブルの前提
 1. ソートキーはユニークである
 2. ソートキーが大きいものが上(降順)で並べる

表であらわすと↓こんな感じになります。
+-----+------------+--------+
| ID  | Name       | Sorter |
+------------------+--------+
| 1   | ゼンサイ      | 100    |
| 2   | メインリョウリ    | 10     |
| 3   | スープ       | 1      |
+-----+------------+--------+
このソートキー「100」と「10」を入れ替えて登録して、並び替え機能をつくります
         ↓
+-----+------------+--------+
| ID  | Name       | Sorter |
+------------------+--------+
| 2   | メインリョウリ    | 100    |
| 1   | ゼンサイ      | 10     |
| 3   | スープ       | 1      |
+-----+------------+--------+
                ※IDとNameは対応しています。

■仮数字を一時的に代入する方法(元々の方法)
update mst_data
   set Sorter = '-1'
  where where ID = '1'  /*ID「1」のSoterを一時的に「-1」を代入*/
update mst_data
   set Sorter = '100'
  where where ID = '2' /*ID「2」のSorterに、空いた「100」を代入*/
update mst_data
   set Sorter = '10'
  where where ID = '1' /*ID「1」のSorterに目的の「10」を代入*/
この3つのクエリ文でトランザクションを作ってやっていました。
動作するものの、以下の懸念点がありました。
 ・クエリ文が3つできてしまう
 ・仮数字がすでに使われていた場合、ユニーク制約のため、-1が代入できなくなる


この解決方法として、CASE式を使用した方法をとります。

■CASE式を使って、ユニークキーを入れ替える方法
update mst_data
 set sorter = CASE WHEN sorter = '100' THEN '10'
                WHEN sorter = '10'  THEN '100'
               ELSE sorter END
 where sorter in( '100' , '10');
CASE式を使用することによって、一度のUPDATE文で入れ替えが完了できてしまいました。
どうしてこんなことが出来てしまうかというと、
CASE式の分岐による更新は「一気」におこなわれるので、
ユニークキーの重複エラーを回避することができるのです。


実はこの方法、主キーを入れ替えるという荒業も簡単にできてしまいます。
■CASE式を使って、主キーを入れ替える方法

操作対応表 
・SQL Server: ○
・Oracle  : ○
・MySQL  : ×
update mst_data
 set sorter = CASE WHEN id = '1' THEN '2'
                WHEN id = '2' THEN '1'
               ELSE id END
 where sorter in( '1' , '2');
その場合の実行結果
+-----+------------+--------+
| ID  | Name       | Sorter |
+------------------+--------+
| 1   | ゼンサイ      | 100    |
| 2   | メインリョウリ    | 10     |
| 3   | スープ       | 1      |
+-----+------------+--------+

+-----+------------+--------+
| ID  | Name       | Sorter |
+------------------+--------+
| 2   | ゼンサイ      | 100    |
| 1   | メインリョウリ    | 10     |
| 3   | スープ       | 1      |
+-----+------------+--------+

■参考サイト
『達人に学ぶ SQL徹底指南書』サポートページ
http://www.geocities.jp/mickindex/database/db_support_sinan.html

2016年3月16日水曜日

Node.jsのスクレイピングモジュールcheerio-httpcliがとても便利

こんにちは。エンジニアのKです。

先日、自社サイト上にて静的HTMLで公開している100ページ近くあるコンテンツを、
改めてDBに登録したいという要望がありました。

幸い、対象のページはHTML的に似た構造をしていたので、スクレイピングで上手いことデータを抽出できないかと調べていたところ、
Node.jsで動く「cheerio-httpcli」を見つけ、とても便利だったので紹介したいと思います。

作者様のGitHubとか
GitHub - ktty1220/cheerio-httpcli
Node.js用のスクレイピングモジュール「cheerio-httpcli」の紹介

スクレイピングって?


ひとことで言うと、「ウェブサイトのHTMLを取得して、その中から必要な情報を取り出す」処理になるでしょうか。
再帰的にリンクを辿って行く場合、大量のリクエストが飛んでしまいますので、リクエスト間にインターバルを設けるなどしてDoS攻撃にならないようにしましょう。
また、取得したコンテンツには著作権がありますので取り扱いに注意しましょう。

cheerio-httpcliをインストール

今回はまっさらなCentOS 6にてインストールしていきたいと思います。
cheerio-httpcliはnpmでインストールするのが取ってり早いですが、
npmを使うためにはnodejsが必要となり、
さらにnodejsをインストールするためにはepelリポジトリをyumに追加する必要があります。
順番にやっていきます。

epelリポジトリ追加

$ yum install epel-release

nodejs/npmインストール

$ yum install nodejs npm --enablerepo=epel

# 確認
$ node -v                                                                        
v0.10.36

cheerio-httpcliインストール

$ npm install cheerio-httpcli


これでインストール完了です。

スクレイピングのサンプル

抽出したデータで特に何をするというわけではありませんが、サンプルとしてYahooトップページのトピックスの見出しとURLを取得してみたいと思います。

// test.js
var client = require('cheerio-httpcli');

client.fetch('http://www.yahoo.co.jp')
.then(function (result) {
    var $ = result.$;
    $('.topicsindex .emphasis a').each(function (idx) {
        var title = $(this).contents().filter(function () {return this.nodeType === 3;}).text(),
            url = $(this).attr('href');

        console.log(title + ',' + url);
    });
})
.catch(function (error) {
    console.log(error);
});

実行結果がこちら

$ node test.js
大阪女児焼死 母ら無罪確定へ,http://rdsig.yahoo.co.jp/...
原子力規制委 朝日記事を批判,http://rdsig.yahoo.co.jp/...
北 米学生に15年の労働教化刑,http://rdsig.yahoo.co.jp/...
6人殺害 妻と娘失った夫苦悩,http://rdsig.yahoo.co.jp/...
「尿鑑定不採用」で無罪判決,http://rdsig.yahoo.co.jp/...
福山雅治 健さん映画で主演,http://rdsig.yahoo.co.jp/...
内海また炎上 開幕ローテ絶望,http://rdsig.yahoo.co.jp/...
足に30cmボルト 新城幸也の今,http://rdsig.yahoo.co.jp/...

たったこれだけのコードで簡単なスクレイピングができてしまいます。便利ですね。
result.$にはjQueryオブジェクトが渡されるので、セレクタによるDOM操作も簡単に行えます。便利ですね。

githubのドキュメントにもまだまだ便利そうなAPIがありそうなので、色々試してみたいですね。



ASP.NET MVCをOSXで動かしてみる

最近暖かかったり寒かったりと、春が着実に近づいているなと感じますよ。あとは何と言っても花粉でしょうか。辛いですよね。あ、フロントエンド担当のふみえです。

そんなこんなで、本日は昨年リリースされた Visual Studio Code の OSX ベータ版をインストールしつつ ASP.NET MVC を OSX でちょこっと動かしてみたいと思います(^^)ノ



Visual Studio Code インストールから起動

まずはこちらのページの「Download for OSX」というボタンをクリックして zip ファイルをダウンロードして解凍します。
展開した「Visual Studio Code」を Application フォルダに移動させます。すると Launchpad に追加されていることが確認できると思います。そこから起動してみましょう!
当たり前ですが、ここまではあっという間です。

ASP.NET をインストールしていく

ASP.NET ドキュメントドキュメントなどを参考にしながら進めていきます。

1. DNVM と DNX をインストール(前提条件: npm インストール済み)

DNXとは….NET Execution Environment の略。引用になりますが、要するに
.NETアプリをクロスプラットフォームで実行するために必要な要素をまとめた環境
だそうです。 (引用元: http://www.atmarkit.co.jp/ait/articles/1505/19/news016.html
そして、その DNX のバージョン管理パッケージが DNVM(DNX Version Manager)です。
そんなこんなでドキュメント通りに DNVM をインストールします。
$ curl -sSL https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.sh | DNX_BRANCH=dev sh && source ~/.dnx/dnvm/dnvm.sh
DNVM を有効にします。
$ source /Users/toyooka/.dnx/dnvm/dnvm.sh
すると、DNVM を最新にしろと怒られるのでそれに従います。
$ dnvm upgrade
無事 DNVM がインストールされました。
さて、次は DNX を .NET Core にインストールするために DNVM を使用できるようにします。
$ dnvm upgrade -r coreclr
こちらを実行後、.bash_profile に下記を追記し、ターミナルを再起動します。
source dnvm.sh
export MONO_MANAGED_WATCHER=disabled
そして、下記を実行して dnvm を再度アップグレードします。
$ dnvm upgrade


2. yeoman をインストールする

ここまできたら、本家の推奨する yemoman を使用して scaffold で新しいアプリケーションを作成します。その際に ASP.NET のジェネレータとなる gulp とbowerも一緒にインストールしています。
$ sudo npm install -g yo generator-aspnet gulp bower
うまく行った!!

3. yo aspnet を実行するぞ!

ということで、下記コマンドを入力します。
$ yo aspnet
すると、対話形式でどんなアプリケーション作成するのか訊かれますので、ただの "Web Application" を選択してみます! 下記の画像のようにかわいいのが表示されます!イケメてる!!


4. いよいよビルドするよー!!!!

先ほどのコマンド実行後、最後の方に下記のような説明があるので、その通りにしていきます!

$ cd WebApplication
$ dnu restore // 結構時間かかります!
$ dnu build
$ dnx web
これで、localhost:5000 にアクセスしてみましょう!!すると・・・ じゃじゃーん!

めでたしめでたし☆
これで、OSX 上で ASP.NET の開発環境を整えることができました!Visual Studio Code はまた今度いじってみます!scaffold って便利すぎて困る時もあるけど、初学者にとっては本当にありがたい。。。
それでは、ふみえでしたー!!ばいびー!!

2016年3月15日火曜日

CSSスプライトを作ってみた

こんにちは山田です。

サイト内に、メニューやボタンなど細かい画像がバラバラとありますが、
それを、一枚の画像にまとめて、ページの読込速度を速める方法があります。
CSSスプライト というのですが、作ってみたのでその備忘録になります。

■元画像
ペイントで簡単に作成


■HTML
 

■CSS
/*----------------------------------------------------------
ナビゲーション
------------------------------------------------------------*/

#navi{
 position:absolute;
}

#navi ul{
 list-style:none;
}

#navi li a{
 display:block;
 width:108px; 
 height:53px; //←幅と高さを指定
 text-indent:-9999px;
}

#navi li#top{
 background:url(../images/menu.gif)no-repeat 0px 0px; //←最初から表示したい画像
}
#navi li#top a:hover{
 background:url(../images/menu.gif)no-repeat -108px 0px; //←マウスオーバー時の画像
}

/*-----------------
同じ要領で残りも書く
------------------*/
#navi li#news{
 background:url(../images/menu.gif)no-repeat 0px -53px;
}
#navi li#news a:hover{
 background:url(../images/menu.gif)no-repeat -108px -53px;
}
#navi li#about{
 background:url(../images/menu.gif)no-repeat 0 -106px;
}
#navi li#about a:hover{
 background:url(../images/menu.gif)no-repeat -108px -106px;
}
#navi li#contact{
 background:url(../images/menu.gif)no-repeat 0px -159px;
}
#navi li#contact a:hover{
 background:url(../images/menu.gif)no-repeat -108px -159px;
}
#navi li#faq{
 background:url(../images/menu.gif)no-repeat 0px -212px;
}
#navi li#faq a:hover{
 background:url(../images/menu.gif)no-repeat -108px -212px;
} 
■画像の数値について
以下のように画像の位置を指定しています。

2016年3月14日月曜日

アプリのプロトタイピングツールをいろいろ使ってみる③ - InVision -

こんにちは。岡田です。

3月に入って暖かくなったり寒くなったり雨が降ったり花粉が飛んだり、忙しいですね。
私は花粉症を発症していないのですが、毎年「今年こそはデビューするんじゃないか」とビクビクしながら下積み時代を送っています。
できるだけデビューが先送りになることを願ってやみません。


前回の記事、読み返してみると、雑だなぁ、、と思ったので、(ごめんなさい)
今回はちょっと丁寧に書こうと思います。


InVision

前回の「POP」は、かなりシンプルで、単純な機能を簡単に使うアプリのプロトタイプを作るのに
かなり便利な印象でしたが、今回さわってみた「InVision」は、結構細かい設定まで簡単に行えるので
画面の動きを高度に再現できると思いました。


「InVision」のいいところ

他のプロトタイピングツールではあまりないな~と思ったのが、
ボタンをタップしたときの挙動に「URLをひらく」を設定できることです。

全部が全部ネイティブでないアプリを作る場合、これがあることによって
ネイティブの動きとWEBを見せる動きのイメージが
かなりつかみやすいのではないかと思いました。


あとは、、圧倒的な機能の充実具合でしょうか。

ベータ版とありますが、他サービスとの連携でユーザーテストを録画できたり、
更新状況をリアルタイムでメンバーと共有できるようです。

リアルタイム性はInVisionにとってかなり大きな特徴のような感じがします。


「InVision」のちょっと不便なところ

日本語対応していないところでしょうか。。

アプリのプロトタイプを作って、チーム内であーじゃねこーじゃねをしたり
ユーザーテストを録画してみたり、端末に共有してみたりと
かなり至れり尽くせりで便利だと思いますが


また、"お絵かき"をアップして画面を設定した時に、
ステータスバー(電波とか時間とか出ているところ)が"お絵かき"と被ってしまうので
ナビゲーションバーをちゃんと見たい場合は、ステータスバー分の余白を
あらかじめ"お絵かき"に入れておく必要がありました。

画面によって適当に入れていると、画面遷移したときにちょっとずれちゃったりして
結構気持ち悪くなってしまうので、
ステータスバー、考慮してほしいな~と思いました。


おまけ?

チャット機能が充実しているInVisionですが、面白いなと思ったのが
「ホワイトボード」というツールです。

ちょっと人と一緒に試せていないのですが、お絵かきチャットができます。

これでお絵かきしりとり、、したいなーーー。笑



「InVision」。全体的に、情報を共有することにとっても長けているプロトタイピングツールだと感じました。


開発初心者がこれだけは知っておいた方が良いこと④

こんにちは!Sです。

今回はデータベースのロックについて書きたいと思います。

DBで行う主な操作としては
①新規登録 ②更新 ③削除 ④参照
だと思いますが、同じテーブルに対して複数の人が同時に様々な操作を行うとデータの整合性がとれません。

そんなことにならないようにDBにはロックという機能が存在します。

ロックの粒度(行に対してのロックなのか、テーブルに対してのロックなのかなど)やルールは
使っているDBによって多少違うようですが、ここからはわたしが使っているSQL Serverについて書きます♪

◆ロックの種類
ロックには共有ロック、排他ロック、更新ロック、インテントロックなどがありますが、
難しいので詳細の説明は省きます。
初心者の方にまず覚えて頂きたいのは

①データの参照中は共有ロックがかかり、その間他の人が更新などできない
②削除などデータの書き換え中は排他ロックがかかり、他の人が何もできない
ということです。
(詳しく知りたい人はこちらこちらを!)

バッチのスケジュールを組む際にはこれらのことを考慮しないといけないですね。

ちなみに排他ロックをどの粒度でかけるかは、SQL Serverが決めてくれます。
https://technet.microsoft.com/ja-jp/library/ms189286(v=sql.105).aspx

◆安全なおまじない
DBで行う操作の中で更新や削除はとても怖いですよね。。。
出来ればやりたくないですが、避けることはできません。
そんなとき上記のロックを利用して安全に操作を行うことができる魔法の呪文を教えてもらったので紹介します♪

1.まずはこれを書く
begin transaction

2.やりたいことをやる
update文 や delete文など

3.select文で思い通りの結果になっているか確認

4-A.やばい!思った通りの動きじゃない!というときは
ROLLBACK TRANSACTION
→これで元通り。なんの心配もいりません!

4-B.意図通り!成功!というとき
COMMIT TRANSACTION
→これを忘れずに!忘れると反映されません。


...余談ですが、わたしは今朝通勤途中に電車にすべての荷物を忘れてきました。
 (別に寝ぼけていたわけでもないのに。。。)

電車を降りるところからROLLBACKしたいです。。。




2016年3月11日金曜日

日々の学習

こんにちは、舟橋です。

今回は「日々の学習」についてです。

私は普段、ネットで情報収集をするのですが
最近では課題図書を設けて、通勤時間やお昼休憩で読んでいます。

昨日やっと1冊読み終わりましたので
忘れない為にも備忘録的に、まとめと感想を書こうかと思います。

今回読んだ本はこちら、


「こころの情報学」 西垣 通




(初めて新書を読んだのですが、、最初の方は専門用語と引用の多さに愕然としました。)

内容としては、21世紀になって急速に進んだ情報社会化によって変容した
「ヒトの心」についてのお話です。

意外なのが、割と冒頭で人工知能の話が出てきます。
私は最近映画で「her」という映画を見たばかりで、人工知能については必ず達成できる夢とさえ思っていたのです。


人口知能を搭載したOS(サマンサ)と、主人公が恋に落ちる話です。
(ラストはなんとも不思議でした。)

ですが、「こころ」というものは歴史的文脈からなるもので、人工知能で再現するには
そこらじゅうにあるもの(机、鉛筆、海、空気..)の概念(情報)を処理しなければいけなく、今の技術ではそのロードの為に固まってしまうとのことでした。
そもそもの処理の仕方が違うとのこと。

そんなショックな内容の多い本だったのですが、本の後半で出てきた「サイバーなこころ」についての内容が、とても印象に残りました。

現在われわれを取り巻く機械情報の量は、ヒトの処理できるレベルをとっくにこえています。そんななかで、子供たちは一種の「思考停止」という手段で自分を防御しているように思えます。

私たちの世代やその下の世代で最近「さとり世代」という言葉がありますが、それを彷彿させる言葉でした。
ヒトの心とは動物の心であり、身体的な感覚のないネットでは不満がたまっていくのは当たり前だとのこと。
確かに情報化も進んでいますが、大勢で集まって何かをしたり(ハロウィンなど)今までなかった新たなグループでの行動が出てきたりなど、どこかで発散をしようとする活動は意外と多いのではと思いました。

ここでUXに立ち返って考えてみると、身体的体験、動物としての基本的な部分を満たすものが
ヒトの心に一番響くのではということを思いました。
(昔マンモスを大勢で狩った記憶を再現するのは映画に任せるとして、コミュニケーションや自然の体験ということでしょうか。)


私にとっては難しい本でしたが、難しいなりに面白かったです。
この課題図書は、UXのサイト「U-site」というページで紹介されていました。
(こちらですhttp://u-site.jp/book/ux-books-2015)

ということで、感想でした!
みなさま、お疲れ様でした。


2016年2月26日金曜日

開発初心者がこれだけは知っておいた方が良いこと③

こんにちは開発者のSです!

今日はデータ分析について書こうと思います。
せっかくページを作ったらその反響も知りたいですよね♪

まずは分析に用いる指標について

■View数
ページが見られた回数。1人の人が10回見たらView数は10

■訪問数
何回訪問されたか。
1回の訪問で10ページ見られたとしたら、View数は10だけれど訪問数は1

■UU数
ユニークユーザー数。
何人の人が見たか。1人が何ページ見ても、何回訪問してもユニークユーザは1

■CVR
コンバージョンレート。
View数またはユニークユーザーの内、コンバージョン(商品購入や資料請求などの最終成果)に至った割合。
何をコンバージョンとするかはその人次第。

■回遊率
1人のユーザーがサイト内のページを何回閲覧したか

■離脱率/遷移率
ページに流入した人の内、どれだけ離脱したかが離脱率。
反対に離脱せず、他のページに遷移した割合が遷移率。

■直帰率
サイトに訪れたユーザーの内、最初の1ページだけ見てサイトから離れた人の割合。
一般的に40%前後なら良いとされている。



サイカタやGA(Google Analytics)を使えば、更に各デバイスのシェア率や流入、ユーザーの特徴なども見ることができます。
自分が作ったページについて、ぜひその反響を見てみてください!!

はじめまして。ふなばしです。

今日から開発ブログに参加させて頂くこととなりました。
デザイナーのふなばしです。
新米デザイナーです。



ひよっこの私がここで綴るのはずばり、 新米デザイナー奮闘記です。
多分にもれず、そんな形で日々気づいたこと、気になったこと、挫けたことなど
なよなよと書かせていただきます。

前説がくどくなりましたが、ここで自己紹介を。


名前 ふなばし
年齢 25
性別 女
2013年 武蔵野美術大学 基礎デザイン学科 卒業
→カメラマンを目指し撮影スタジオでスタジオマンとして勤務
→とあるベンチャー企業で何でもデザイナー兼総務として勤務
→現職 Webデザイナーとして奮闘中(半年経過)

です。

Webデザイナー歴は1年半となります。
扱う言語はHTMLCSSです。(JavascriptjQeryを使っています)

趣味は読書と映画とお散歩と愛猫と戯れることで、ライフワークは写真と机研究です。
基本田舎が好きなので、埼玉から東京へ毎日通勤しています。
最近密かに嬉しいことは、一部の方から「ふなちゃん」と呼ばれていることです。
なんだかソフトでかわいい感じが気に入っています。(今までは“ばし”でした

【オススメのサービス】


schoo」  https://schoo.jp/guest

無料の生放送授業で学べるオンライン動画学習サイト
使用歴そろそろ1年くらいになります。
通勤時間等、イヤホンとスマートフォンがあればどこでも授業が受けられちゃうという素晴らしいサービスです。
ここで私はUIUXの授業やアプリデザイン、英会話を受講しています。

【気になっている団体】


「HCD(人間中心設計推進機構) 」 http://www.hcdnet.org/

昨今UIUXと言われ続けていますが、
日本の第一人者として知られる黒須教授が会長を務めていた、HCD(人間中心設計推進機構)です。
その名の通り、人間が体験するすべてのデザインについて、より人に寄り添った実際的なデザインを推進していこうという考え方です。
専門家認定機構でもあるため、UIで有名なグッドパッチや、その他さまざまな企業の方が専門家として登録されています。

「SDN(サービスデザイン・ネットワーク)」 http://japan.service-design-network.org/author/japan/

先日この団体が年1で開く、「サービスデザイン・ジャパンカンファレンス」へ参加してまいりました。
名のごとく、日本におけるサービスデザインの今と未来というお話でした。
海外のスピーカーを招いた、刺激的な内容でした。
※その内容についてはおいおい書かせていただきます。


以上自己紹介でした!

今後ともどうぞよろしくお願いします!(ドキドキ)


2016年2月22日月曜日

UX JAM 6 -UX GIRLS Returns- に参加してきました!

どうも、ふみえです。

2016/02/17に"UX JAM 6 -UX GIRLS Returns-" というイベントに参加してきました。
本イベントですが、概要は以下になります。
UX JAMはUX MILK主催の、UXを題材にした「ゆるい」勉強会/交流会イベントです。学術的なUXのセミナーというより、参加者同士でより気軽にUXについて話し合えるような場です。レベル感的にはUX初心者~中級者向けで、LTやスピーチをただ聞くだけではなく、参加者の方も積極的に話したりできる雰囲気作りを心がけています。
とてもライトなイベントで昨年からちょこちょこ参加させていただいておりました。
やはり聴いているだけでは物足りず、以前ご登壇された方からの後押しもあり、今回登壇してまいりました。

前職で私が企画・運営したユーザさんを理解するための取り組みを紹介させていただきました。

UX に興味を持ったきっかけ

私はフロントエンド・エンジニアです。デザインの変更・機能追加/改善などは日々行います。しかし、会議で「この機能についてどう思いますか?」「この機能きっと回遊時間が伸びると思いませんか?」と問われた時に何も反応できないことが多々ありました。私が考えすぎてしまう性格故にそうなっていたのかと思っていました。しかし、UXについて調べてみると、どうやらそれは性格の問題ではなさそうであることがわかりました。

ユーザさんに会いたい!!

私は強く思いました。思い立ったら即実践!!ということで、色々素地のない所で手探り状態で座談会を開催するのに1ヶ月で準備をしました。一応「仮説 → 検証 → レポート → タスク化」というフローを踏みました。

そこで得られた結果や課題はチームの中で共感を呼ぶこともでき、チームの意識を自然と同じ方向に導いてくれます。開発していく時の自身やモチベーションの向上、サービスへの愛も増幅します♡


そんなこんなでこちらからは以上です。

2016年2月19日金曜日

C# 構造体とは

こんにちは山田です。

C#の基本構文でいまいち呑み込めなかった部分について
わからないなりに解説をしようと思います。

~良くわかっていない人による解説~
 
開発言語:C#

構造体というのは一見、「何かの構造概念なのか?」と思ってしまいそうなのですが、
(というか勘違いして覚えていたのですが、)
実はクラスに似ていました。
具体的には、メモリ空間における構造が異なるそうです。
なので、ちょっと変わったクラス、というとらえ方でよさそうだと思います。

■構造体の定義

構造体の定義は、クラスとほぼ同じで、structを用いて定義します。
struct Dog{
 public int price;
 public string name;
 public int getPrice(){
    return price
 }

※ちなみに構造体は初期化が出来ないです。
public int kazu =1; ×

クラスと同様に、状態(field)と振る舞い(method)をメンバにもつことが出来ます。

■クラスと構造体の違い
構造体とクラスは似ていますが、
大きな違いは、参照型か値型かの違いです。

●構造体(値型)
 ・構造体は列挙型と同様で、値型です。
  (変数に直接値が格納されているデータ型です。)
 ・他のクラスや構造体を継承したり、継承元になることはできません。
 ・インターフェイスを実装することは可能。
 ・new演算子を使わなくてもインスタンス化される。


●クラス(参照型)

  例:)文字列、配列、クラス、デリゲート、インターフェースが参照型   

■早い話、どういう時に構造体は使用する?

クラスと構造体のどちらを使うか: C# プログラミング 再入門
http://dotnetcsharptips.seesaa.net/article/417085715.html
 ↑
こちらを参考にさせていただきました。
-----------------------------------------------------------------------------
MSDNのプログラミングガイドから引用します。

構造体は軽量オブジェクトを表すのに適しています。参照型の機能が必要ないのなら、小さいクラスとして実装するよりは構造体として定義した方が、システムにより効率的に処理されることが期待できます。

実際に計測してみると(かなりハイスペックなマシンでデバッグビルド版で計測)、上のサンプルコードにあるクラスと構造体とを10万個づつインスタンス化 してもいづれも2msと差はなし。100万回でクラスが約100msに対し構造体が30msと約3倍の効率の良さは伺える。
これらを「参照型の機能」として、つまりBoxingされるようObject型にキャストする処理を介在させた場合、クラスも構造体も120msぐらいであった。

これって、実際の使用条件等を考えるとほとんど構造体を使う理由がないように思えます。
-----------------------------------------------------------------------------

う~んつまり、C#の構造体の場合は、あまり使う場面がないみたいですね。

■参考文献

クラス-構造体-
http://arc360.info/lecture/6/4.html

値型と参照型 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C
http://ufcpp.net/study/csharp/oo_reference.html

2016年2月16日火曜日

開発初心者がこれだけは知っておいた方が良いこと②

こんにちは!Sです。
前回に引き続き「開発初心者がこれだけは知っておいた方が良いこと」について書いていきます。

今回のテーマは「おかしいところの見つけ方について」です。

ネットで調べて見よう見まねで書いてみたけれど上手く動かない。。。という時に
早くどこがおかしいのかを見つける方法について書いていきます。


<エラー画面が表示されている場合>

①ログを見る
 新規作成の場合は自分でログをはくように設定しないといけませんが、
 既存のファイルの修正であればおそらく既にエラーが起きた際にエラーログを出力するように
 設定されているはずです。
 なのでまずはソースからログの出力先を調べて、ログを見に行きましょう!


<エラー画面は表示されていないが、やりたいことが出来ていない場合>

①デバッグする
 ここがおかしいのかも。という怪しい場所付近にブレークポイントを設けて、
 デバッグして下さい。きっとヒントになるはずです。
 ▼最初にマスターしたいVisual Studioのデバッグ機能 -基本編-
 http://news.mynavi.jp/articles/2008/08/18/debug/

②Response.Writeを使う
複数の処理を連続して行っており、それらのどれが原因かを調べるのに便利です。
例えば...
aに対して処理B、C、Dを連続して行うのであれば一旦それらを分けてみましょう!

Response.Write(a);
Response.Write(b);  //bはaにBの処理をしたもの
Response.Write(c);  //cはbにCの処理をしたもの
Response.Write(d);  //dはcにDの処理をしたもの

これでブラウザにa,b,c,dが表示されるので、処理のどの段階でおかしなことになっているのかが一目瞭然です。


2016年2月12日金曜日

【Android】AppIndexingを設定してみた

こんにちは。エンジニアのKです。

【Android】AppIndexingを実装してみたの続きです。
前回までで最低限必要な実装は完了しましたが、
ディープリンクのテスト方法や、「Google Play Developer Console」、「Search Console」への登録方法でも
公式ドキュメントを読んだだけではピンと来ない部分があったので、補足できればと思います。

ディープリンクをテストする

実装したディープリンクがAppIndexingとして正常に動作するかテストします。
公式ドキュメント:App Indexing の実装をテストするの前半

方法としては、公式ドキュメントにあるADBでインテントを飛ばすやり方と、アプリがインストールされた端末のブラウザで、android-app://のリンクを踏んでみるやり方の2つがあります。

ADBでインテントを飛ばす

端末をUSBで接続し、コマンドラインから公式ドキュメントにあるドキュメントを実行すると、インテントが飛びます。
ディープリンクが正しく実装できていれば、アプリのコンテンツが立ち上がるはずです。
以下は、Android StudioのTerminalで実行した結果です。


実装が上手く行っていない、飛ばすインテントが誤っていると、「Error: Activity not started, unable to resolve Intent」といったエラーが表示されると思いますので、実装に誤りがないかを確認しましょう。

android-app://のリンクを踏む

webページを自由に変更できる環境があれば、aタグにテストURLを埋め込んでブラウザでアクセスします。
そういった環境がない場合は、公式ドキュメントにあるQRコード経由でアクセスすると便利だと思います。
前回の記事でも書きましたが、テストURLは

android-app://com.recipe-app/http/recipe/pierogi-poutine
android-app://com.recipe-app/recipe-app/recipe/pierogi-poutine

といったものになります。


AppIndexing APIをテストする

AppIndexing APIが正常に動作しているかも確認しておきます。
公式ドキュメント:App Indexing の実装をテストするの後半

これもアプリをインストールした端末をUSBでPCに接続し、ターミナルにコマンドを打ち込みます。
AppIndexing APIが起動する処理を通るようにアプリを操作すると、以下の様なログが出力されるはずです。
title, description, appUri, webUriが正しい値になっていればOKです。
マルチバイト文字を含めるとログ出力が文字化けしてしまいますが、URLエンコード処理は不要です。
試しにこのままリリースしてクロールさせたところ、検索結果に表示されるAppIndexingのリンクは文字化けしていませんでした。



Search Consoleにアプリを登録する

まずはSearch Consoleにアプリとしてプロパティを追加します。
公式ドキュメント:アプリの Search Console

Search Consoleにログインし、公式ドキュメントにあるようにandroid-app://のURLでプロパティを追加します。
すると、以下の画像のように、「Androidアプリ」のプロパティが追加されます。




Search Consoleでクロールテストをする

Search Consoleに登録すると、アプリに対しても「Fetch as Google」を行うことができます。(2016/02時点でアルファ版)
テスト対象のアプリは、基本的にはGoogle Playで配布されている最新版のapkですが、この場でapkファイルをアップロードして試す事もできるようです。
言語を選択するセレクトボックスは「日本語」にした方が良さそうです。「英語」のまま実行したらエラーになってしまいました。

広告SDK等が含まれていると、広告で読み込まれる一部リソースがブロックされ「一部完了」のステータスになりますが、
正常にレンダリングされていれば問題ないと思います。


アプリとWebサイトを紐付ける

ここまで確認できたら、あとはアプリとwebサイトを紐付けて、GoogleにAppIndexingしてもらいます。
公式ドキュメント:アプリをサイトに関連付ける
※前提として、ディープリンクに対応したアプリをGoogle Playで公開している必要があります。

紐付け方はGoogle Playから行う方法と、Search Consoleから行う方法があります。
今回はGoogle PlayのサービスとAPIからwebサイトのURLを入力する方法で行ってみました。
すると、Search Console側に「{googleアカウント} が Android アプリ {パッケージID} を {webサイトURL} と関連付ける権限をリクエストしています」といったタイトルのメッセージが届きますので、承認しましょう。

これで、必要な作業は全て完了となります。
ここから徐々にgooglebotのによるアプリクロールが開始され、3-5日程度でSearch Console上でクロールステータスを確認することができると思います。
以下が実際のクロールステータスの画面ですが、クロール開始直後はエラーが大量に発生してしまいました。
ですが、特に何もせず様子を見ていたところ、エラーは0件となり、インデックス数が増加していきました。



インデックス数が増え始めると、その更に数日後(5日程度かかった)、google検索結果にAppIndexingのリンクが表示されるようになると思います。

2016年2月9日火曜日

C# 列挙型 enum

こんにちは山田です。

開発言語:C#

C#の基本構文でいまいち呑み込めなかった部分について
わからないなりに解説をしようと思います。

~良くわかっていない人による解説~

■列挙型とは (enum)
特定の値しか取らないようなものに対して使用します。
たとえば曜日だったら 月~日までの7つのみになります。
この曜日を例に取り上げていこうと思います。

■基本構文

【定義の仕方】
列挙型の宣言はenumをはじめに記述し、つづいて列挙型の名前を記述します。
-------------------------------------------------
enum 列挙型名
{
  メンバー1, メンバー2, …, メンバーn    ←列挙定数
}
-------------------------------------------------

例1)
-------------------------------------------------
enum Week
{
Sun, Mon, Tue, Wed, Thu, Fri, Sat
}
-------------------------------------------------
そしてそれぞれの識別子には0から順番に1ずつ増える整数値が割り当てられます。

Sun:0
Mon:1
Tue:2
 :
Sun:6


例2)
-------------------------------------------------
enum Week
{
 Sun, Mon=100, Tue, Wed, Thu, Fri=200, Sat
}
-------------------------------------------------
もし任意の値を代入すると、そこから1ずつ増加します

Sun:0
Mon:100
Tue:101
Wed:102
Thu:103
Fri:200
Sat:201

例3)
列挙要素の基になる既定の型はintですが、
Int型以外で整数値を使いたい場合は以下ように記述します。
-------------------------------------------------
enum Week : byte
{
 Sun =1
 ,Mon =2
 ,Tue =3
 ,Wed =4
 ,Thu =5
 ,Fri =6
 ,Sat =7
}
-------------------------------------------------
他にはこんな型が使用できます。
byte、sbyte、short、ushort、int、uint、long、ulong


【利用する方法】

識別子を参照する時は以下のように記述します
----------------------------
列挙型名.メンバー名
----------------------------

例4)
using System;

class Sample
{
 protected enum Week : int
 {
 Sun =1
 ,Mon =20
 ,Tue =30
 ,Wed =40
 ,Thu =50
 ,Fri =60
 ,Sat =70
 }

 /// 
 /// 日本語の曜日をただ返すプログラム
 /// 
 protected void SampleProgram(Week[] _day){
  for (int i = 0; i < _day.Length; i++)
  {
   switch (_day[i])
   {
    case Week.Sun: Console.Write("日曜"); break;
    case Week.Mon: Console.Write("月曜"); break;
    case Week.Tue: Console.Write("火曜"); break;
    case Week.Wed: Console.Write("水曜"); break;
    case Week.Thu: Console.Write("木曜"); break;
    case Week.Fri: Console.Write("金曜"); break;
    case Week.Sat: Console.Write("土曜"); break;
   }
  } 
 }

 static void Main()
 {
  Week[] day = new Week[] { Week.Mon, Week.Tue, Week.Wed, Week.Thu, Week.Fri, Week.Sat, Week.Sun };
  SampleProgram(day);
    }
}

結果:月曜火曜水曜木曜金曜土曜日曜

すごく微妙なサンプルになったと思いました。


■ちなみに整数値の方を使用したいときは、
以下のように型変換すればOKです。
----------------------------
(整数型)列挙型名.メンバー名
----------------------------


■その他こわざ

参考になった応用の例です。
・enumの値を任意の文字列に変換する
・数値がenumで定義済みがどうかチェックする
・enumの値を列挙する
http://qiita.com/hugo-sb/items/38fe86a09e8e0865d471

2016年2月8日月曜日

フロントエンド・タスクランナー(2: Gulp インストール編)

お疲れ様です。
先日薬を貰うために薬局のソファでぼーっと待っていた所、目の前を通り過ぎたおばあさんのバッグから飛び出ていた先端の鋭い牛蒡が目に突き刺さりそうになるという、恐ろしい思いをしましたふみえです。

さて、今回は前回の続きということで、タスクランナー Gulp を実際にインストールしていきます。
構築環境は OS X El Capitan バージョン10.11.3です。

0. 前提条件

Xcode をインストールしていること

1. Homebrew インストール

OS X 用タスクマネージャー Home Brew をインストールします。
こちらのページに遷移後、表示されているコマンドをターミナルで実行します。
$ brew -v
でバージョンが表示されたらインストール成功です。

2. rbenv インストール

rbenv は Ruby のバージョン・マネージャーです。rvm の後発という安易な理由で、こちらをインストールしていきます。
$ brew install rbenv
※ もしかしたら sudo で実行したほうが良いかもしれないです。
パスを通します。
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile

$ rbenv -v
こちらでバージョンが表示されたら成功です!

3. nvm をインストール

nvm の github のページにて、curl で最新のバージョンのものを持ってきます。今回は v0.30.2 です。
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.30.2/install.sh | bash
ここまで来たら、ターミナルを閉じて再度起動してください。
使用したい node のバージョンを下記のように指定します。
$ nvm install v4.2.6


4-1. Gulp をグローバルインストール

いよいよ Gulp をグローバルインストールします。
$ npm install -g gulp
次に任意のプロジェクト(ディレクトリ)を作成し、移動します。今回は gulp_test ディレクトリ(プロジェクト)を作成していきます。
$ mkdir gulp_test

$ cd gulp_test
ここで、プロジェクトのパッケージを管理するための package.json を下記のコマンドで自動作成させます。要するに npm の初期設定です。
この初期設定は対話形式で行われます。特別な設定が無いならずっと Return キー押下で問題ありません。最後に"Is this ok?"ときかれるので、yes とこたえましょう(^o^)
$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install  --save` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
name: (gulp_test)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to /Users/toyooka/gulp_test/package.json:

{
  "name": "gulp_test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}


Is this ok? (yes) yes
この結果、package.json ファイルが作成されます。デフォルトの中身は以下のようになります。
  {
    "name": "gulp_test",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
      "test": "echo \"Error: no test specified\" && exit 1"
    },
    "author": "",
    "license": "ISC",
    "devDependencies": {
      "gulp": "^3.9.0"
    }
  }


4-2. カレントディレクトリ内で gulp に依存関係をもたせる

先ほど行ったのは gulp のグローバルインストールになりますが、これから行うのは、今いるプロジェクト用に gulp をインストールし、先ほどの package.json に 'devDependencies' を追記してくれるコマンドです。
  $ npm install gulp --save-dev
これで、package.json の中身を確認してみましょう。ファイル内に devDependencies が追記されました。
  "devDependencies": {
    "gulp": "^3.9.0"
  }
さらに、node_module というディレクトリができて、 gulp さんがいらっしゃるのが確認できます。

5. Gulp を設定する

このプロジェクト内で gulp を動かすためには gulpfile.js を作成しなければなりません。
  var gulp = require('gulp');


6. Sass を Gulp で動かしてみる

Gulp の動作確認のために、gulp で Sass を動かしてみましょう。その準備として、sass/style.scss ファイルにネストした適当なコードを書いて保存します。
  header {
    font-size: 15px;
    line-height: 1;

    span {
      font-weight: bold;
    }
  }
次に gulp で Sass をコンパイルできるように gulp-sass というパッケージをインストールします。
  $ npm install gulp-sass --save-dev
上記コマンド実行後に package.json ファイルを見てみてください。devDependencies に下記の行が追加されていることを確認しましょう。
  "gulp-sass": "^2.1.1"
次に、gulpfile.js に Sass の設定をしていきます。
  var gulp = require("gulp"); // gulp の読み込み
  var sass = require("gulp-sass"); // gulp-sass の読み込み

  // sass コンパイルのタスク処理
  gulp.task('sass', function(){
    gulp.src('sass/style.scss') // コンパイルしたいファイルを指定
        .pipe(sass())
        .pipe(gulp.dest('./css')); // css ディレクトリ以下にコンパイルしたファイルを置く
  });
.pipe() は src で指定したファイルに対してその中で指定した処理を施す命令です。チェーンで次々に処理をつなぐことができます。
これで、準備完了です!それでは、コンパイルさせてみましょう!
  $ gulp sass
css ディレクトリの中に style.css が生成されていると思います。では、その中身を確認してみましょう!
  header {
  font-size: 15px;
  line-height: 1; }
  header span {
    font-weight: bold; }
ドドン!!ちょっと括弧の位置やインデントが微妙ですが、Sass のファイルが CSS ファイルにコンパイルされました(^o^)

こんな感じでいろいろな処理を自動化させてしまいましょう!!

参考記事:

2016年2月5日金曜日

アプリのプロトタイピングツールを使い倒してみる② -お手軽プロト「POP」ー

おかだです。

前回の投稿に引き続き、アプリのプロトタイピングツールについて実際に使ってみた感じを合わせて、少しずつご紹介していきます!


プロトタイピングツールを使う前に

プロトタイピングツールを使う前に、気を付けたほうがいいなと思うことがあります。

実際、プロトタイピングはとっても楽しいです。

たのしさへの期待感のあまり、いきなりツールを使い始めてしまうこともしばしば、、、、

ある?かもしれませんが、それはダメです。時間の無駄です。


ツールを使ってプロトタイプを作る前に、まずお絵かきをしましょう。

アプリの画面や遷移の構成を考えるのが本筋です。




ですが今回は、プロトタイピングツールを使ってみることが本筋なので、簡単にうさちゃんアプリの絵をかいてみました。

何をするアプリなのかよくわかりませんが、これを使って、プロトタイピング、するぞー!(こんな雑な絵で大丈夫か、不安です)

うさちゃんアプリ

お手軽プロトタイピング「POP」

POPは、いままで試したプロトタイピングツールのなかでは1,2位を争うお手軽さが特徴です。

メールアドレスだけで、無料で使えます!

また、ブラウザ版だけでなく、専用のAndroidアプリもあり、プロジェクトを共有できるので
実際に端末で動きのイメージを確認することもできます。

詳しい使い方をご紹介されているページがありましたので、参照させていただきます。




「POP」のいいところ

実際にうさちゃんアプリを作ってみて、いいなと思ったのは

「めっちゃお手軽!」なところです。

さきほどのうさちゃんアプリの各画面のお絵かきを写メで撮影して

それをPOPアプリでそのまま使って、ボタンの遷移などを設定することができてしまいます。

かなりお手軽!!!そして日本語対応!!!!!!(とってもいいです)

また、自分のプロジェクトを作る前から、見本のプロジェクトが入っているので

アプリのディレクターさん以外の方やプロトタイプ初めてやってみる方も、使いやすいと思います。




「POP」のちょっと不便なところ

ちょっと不便なところは、画面内のこまか~いところを再現できないところです。

もしかしたらプロトタイピングツールあるあるなのかもしれませんが

・ヘッダー固定ができない
・リストビューのスクロールができない

など、ちょっとここはこう動いてほしいのになー!というところに手が届かない感じがしました。

お手軽な反面、できないこともある程度あるみたいです。



「POP」でこんなことできるよ!

大まかな画面遷移を再現するだけならとてもお手軽にできるので

アプリの構想段階で、ある程度の構成をプロトタイプしてアプリのイメージをメンバーに共有するのが

かなり簡単にできると思いました!




今日はおしまいです。TGIF!!

2016年1月29日金曜日

スマホで写真を投稿したら・・・ひっくり返って表示された!

「スマホで写真を投稿したら・・・ひっくり返って表示された!」



なんてことに出会ったことはありますか?

写真のデータの中には、写真の情報はもちろんですが、
どういう風に写真を撮ったのか、というデータも持っています。

-スマホを縦にして写真を撮ったのか、横にして写真を撮ったのか。

といった情報です。

この情報を正しく扱ってあげないと、Web上で写真を表示するときに、
ひっくり返ったり、横向きになったりしてしまうのです。

デジカメ画像の規格として、Exif(イグジフ)というものがあります。
※詳しくは、http://e-words.jp/w/Exif.html

この規格を採用しているカメラ(スマホカメラ含む)の場合、
写真以外に様々なデータが、付加情報として記録されます。

この付加情報を持っている写真データの場合は、
その情報を考慮し、写真を保存してあげないと、ひっくり返ったり、横向きになったりしてしまうのです。

iPhoneのカメラで採用されていることもあり、開発する際に遭遇することもあると思うので、
付加情報の確認とその修正のサンプルを載せておきます。

もちろん、C#です。

private void CheckProperties(string _path)
{
 // 対象の写真を開きます
 System.Drawing.Bitmap origin = new System.Drawing.Bitmap(_path);

 // 画像の回転度合の設定用
 System.Drawing.RotateFlipType rotation = System.Drawing.RotateFlipType.RotateNoneFlipNone;
 // 開いた写真の情報を順に確認します。
 foreach (System.Drawing.Imaging.PropertyItem item in origin.PropertyItems) {

  // 写真の向きの情報は、0x0112というIDに割り振られているので、このID以外はすっ飛ばします
  if (item.Id != 0x0112)
  {
   continue;
  }

  // IDが0x0112の時なので、向きの情報が取れる場所
  switch(item.Value[0])
  {
   case 1:// 不要(回転・反転なし)
    break;

   case 2:// 水平方向に反転
    break;

   case 3:// 時計回りに180度回転
    // 時計回りに180度回転しているので、180度回転して戻す
    rotation = System.Drawing.RotateFlipType.Rotate180FlipNone;
    break;

   case 4:// 垂直方向に反転
    break;

   case 5:// 水平方向に反転+時計回りに270度回転
    break;

   case 6:// 時計回りに90度回転
    // 時計回りに270度回転しているので、90度回転して戻す
    rotation = System.Drawing.RotateFlipType.Rotate90FlipNone;

    break;

   case 7:// 水平方向に反転+時計回りに90度回転
    break;

   case 8:// 時計回りに270度回転
    // 時計回りに90度回転しているので、270度回転して戻す

    rotation = System.Drawing.RotateFlipType.Rotate270FlipNone;

    break;

   default:    break;

  }

  // といった感じで、item.Value[0]の値で、どんな状態なのかが分かるのです。
  // あとは、この値を元に処理をしてあげればOK
  // 上記の3、6、8には正しくする処理を記載しましたので、参考にしてみてください

 }



 // 画像を複製して、回転を正す
 System.Drawing.Image rotated_image = (System.Drawing.Image)origin.Clone();

 // 複製する際のフォーマット(元の画像と一緒にする)
 System.Drawing.Imaging.ImageFormat format = origin.RawFormat;

 // オリジナルの画像から、欲しいものは奪えたので、閉じちゃう
 origin.Dispose();

 // 指定された角度だけ画像を回転する
 rotated_image.RotateFlip(rotation);

 // 回転を正したものを、指定のパスに保存
 try
 {
  rotated_image.Save("新たな保存先", format);
 }
 catch(Exception ex)
 {
  rotated_image.Dispose();
 }
 finally
 {
  rotated_image.Dispose();
 }
}

2016年1月28日木曜日

開発初心者がこれだけは知っておいた方が良いこと①

こんにちはSです!

前回、自己紹介でも書きましたが、わたしは7ヶ月前まで本当に何も知らず、
分からない事だらけでした。
(ブラウザって何?アマゾンって本屋さんじゃないの?!という状態でした。
本当にごめんなさい。。。)

そこで今回は「最初にこれを知ってたらもっとラクだったかも」と思うことを思い出しながらまとめます。

基本中の基本なのでベテランの方々は読み飛ばすか、
もしくは次に新人さんが入ってきたときに、こういうところにつまづくんだな~という参考にしてみて下さい。


◆勘違いポイント
わたしがはまった勘違いポイントです。
きっと誰でも最初に一度ははまるのではないでしょうか。。。?わたしだけ??

①JavaとJSは別物・・・
 先輩たちがJSといっているものはJava Scriptという言語のことであり、Javaとつきますが
 Javaとは完全に別物です。

②JSとjQueryも別物・・・
 「jQueryはJSで書くと何十行にもなるものを少ない行数で書けるようにまとめたライブラリだよ」
 と教わったので、わたしは「jQueryはJSの短い版でほとんど一緒なんだ!」
 という拡大解釈をしていましたが、書き方が違います。
 なのでjQueryオブジェクトをJSの書き方で動かそうとしても全く動きません。。。

◆最初のつまづきポイント
①{ }の中で定義した変数は{ }の外で使えない←当たり前

②分からないことがあってもどんなワードで検索すれば良いのか良く分からない
 →「やりたいこと C#」とかで調べてみるけどやりたいことの表現が適格でないと全然欲しい結果が返ってこない
 →もういっそ先輩に「こういうことがやりたいんですけど、なんてググったら良いですか?」と聞いた方が早い

③もともと用意されているメソッドと自分(の会社の人)が作ったメソッドの違いが分からない
 →オリジナルのメソッド名でググるけど何も出てこない。。。
 →オリジナルのメソッドはそのページ内、もしくは継承しているページのどこかで定義しています


◆先に知っておいた方が良いVisual Studioの機能
①Ctrl + スペース で携帯の予測変換みたいなことができます
 →ちょっと意味が分からないと思いますが、とりあえずやってみて下さい

②メソッドの上でF12を押すとそのメソッドを定義しているところに飛べる

③変数やメソッドの上でダブルクリックして少し待つと、同じ名前を使っているところの背景がグレーになります
わたしはせっかちすぎて1ヶ月くらい気づきませんでした



◆番外編(便利なショートカットキー)
営業からシステムに異動になり、色々と教えて頂く中でショートカットキーも教わり
非常に感動しました!
今までなんて非効率なことをしていたんだろう。。。

開発初心者の方はこれからバンバン開発をしていく上で、非常に業務効率があがると思うので
ぜひ使ってみてください♪

ステップ1 ~結構誰でも使ってる?~
Ctrl + C コピー
Ctrl + V ペースト
Ctrl + X 切り取り
Ctrl + A 全選択
Ctrl + S 保存
Ctrl + Z 戻る
Ctrl + Y 進む

ステップ2 ~知らなかったらすごく感動する~
Alt + Tab  画面の切り替え
田 + E   エクスプローラーを表示
田 +  →  画面の右半分に表示
田 +  ↑  最大化
田 +  ↓  最小化

他にも色々あるようですが、このへんがオススメです!
ベテランエンジニアの方々はきっともっと知ってるはずので聞いてみて下さい。





定数の新しい行です エラー

こんにちは山田です。

(ちなみに開発言語:C#の話)

本日もカタカタとプログラミングをしている中 
文字の置き換え(String.Replace)を行おうと思ったら見慣れないエラーが
 

「定数の新しい行です。」

ちょっとわからなくグーグル先生に聞いてみました。
どうやら調べてみると¥の文字に原因があるようでした。
 解決方法としては2パターン見つかりました↓

■解決方法①

 \を直接書かず
System.IO.Path.DirectorySeparatorChar; を使う
tempFileName1.Value.ToString().Replace("/", "System.IO.Path.DirectorySeparatorChar;");
■解決方法②
 "\"の前に@を付ける
tempFileName1Value.ToString().Replace("/", @"\");
■解決方法③

 \\と書く
tempFileName1.Value.ToString().Replace("/", "\\");
結局は方法②を取りました。