読者です 読者をやめる 読者になる 読者になる

i++

プログラム系のメモ書きなど

Robobrowser + α によるスクレイピングの忘備録

Pythonクローリング&スクレイピング -データ収集・解析のための実践開発ガイド-』を読んでしばらく Robobrowser を使ってみようと思うので、その忘備録。 edx.hatenablog.com 基本 browser = RoboBrowser( parser='html.parser', # Cookie が使用できないと…

golang : eval (数式の evaluation)を行う

go/token パッケージ、go/types パッケージ、go/constant パッケージを使用します。 import ( "fmt" "go/token" "go/types" "go/constant" ) fs := token.NewFileSet() tv, err := types.Eval(fs, nil, token.NoPos, "1 + 2 * 3 % 4") if err != nil { fmt.P…

Angular2 : [ts] Property 'map' does not exist on type 'Observable<Response>'

http.get(url).map(...) を試みたところ発生。 [ts] Property 'map' does not exist on type 'Observable<Response>' import rxjs/add/operator/map を追加することで解決。 import {Observable} from 'rxjs/Observable'; import 'rxjs/add/operator/map'; catch には </response>…

golang : template の range で index を使う

以下の様なデータを template.Execute のデータに渡したとすると type data struct { Values []string OtherValues []string } テンプレートで <ul> {{range $i, $v := .Values}} <li>{{index $.OtherValues $i}} のようにするとインデックスでアクセスできる( Othe</li></ul>…

golang : コミット時に gofmt を実行する(pre-commit hook)

misc/git/pre-commit - The Go Programming Language を参考に作成しました。 オリジナルではフォーマットされていないコードがある場合にコミットを中断していますが、以下のスクリプトでは gofmt を実行して git add するところまでやっています。 #!/bin/…

Google App Engine : appcfg.py update 時の HTTP Error 403: Forbidden Unexpected HTTP status 403.

エラーの全文は以下の通り。 久々に GAE のプロジェクトを作成してデプロイしようと思ったら発生しました。 python appcfg.py -A YOUR_APP_ID -V v1 update src/ 06:44 PM Application: YOUR_APP_ID (was: None); version: v1 (was: None) 06:44 PM Host: ap…

golang : URL短縮サービス goo.gl を使う

URL Shortener API の使い方はこちら → URL Shortener。 ここでは API Key を使った方法を載せています。 type responseParam struct { Kind string `json:"kind"` Id string `json:"id"` LongUrl string `json:"longUrl"` } func GetShortenedUrlImpl(longU…

golang : 日本語(マルチバイト)文字を含む string の substring

go では string のスライスは byte として扱われるので、日本語のようにマルチバイト文字を含んだ文字列 str に対して str[start:start+length] のようなことをすると、思わぬ場所が切り取られてしまいます。 この問題を回避するために、一旦 rune にキャス…

TypeScript : typings による Chrome Extension 用型定義のインストール

typings で型定義ファイルの管理を行うので、未インストールの場合はインストールします。 npm install -g typings 拡張機能のプロジェクトのディレクトリに移動し、typings init コマンドで初期化します(typings.json ファイルが作成されます)。 その後、…

Git : コミットメッセージに自動でブランチ名を挿入する

Git

参考:How to add Git's branch name to the commit message? .git/hooks/ 下にある prepare-commit-msg.sample を prepare-commit-msg に変更する(.sample を外す) prepare-commit-msg に以下のようなスクリプトを追記する branchPath=$(git symbolic-ref…

Unreal Engine : Timeline を C++ コードで作成・実行する

手順 準備 Timeline で使用する Curve を「Content Browser を右クリック」→「Miscellaneous」→「Curve」(もしくは「Float Curve」)で作成する 作成した Curve を右クリックして「Copy Reference」する C++ のコード上で ConstructorHelpers::FObjectFinde…

WPF/XAML : DataGrid の行にコンテクストメニューを設定する

方針・ポイント EventSetter を使って DataGridRow に右マウスボタンイベント(MouseRightButtonUp)を設定する ContextMenu を DataGrid.Resources 内で作る そのイベント内で、Resources の ContextMenu を取得、設定する ContextMenu の方もコード上で作…

Markdown : タイトル末尾に # 記号を使う

Markdown で # を使った形式でタイトルを書く時、 ### C# と書くと結果は C となり、末尾の #(ハッシュ記号?シャープ記号?)が表示されません。 以下のように、後ろに # をつけることできちんと表示されるようになります。 ### C# # C#

Unreal Engine : C++ クラスを削除する

Visual Studio 上で削除対象のクラスの .h と .cpp を削除します Visual Stdio 2015 の Remove ではプロジェクトから削除するだけのようなので、エクスプローラーを開きファイルの実体も削除しておきます Visual Studio 上でソリューションをビルドします こ…

Unreal Engine : C/C++ コードからのログ出力

コンソール(Output Log)へのログ出力と、ゲーム画面上へのログ出力の2通りの方法でログを確認できます。 Console ログ出力 カテゴリなし 単一ファイル用カテゴリ 複数ファイル用カテゴリ ログレベルの種類 画面ログ出力 参考 Console ログ出力 UE_LOG(カ…

Unreal Engine : Blueprint/UserWidget.h が Visual Studio で認識されない

(プロジェクト).Build.cs ファイルに UMG を使うための依存関係を設定する 一度 Visual Studio を閉じ、エクスプローラーで .uproject ファイルを選択して右クリックメニューから "Generate Visual Studio project files" 選択する これで Visual Studio の…

Unreal Engine : Starter Content を後から追加する

Content Browser の Add New ボタン(左上緑色)を押して Add Feature or Content Pack を選択 Content Packs タブから Starter Content を選択して Add to Project ボタンを押す 新規プロジェクト作成時のテンプレートとして使用できる他プロジェクトの Blu…

Unreal Engine : C++ プロジェクトの作成でエラー

Common Tools for Visual C++ 2015 がインストールされていないせいでした。そういえば、Visual Studio 2015 はデフォルトでは C++ が入っていないんでしたね。 Visual Studio 2015 を Unreal Engine で使用するために必要な設定は以下のとおりです。 無料開…

Android : Overflow Menu で表示されるメニューに Horizontal の ImageButton 列を表示したかった(Chrome みたいに)

この画像の、メニュー上部に戻るボタンやお気に入りボタンが並んだものを作ろうとしたわけですが… 方法 具体的な方法は調査中であるものの、どうやら PopupWindow もしくは ListPopupWindow を使ってゴリ押しで実装するしかないようです。 あまり面倒なこと…

Android : Runtime Permission 対応

Android 6.0 (Marshmallow, API level 23)に導入された Runtime permission に対応しようと思って調べたところ、インターネット接続に利用していた ACCESS_NETWORK_STATE と INTERNET は自動でパーミッションが付与される Normal Permissions という種類の権…

Android : gradle で定義された versionName を string リソースとして利用する

Android アプリではバージョン情報として versionCode と versionName があり、以下の様な形で gradle (app) で設定します。 defaultConfig { applicationId "com.example.increment" minSdkVersion 21 targetSdkVersion 23 versionCode 1 versionName "0.1"…

Android : Error:Execution failed for task ':app:packageRelease'. > Unable to compute hash of .... build\intermediates\classes-proguard\release\classes.jar

ProGuard を有効にした Signed apk を作成しようとした際に発生しました。 Error:Execution failed for task ':app:packageRelease'. > Unable to compute hash of (プロジェクトのフォルダ)\app\build\intermediates\classes-proguard\release\classes.jar …

Android : java.lang.RuntimeException: Missing type parameter (ProGuard + gson)

原因は gson を使っていた + gson 用の ProGuard の設定をしていなかったことでした。ProGuard によって難読化されたことで serialize / deserialize 対象のタイプ、クラスが正しく参照できなくなってしまい例外を引き起こしていたようです。 参考先の progu…

Android : android.view.InflateException: Binary XML file line: Error inflating class android.support.design.widget.NavigationView

今回の NavigationView については自分の場合は ProGaurd が原因で、以下の行を proguard-rules.pro に書き加えることで、実行時に表題の InflateException が発生することはなくなりました。 -keep class android.support.v7.widget.LinearLayoutManager { …

Android : Overflow メニューにアイコンを表示する

Overflow メニューに入れられたメニュー項目はそのままではアイコンが表示されませんが、以下の方法でアイコン表示を行うことができました。 コードで実現するバージョン 利点 標準的なメニューの見た目、挙動を保てる 欠点 Reflection を使用しているので将…

Android : Can't bind to local 8600 for debugger 確立された接続がホスト コンピューターのソウトウェアによって中止されました

AndroidStudio でアプリを実機デバッグしようとした際に遭遇しました。 デバイスを抜き差しするだけでは直らず、 デバイスの USBケーブルを抜く AndroidStudio を終了する Waiting for process detach ダイアログが終わらなかったので強制終了 AndroidStudio…

Kotlin : ビット演算メモ

& や | という記号ではなく and、or を使います。 また、|= や &= といった複合代入演算子形式の記載方法はありません。 Java/C系言語での書き方 Kotlin での書き方 x &= y x = (x and y) x |= y x = (x or y) x ^= y x = (x xor y) ~x x.inv() ※ and や or …

Android : SwipeRefreshLayout の更新中 Indicator を起動時に表示する

onCreateView で直接 SwipeRefreshLayout.setRefreshing(true) をしても表示されないので、post を使って少し遅らせてから refreshing が true になるようにします。 SwipeRefreshLayout の onMeasure が呼ばれて、サイズが確定してから refreshing を true …

Android : WebView 覚え書き(ズーム関連の機能の有効化、Progress の表示、Back Key のハンドリングなど)

やりたい事 方法 ピンチ操作によるズームイン / ズームアウトの有効化 webview.settings.builtInZoomControls = true ダブルタップによるズームイン / ズームアウトの有効化 webview.settings.useWideViewPort = true ズームボタン(右下に表示される±のルー…

Android : SwipeRefreshLayout で ListView に EmptyView を設定すると ListView が空の時に Refresh 表示が上手くされない問題を解消する

ListView.setEmptyView で Empty View を設定していると、ListView が空の状態で SwipeRefresh (PullToRefresh) を実行すると Refresh の Indicator (上の方でくるくる回る、setRefreshing でコントロールされるもの)が、更新が終わった瞬間辺りに一瞬表示…

Android : Warning:Conflict with dependency 'com.android.support:support-annotations'. Resolved versions for app (23.1.0) and test app (22.2.0) differ.

エラーメッセージ全文は以下のとおりです。 解決のために参考となる URL が記載されているなんて素晴らしい! Warning:Conflict with dependency 'com.android.support:support-annotations'. Resolved versions for app (23.1.0) and test app (22.2.0) dif…

Kotlin : as, !, ? 周りのチートシート

キャストや、型や変数の後ろにつける ! 記号、 ? 記号の意味についてのまとめです。 ? var b : String? = "abc" b = null 型宣言に付けた場合は nullable (Kotlin は明示的に ? を付けないと null を代入できない)。 var l = b?.length 変数に付けた場合は…

Git : fatal: Failed to lock ref for update: No such file or directory

Git

エラーが発生した手順 sandbox/foo というブランチを作成する sandbox/foo/bar というブランチを作成しようとする エラーの原因 sandbox/foo というブランチを作成しようとした時点で、 git が sandbox 以下に foo というファイルを作成している sandbox/foo…

Android : SlidingTabLayout を使う + タブの幅をウィンドウ幅に合わせる

SlidingTabsBasic | Android Developers のコードをダウンロードして(右上のボタンで可能)Android - SlidingTabsBasicをプロジェクトに導入する - Qiita に沿って適宜ファイルをコピーしていけば SlidingTabLayout を使えます。 ただし、SlidingTabsBasic …

Kotlin : Unresolved reference: field

Kotlin の custome setter で $プロパティ名 を使っていたところ、$プロパティ名 という書き方は deprecated になったので代わりに field を使ってね、というメッセージが出たので素直に従ったところ、Unresolved reference Error が発生しました。Kotlin の…

C#/.NET : インストールされているドライバーのリストを調べる、検索する

サンプルコード ※「参照の追加」で「System.Management」を追加する必要があります(アセンブリ⇒フレームワーク)。 System.Management.SelectQuery query = new System.Management.SelectQuery("Win32_SystemDriver"); // 特定のドライバーを検索したい場合…

WPF/XAML : DataGrid の表示内容を TextBox への入力内容でフィルタリングする

ポイントは以下の3点です。 DataGrid の ItemsSource に CollectionViewSource.View を使う CollectionViewSource.Filter にフィルタリング用の関数を登録する TextBox の入力に変更がある度に CollectionViewSource.View.Refresh() を呼ぶ サンプルコード …

Android : ListView (ArrayAdapter) で使う View に RadioGroup.setOnCheckedChangeListener を使うと起こる問題について

原因や問題が起きる条件が全く解明できていないものの、ひとまずメモ。 ListView で表示する項目の View に RadioGroup を含める その RadioGroup に setOnCheckedChangeListener を設定し、その中でデータ(getItem(position) で得られるもの)を変更する …

Android : Toolbar + DrawerLayout で Drawer を一時的に無効にして Navigation Icon (homeAsUpIndicator) を変更する

ActionBarDrawerToggle.setDrawerIndicatorEnabled(false) で「ハンバーガーアイコン + Drawer の開閉」を無効にすると、 setToolbarNavigationClickListener で設定したリスナーが呼ばれるようになる Toolbar.setNavigationIcon で Navigation Icon (左上の…

プログラマの英語 : Power off と Shutdown

※ Linux 等のコマンドの違いの話ではなく、Power Off(電源を切る) と Shutdown(シャットダウン)、それぞれの語から受ける言葉の印象の話です。 どちらも同じ結果を意図して違いを意識せずに用いられる事が多いと思いますが、それぞれ以下のようなニュア…

WPF/XAML : TextBox に入力ヒントを表示する

WPF界隈では hint ではなく watermark とも呼ぶらしいですね。Android の方では watermark という呼び方を聞いたことはないのですが。 参考にしたサイト(下記記載)には AttachedProperty を使った方法や Trigger を使った方法も掲載されており、「TextBox …

プログラマの英語 : state と status の違い・使い分け

どちらも「状態」を意味し、普通の英文として使う場合でも、コード中の変数名や enum 定義に使用する場合でも、往々にして交換可能なのですが、全く同じ意味合いを持っているという訳ではありません。 そのニュアンスの違いと使い分け方について考えてみます…

プログラマの英語 : enbug の正しい言い換え方と語源の推測

enbug(エンバグ)とは「ある変更が(他の箇所で)別のバグを生む」というような意味で使われる用語ですが、これは和製英語であって世界的に標準的な英単語としては存在しません。 例えば英辞郎や Weblio といった日本の英語辞書サイトではエントリーが存在…

WPF/XAML : プロジェクト作成時のデフォルトの MainWindow.xaml などを変更する

AssemblyInfo.cs のデフォルト編集の内容とほぼ同じですが、以下のパスにあるプロジェクトのデフォルトとして使われるファイルを編集することで MainWindow.xaml やその他を変更できます。 ; VS2013 C:\Program Files (x86)\Microsoft Visual Studio 12.0\Co…

WPF/XAML : TabControl 中の TabItem の高さを自動で揃える

TabControl に Grid.IsSharedSizeScope="True" を設定し、各 TabItem 内のコンテンツを同じグループの Grid に置くことで高さを共有します。 サンプル 2つめの TabItem の中身の高さを 1つめより低く設定していますが、Grid.IsSharedSizeScope を使うことで …

コマンドプロンプト : ネットワークインターフェースの設定(IPアドレス)を変更する

固定 IP を設定するには netsh interface ip set address "インターフェース名" static 192.168.0.1 255.255.255.0 DHCP にするには netsh interface ip set address "インターフェース名" static 192.168.0.1 255.255.255.0 インターフェース名を見るには n…

Unreal Engine : スタティックメッシュエディタのカメラ速度を変更する

右マウスボタンを押しながらマウスホイールを上に回転させると速度アップ、下に回転させると速度ダウンします。現在のカメラ速度の表示はなさそうです。 また、一度スタティックメッシュエディタを閉じてしまうと設定は解除されてしまいます。

C# : 文字列がアルファベットと数字(+ α)のみで構成されているかを調べる

正規表現クラス(System.Text.RegularExpressions.Regex)を使い、許可する文字以外のマッチがあるかどうかを判定し、それを反転します。 using System.Text.RegularExpressions; // 数字とアルファベットのみ isAlphaNumericOnly = !Regex.IsMatch(name, @"…

WPF/XAML : DataGrid にボタンの列を追加する

DataGrid のセル中に自分で定義した UI 要素を入れられる DataGridTemplateColumn という汎用的な列を定義し、その DataGridTemplateColumn.CellTemplate -> DataTemplate の中に Button を指定します。 サンプル DataGrid に DataGridTemplateColumn を置き…

Visual Studio : ビルドイベントで同じソリューション内の他プロジェクトの成果物をコピーする

プロジェクトのプロパティから「ビルド イベント」のパネルを開き、コマンドラインで xcopy を使います。 ビルド先のフォルダ名を取得するためのマクロや xcopy については以下のリンク先が参考になります。 ビルドのコマンドとプロパティのマクロ xcopy フ…