【株初心者向け】株取引・配当を確定申告したほうがいいのか徹底的に調べてみた

はじめに

株取引にまつわる確定申告の噂で、

「特定口座なら確定申告しなくてもいいよ!」

とか

「株で損したら絶対確定申告しろ!」

とか、

「いやいや、株取引は確定申告したらだめだよ!」

とか、色々な情報が乱れていて、
自分はどうすればいいの!?と悩んでしまったので、
株と確定申告について、とことん調べてまとめました。

  • 一般口座と特定口座の違いは?
  • 収入あるけど大丈夫?
  • 株取引・配当の確定申告をするほうがいいか?
  • 源泉分離課税、総合課税、申告分離課税の違いと選び方

という疑問を解消できる記事になっています。

続きを読む 【株初心者向け】株取引・配当を確定申告したほうがいいのか徹底的に調べてみた

Android Studio で Installation Failed と出る問題の解決方法

Android StudioからKotlinで開発していくうち、
ビルド、インストールしようとしても、何度やっても「Application Installation Failed」となってしまう問題に行き当たったので対策のメモです。
Intelli J IDEAでも遭遇するかもしれません。

Android Studio でRunボタンを押して、ビルド、エミュレータ・端末へのインストールが始まった後に、

Application Installation Failed in Android Studio

こんなエラーに行き当たりました。
続きを読む Android Studio で Installation Failed と出る問題の解決方法

知らないと損!なドコモwifi の使い方 (画像あり)

ドコモを使っている人が意外と知らない、お得なドコモWiFiはご存知でしょうか?

条件を満たしていれば無料でWi-Fiし放題になるドコモWi-Fiについて、接続方法と使い方を説明します。

ドコモWiFiはきいたことあるし、契約してるっぽいけど、つなぎ方が分からない、使えない!

月末が近づくといつもiPhone/Androidスマートフォンの通信制限との戦いになる、
カフェとかお出かけ中に気軽に動画を観たいけど通信料高くて容量が上げられない…
外出中でもタブレットやパソコンからインターネット接続したい!

なんてお困りの方もこの記事を見れば解決するかもしれません。

続きを読む 知らないと損!なドコモwifi の使い方 (画像あり)

コマンドラインから簡単にUDP通信を行うには

Linux/MacなどでコマンドラインからTCP通信を行うには、telnetがよく使われますね。

HTTPアクセスをtelnetで行う例:

telnet example.com 80
GET / HTTP/1.1(改行)
Host: example.com(改行)
Connection: close(改行)
(空行)
HTTP 200 OK
Content-Type: text/html
... 以下略

UDPでTCPと同じようにテキストベースの通信を行うには、netcat(ncコマンド)が便利です。
netcatはtelnetの機能拡張版ともいえるツールで、TCP/UDPプロトコルを扱う上ではぜひ導入しておきたいものです。

nc コマンドが手元にインストールされてない場合、

CentOS系Linuxなら sudo yum install netcat

Debian なら sudo apt-get install netcat

OS X(Homebrew)なら brew install netcat

でインストールできるかと思います。

netcatは基本的にはtelnetと同じ使い方ができます。

使い方:

netcat -u 接続先IPまたはホスト名 ポート

-u はUDP通信を表すオプションで、省略するとデフォルトでTCP通信になります。
telnet同様、パイプなしで実行すると、標準入力待ち状態になり、Ctrl-Cで切断できます。

また、telnetと違い、サーバになることもできます。

netcat -l -u -p port

-l は Listenモード(サーバモード)、
-u はudpプロトコルでの待受を意味します。(省略するとTCPプロトコル)
-p は待ち受けるポート番号です。

簡易通信サーバになって接続をテストすることも可能です。便利ですね。

もちろん、サーバ・クライアント両方ともncでも通信できます。

サーバ側コンソール(ローカル):

$ nc -l -p 55440 # 適当なTCPポート55440で待受(udpでもOK)

クライアント側コンソール(ローカル):

$ nc localhost 55440 # サーバにつなぐ。(TCPならtelnetでもOK)
hogehoge(改行)

