よこなのへたのよこずき

noteもよろしくね

Xcodeの便利アイテムAlcatraz

Alcatraz(アルカトラズ)というツールの存在を昨日知りました。
Xcodeのパッケージマネージャーらしく、
プラグイン入れるような感じでXcodeに機能追加が出来るようになります!
(プラグイン以外にも何か出来るっぽい…?)

なお、Xcode使いの皆さんが普通に使うアイテムなのかは未だ分かっていません。
情弱すぎるのでSwift界隈をフォローしたい…🐦

とりあえず今のところ便利っぽいし導入方法と使い方書いておきます。

環境

OS X Xcode
10.11.2 (El Capitan) ver 7.2

インストール

brew cask install alcatraz

で入れました(brew caskについてはコチラどうぞ)。

公式には

curl -fsSL https://raw.githubusercontent.com/supermarin/Alcatraz/deploy/Scripts/install.sh | sh

と書いてあります。こっちはやってないので分かりません('_')

反映

Xcodeを再起動するだけ!すると警告が出るのでLoad Bundleをクリックします。
f:id:ihcomega:20151218103127p:plain:w300

で、開くとなんかRecent Projectsが消え失せます(私だけ…?)。
f:id:ihcomega:20151218103130p:plain:w400

しかし、次開くと復活してます。
f:id:ihcomega:20151218103332p:plain:w400

☃使い方

Window -> Package Managerで、パッケージ検索画面が出ます。
f:id:ihcomega:20151218104034p:plain:w500

好きなモノをInstallして、Xcodeを再起動します。
f:id:ihcomega:20151218104049p:plain:w400

また警告が出るのでLoad Moduleします。
f:id:ihcomega:20151218104057p:plain:w300

またRecent Projectsが消え失せます。
[画像略]

また次開くと復活します。
[画像略]

便利!別の方法でXcodeVimに出来なくて悩んでた(投げ出していた)けど助かった〜。

今やってみたいと思っているRealmもすぐ試せそうです😚

女子の生活を技術で便利にするの楽しいね(今回はSwift)

これはGeek Women Advent Calendar 2015、15日目のエントリです。
昨日は@emorimaさんのRubyKaigi 2015 に登壇して思うことでした。

どうも、Java女子部部長のよこなです₍₍ ◝('ω'◝) ⁾⁾ ₍₍ (◟'ω')◟ ⁾⁾
人生初のアドベントカレンダーだよ〜

突然ですが最近、少しくらい健康を意識しようということで
多くの女子に紛れてホットヨガをしています。とてもよいです。

でも一方で、お金の問題がついて回ります(ી(΄◞ิ౪◟ิ‵)ʃ) マニーマニー

今、1ヶ月10,000円ちょいで通い放題なんですがまぁ元とれてるのか時々気になりますよね。
行く度に1回1,500円程支払う都度会員もあるので、通う頻度によっては無駄になります。

いつもレッスン予約サイトで過去の履歴見て
「よし今月は10回行ったからクリアー!」とか
「あと3回行かねば…(ી(΄◞ิ౪◟ิ‵)ʃ) マニー…」とか考えてるんですけど

ひたすらにめんどくさい。

なんとかしたい。

というわけで、iPhoneで専用アプリを作ろうPJを始めました(๑ˇεˇ๑)•¨•.¸¸♪
iPhoneユーザじゃないのに(๑ˇεˇ๑)•¨•.¸¸♪
Android愛しているのに(๑ˇεˇ๑)•¨•.¸¸♪
Java女子部なのに(๑ˇεˇ๑)•¨•.¸¸♪
※ちなみにSwiftは半年くらい前に1ヶ月弱さわってました。

感想

いかんせん文法がよくわからんかったです(⌍་д་⌌)
あと、変化の激しい言語だからか、古い知識とか適当にググって出た情報とかを使うと
「ごめんそれもうdeprecatedなんだよね」って警告マークが出がちです。
(遭遇したdeprecatedは後半で紹介しますね、一応)。 f:id:ihcomega:20151215151314p:plain
こんな感じ。
あ、ググって辿り着いたQiitaが「この記事は最終更新日から1年以上が経過しています。」
って言ってたら要注意かも?

