日々、徒然プログラミング。

都内のIT系専門学校に通う、一人暮らし女子学生chocoffeeの、 日々の気づきと学び、たまにほっこりを綴るブログ。

エンジニアのみなさま、エンジニアの卵のみなさま、IT業界のみなさまが
わたしの「チームってなんだ?」というぼやきに反応してくださることを祈って。

IT

こんにちは!
ちょっとお久しぶりです、ちょこひです。

9月は前期学期末テストがあり
バッタバタして過ごしました。
テストはなんとかなったと思いたい・・・留年したくない(´;ω;`) 


さて、今回は趣旨を変えて、
わたしの就活についてまとめようと思います(`・ω・´)

さすがに会社名を出すのはアレなので伏せますが、
いつごろから何社受けてどんな感じだったのかをまとめます。

ご要望頂いたんですよ!ありがたいことです。
全力で応えちゃいます!


 
実際の数字でみてみる

文章で書くとアレなので画像でドンします(語彙力)。

925


私は2016年1月から就職活動を始めて、9月末、最近終えました。ナガーイ

実はB社から内定をいただき、その時点で一度就職活動を終えてたんです。
内定承諾もだして、がんばるぞー!と思っていたんですが
その後諸事情あって他の会社に行く、という結論が出まして。
7月から就職活動を再開しました。 (詳しくは直接聞いてください・・・)
それもあって長期戦になったんだと思います。