こうすると、サーバ側コンソールに hogehoge と表示されます。
逆にサーバ→クライアントにメッセージを送ることも可能です。

また、上記の例では同一ホストで実行していますが、もちろんIPアドレス、ドメイン指定などで別マシンとも通信できます。

ローカルでやると動くのに、別マシンにはつながらない、という場合はファイアウォールを確認するとだいたい解決するかと思います。
終了できない!と焦ったら、Ctrl-Cを推してみましょう。

ぜひご自身で色々試してみて下さい!

[OpenSSL] pem ファイルとは?証明書の中身を確認する方法

iOS開発でのサーバ側 push通知設定や、WebサーバのSSL証明書設定に使われる .pem ファイルの中身を確認する時に便利なコマンドをまとめました。

  1. pem ファイルとは?
  2. openssl コマンドのインストール方法
  3. pem ファイルに含まれる証明書の確認方法
  4. 秘密鍵の内容を表示する
  5. pemファイルの作り方
  6. (おまけ)csrの情報を出力する

続きを読む [OpenSSL] pem ファイルとは?証明書の中身を確認する方法

[iOS][OpenSSL] .p12キーストアファイル証明書の中身を確認する

iOS開発で頻繁にお世話になる .p12 ファイル(秘密鍵+証明書のセット)の情報を確認する方法です。
SHA1フィンガープリント、有効期限、チームID,名前などがコマンドラインから簡単に確認できます。

続きを読む [iOS][OpenSSL] .p12キーストアファイル証明書の中身を確認する

証明書と秘密鍵からp12ファイルを作る

証明書と鍵ファイルからp12ファイル(pkcs12)を作る手順のメモ。
証明書(cer)をPEMに変換する、鍵(PEM private key)と結合してp12にする、という2段構え。

参考: http://spiratesta.hatenablog.com/entry/20120215/1329280918

1.公開用証明書をPEM証明書形式に変換する

$ openssl x509 -in distribution_identity.cer -inform DER -out distribution_identity.pem -outform PEM

2.PEM証明書形式をP12証明書形式に変換する

$ openssl pkcs12 -export -inkey mykey.key -in distribution_identity.pem -out distribution_identity.p12

パスワードを聞かれるので、適宜入力する(パスワード空欄だとキーチェーン取り込みできない)

3.P12証明書を開いてキーチェーンに取り込む(取り込み時に上記パスワードを入力する)

なぜ必要だったか

MacBook Pro が壊れたので修理して、クリーンインストールし直したんですが、
そのときにとあるプロジェクトのApp Storeのリリース用(Distribution)秘密鍵の移行を忘れて喪失してしまったため、
なんとかサルベージできないか、と試行錯誤するのに使いました。

Circle CIにp12の鍵が上がっていたので、CIを回してSSHで入り、
鍵ファイル(/var/folders/jm/ほげほげ/T/cert.abcdef)をcatして取り出し .key として保存、
Apple Developerサイトの Certificates,IDs & Profiles から証明書ダウンロード、
あとは手順通りの結合で事なきを得ました。バックアップは大事ですね。。

こんな記事もあります

.p12キーストアファイル証明書の中身を確認する

Swift2でリリースビルドの時にログ表示しないようにする

Xcode7(Swift2) でデバッグビルドの時だけデバッグ出力して、プロダクションビルドの時はセキュリティのためデバッグログを削る方法のメモ。

このコードにより、print, debugPrintln, NSLogの出力を制御することができます。

事前準備

XcodeプロジェクトのBuild Settings → Swift Compiler → Other Swift Flags の Debug に「-DDEBUG」を追加して下さい。

コード

AppDelegate.swift の冒頭に以下のグローバル関数を追加します。

他のファイルのほうがわかりやすければAppDelegate以外でも大丈夫です。

// リリースビルドでprint, debugPrintを無効化
func print(object: Any) {
#if DEBUG
Swift.print(object, terminator: "")
#endif
}
func debugPrint(object: Any) {
#if DEBUG
Swift.debugPrint(object, terminator: "")
#endif
}
// リリースビルドでNSLog無効化
func NSLog(message:String){
#if DEBUG
Foundation.NSLog(message)
#endif
}
func NSLog(format:String, _ args:CVarArgType...){
#if DEBUG
Foundation.NSLog(String(format: format, arguments: args))
#endif
}

