結果だけでなく過程も見てください

日々の奮闘を綴る日記です。

Windowsメインだった自分がMacを使用して詰まったところをまとめる

例によって適宜追加の記事です。

スクリーンショットの撮り方がわからない

  • command + Shift + 3で、デフォルトでデスクトップ(?)にファイルが作成されます。
  • command + Shift + 4で、対象を画面全体にしたりウィンドウにしたり選択範囲にしたり細かく指定をしてスクリーンショットを撮ることができます。

Macでデスクトップにファイルが保存したいが、一覧に出てこない

アプリケーションによっては、以下のように選択できる保存先一覧にデスクトップが出てこないのです。

そんなときは

command + D

を押すと保存先がデスクトップに変わります。
これは保存するときだけでなく、ファイルを開くときにも使えます。

#というか、好きなパスを入力させてほしいですね。。。
#(たぶん好きに入力する方法があるとは思うのですが、やり方がわかりません。。。)

Finder上でファイルやディレクトリの絶対パスを取得する

項目を選んでからcommand + iキーで情報ウィンドウを出した後、「場所」の情報をコピーすることで取得できます(以下SS参照)。
「場所」はUNIX形式のパスにはなっていませんが、ペーストするとちゃんとUNIX形式のパスが表示されます。
(以下の例だとペーストすると「/Application」が表示される)

ショートカットキーの記号(特殊キー)の意味がわからない

このサイトに詳しく書いてありました。
http://labs.torques.jp/2011/01/21/1610/

WindowsのMSペイントに代わるアプリケーション

自分はよく画像のサイズ変更を行ったり、説明用にテキストを書き込むことが多いのですが、
そのためにわざわざ多機能のGIMPなどは使いたくないです。もっとシンプルなのが欲しいです。

SkitchまたはPaintbrushが良さそうです。

■Skitch
https://itunes.apple.com/jp/app/skitch-撮る-描き込む-共有する/id425955336?mt=12

■Paintbrush
https://paintbrush.sourceforge.io/downloads/

両方入れて見ましたが、Skitchの方がサイズ変更の方法がちょっとわかりづらかったです。
以下のサイトを参考にとても簡単に実現できました。
http://y-shinozw.hateblo.jp/entry/2013/07/09/151512

両方入れてみて好きな方を選べばいいと思います。

Windowsマシンへリモートデスクトップで接続したい

普通に公式アプリがありました。

Microsoft Remote Desktop
https://itunes.apple.com/jp/app/microsoft-remote-desktop/id715768417?mt=12&ign-mpt=uo%3D4

Mac OSのバージョンを確認する

メニューバーの端に表示されているアップルアイコン→このMacについてを選択する。

BOOTCAMPでMacOSからWindowsに切り替える

  • PCの電源を落とす
  • コンピュータの電源ボタンを押し、すぐに「option」キーを押しっぱなしにする
  • デュアルブートのディスク選択画面が出てくるので、Windowsがインストールされたディスクを選ぶ

参考サイト

ファイルの保存先をデスクトップに指定するMacのショートカットキー - ITEA4.0
http://itea40.jp/technic/shortcut/how-to-specify-the-desktop-to-save-file/

Skitchで画像サイズを変更する方法 - リバネス研究日誌(らぼのーと)
http://y-shinozw.hateblo.jp/entry/2013/07/09/151512

TORQUES LABS
http://labs.torques.jp/2011/01/21/1610/

スクウェア・エニックスのソフトウェアトークン切替方法

携帯を変えたときなど。手順をまとめておきます。

用意するもの

(メールが送られてくるので、受信できるようにしておきましょう!)

1.アカウント管理システムにログインする

任意の端末(PC、任意の携帯)でOKです。
http://sqex.to/YUH

2.強制解除パスワードをメモしておく

ログインしたページの[トークンご利用状況]のところの
[※強制解除パスワード]をコピー、スクリーンショット、カメラ、紙のメモに書くなどしておく。

【注意】このパスワードは登録する度に変化するので、必ずこのタイミングで確認してください

3.ソフトウェアトークンの強制解除を行う

https://secure.square-enix.com/account/app/svc/coercioncan
にアクセスして、ID、パスワード、2.の強制解除パスワードを入れ、[メール送信]ボタンを押す。

4.メールに記載されているURLにアクセスする

スクウェア・エニックスIDに紐づけされているメールアドレスに
メールが届くので、そこに記載されているURLに飛ぶ。
→これで強制解除は完了です!

5.新しい端末でソフトウェアトークンを登録する