まぁ安心して下さい、段々こうなりますよ。

でも!何でもいいからすぐ動く喜びをfeeeeeeeeeeeeeeelしたいときは
Swift始めやすいしおすすめです(ง `ω´)ง

あと実際iPhone上で動かせるのいいですね!Xcode7から出来るようになったらしいですよ!
前はお金払わないと実機にインストールすら出来なかったのでね…ハードル高かったよね…
とにかく、ウゴイタァァァァァァァの快感すごいよ〜
f:id:ihcomega:20151215194426j:plain:w150ドヤァ

そうそう、私みたいにAndroidユーザの方はAndroid開発をやるか…、
それかあれです、@cero_tさんみたいに何故かiPhoneをたくさん持っている先輩からなら
1つくらいパクってもバレないので、とにかく実機で遊んでみると楽しいとおもいます!!

言いたいこと

欲しいと思ったアプリとかwebサービスとかって大概世の中にもう存在する…
というのはよく聞く話ですね。自分より早/すごいひとがゴージャスなの作っちゃってる。
でも「既にあるかな?」なんてググらずに自分で用意してみるのはいいですね!!

また、こうしてアドベントカレンダーやコミュニティなど色々なきっかけを使って
「こんなことやった」「あんなことやった」ってキャッキャウフフするの楽しいね(ી(΄◞ิ౪◟ิ‵)ʃ)

そうこうしてるうちに、「何かを作る」ことのハードルが下がるの嬉しいね(ી(΄◞ิ౪◟ิ‵)ʃ)
しょうもない日常でさえ技術をさわるきっかけになってゆく!

私の場合、ハードルを下げてくれたのはJava女子部でした。ありがとうありがとう。
もうSNSで何百回言ったか分からないけど、同じような経験出来る人が増えたらいいな〜
と思っとるわけです。

てなわけで、来年もますますGeekなWomenが増えますように!と祈っています。

〜ほぼ完〜


ここから先は出会ったdeprecatedと作ったアプリの紹介ってことで
人様に読んでいただくようなものではない気がしますが自分用に残しときます。

開発環境

Xcode Swift
ver 7.2 ver 2.1.1

Swift2 deprecated&消えたシリーズ

コンソール出力方法

[Before]

println("やっほう")

[After]

print("やっほう")

printlnprintに置き換わったらしい。いきなりコンパイルエラーでて驚くなど。

String -> Intの変換方法

[Before]

let moji = "56"
let suji = moji.toInt()

[After]

let moji = "56"
let suji = Int(moji)

toIntなくなった。String(suji)Int(moji)で変換ってことで分かり易くなったかな。

カレンダーでの年月日取得方法

[Before]

let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
let year = calendar.component(.NSYearCalendarUnit, fromDate: NSDate())

[After]

let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
let year = calendar.component(.Year, fromDate: NSDate())

シンプルになったけど、罠あった。
NSYearCalendarUnitじゃなくNSCalendarUnitYearを使えという警告メッセージが出たので
分かりづらい名前変更に笑いつつ、言われた通り置き換えたら…コンパイルエラーになった…。
調べたらNSCalendarUnitYearいらない子(要出典)で、Yearを使えばよいんだって。何事…。

開発進捗

とにかくまず動けば何でもありやぁああってことで2〜3日ごちゃごちゃやって
現在ここまで出来ている〜

  • 月ごとのタブを追加する
    f:id:ihcomega:20151215165505p:plain:w200 -> f:id:ihcomega:20151215165506p:plain:w200
    ・右上の➕ボタンを押すと現在時刻から年月を取得して1行追加する。
    ・月額ボタンの位置はやばすぎて笑ってる。画面下に固定したいのに。

    f:id:ihcomega:20151215165507p:plain:w200
    ・月毎にカウントしたいので登録済みの月はダブらないようにした。

  • 会費を登録する
    f:id:ihcomega:20151215165508p:plain:w200
    位置のおかしい月額ボタンを押し、ポップアップで月額と都度会費を入力する。
    ・ポップアップ開いたらデフォルトで前回入力した値が入っている。
    ・何も入力しなかったら、会費情報の更新はしない。

  • 元がとれたか計算する
    f:id:ihcomega:20151215165510p:plain:w200f:id:ihcomega:20151215165511p:plain:w200
    ・1回参加したら➕ボタン押す、という雑な操作をする。
    ・月額、都度会費、参加回数から元がとれたか計算する。
    ・0の時➖ボタンを押しても0のままで減らない。

    f:id:ihcomega:20151215165509p:plain:w200
    ・都度会費情報がないときは怒る。

以上!

ということで全然間に合ってなくて色々問題がありますが、
一番ヤバイのは

_人人人人人人人人人人人人人人人人人人人_  
> アプリ再起動したらデータいなくなる <  
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄  

そう、どっかに書き込めてない。方法も知らん。調べる。

今後

上記も含めて今後は以下の対応をしたい(⌍་д་⌌)

  • データを保存できるようにする
  • 月毎だけじゃなくて通算の損得も表示する
  • 現在月日以外も登録できるようにする
  • ボタンの位置がヤバイので直す
  • 可愛くする

一応リポジトリはこれなんですけど、まだまだ自分で直します。
github.com

そんな感じでおしまいです。楽しい。すいすい〜すいふと〜
ぐだぐだ系womanのよこながお届けしました。

明日はofukuさんよろしくお願いしま〜す!

合同勉強会in大都会岡山のLTとかSwiftとか #gbdaitokai

12/5(土)は合同勉強会 in 大都会岡山に参加してきました!

togetterありますありがとうございます!:
togetter.com

LTもさせてもらって楽しかったです!

このLTの裏話…というほど面白いものでもないですが、
スライドの途中で出てきた地図についてちょっと語ってみます。

(18ページ目のDuke大量発生してるものは違いますが、)
実はSwiftGoogle Maps SDK for iOSをいじってみたものでした!
こんな感じ
f:id:ihcomega:20151206234557g:plain

コードはこれだけ↓なんですが正しい書き方がよくわからん…
(色々ベタ書きでテストもからっぽてへぺろ)
github.com

んで、最初はこの話LTにいれてたんです。
けど以下の理由から当日割愛しました。
(かわりに、ギークハウス岡山の話で出てきた地図のくだりをいただくなど・・・)

  • しょーもない
  • 言いたいことぼやける
  • スライド多すぎる
  • Java女子部なのにSwiftっていうの、某ネタとかぶっておりすべりそう

結果、取り払ってよかったなと思ってますw
レビューしてくだすった@tango238さんありがとうございました!!!


さてここでつまらん感想を述べますが、合同勉強会楽しかったです。
いろんな界隈の方が集っていたので、
全く知らん技術の話とか今までそんなに気にしてなかったことについても聞けて新鮮でした。
雰囲気が良かったのも良かったですね(ボキャ貧)。

そして早速、聞いた話をきっかけに


ふふふ。


勉強会の後は忘年会議!元々映画館だったという建物で飲み会でした。斬新〜。
そこらに転がっている飲み物なら何でも飲んでいいというスタイルでした。斬新〜。

すごく盛り上がっていました。

運営のみなさま、よき1日を誠にありがとうございました!!


次の日、日曜は@daiksyさんと@tango238さんと観光しました。

岡山城と後楽園行って、ちょっと寒かったけどビール飲んだりホルモンうどん食べたりして満喫。

┌(┌o^)┐?

くっそうまかった。


楽しんでいたらいつの間にか15時を過ぎ、
名残惜しかったけど東京でJava女子部の会議があるということで岡山を去りました。
何とかギリギリ間に合うように渋谷へ。めっちゃハード・・・新幹線では寝続けました。

そして会議はというと

本当にお疲れ様でした。

JJUG CCC 2015 Fallで懇親会の司会をしに東京へ行った #jjug_ccc

11月28日(土)は恒例のJJUG CCCでした。
今回は過去最高の677人ご来場!勢い増している!
会長もこうおっしゃっていて、まだまだもっともっと頑張れそうですね。

なお、私はというと主に受付とかセッション部屋担当とか幹事っぽいことをしておりました。
そんな中印象的だったことといえば、無料になりご参加者も多かった懇親会における
@maaya8585さんとの司会業です。

結果…

あらあら。
怖い人であるという印象を与えてしまったかもしれませんが、あれはビジネス毒舌なんです。
心にもないことを言ったのでとても辛く、帰ってから皆さんを思って泣きました。

っていうのは嘘であることを早めにお伝えしておきます。

仲良しの方が何名もLTしてたので、思ったことを正直にコメントし続けてました!
好き勝手に暴言吐いた思い出を振り返るのも楽しそうですがやめにして、
とりあえず女豹みたいな方の写真だけ拝借しておきます。

しかしまぁ毒舌というのが考えものだってことは事実ですね。

こういうスタンスで、相手との関係とか相手のキャラとか…
自分では考えたり顔色をうかがったりしているつもりでも
傷つけてたってこと何度もあるので。最近もあった。
ということで好評もいただいたのに残念ですが、これまでの毒舌はここで封印して

慎重な毒舌を目指そうと思います。


…えっと、ふざけてばかりいないで最後にポエムを投下しておきます。

今回のコミュニティに関するパネルディスカッションを受けて、
JJUGにしろJava女子部にしろもうちょっと運営を楽しもうと思いました!

最近、安定の技術力不足*1から、これまで以上に
JJUGの幹事としては雑魚すぎる」「技術が出来ないからせめて雑用くらいはやらねばならぬのかもしれん」「Java女子部の部長名乗るの恥ずかしい」
などと感じることが増えていたんです。
それで、目立たんほうがいいなと思ったり、幹事/スタッフ感あるツイートをしかけてやめたり
といったなかなかアホなことを真面目にやるようになっていました。

しかし、まーやさんブログにあるうらがみさんのコメントじゃないですが、
そうやって義務とか負い目とか感じながら無理してやるのって本当に意味がない…!

心の中のリトルよこなが「あいつアホのくせに運営とかやってるぅ」としきりに申しており
不安になっちゃってたんだけど、そういうひねくれた心はいったんしまって、
ハッピーな気持ちで続けていければなと思いました。

まぁそれもあって懇親会司会を全力で楽しんでしまったわけなんですが、
要はあの快感を忘れずにいようということですね!!え。ちょっと違うかな。え。

ちなみに!!!去年秋のCCCでJava女子部についての報告をしてから1年経ちました。
当時のブログエントリ読んでみても、
もっと純粋な気持ちで色々トライしていたんだなということが分かってよいです。

そんなこんなで、激動の1年を振り返りまた成長するきっかけをくれたという意味でも、
よいJJUG CCCでした。
ただ、ひしだまさんにお会いできなかったのは一生の不覚。

次回はこそ登壇…はハードル高いかもしれんけど、とにかくCfPを出すのが目標です!

あ、最後の最後に。
後半ネガティブ感が滲み出ているとはいえ
慰めや励ましを求めるエントリではなくただの振り返りであることをお伝えしておきます。
おちこんだりもしていないけれど、私はげんきです。

追伸:@irofさんありがとうございます。

*1:分かってるなら努力しろっていうの今はナシ

IntelliJ IDEAのabbreviationというのを見つけた

IntelliJ IDEAの色々なショートカットキー、活用出来たら色々速くなりそうだよね。
でも覚え辛かったり、組み合わせの数に限りがある中好みのキーがほかで使われていたり…
人生甘くないっぽい。

そこでabbreviationが時々便利なのではと私の中で話題に!(さっきまでこんなん知らなかった)

環境

概要

何かというと、
ある機能に対し、その名の通りabbreviation(略語)を割り当ててらくらく呼び出す
というもの。

使い方

  1. を2回叩いてSearch Everywhereをひらく
  2. abbreviationを入力する

設定の仕方

  1. + ; -> Keymap をひらく
  2. 設定したい機能にAdd abbreviationする

イメージ

GitHubCreate Gist機能にgistというabbreviationを割り当ててみた! f:id:ihcomega:20151124193155g:plain

x 2 -> gist -> return で新しいgistを作れる。

発見の経緯

Diagram機能を呼び出すショートカットキーのデフォルトが覚えづらかったので
設定変えようと思ったら緑色で囲まれたumlの文字を見つけたこと👀
f:id:ihcomega:20151124194439p:plain
なんだこれ→ぐぐるJetBrainsのページで把握( ˘ω˘)

おまけ

abbreviationっていう単語のスペルと意味を二度と間違えなくなるというメリット。

うーん、時々便利っぽい。おわり。

Scala関西Summitの関数プログラミングことはじめを復習した #scala_ks

遅ればせながらScala関西 Summit 2015の復習です。2015年8月1日(土)開催でしたw
関西に来てすぐの頃、Scalaを1文字も書いたことがないのに参加しました。

最近は遂に職場でScalaを書くことに…(震)となっている私ですが、
@kitora_naokiさんの【ハンズオン】関数プログラミングことはじめ
ものすごく分かりやすかったのを思い出し、要点を再度確認しました。

"関数型言語っぽい書き方っぽいことはほとんどやったことなく、
コード見ても何これワカランとなる人(私)"にとてもよいハンズオンだったと思います*1!!
すこーし数学の話も出てきましたが、文系数学(?)の知識だけで全然問題ないレベルで
むしろ数学さんが全力で理解を助けてくれてね、本当に助かりました。
なお、当日はScala Worksheetを使って進めていきました。

10/24追記:@kitora_naokiさんが資料アップしてくださったー!!!


はい。さて行ってみよう。
ポイントは1つで、漸化式と同じ考え方をすること!!!

def f(n: Int): Int =
  if (n == 0) 5
  else f(n - 1) + 3

さてこれ、何をしているか。Javaの頭だとぱっと見「?」となったりする…。

そこで漸化式の考え方を脳みその古い箪笥から引っ張り出してくるのだ。
結論から言うと、上は初項5、公差3の等差数列なんですね*2
高校だか中学だかで習った数学だとこういう書き方をしたはず。

a1 = 5
an+1 - an = 3

はい。どうでしょうか。私は、
はぁぁあああなるほどああうおああぁぁあああって。なりました。

例えば3番目の項を求めたいとします。
分かりやすいよう試しに上の漸化式を地道に辿ってみましょう。

a1 = 5
a2 = a1 + 3 = 8
a3 = a2 + 3 = 11

ここで話を戻してはじめに例示したScalaのコードで同じことを考えると…
さっきまで読み解きづらいと感じていた関数ですが、上の漸化式と同じことしてると考えれば

f(2)

11が返ってくる、というのもかなり納得できます。


「何をそんな初歩的なことを」とか「コードから直接それを読み取ればいいのに」とか
思われるかもしれませんが、

  • Scalaを読み解く:新しくて、チャレンジングなこと
  • 漸化式の考え方を使う:多少なじみある発想で、すんなり理解しやすいこと

なのです、私にとっては(伝わるかなぁこの違い…)。
読めんと思った未知のコードを、脳みそにある既存のフロー(?)につっこんで処理出来た感じがして
はぁぁあああなるほどああうおああぁぁあああって。なりました。
解釈の仕方を掴んだというか…。


1時間のセッションだったので他にも色々な例を出して下さいましたが、
正直さっきの一例で私のアハ体験については語り尽くすことが出来ちゃった…。

おまけに当日のノートが手記はここで途切れている状態なので(どうした)
あとは思い出せる範囲でコードだけメモ書き程度に残しておきます。
私みたいな超初心者の方、この記事が目に止まったら、何が起きているか考えて
頭の体操してみてください!w
@kitora_naokiさん、本当にありがとうございました。


def f(n: Int): Int =
  if (n == 0) 0
  else f(n - 1) + n

0からnまでの和が出せます。f(10)だったら55ですね。
n-1までの和に、nを足しているんだなぁとすんなり理解できます。
༄༅༄༅༄༅༄༅༄༅༄༅

def f(n: Int): Int =
  if (n == 0) 1
  else f(n - 1) * n

こんどは、0からnまでの積です。
༄༅༄༅༄༅༄༅༄༅༄༅

def f(n: Int): Int =
  if (n == 0) 1
  else if (n == 1) 1
  else f(n - 2) + function(n - 1)

フィボナッチ数列
༄༅༄༅༄༅༄༅༄༅༄༅

def sum(list: List[Int]): Int =
  if (list.isEmpty) 0
  else list.head + sum(list.tail)

リストの要素の和!
༄༅༄༅༄༅༄༅༄༅༄༅

def multiple(list: List[Int]): Int =
  if (list.isEmpty) 1
  else list.head * multiple(list.tail)

リストの要素の積!

並べただけですが、おしまいでーす。


✪おまけ
IntelliJ IDEAにたくさんうずまき🌀が出てきて何かと思ったら
recursiveということを教えてくれていました🌀🌀🌀🌀🌀
f:id:ihcomega:20151018173258p:plain

*1:うろ覚えですが…あくまでも関数プログラミングはじめの一歩を踏み出すためのコードですというようなことをおっしゃっていた気がします。違う観点で見ると直したくなるようなコードがあるということかもしれません。確か末尾最適化がどうとかこうとか。まぁ今の私にはその判断もつきませんすみませんすみません…

*2:たしかハンズオンの際は、ここまで簡単な例は出なかった気がします。分かりやすさのため、私が勝手に等差数列を持ち出しています〜

PyCon2015パネルディスカッションに参加した #pyconjp

10月10日(土)はPyCon 2015におじゃましました。

PyLadiesの@a_macbeeさんにお誘いいただき、
パネルディスカッションに参加させていただいたのでした('o')!!

テーマはこちらにあるとおりです。
性コミュニティメンバーで集まってわいわいおはなしするということで
@a_macbeeさんとDjango Girlsの@mamix1116さん、
そしてRails Girlsの@emorimaさんと一緒に登壇しました。


様子です。本名とか社名とか写真とか出すのも初めて…(=o=)

簡単に、ランダムに、振り返ってみようと思います。

内容

togetter.com
Togetterまとめがあります、ありがとうございます!
話したことも大体ツイートしていただけているのでこちらのまとめに入ってますが、
一番言いたいことを出だしで結構語ることが出来たのが有難かったです。
https://twitter.com/M_T_Asagi/status/652751999369244672
ちなみに、しょうもないですが以下自己紹介資料ですw

(〜'-')~10/12(月)追記~('-'〜)
当日の動画ありましたw
t.co
姿勢とか気をつけたと言った割に案の定かなりキョロキョロそわそわしていました…
ぐぬぬ
(〜'-')~追記ここまで~('-'〜)

感想

  • きっとそう感じるだろうと思ったけどやはりあっという間でした。
  • 2階席まである大きな部屋でしたが壇上から聞いている方の顔がよく見えて、
    表情や反応がうかがいやすかったのが嬉しかったです。

他コミュニティの話を聞いて思ったこと

  • みなさん国際的でした…!Java女子部も海外進出出来たら楽しそうだなぁ〜。
  • Django GirlsさんとRails Girlsさんは何度も使える初心者向けカリキュラムを
    用意してあるらしく、すげーーなんて思いました。
    同じ内容を繰り返すのって、改善を重ねていってどんどん勉強会がよくなりそうですね。

気をつけたこと

  • 姿勢をよくすること…w
    いつもとても猫背だったり、前回のJJUG CCCでLT待ちのとき足広げてて叱られたり(アカン)
    そわそわキョロキョロしてたり、声が震えたり、スライドばっか見たり
    思いを伝える上で妨げになるような行動をとりがちなので
    出来るだけそういうのは避けようと意識したつもり…では…あります…(出来てないかも)。

反省したこと

  • 空気の読み方?というんですかね。
    話したいことを伝えきれなかったり、長く喋りすぎたり…
    持ち時間を自分だけで使うわけではないというのがチャレンジングで
    あんまりうまくいかなかったなぁなんて思いますねぇ。


今書き留めておきたいことは以上ですかねー。
聞きに来て下さったみなさま、誠にありがとうございました。

また、こんなに貴重な経験をさせていただき、
誘って下さった@a_macbeeさんには感謝感謝アンド感謝です。
@mamix1116さん、@emorimaさんもありがとうございました。
そして、
PyLadiesとJava女子部を最初に繋げて下さった@maaya8585さんもありがとうございました。

うん、ひたすらありがとうございました。
今後ともJava女子部をどうぞよろしくお願いいたします。
コミュニティの壁がないイベント、また出来ると嬉しいなぁと存じます。

(割と真面目に書いたの久しぶり!とか思ったけどいつも真面目だった。)