この記事を書いた理由

print, debugPrintは出てきますが、SwiftでNSLogを非表示にする方法がどうしても出てこなかったので記事にしました。

Swift2から廃止されたprintln, debugPrintlnはここに書いていませんが、print, debugPrint と同様の方法で対応可能です。

ググると NSLogを消す方法として、プレフィクスヘッダファイル(.pchファイル)に #define NSLog を方法が出てきますが、こちらはObjective Cにしか効果がないようなので注意。

おまけ

代替案としては、より細かいログレベル制御が可能なXCGLoggerを使うのも手です。

AppDelegateで

import XCGLogger
let log: XCGLogger = {
let log = XCGLogger.defaultInstance()
#if DEBUG
log.setup(.Debug, showThreadName: true, showLogLevel: true, showFileNames: true, showLineNumbers: true, writeToFile: nil)
#else
log.setup(.Severe, showThreadName: true, showLogLevel: true, showFileNames: true, showLineNumbers: true, writeToFile: nil)
#endif
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "MM/dd/yyyy hh:mma"
dateFormatter.locale = NSLocale.currentLocale()
log.dateFormatter = dateFormatter
return log
}()

としておくと、

log.debug("Debugレベルのログです")
log.info("infoレベルのログです")

のようにログレベルごとのログ出力ができるようになります。

[Android] [Gradle] Android Studioで “Configuration with name default not found” エラーが出た時の対処法

Android Studio や IntelliJ IDEA でプロジェクトを開こうとした時に、
“Configuration with name default not found” というエラーが出ることがあります。

resolve error
Configuration with name default not found
Consult IDE log for more details(help show log)

どうすればいいか

困ったときのGoogle先生頼みでぐぐるのもいいんですが、これだけでは原因が色々ありすぎてなかなか正解にたどり着けないので、ダイアログで書かれている通り help メニューから show log を開いて、フォルダ内の idea.log を開いてみると解決の助けになります。

Mac OS X や Linux は ~/Library/Logs/AndroidStudio/idea.log あたりを直接開いてもOKです。

ログファイルなのでめちゃくちゃ長くて読みづらいのですが、該当のエラーを知りたいだけなので
エラーメッセージ通りConfiguration with name ‘default’ not found.で検索してみると、何件かのうち以下のような行が引っかかると思います。