再びアカウント管理システムにログインします。
http://sqex.to/YUH

上メニュー[サービス・オプション]→[ワンタイムパスワード]を選択。

続いてご自身の新しいトークンに合わせて、
[セキュリティトークン(キーホルダータイプ)の設定を行うもしくは
[ソフトウェアトークン(スマートフォン用アプリ)の設定を行う]を選択する。

※今回は例として、スマホを選択します。キーホルダータイプの人は以降は自力で頑張ってください(丸投げ)。

[ソフトウェアトークンの登録]を押下する。
[次へ]を押下する。
[利用規約に同意してメールを送信]を押下する。

6.ソフトウェアトークンに情報を入力

新しい端末のソフトウェアトークンを起動して、以下を入力する。

これにて完了です!おつかれさまでした。

おまけ 「強制解除パスワード」を保管しておらず、自身で解除が行えない場合

ここを参照してください。
http://support.jp.square-enix.com/faqarticle.php?kid=74267&id=450&la=0
http://sqex.to/gYp

C# WPFアプリケーションの終了方法あれこれ

終了方法が色々あったのでまとめてみました。
他にも考慮すべき点があった場合は,加筆します。

  Shutdown関数 Application.Current.Shutdown関数 Environment.Exit関数 Close関数
Appクラス Shutdown→後続コード→App.OnExit()→App.Run()直後 Shutdownと同じ 即アプリケーション終了
MainWindowクラス 長いので以下参照 即アプリケーション終了(Closing関数なども呼ばれず) 長いので以下参照

MainWindowのApplication.Current.Shutdown関数

OnLastWindowCloseの場合

最後のウィンドウを終了した場合だけ,↓の終了モードの動きをする。

OnMainWindowCloseの場合

メインウィンドウを終了した場合だけ,↓の終了モードの動きをする。

OnExplicitShutdownの場合

とにかく↓の終了モードの動きをする。

終了モードの動作

Application.Current.Shutdown();
 ↓
後続のコード〜関数終了
 ↓
App.OnExit()
 ↓
その後,App.Run()の直後へ移動。

終了モードでない場合

Application.Current.Shutdown();
 ↓
後続のコード〜関数終了

MainWindowのClose関数

OnLastWindowCloseとOnMainWindowCloseの場合

Application.Current.Shutdownと同様の動作をする。
Closing関数などはコールされる。

OnExplicitShutdown

Application.Current.Shutdownの「終了モードでない場合」の動作をする。

メインウィンドウについて

一番最初に作成されたMainWindowがメインウィンドウとなる。
App.MainWindowプロパティで取得・変更が可能だ。

シャットダウンモードについて

App.ShutdownModeプロパティで変更できる。

Swift文法まとめ(適宜更新)

最近、ついに人生初のMacを買いました!!
これで思う存分、スタバでドヤれます!!

で、早速iPhoneアプリを作ってみようとぽちぽちやっているのですが、
SwiftやらCocoaやらXcodeやら、いやもう色々と全く新しい環境だとうまく組めなくてもどかしさMAXですね。

とりあえず、備忘録として覚えにくそうな文法をまとめたいと思います。
例によって適宜更新系記事となります。

環境

MacOS 10.12.2 Sierra
Swift 3.0
Xcode 8.2.1

Tuple

基本的な使い方

StringとIntのTupleの定義、初期化、データの追加は以下の通り。

// 型宣言、初期化
var tupleArray:[(name:String, age:Int)] = [(name:"Joel", age:48), (name:"Airi", age:2)]

// 追加
tupleArray.append((name:"Ellie", age:14))
Tupleの配列で、Tuple中の一部の値がマッチするか検索して、見つかったインデックスを取得する

上の例でいうと、年齢は関係なく名前が"Airi"の人を探して、その配列のインデックスを取得したい!と言った場合のサンプルは以下になります。

if let index = tupleArray.index(where: {$0.name == "Airi"})
{
    print("name:\(tupleArray[index].name)  age:\(tupleArray[index].age)")
}

Swift 3.0以降のfor文

Swift 3.0からは使い慣れたfor文が使えず、代わりに以下の構文を使う必要があるようです。

for index in 0..<array.count
{
    print(array[index])
}

逆順(降順)にカウントしたい場合はこれ!

for index in (0..<array.count).reversed()
{
    print(array[index])
}

C#とかのforeach的な構文はこちら。

for data in array
{
    print(data)
}

配列

変数を定義し,空の配列で初期化する場合。

var intArray : [Int] = []

ディクショナリ

ディクショナリを定義し,空で初期化する場合。

// 人の名前(String)がキー,年齢(Int)がデータのディクショナリ
var personAgeMap: [String:Int] = [:]
値の追加と変更
var personAgeMap: [String:Int] = [:]

// 追加(キーが存在しなければ追加になる)
personAgeMap["Joel"] = 48

// 変更(キーが存在すれば変更になる)
personAgeMap["Joel"] = 14
キーに対応するデータがあるか存在確認したい
var personAgeMap: [String:Int] = [:]

 :

if let age = personAgeMap["Airi"]
{
     // "Airi"という人物の情報が存在する!
}
自作クラスをキーにする場合

例えば以下のようなゲームに出てくるスキルに関するクラスがあって,スキル名,属性,スキルポイントなどのデータを持っている場合。

class SkillInfo
{
    // スキル名
    var strSkillName : String

    // スキルの属性
    var nAttribute : Int

    // スキルポイント
    var nSkillPoint : Int
}

このうちスキル名をキーにしたいと思った場合。以下のコードを追加する。

extension SkillInfo : Hashable
{
    var hashValue : Int
    {
        return self.strSkillName.hashValue
    }
}

// SkillInfo同士を比較する際の==のオーバーロード
func == ( lhs : SkillInfo, rhs : SkillInfo ) -> Bool
{
    return lhs.strSkillName == rhs.strSkillName
}

これで以下のようにディクショナリのキーとして使うことができます。

var skillJobMap : [SkillInfo : JobInfo] = [:]

UserDefaults

こいつにデータを格納しておくと,データを永続化できます。

基本的な使い方

以下のように取得したsettingsに対してデータの取得や設定を行います。

let settings : UserDefaults = UserDefaults.standard
値の設定(Int型の値を設定する場合)

forKeyは「K」が大文字なので注意です。これでしばらく悩んだことがあります。。。
(小文字にすると,Argument labels '(_:, forkey:)' do not match any available overloadsと言われてしまいます)

let point : Int = 40

settings.set(point, forKey:"Joel")
値の取得(Int型の値を取得する場合)
let point : Int = settings.integer(forKey: "Joel")

配列のfilter

配列の中から条件にあったものだけを取り出したいときはfilterを使います。
以下はJobInfoというクラス配列の中から、JobInfoクラスがもつスコアが60より大きいものを選び出して、filteredJobsという変数に格納する例。

// JobInfoクラスの配列
let targetJobs : [JobInfo] = ....

let filteredJobs = targetJobs.filter({
                    (item) -> Bool in return item.score > 60
                })

攻撃魔力理論値961 (バージョン3.4前期/後期共通)

攻撃魔力理論値を達成しましたので,記念にパラメーターを整理します!

まずは記念のスクリーンショットを。(攻撃魔力961)

魔法使いでドラクエXを始めてからここまで色々ありました。感慨深い。

料理込みバージョン(攻撃魔力996)

マジックスープ★3会心のために60万Gくらいかかりました…。

なお攻魔理論値は以下の点から,実用性は皆無ですので目指す方はご注意を。

  • インテリのうでわを装備するため呪文発動速度が犠牲になりDPSが下がる
  • インテリのうでわを装備するためセット効果を捨てることになりDPSが下がる
  • 炎の呪文ダメージのベルトを装備できないためメラ系の呪文のDPSが下がる

職業は当然魔法使いです。
現在種族によるステータス差異はありませんので,種族はなんでもいいです。

レベル96での素のステータス

239

パッシブスキル

180スキルに攻撃魔力+40を選択しています。

スキル名 攻撃魔力
両手杖 110
まほう 50
きょくげい 10
さとり 20
オーラ 10
おどり 5
うた 5

たね

たね 攻撃魔力
まりょくのたね 4

宝珠(LV5+飾り石)

宝珠 攻撃魔力
大賢者の御手 18
禁断の攻撃魔力アップ 6

装備

部位 アイテム 攻撃魔力
武器 邪術皇の杖(★3/錬金は任意) 88
あたま 神託のぼうし(錬金は任意) 52
からだ上 フォーチュンローブ上(攻撃魔力理論値+54) 127
からだ下 任意(攻撃魔力理論値+54) 54
うで インテリのうでわ 20
あし 任意 0
顔アクセ ダークアイ(攻撃魔力理論値+9) 19
首アクセ 魔王のネックレス(攻撃魔力理論値+15) 40
指アクセ 幻界導師のゆびわ(攻撃魔力理論値+6)もしくは魔導将軍のゆびわ(攻撃魔力伝承+2) 12
胸アクセ セルケトのアンク(攻撃魔力理論値+20) 33
腰アクセ 戦神のベルト 24
札アクセ 不思議のカード 15
他アクセ 任意 0
職業の証 任意 0

攻撃魔力理論値(上記合計)

961

料理

さらに料理込みの場合も考えてみます。

料理 攻撃魔力
マジックスープ(★3+会心) 35

料理込みの攻撃魔力理論値

996

すごいですね。
次にレベル解放や新武器が来たら間違いなく1000を超えるでしょう!
メラゾーマキャップとかほんとやる気を削がれるので,見直してほしいですね・・・。

お約束のおことわり

このページでは、株式会社スクウェア・エニックスを代表とする共同著作者が権利を所有する画像を利用しております。
当該画像の転載・配布は禁止いたします。

Perlのリファレンスとデリファレンス早見表

今更感満載の小ネタです。
久々に触ったら少し忘れていたので表にしときます。

早見表

変数の種別 リファレンス デリファレンス
スカラー \$sc $$ref_sc
リスト(配列) \@list @$ref_list
ハッシュ \%hash %$ref_hash

せっかくなんで例も

こんな感じで変数が定義されている場合。

my $sc   = 100;
my @list = ( "abc", "def", "ghi" );
my %hash = ( "one" => 1, "two" => 2 );

関数に各変数のリファレンスを渡したい場合は以下のようにします。

func( \$sc, \@list, \%hash );


次にデリファレンス
関数内では以下のように引数を受け取っているものとします。

sub func
{
  my ($ref_sc, $ref_list, $ref_hash) = @_;
  :
}

「$ref_sc」「$ref_list」「$ref_hash」はそれぞれの変数のリファレンスであるため,
値を参照する場合にはデリファレンスをする必要があります。
スカラーなら先頭に「$」,リストなら先頭に「@」,ハッシュなら先頭に「%」を付与します。

sub func
{
  my ($ref_sc, $ref_list, $ref_hash) = @_;

  print "sc = $$ref_sc\n";

  print "list begin\n";
  foreach ( @$ref_list )
  {
    print "$_\n";
  }
  print "list end\n";

  print "hash begin\n";
  foreach ( keys %$ref_hash )
  {
    print "key:$_ value:$$ref_hash{$_}\n";
  }
  print "hash end\n";
}

もちろん,関数内で値を変更すればコール元の変数にも影響を与えます。

sub func
{
  :
  $$ref_sc = 200;

  push( @$ref_list, "jkl" );

  $$ref_hash{"three"} = 3;
}

なお,間違った型でデリファレンス(リストなのに%をつけたり)すると
何か例外が飛ぶのか,特に対処をしないとスクリプトの実行がそこで停止するようです。

証明書の有効期限切れやプロキシ配下にいてRubyGemsが失敗するときの対処方法

今更感満載の小ネタです。
他にも躓いて解決した場合は随時追加してきます。

SSLの証明書の有効期限切れ

ある日net-sshをインストールしようとしたらエラーを食らいました。

$gem install net-ssh
ERROR:  Could not find a valid gem 'net-ssh' (>= 0), here is why:
Unable to download data from https://rubygems.org/ - SSLconnect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (https://rubygems.org/specs.4.8.gz)

色々調べると,どうやらRubyに同梱されているSSL証明書の有効期限が切れているのでは?とのこと。
正しい有効期限のSSL証明書に差し替えるような手段もあるようですが,楽で手っ取り早い方法があるようです。

$gem install net-ssh --source http://rubygems.org
Fetching: net-ssh-3.2.0.gem (100%)
Successfully installed net-ssh-3.2.0
Parsing documentation for net-ssh-3.2.0
Installing ri documentation for net-ssh-3.2.0
1 gem installed

httpsでなくhttpを使う!なるほど!

プロキシ配下でgemするとエラーになる

プロキシ用のオプションがあるようで,それを使えばよろしいようです。簡単!

$ gem install net-ssh -r -p http://<ユーザー名>:<パスワード>@<プロキシサーバーのホスト名orIPアドレス>:<ポート番号>

参考サイト

Windows環境でgemがSSLエラー 2016
http://qiita.com/betrue12/items/059c2424f27fd31969f9

RubyInstaller for Windowsでのgem installでSSL_connectエラーになる場合
http://qiita.com/fkshom/items/4206ebafbd80aa985498

Proxy環境でgem install
http://qiita.com/wakaba260/items/f7794cea3fac8c694dcf

プライバシーポリシー お問い合わせ