さらっと「再開しました」とか書いてますが、
当時はこの世の終わりだ・・・('A`|||)みたいな顔してました。


正直、めちゃくちゃ辛かった。
いくら技術職といえども技術だけでなく人間性を見られるから、

自分はどんな人?何が好きで何が得意?逆に何が足りていない?足りないものに対してどうコミットしていく?どうする?

と考えに考えた期間でした。
何で就活する前に考えへんかったんや自分!おい!

そして就職活動を終えた今思うことは、
自分と向き合いながら就職活動するんでは遅い」ということ。

自分がどんな人間かわかっているつもりでも
将来のこと、具体的にはどんな仕事をしているのか、結婚は?子供は?いくつまでに欲しい?まで考えると
頭真っ白になる人、結構多いんじゃないかなと思っています。わたしもそうでした。


もしちょこひが後輩に就活の極意を伝えるなら


 就職活動を終えてまず思うことは、
やってよかった!」です。

意地悪な質問されて号泣したり、
面接前日にお腹痛くてトイレでひとり号泣したり、
あとは・・・とにかく号泣しまくった記憶がたくさんありますが、(笑)

面接終わって授業終わり間際に学校に行って
教室着いた途端化粧がすべて流れるほどバーーー泣いたこともあったなあ。


そのおかげで自分がどんな人間なのか言語化できたことがなによりの収穫です。


大人とか、社会とか、よーわからん!(・∀・)と言っていたわたしも
将来どんな人になりたいか考えて考えて、ひとつのプランを作って表にして
そこから逆算してこういう人材になれる会社に入りたい!と動き、内定も頂きました。
これができたの本当にラッキーだとおもった。

一番印象に残った選考は、最終面接で落ちてしまったH社です。
人事の方が元キャリアアドバイザーの方で
キャリアデザインの仕方や考え方のコツを、面接中に時間を延長してまでお教えくださいました。
本来30分の面接が、70分にΣ(゚д゚;)
嫌な顔一つせず、1学生のわたしに向き合って懇々と説明してくださり
そこから地に足ついて就職活動ができたと思っています。ワシは本当に嬉しかったァ
(落ちた時はこれ以上ないくらい泣きまくりました)
 

新卒の就職活動は、そこからのキャリアデザインの方向をある程度決めるもので、
人生のターニングポイントにもなり得る一大イベントですよね。


その就職先をなんとなくで決めたり、とりあえずで決めることは本来おかしいはず。
大手だから・・・高給だから・・・というのはそれはそれで立派な理由ですが、
それだけを理由にして何社も何社も受けまくるのは危険だと思っています。


・どういうビジネスパーソンとして社会に貢献したいのか?
(エンジニア!等職種でなく、例えば「技術に長けたエンジニア」なのか「マネジメントできるエンジニア」なのか。)
・結婚はするのか、するとしたらいつ?それまでにどのくらい稼いでどのぐらい貯金したいのか?
・子供は持つのか、持つとしたらいつ?それまでにどのくらい稼ぐ?配偶者も働くのか? 
・ライフステージが変わるごとに、仕事内容はどう変化させたいのか?


ここらを考えて練ってから就職活動をするのが理想だと思っています。
もちろん難しい。ほんと難しい。
答えはどこにもないから本当に難しいです。


でも、ここまで見えていれば自然と「この会社じゃないとダメなんだ!」という理由にもなる。
その理由を持ってない人と持っている人では、会社から見て圧倒的に後者の方が理想的ですよね。
就職にも強くなれそう。策士万歳。

今の自分なりにしっくりくるプランを元に、逆算して会社を決めて欲しい。
実際に働いてみるとまた世界が変わって、
ライフプランを変更したっていい。むしろそうなるもんだと思います。

大切なのは、将来から逆算して今どう動くかを決めること

ちょこひが後輩に語るならこれを繰り返し伝えます。



ええかっこしいしてドヤ顔してますが
ほんと就職活動期間は泣いて泣いて悩みぬきました。
もうしたくない・・・(笑)

卒業まであと半年、
卒業制作もやりつつ、最後の学生生活を謳歌しようと思います(*´∇`*)





ちょこひ 

こんにちは!
近所のいつものカフェでご満悦してるちょこひです。

今日突然暑くなった!
朝からルンルンで洗濯回せるのはいいけども
暑いのだいっきらいなんでやめてほしい!


アカン

今日はPHPのsort関数について書きます。
夏休み明けたらすぐ定期テストがあるため最近重い腰を上げて
ようやっと勉強し始めたんですが

昨日見事にソート関連でハマりました。

ググりにググりまくり
友達に確認してなんとかなったので
書き留めておきます。


今日使うもの


さて、sort関数の話をする前にソートされるものを用意しましょう。
今回は2つ用意します。
 
$array = array('かきくけこ', 'さしすせそ', 'あいうえお');
$dict = array('chocolate' => 'チョコレート', 'apple' => 'リンゴ', 'banana' => 'バナナ');

$arrayはよくみる配列です。
Javaと同じように、0から順にインデックスが振られます。
要素数3つの配列です。

$dictは「連想配列」です。要素とキーがセットになったもの。
Swiftでは辞書って呼ばれるものです。 


では、ソート関数のお話。
PHPには、いろんなソート関数が用意されています。

・sort
・rsort
・ksort
・krsort
・asort
・arsort

今回はこれらの整理です。 


普通の配列の場合

 まずは普通の配列をソートする場合についてまとめます。

 
$array = array('かきくけこ', 'さしすせそ', 'あいうえお');
$result = sort($array);
print_r($array);


実行結果が以下です。

Array
(
    [0] => あいうえお
    [1] => かきくけこ
    [2] => さしすせそ
)

sort関数は、要素を昇順でソートし、インデックスを振りなおします
戻り値はboolean。成功時にtrue、失敗時にfalseが入ります。
ここでは$resultにはtrueが入っています。


では、rsort関数は
$array = array('かきくけこ', 'さしすせそ', 'あいうえお');
$result = rsort($array);
print_r($array);
 
実行結果が以下です。

Array
(
    [0] => さしすせそ
    [1] => かきくけこ
    [2] => あいうえお
)

rsort関数は、要素を降順でソートし、インデックスを振り直します
sort関数同様、戻り値はbooleanです。


続いてksort関数。
$array = array('かきくけこ', 'さしすせそ', 'あいうえお');
$result = ksort($array);
print_r($array);
 
 
実行結果が以下です。

Array
(
    [0] => かきくけこ
    [1] => さしすせそ
    [2] => あいうえお
)

ksortのkは、「key」の略です。キーを昇順に並べ替えて配列を作成します
ここではkeyは自動で振られたインデックス順なので、実行前と結果が変わりません。

ここまでくればわかるかと思いますが、
krsortは
$array = array('かきくけこ', 'さしすせそ', 'あいうえお');
$result = krsort($array);
print_r($array);

実行結果は

Array
(
    [2] => あいうえお
    [1] => さしすせそ
    [0] => かきくけこ
)
こうなります。

では、asort。

$array = array('かきくけこ', 'さしすせそ', 'あいうえお');
$result = asort($array);
print_r($array);
 

実行結果は

Array
(
    [2] => あいうえお
    [0] => かきくけこ
    [1] => さしすせそ
)

asortはsortと違い、
キーと値のセットを維持したまま要素の昇順で並べ替えます
asortは連想配列でやると違いがよくわかるので、連想配列で同じことをしてみます。


連想配列の場合

では、連想配列で同じことをしてみます。
まずはsortから。
$dict = array('chocolate' => 'チョコレート', 'apple' => 'リンゴ', 'banana' => 'バナナ');
$result = sort($dict);
print_r($dict);

実行結果
Array
(
    [0] => チョコレート
    [1] => バナナ
    [2] => リンゴ
)

キーがどっかいきました。

同じように、ksortでも試してみましょう。

$dict = array('chocolate' => 'チョコレート', 'apple' => 'リンゴ', 'banana' => 'バナナ');
$result = ksort($dict);
print_r($dict);

実行結果は

Array
(
    [apple] => リンゴ
    [banana] => バナナ
    [chocolate] => チョコレート
)
キーと値の関係を維持しながらキーの昇順に並べ替えられ、再度インデックスが追加されています。

では、asortは
 
$dict = array('chocolate' => 'チョコレート', 'apple' => 'リンゴ', 'banana' => 'バナナ');
$result = asort($dict);
print_r($dict);

実行結果は

Array
(
    [chocolate] => チョコレート
    [banana] => バナナ
    [apple] => リンゴ
)

キーと値を維持したまま、要素の昇順で再度インデックスが振られています。

連想配列を要素の昇順/降順でソートしたい時、
sort / rsort関数を使ってしまうとキーが失われてしまいます。

困っちゃう。

そんな時に一役買うのがasort / arsort関数ってな感じです。
 
まとめ


エラい硬くなりましたが、こんな感じ。
最初普通にsort関数を使ってキーがどっかいっちゃって、
Σ(゚д゚;) こうなってました。

にしてもややこしいなあ!
PHPはややこしいです。

Javaのありがたみをかみしめながら引き続き勉強します!



ちょこひ 



こんにちは!
週末のお出かけが楽しみなちょこひです。

家族の夏の旅行といえば、ざっくり分けて
山で避暑派と、海で暑さをエンジョイ派とあると思いますが、
我が家はがっつり避暑でした。暑がり家族。

長野県は安曇野にお蕎麦を食べに行きたい!と父に伝えたところ
週末連れて行ってくれるようで。今から楽しみです。
わさび菜の天ぷら本当に美味しいんですよ・・・


このテーマを選んだ理由


と、いうわけで
おいしいお蕎麦によだれを垂らしながら今回も書いていきます。

私のクラスは、今日Swiftの課題提出日でして。
今がっつり授業中ですが(先生ごめんなさい)一通り終わってるので余裕ぶっこいてます。

昨日の残業中、クラスメートに
TableViewの背景をこの画像にしたいんだけど・・・」と 相談されまして。

ちょこひ「それならTableViewのbackgroundに画像設定してrowItemのbackgroundをalphaにFFいれt 」

ちょこひ「・・・・・」

ちょこひ「Androidの話じゃんこれ。Swiftなら〜(storyboardみる)」

ちょこひ「(やべえbackgroundにimage設定できなさそう)」

友達「storyboardで imageView後ろに入れたいんだけど入れられなくてさ〜」

ちょこひ「じゃあソースコードで無理くりいれてみるか」


という背景があり。

無事設定できたので、またまた覚書として。 


やってみる

 
手順としては、
①ソースコードでimageViewを作成
②imageViewにimageを設定
③tableViewのbackgroundViewにimageViewを設定


・まずはシンプルなTableViewControllerをつくる

story

見栄えのためにまったく意味をなさないNavigationViewControllerをEmbed inしてます
実機はこんな感じ。


31



ひたすらに眠い文字列たちは
ソースコード内で用意した配列を使用しています。

 import UIKit

class TableViewController: UITableViewController {
    let array = ["眠い", "ほんと眠い", "とてつもなく眠い", "尋常じゃなく眠い", "寝ながら寝るくらい眠い"]

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return array.count } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) cell.textLabel!.text = array[indexPath.row] return cell } }
cellのidentifier設定をお忘れなく(わたしは忘れてました)

cellIdentifier




・ソースコードでimageViewを生成 

今回背景に選んだフリー素材は

black

こちら。黒くてかっこいい!

みなさんプログラミングするときの背景色にこだわりはありますか?
TwitterClientのときも少し話しましたが、私は断然黒背景派です。
白かったり明るかったりすると目が痛くなってしまう。

この画像を「black.png」として
プロジェクトにぶっこんでます。

//	tableViewController.swift
override func viewDidLoad() { super.viewDidLoad() let image = UIImage(named: "black.png") let imageView = UIImageView(frame: CGRectMake(0, 0, self.tableView.frame.width, self.tableView.frame.height)) imageView.image = image self.tableView.backgroundView = imageView }

UIImageと用意した画像を紐付けて
tableViewのサイズのUIImabeViewをつくり
UIImageViewにUIImageをぶっこんで
それをtableViewの背景にぶっこんでいます。 

こうしてみると全然難しくない。
むしろ簡単。


この時点で実機は

00

こうなります。
アレ?


犯人はcell


tableViewの背景は無事に反映されています。
なぜ行があるところが白くなってしまうのか?

理由は簡単で、
cellにも背景があるからです。
そしてdefaultは白
背景画像の上に白いcellが乗っかってる感じです。

・cellのbackgroundを変更

clearColor

storyboardからcellのbackgroundをclearcolorに設定。


よっしゃこれででk・・・

14


なんもみえねえ。


・cellの文字色を変更
//	tableViewController.swift
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) cell.textLabel!.text = array[indexPath.row] cell.textLabel?.textColor = UIColor.whiteColor() return cell }

今回は白に設定。



できたー!.。゚+.(・∀・)゚+.゚

05


かっこよろしい!
スタイリッシュ!


まとめ

普段storyboardを使ってレイアウト等は決めているので、
ソースコードでViewを生成するのに少し手間取りました。

あれ?これでいいよな?あれ?ってなった。

tableViewの背景画像を入れている状態ってなかなかみないけど
これはこれでかっこいいですね!


ねむい。お蕎麦食べたい。




ちょこひ


 


こんにちは!
プログラミング楽しい!!!!と発狂しそうになったちょこひです。

最近頭打ちの感覚があって結構焦っていたんですが
さっきすんなり課題クリアできてしまって。
嬉しさのあまり叫びそうになりました。

先生が近くにいたので小声で自慢しに行きました(ご満悦)


 
画面を閉じる


さて、今回は画面を閉じるメソッド
navigationcontroller?.popViewControllerAnimated(Bool)」と
dismissViewControllerAnimated(Bool, completion)」の違いを
おぼえがきします。

どちらも「自分自身を閉じる(Viewを閉じる)」
という動きに変わりはないのですが、ちょっとだけ用途が違います。

これ忘れてるといつかハマりそうだったのでちゃんと勉強し直しました。 



結論から言うと
・navigationController?.popViewControllerAnimated(Bool)
 →navigationControllerの階層を一つ戻る
・dismissViewControllerAcnimated(Bool, completion)
 → モーダルビューを閉じる
こうなります。


以下でちょっと詳しい話をしていこうと思います。



NavigationContoller


iOSエンジニアならかなりの頻度で目にするであろうコイツ。
便利ですよね、本当。
TableViewControllerとの相性がほんとにいいと思っています。

NavigationControllerはViewとViewの階層構造を管理してくれるので
・画面遷移の管理が比較的楽になる
・Segueで「show」を選ぶと、そのViewはNavigationControllerの支配下に入る
・ツリー構造で奥へ奥へ入っていく時は無敵
こんな特徴があります。


blog0710_1


こんな感じ。
popViewControllerAnimatedは、Viewを閉じるというより
一つ前の階層に戻るといった感じ。


ModalViewController


対して、モーダルビューは
Segueを設定するときに「present Modaly」を選択します。
これを選択すると、NavigationControllerの支配下に入らず、
ツリー構造とは別に独立して存在するイメージ。

ツリー構造は詳細へ、さらに詳細へ・・・といった場面で使うことが多いですが
モーダルはオプションだったり、詳細ではない画面を設定するときに使用します。

blog0710_2


先ほどの図と組み合わせるとこんな感じ。
dismissViewControllerはpopViewControllerよりも
「自分自身を閉じる」という要素が大きいです。

NavigationController内でdismissViewControllerを書いても全く反応しません。
逆に、モーダルビューでpopViewControllerを書いても反応しません。

同じ動きに見えますが、実際は用途が違います。


まとめ


今回は画面を閉じるときのメソッドについて
ちょこっとまとめました。

実はこれ、さっき課題をやっているときに3分くらいハマりました。
画面を閉じるとき→dismiss、とすぐ出てくるタイプだったので
もう一つのpopViewと両者の違いをおさらいできてよかった。

他にも閉じるメソッドってあったかしら・・・?

何か見つけたらまた追記します。



さて!吉祥寺に予約してたゲーム用品を受け取りに行くぞ〜!


ちょこひ

 

こんにちは!
腰痛と肩こりがMaxなちょこひです。

作業時間が長かったここ最近。
マッサージ行きたい。

 
Twitterクライアント作れた!!

Swiftの授業課題で、
Twitterクライアントアプリを作成して発表会をする
というものが出ました。

期限は10日間。


・・・期限は、10日間。


(((( ;゚д゚)))



頭を抱える友達、瞳孔が開いてる友達、
逆に開き直って諦める友達。

わたしは瞳孔が開いたタイプ。


やるっきゃねえわな!?!?

野球部もびっくりのど根性精神、解禁です。 


 
企画

授業では、

・タイムラインの取得
・新規ツイート方法
・RT方法

あたりを扱いました。jsonの受け取り方・投げ方は一通りわかっている状態ですね。
ここから、自分なりに色々考えて機能追加していくわけです。

課題ではありますが、
どうせやるなら自分の好き勝手やりたい!」と思ったので、
好き勝手やる事にしました。

普段は公式のアプリを使っているのですが
不満点がぎょーさんあるんです。

・新規投稿が右上にある問題
 →iPhone6Sを使っているせいか指が届かなくて困る
・検索が投稿の隣にある問題
 →普段検索は滅多に使わないのに投稿と間違えて押す事が多くてストレス
・TLでのリプライ表示邪魔すぎ問題
 →TLは時間通りに並んでいた方が見やすい
・背景真っ白固定問題
 →黒背景に白文字の方が見やすいタイプなので、白背景は辛い
・自分のふぁぼ一覧遠い問題
 →自分がいいねしたものをよく見返すけど、そこまでが遠い
・ストリーミング非対応問題


などなど。

自力で出来る部分に関しては
自分の理想通りに作ってやろうと決めました。

・画面下半分のみで操作可能なUI
・黒背景
・紫が好きだから紫入れる
・いいねしたTLは1タップでアクセスできるようにする


これらを実現してみました。



ひとまず形にしたアプリ


01

アカウントを選択して、


07


UITabBarControllerに遷移します。
左から タイムライン、メンション、新規投稿、いいねしたタイムライン、現在のアカウント情報
が表示されます。

一度にとってくるツイートは20件で、
一番下の行が出てきたときに続きを読み込む様にしています(たまにバグる、なんでえ)

45


新規投稿はこんな感じ。
画像も1枚なら添付できます。


58

ツイート詳細画面。
リプライ、RT、ふぁぼ、ツイ消し機能がついています。
RTとふぁぼの数も表示されます。

鍵垢の場合はRTできないとか、
自分以外のツイートの削除もできないとか、
その辺も頑張っています。本当に頑張った・・・(遠い目)



ソースコードの話


まだ完成品ではありませんが、
現段階でのソースコードはGitHubにあげています。

GitHubを見る

どう実装したのかは見ていただければお分かりいただけるかと思いますし、
長くなってしまうのもアレなので
実装する上で大変だった事を書いていこうと思います。

いや本当に・・・大変だったんだ・・・

写真 2016-05-28 13 44 12

ほら、大変そうでしょ?(´;ω;`)


TableViewの最終行が表示されたら追加読み込みapiを投げていたんですが
その判定がおかしかったようで。
HTTPエラーの大安売り。しかも429。

これ、発表会の2日前の出来事。
あと2日しかないのにこれ。

デバッグして、429出て、デバッグして、429でて、アカウント凍結されて、
デバッグして、429出て、デバッグして、429でて、またアカウント凍結されて、
半泣きになって、デバッグして、デバッグして、デバッグデバッグでばでばでばでばbでbだえbdw

という週末を過ごしました。

発表会30分前に思いついて使うメソッドを変えたら
すっきり解決しやがったので、まあ、うん、よし。

 
今後の計画


10日間という短い期限なのもあって、
クライアントとして必要不可欠な機能の幾つかを
まだ実装できていません。

・フォロー機能
・フォロワー / フォローの人一覧
・リスト機能
・プロフィール編集
・DM機能

以上は手付かずな状態。
TLみてちょこっとつぶやくだけ、のようなアプリどまりです。 


これでやめるわけにいかんよなあ!?!?(ど根性精神2回目)


と、いうことで夏休み中を目処に色々機能を追加して 、
AppStoreリリースを目指します。

リジェクトされても、とにかく完成させる。

GooglePlayにはリリース経験あるので、
AppStoreにも出しておきたい!


つきましては、アイコンとLaunchScreenの作成に協力してくださる
デザイナーさんを募集します。


「やってやらんでもないぜ」って方は、ご連絡ください。



まとめ
 

今回学んだ事

・継承とプロトコルの偉大さ
・jsonすげえ
・apiのドキュメントちゃんと読むことの大事さ
・自分の英語力の低下具合 
・デバッグは腰にくる
・HTTP429エラーの恐怖 

HTTP429エラーと早く絶交できるように
続きもがんばっていきます。

寝不足が解消されない・・・



ちょこひ 

↑このページのトップヘ