(省略)
Caused by: org.gradle.api.UnknownProjectException: Cannot evaluate module volley : Configuration with name 'd
efault' not found.
at com.android.build.gradle.BasePlugin$_ensureConfigured_closure189.doCall(BasePlugin.groovy:3345)
at com.android.build.gradle.BasePlugin.ensureConfigured(BasePlugin.groovy:3339)
at com.android.build.gradle.BasePlugin.resolveDependencyForConfig(BasePlugin.groovy:3255)
at com.android.build.gradle.BasePlugin.this$2$resolveDependencyForConfig(BasePlugin.groovy)
at com.android.build.gradle.BasePlugin$this$2$resolveDependencyForConfig$1.callCurrent(Unknown Source)
at com.android.build.gradle.BasePlugin.resolveDependencies(BasePlugin.groovy:3174)
at com.android.build.gradle.internal.VariantManager.createVariantData(VariantManager.java:464)
at com.android.build.gradle.internal.VariantManager.createVariantDataForProductFlavors(VariantManager.java:550)
at com.android.build.gradle.internal.VariantManager.populateVariantDataList(VariantManager.java:326)
at com.android.build.gradle.internal.VariantManager.createAndroidTasks(VariantManager.java:212)
at com.android.build.gradle.internal.VariantManager$createAndroidTasks.call(Unknown Source)
at com.android.build.gradle.BasePlugin.createAndroidTasks(BasePlugin.groovy:463)
at com.android.build.gradle.BasePlugin$_createTasks_closure9.doCall(BasePlugin.groovy:408)
at org.gradle.listener.ClosureBackedMethodInvocationDispatch.dispatch(ClosureBackedMethodInvocationDispatch.java:40)
at org.gradle.listener.ClosureBackedMethodInvocationDispatch.dispatch(ClosureBackedMethodInvocationDispatch.java:25)
at org.gradle.listener.BroadcastDispatch.dispatch(BroadcastDispatch.java:83)
at org.gradle.listener.BroadcastDispatch.dispatch(BroadcastDispatch.java:31)
at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
at com.sun.proxy.$Proxy13.afterEvaluate(Unknown Source)
at org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.java:79)
... 39 more
Caused by: org.gradle.api.artifacts.UnknownConfigurationException: Configuration with name 'default' not found.
at org.gradle.api.internal.artifacts.configurations.DefaultConfigurationContainer.createNotFoundException(DefaultConfigurationContainer.java:79)
at org.gradle.api.internal.DefaultNamedDomainObjectCollection.getByName(DefaultNamedDomainObjectCollection.java:192)
at org.gradle.api.internal.artifacts.configurations.DefaultConfigurationContainer.getByName(DefaultConfigurationContainer.java:69)
at org.gradle.api.internal.artifacts.configurations.DefaultConfigurationContainer.getByName(DefaultConfigurationContainer.java:33)
at org.gradle.api.internal.artifacts.dependencies.DefaultProjectDependency.getProjectConfiguration(DefaultProjectDependency.java:69)
at org.gradle.api.internal.artifacts.dependencies.DefaultProjectDependency_Decorated.getProjectConfiguration(Unknown Source)
at org.gradle.api.internal.BeanDynamicObject$MetaClassAdapter.getProperty(BeanDynamicObject.java:153)
at org.gradle.api.internal.BeanDynamicObject.getProperty(BeanDynamicObject.java:107)
at org.gradle.api.internal.CompositeDynamicObject.getProperty(CompositeDynamicObject.java:78)
at org.gradle.api.internal.artifacts.dependencies.DefaultProjectDependency_Decorated.getProperty(Unknown Source)
(以下略)

上記の1行目のCannot evaluate module volley : Configuration with name ‘default’ not found.がポイントです。

エラーダイアログに無かったCannot evaluate module volleyがあることで、犯人がvolley(のgradle)だと判りましたね。

この例では、volleyがサブモジュールでインストールされてなかったためそもそもbuild.gradleがなくて怒られていたので、最終的にgit submodule add でvolleyを追加してやることで無事解決しました。

忙しい人のための解決方法

ここまで書いてきたidea.logから探す方法ですが、ログはめちゃくちゃ見づらいので、
直接 gradlew なりgradle なりをコマンドラインから実行したほうがわかりやすいです。

./gradlew tasks --info

上記のコマンドをbuild.gradle (とgradlrew)のあるディレクトリで実行すると、
Android Studioから開いた時と同じところでこけて最後にCannot evaluate module volley : Configuration with name ‘default’ not found.のような原因が表示されます。

idea.logなんて見なくてもよかった(gradleに関しては)。

ひとこと

Android Studio で既存プロジェクトを github から git cloneして開こうとした時にはまったので。

[iOS][Swift] Swiftっぽくレコードをソートをする

NSSortDescriptorはObjective-Cでも使えるレコードの配列をレコードキーでソートするのに便利な方法ですが、Arrayのsort()メソッドやsorted()メソッドを使うとよりSwiftっぽくクロージャでソートすることができます。

変更前:

let records = NSMutableArray()
let sortDescriptor = NSSortDescriptor(key: "fileSize", ascending: true)
records.sortedArrayUsingDescriptors([sortDescriptor])
// レコード投入
let record1 = NSMutableDictionary()
record1["filePath"] = "/path/to/file1"
record1["fileSize"] = 1000
records.addObject(record1)
let record2 = NSMutableDictionary()
record2["filePath"] = "/path/to/file2"
record2["fileSize"] = 100
records.addObject(record2)
let record3 = NSMutableDictionary()
record3["filePath"] = "/path/to/file3"
record3["fileSize"] = 500
records.addObject(record3)
println(records)

続きを読む [iOS][Swift] Swiftっぽくレコードをソートをする