【Swift入門】ディクショナリから値を取り出すときに順番がバラバラになって驚いた
iOSアプリを仕事で作ることになったのでSwiftを始めました。
その中で、勉強したことと少し驚いたことをメモしていきます。
タイトルの件は中盤辺りに書いています。
ちなみに僕は、Objective-Cを2年位前に本1冊終わらせたくらいで、
iOSアプリに関しての知見は殆どありません。
変数・定数・配列・ディクショナリ(連想配列)の宣言と初期化
上記ではそれぞれの型を指定して宣言・代入をしていますが、
型の指定は省略することができます。
var variable = 10 //Int型になる
省略した場合、自動で型を推測して実装してくれます(型推論)。
※Objective-Cではできなかった模様
ループと配列・ディクショナリの操作
一般的で分かりやすいですね。
forの条件式の部分に()を付けることもできます。
驚いたこと
これが本題です。
上記のような方法でディクショナリから値(キー)を取り出すと、
1,青木さん
2,佐藤さん
3,鈴木さん
ではなく、
2,佐藤さん
3,鈴木さん
1,青木さん
のように、
初期化していた順番とバラバラになって出力されたりします。
※順番通りに表示されることもあります。
これはSwiftの仕様のようで、
Unlike items in an array, items in a dictionary do not have a specified order.
訳:配列内の項目とは異なり、ディクショナリの項目は指定された順序を持っていません。
と公式ドキュメントに記載されています。
知らなくて、何とかしようと頑張ってしまった。。
関数(func)
Swiftの関数は「function」ではなく「func」と表現し、
戻り値を返す場合「->」を使って型を指定します。
また、引数に初期値を設定することもできます。
タプル(tuple)
タプルとは、複数の値(型が違くてもok)を1つにまとめられるものです。
配列とはまたニュアンスが違います。
実際にコードを見た方が分かりやすいです↓
便利そうですが、後から要素を追加したり削除したりはできないようです。
Swiftの暗黙のルールとか空気感
ここまで変数の宣言を「var」で行ってきたのですが、
基本的には「let」を使って定数にし、
変数が必要な部分のみで「var」を使うってスタンスが良いみたいです。
あと、変数の宣言で使う型の指定ですが、
基本的には省略しちゃって良いような空気をググってて感じました。
確かにXcodeが変換してくれるとはいえ、
いちいち「String」とかタイプするの面倒。。
この辺りは賛否両論ありそうですが、
ベターな書き方が分からないので、しばらくは他人が書いたコードを読んで修行あるのみです。
今後も覚えたことや、気づいたことなどをメモしていこうと思うので、
興味のある方はまた来てください。
詳細! Swift iPhoneアプリ開発 入門ノート Swift 1.1+Xcode 6.1+iOS 8.1対応
- 作者: 大重美幸
- 出版社/メーカー: ソーテック社
- 発売日: 2014/12/13
- メディア: 単行本
- この商品を含むブログ (9件) を見る
プログラミングとかウェブでよく出てくる小難しい英単語30選
よくプログラマー(エンジニア)は、
数学が得意な人じゃないと出来ないとか言われたりしますが、
個人的には数学というより、
英語が出来る(好きな)人の方が有利だと思っています。
だってプログラミングってコメント以外英語ですし。
「なでしこ」とかはありますけどw
僕は学生時代、どちらかと言うと数学が苦手なタイプでしたが、
英語はわりと出来る方でした(というか好きだった)。
もちろん、数学も出来た方が有利に決まっていますが、
普通にご飯を食べていく分にはそんなに必要無いと思います。
ということで、
英語の意味を理解すると、仕事が更に捗るんじゃないかと思いまして、
プログラミングとかウェブで出てくるけど、
ちょっと意味が分かりづらい英単語30個をまとめてみました!
プログラミングで出てくる英単語30選
英単語 | 読み方 | 意味 |
---|---|---|
allocate | アロケート | 割り当てる |
attr(attribute) | アトリビュート | 属性 |
bind | バインド | 結び付ける |
component | コンポーネント | 部品、構成要素 |
description | ディスクリプション | 説明 |
exception | エクセプション | 例外 |
exec(execution) | エグゼック | 実行 |
extend | エクステンド | 拡張する、継承する |
extract | エクストラクト | 抜き取る |
fatal | フェイタル | 致命的な |
fetch | フェッチ | 取ってくる |
function | ファンクション | 機能 |
grant | グラント | 付与 |
ignore | イグノア | 無視する |
implements | インプリメンツ | 実装する |
init(initialize) | イニット | 初期化する |
instance | インスタンス | 実体 |
invalid | インバリィド | 無効 |
notice | ノーティス | 予告、通知 |
parse | パース | 構文解析する |
prefix | プリフィックス | 接頭語 |
prepend | プリペンド | 先頭に追加する |
previous | プリヴィアス | 前の |
render | レンダー | 表現する |
state | ステート | 状態 |
static | スタティック | 静的 |
swap | スワップ | 交換 |
syntax | シンタックス | 構文 |
temp(temporary) | テンプ | 一時的な |
validation | バリデーション | 検証 |
※2015/4/22 追記
- instanceのスペルミスを修正
- implementsの意味を「実装する」に修正
- noticeの意味に「通知」を追加
implementsは非常に勉強になりました!
もう忘れることは無いと思いますw
ご指摘頂いた皆様、ありがとうございました!
まとめた結果
.
..
...
英語の勉強みたいになった。
【Linux】サイズの大きいファイルはお前だ!消してやる!
タイトルの通り、
ストレージ内で容量の大きいファイルを見つけて削除する、Linuxコマンドをまとめました。
環境はAWS(EC2)でCentOS7です。
CentOS7の構築については、
少し前に書いて何故かとても読まれた過去記事を参照してください。
ぶっちゃけ簡単だし、
ググればこの手の類はいくらでも出てくるのですが、
念のため備忘録としてまとめておきます。
メールのキューが溜まっている場合は以下で対応。
あんまり無いと思うけど。
これで今後忘れてもググらずに済むはず。
ログとかのファイル削除に関しては、
定期的に消すシェルなどの仕組みを作るのが1番良いですね。
Linuxコマンドライン入門 1日目 (ネット時代の、これから始めるプログラミング(NextPublishing))
- 作者: 大津真
- 出版社/メーカー: インプレスR&D
- 発売日: 2014/09/05
- メディア: Kindle版
- この商品を含むブログを見る
CentOS7でPHPとか動かすところまで構築するのに使ったコマンドまとめ
こういったインフラ周りは日頃触らず忘れやすいので、自分の備忘録としてまとめておきます。
環境はAmazon EC2です。
CentOS6.xと7の主な変更点
- 「service」コマンドと「chkconfig」コマンドが、「systemctl」コマンドに統合
- 「iptables」が「firewalld」に変更
- 「ntpd」が「chronyd」に変更
- 「ifconfig」が「ip」コマンドに変更
ユーザーを「centos」から「root」に切り替える方法
CentOS7の場合、初期ユーザが「centos」でした。
「root」になるには新しくパスワードを作成する必要があるようです。
Apachのインストール
「service」コマンドは「systemctl」コマンドに変わったので、以下になります。
chkconfig -listの代わりに
以下のコマンドで、自動起動設定を一覧で確認出来ます。
firewall(iptables)の設定
iptablesもfirewallに変わったので、設定の方法が異なります。
時刻合わせ
PHP周りで使いそうなものをインストール
この辺りは、CentOS6.xと変わりません。
PHPのバージョンは5.4がインストールされました。
以下でもできます↓(むしろこっちの方がスマート)
PEARをインストール
使うと思われるものをインストール。
postfix (デフォで入ってる模様)の設定
メールを送受信したい場合は、postfixの設定を変更しましょう。
おまけ
上述したコマンドは全てGitHub Gistを使って埋め込んでいるのですが、
せかせかと書いていたら突然BANされました↓
更新しすぎてスパマーだと思われたのが原因のようです。
しかし、Contactページから問い合わせたらすぐ直してもらえました。
件名:I'm not a spammer.
本文:Please reinstated my gist account.
みなさんも更新のし過ぎにはお気をつけください。
Code Complete 第2版 上 完全なプログラミングを目指して
- 作者: スティーブマコネル
- 出版社/メーカー: 日経BP社
- 発売日: 2014/04/02
- メディア: Kindle版
- この商品を含むブログ (7件) を見る
PHPのスーパーグローバル変数の一部はcronでは動かないんだってばよ
AMIを使っていくつか作成したインスタンス(AWS)からホスト名を取得して、それを別サーバーに渡す処理を作ろうとしました。
で、ホスト名は以下のスーパーグローバル変数を使用して取得出来ました。
めでたしめでたし。
あとはこれをcronで回せばお終いっと♪
が、cronを実行してログを確認したところ、エラーが返ってきたのです。
ファイルのパスとかを確認しても確実に合ってる。
何故にと思いググってみると、$_SERVER['SERVER_NAME']はcronでは動かないというショッキン&ファッキンな事実を目の当たりに。
ガ━━(゚Д゚;)━━━ン!!!!!
仕方ないので別の方法(any other way)を探すことに。
調べた結果、以下で取得出来るらしい。
試してみると、Private IPが返ってくる。
今回僕は外部サーバーとファイルのやりとりを行いたかったので、
Private IPではなく、Public IPがほしーのです。
他には、unixコマンドを使って、無理やりexecで動かすという方法もあるようですが、パフォーマンスに影響が出るというのと、あまりクールじゃないイメージがあるのでスルー。
結局、こんなんで時間かかり過ぎても無意味なので、
不本意ですがベタにdefineで定義することに。。
色々調べたが無理っぽいので、不本意だけどベタで書くか。
— Y.Kmatz (@Matsukolittle) December 15, 2014
この辺りの解決策はないものか。。
※追記
有り難いことに、色々な方から「はてブ」のコメントでアドバイスを頂きました。
結論としては、cronでcurlを使って別のPHPファイルを呼び出し(http経由)、
そのPHPファイルでホストを取得する方法。
これがベストな解かなと思いました。
ありがとうございました!
- 作者: 小川雄大,柄沢聡太郎,橋口誠
- 出版社/メーカー: 技術評論社
- 発売日: 2010/11/12
- メディア: 大型本
- 購入: 32人 クリック: 1,065回
- この商品を含むブログ (60件) を見る
ナウでヤングなHTML5を使ってサクッとファイルをダウンロードさせる
この記事は「1分で実現できる有用な技術 Advent Calendar 2014」の 18日目の記事です。
Qiitaで催されているアドベントカレンダーに参加してみました。
本題
何かの機能を作っていて、ユーザーにファイルをダウンロードさせたいときがあると思います。
そのときに、PHPのheaderとかreadfileを使ってDLさせるのも良いのですが、もっとサクッと出来ます。
※僕は一応PHPerなのでPHPを例にしました
そして、a要素のdownload属性を使います。
これだけ。
さらに、downloadの属性値は省略できます。
省略した場合、ファイル名がダウンロード時のファイル名になります。
マジでナウでヤングだわ。
がしかし、
対応しているブラウザが「Google Chrome」、「Firefox」、「Opera」のみという何とも絶妙な仕様。
社内システムとかで、使っているブラウザが決まったりしている場合などに使える小技です。
Vagrant使ってnode.jsとか色々ぶっこんでいくついでに解説とかしていくんで夜露死苦!
前回はMEAN Stackの話を書きました。
今回はVagrantを使って作った仮想環境に、node.jsとか色々突っ込んでいこうと思います。
Vagrantのインストール
とりあえず、下記サイトを見てやれば、
VirtualboxのインストールからWebページの表示まで完遂出来ます。
boxファイルのインストールやApacheの設定なども載っています。
web帳 | VirtualBoxとVagrantで開発環境を構築
※今回はCentOS6.4をインストールしました
仮想環境にnode.jsを入れる
node.jsをインストールするにはEPELリポジトリが必要なので、下記のコマンドを実行します。
EPELリポジトリとは、CentOSに元から入っているリポジトリでは提供されていないパッケージが、yumでインストール出来るようになるリポジトリです。
EPELリポジトリにnode.jsが入っているのでインストールが可能になります。
node.jsの特徴
nodeは厳密に言うとプログラミング言語では無い
nodeはサーバーサイドJavaScriptです。
用途としては、ApacheとかのWebサーバー構築ソフトと置き換えて使うイメージです。
シングルスレッドでしか動かない
シングルスレッドなので、どんどんアクセスを受け付けてしまいます。
そのため、速く処理できないとパンクします。
対義語はマルチスレッド。
シングルスレッドでも速く動かすために、ノンブロッキングI/Oとイベントループというモデルを採用している
ノンブロッキングI/O(非同期IO)とは↓
コンピュータ内部のCPUと周辺装置のデータ入出力(I/O)において、データの送受信の完了を待たずに他の処理を開始する方式。並列処理の一種。
非同期I/Oでは、I/O処理と並列に、データの送受信が完了していなくても可能な処理を進め、送受信が済まないと進められない処理にたどりついた場合に、そこで送受信の完了を待つ。
これに対し、正常に送受信が完了したかどうかの結果を待ち、送受信処理に完了してから残りの処理を行う方式を同期I/O(ブロッキングI/O)という。
IT用語辞典より
イベントループとは、受けたリクエストを1つ1つ処理していくモデルです。
1つずつしか処理しないので、メモリを圧迫せずに済みます。
これに対し、複数のリクエストをまとめて処理するのがスレッドモデル。
ノンブロッキングI/Oとイベントループの特徴を活かすと
AさんとBさんが同時にリクエストを投げた場合、
Aさんがリクエストした処理に時間がかかっていたとしても、その完了を待たずにBさんがリクエストした処理に移れます。
Gitをインストール
たぶん入れておいた方が良いのでGitを入れます。
GitをインストールするにはRPMforgeが必要なので先にインストールします。
※CentOS7からはGitがデフォで入っているようです。
RPMforgeとは、EPELリポジトリと同じでyumを強くするようなリポジトリです。
RPMforgeリポジトリがインストール出来たら、Gitをインストールします。