<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>メモ帳</title><link>https://blog.sky-net.pw/</link><description>Recent content on メモ帳</description><generator>Hugo -- gohugo.io</generator><language>ja-jp</language><lastBuildDate>Sun, 28 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.sky-net.pw/index.xml" rel="self" type="application/rss+xml"/><item><title>k8sでQSVを利用する</title><link>https://blog.sky-net.pw/post/k8s%E3%81%A7qsv%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B/</link><pubDate>Sun, 28 Jun 2026 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/k8s%E3%81%A7qsv%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B/</guid><description>
TL;DR intel-device-plugins-operatorを導入する .spec.containers[].resourcesの設定を行う PodからQSVが使えることを確認する はじめに 前回 の続きです。
ドキュメント通り入れるだけですが作業ログとして残します。
環境 k8s v1.36.2 intel-device-plugins-operator v0.36.0 intel-device-plugins-operatorを導入する https://intel.github.io/intel-device-plugins-for-kubernetes/cmd/operator/README.html#installation
を参考に入れていきます。
NFDのインストール NFDを導入して、動作確認をします。
1# deploy NFD 2kubectl apply -k &amp;#39;https://github.com/intel/intel-device-plugins-for-kubernetes/deployments/nfd?ref=v0.36.0&amp;#39; 3# deploy NodeFeatureRules 4kubectl apply -k &amp;#39;https://github.com/intel/intel-device-plugins-for-kubernetes/deployments/nfd/overlays/node-feature-rules?ref=v0.36.0&amp;#39; 1kubectl get pod -n node-feature-discovery 2NAME READY STATUS RESTARTS AGE 3nfd-gc-df4cc89c-285g4 1/1 Running 1 30h 4nfd-master-5dc96497fb-bfxv7 1/1 Running 1 30h 5nfd-worker-kk4kj 1/1 Running 1 30h cert-managerのインストール microk8sを使っている関係でプラグインを有効化して完了
1microk8s enable cert-manager Device Plugin Operatorのインストール ドキュメント通りapplyするのみ</description></item><item><title>Proxmox上で稼働するVMにN100をパススルーする</title><link>https://blog.sky-net.pw/post/proxmox%E4%B8%8A%E3%81%A7%E7%A8%BC%E5%83%8D%E3%81%99%E3%82%8Bvm%E3%81%ABn100%E3%82%92%E3%83%91%E3%82%B9%E3%82%B9%E3%83%AB%E3%83%BC%E3%81%99%E3%82%8B/</link><pubDate>Sat, 27 Jun 2026 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/proxmox%E4%B8%8A%E3%81%A7%E7%A8%BC%E5%83%8D%E3%81%99%E3%82%8Bvm%E3%81%ABn100%E3%82%92%E3%83%91%E3%82%B9%E3%82%B9%E3%83%AB%E3%83%BC%E3%81%99%E3%82%8B/</guid><description>
TL;DR BIOSからVT-d関連の設定を有効にする /etc/default/grub で GRUB_CMDLINE_LINUX_DEFAULT=&amp;quot;quiet intel_iommu=on iommu=pt&amp;quot; する 管理画面からRaw Deviceの UHD Graphics をVMに割り当て VMを再起動して lspci で認識されていることを確認 はじめに 最近録画鯖を再構築したのですが、ffmpegでエンコードさせているとCPUが限界を迎えてしまうので、QSVEncCに変更します。
対象のシステムはproxmox上のVMに構築されているk8s上で稼働しているため、まずはVMまでパススルーすることを目指します。
Kernelバージョンが低い場合（6.1以下？）にドライバが利用出来ないことがあるため、古い場合は先にそちらを更新する必要があります。
環境 Proxmox 8.1.3 4 x Intel(R) N100 (1 Socket) Ubuntu 22.04.3 LTS 6.8.0-124-generic BIOSの設定変更 BIOSの設定画面からVT-dを有効にします。
今回の中華ミニPCには設定可能な項目の中には見つからなかったのですが、サポートされているCPUだったのでひとまず先に進みました。
Proxmoxの設定変更 後述するデバイスの割り当てを実施しようとした際に No IOMMU detected, please activate it.See Documentation for further information. と出てくるためgrubの設定を追加します。
/etc/default/grub の GRUB_CMDLINE_LINUX_DEFAULT に追記します
1- GRUB_CMDLINE_LINUX_DEFAULT=&amp;#34;quiet&amp;#34; 2+ GRUB_CMDLINE_LINUX_DEFAULT=&amp;#34;quiet intel_iommu=on iommu=pt&amp;#34; grubの設定を更新します。</description></item><item><title>3Dプリンタを購入しました</title><link>https://blog.sky-net.pw/post/3d%E3%83%97%E3%83%AA%E3%83%B3%E3%82%BF%E3%82%92%E8%B3%BC%E5%85%A5%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F/</link><pubDate>Wed, 29 Apr 2026 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/3d%E3%83%97%E3%83%AA%E3%83%B3%E3%82%BF%E3%82%92%E8%B3%BC%E5%85%A5%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F/</guid><description>
はじめに Bambu LabのX2Dを購入しました。
何も分からない状態から3Dプリンタを購入したので詰まった点やらメモしておきます。
my new gear… pic.twitter.com/WVKldtcYJM
&amp;mdash; スカイ (@skyblue3350) April 25, 2026 機種選定 以前からA1 miniが良いなと眺めていたのですが、前向きに購入を検討するに辺り、P2S所有者の話を聞いているうちにより上位のモデルが気になり、ちょうど発売されていたX2Dに決めました。
Comboをつけるかどうかでも悩みましたが、フィラメントの保管など考えたらあった方が便利そうだったので、最終的にX2D Comboに決定しました。
購入～配送 当初公式サイトで購入予定でしたが、偶然在庫切れ状態だったのでLINEとの連携で5%割引のあるSK本舗さんで購入しました。
注文時は入荷次第発送とのステータスでしたが、4/22に注文、4/24発送だったのでスムーズでした。
設置場所について 手持ちのラックでは設置出来なかったため、別途ルミナスラックを注文しました。
届いて設置したら追記します。
今は止むなくPCデスクの端に設置しています。
[25mm] 長さ72cm ルミナスポール4本組 x1 [25mm] 幅60 (幅61×奥行61cm) ルミナスレギュラースチールシェルフ (スリーブ付き) x2 同時に購入したもの 本体以外に以下を追加で購入しました。
スクレイパーに関しては3Dプリンタに刃だけ付属していたので、持ち手をMakerWorldから印刷すれば良かったようですが気付かず購入してしまいました。
フィラメント Bambu Lab PLA ベーシック 黒 スクレイパー オルファ スクレーパー T-45 202B タッチパネルの保護シート エレコム スマホ 液晶保護フィルム 汎用 5.0インチ用 本 Fusion 360 マスターズガイド ベーシック編 改訂第2版 セットアップ 付属のクイックスタートガイドに従って組み立てるだけです。</description></item><item><title>H716でサンプルプログラムを動かす</title><link>https://blog.sky-net.pw/post/h716%E3%81%A7%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E5%8B%95%E3%81%8B%E3%81%99/</link><pubDate>Mon, 10 Feb 2025 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/h716%E3%81%A7%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E5%8B%95%E3%81%8B%E3%81%99/</guid><description>
Xを眺めていたところ、lilygoのH716というボードがあることを知りました。
以前から電子ペーパーを使ってみたかったので、早速購入してみました。
衝動買いしました pic.twitter.com/WYRT4De0eB
&amp;mdash; スカイ (@skyblue3350) February 8, 2025 ひとまずサンプルプログラムを動かすところまでやってみます。
公式そのままなので以下を見た方が早いです。
https://github.com/Xinyuan-LilyGO/LilyGo-EPD47
環境 WSL2 Ubuntu 20.04 Python 3.10.1 VSCode 1.97.0 PlatformIO v3.3.4 環境構築 VSCodeにPlatformIOをインストールします。
インストール後にVSCodeを再起動します。
サンプルコードの書き込み リポジトリをクローンします。
1git clone https://github.com/Xinyuan-LilyGO/LilyGo-EPD47 VSCodeで上記のディレクトリを開き、依存関係のライブラリがインストールされるまで待ちます。
platformio.ini を開き、src_dirを変更して適当なプログラムを選択します。
1[platformio] 2boards_dir = boards 34; src_dir = examples/button 5; src_dir = examples/demo 6; src_dir = examples/drawExample 7; src_dir = examples/drawImages 8; src_dir = examples/grayscale_test 9; src_dir = examples/screen_repair 10; src_dir = examples/spi_driver 11; src_dir = examples/touch 12; src_dir = examples/wifi_sync 13src_dir = examples/sleep WSLの場合はここで一手間必要なので WSL2でUSBデバイスを利用する を参考にWSL2にH716を接続しておいて下さい。</description></item><item><title>WSL2でUSBデバイスを利用する</title><link>https://blog.sky-net.pw/post/wsl2%E3%81%A7usb%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B/</link><pubDate>Mon, 10 Feb 2025 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/wsl2%E3%81%A7usb%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B/</guid><description>
H716でサンプルプログラムを動かす で購入したlilygoのH716をWSL2で使う際にそのままでは使えなかったのでメモです。
WSL2ではUSBデバイスをそのまま使用することができないので、WinとWSL2の間でデバイスを共有する必要があります。
下記の公式ドキュメント通りではありますが、手順をまとめます。
USB デバイスを接続する usbipd-win のインストール リリースから最新のバージョンをダウンロードします。
インストーラーを実行してインストールします。
https://github.com/dorssel/usbipd-win/releases/
デバイスの共有 以下のコマンドでデバイスの一覧を確認できます。
H716接続前と接続後で比較することでデバイスのバスIDを特定します。
1usbipd list 2BUSID VID:PID DEVICE STATE 39-1 303a:1001 USB シリアル デバイス (COM6), USB JTAG/serial debug unit Not shared 管理者権限でpowershellを開き、以下のコマンドでデバイスを共有します。
デバイスバスIDが 9-1 の場合、以下のように実行します。
1usbipd bind --busid 9-1 再度 list で確認すると、Shared になっていることを確認します。
1usbipd list 2BUSID VID:PID DEVICE STATE 39-1 303a:1001 USB シリアル デバイス (COM6), USB JTAG/serial debug unit Shared この手順は一度実施すれば、次回以降は不要です。
デバイスの接続 接続はデバイスがPCに接続される度に行う必要があります。
以下のコマンドでデバイスを接続します。
1usbipd attach --busid 9-1 listで確認すると、Attached になっていることを確認します。</description></item><item><title>DockerDesktopでmisskeyを動かす</title><link>https://blog.sky-net.pw/post/dockerdesktop%E3%81%A7misskey%E3%82%92%E5%8B%95%E3%81%8B%E3%81%99/</link><pubDate>Tue, 18 Jul 2023 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/dockerdesktop%E3%81%A7misskey%E3%82%92%E5%8B%95%E3%81%8B%E3%81%99/</guid><description>
Docker Desktop上でkubernetesを起動して、その上にmisskeyを構築してみます。
バージョン Docker Desktop 4.21.1 docker 24.0.2 k8s 1.27.2 helm 3.10.3 k8sの起動 Docker Desktop Settings -&amp;gt; Kubernetes -&amp;gt; Enable Kubernetes にチェックを入れて有効化しておきます。
適当にPodの起動状態を確認しておきます。
1kubectl get pod -n kube-system 2NAME READY STATUS RESTARTS AGE 3coredns-5d78c9869d-2tn9p 1/1 Running 2 (4m2s ago) 6d19h 4coredns-5d78c9869d-647kd 1/1 Running 2 (4m2s ago) 6d19h 5etcd-docker-desktop 1/1 Running 2 (4m2s ago) 6d19h 6kube-apiserver-docker-desktop 1/1 Running 2 (4m2s ago) 6d19h 7kube-controller-manager-docker-desktop 1/1 Running 2 (4m2s ago) 6d19h 8kube-proxy-qdzs4 1/1 Running 2 (4m2s ago) 6d19h 9kube-scheduler-docker-desktop 1/1 Running 2 (4m2s ago) 6d19h 10storage-provisioner 1/1 Running 4 (3m29s ago) 6d19h 11vpnkit-controller 1/1 Running 2 (4m2s ago) 6d19h ingressの設定 公式ドキュメントを参考にingressを動作させるのに必要なマニフェストをapplyします。</description></item><item><title>LDAP認証できるSoftEtherを構築する</title><link>https://blog.sky-net.pw/post/ldap%E8%AA%8D%E8%A8%BC%E3%81%A7%E3%81%8D%E3%82%8Bsoftether%E3%82%92%E6%A7%8B%E7%AF%89%E3%81%99%E3%82%8B/</link><pubDate>Tue, 27 Dec 2022 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/ldap%E8%AA%8D%E8%A8%BC%E3%81%A7%E3%81%8D%E3%82%8Bsoftether%E3%82%92%E6%A7%8B%E7%AF%89%E3%81%99%E3%82%8B/</guid><description>
LDAP のアカウントで認証して使える SoftEther を構築してみたのでメモ
構成 SoftEther に radius 認証と連携できる仕組みがあるので LDAP をバックエンドにした FreeRadius を使ってユーザー管理を委任した構成にします。
動くところまでしか見ていないので参考程度に…。
環境 AWS の ec2 に Ubuntu をおいて検証しました。
1lsb_release -a 2No LSB modules are available. 3Distributor ID: Ubuntu 4Description: Ubuntu 22.04.1 LTS 5Release: 22.04 6Codename: jammy 78docker -v 9Docker version 20.10.12, build 20.10.12-0ubuntu4 10docker-compose -v 11docker-compose version 1.26.0, build d4451659 設定 SoftEther の設定 まずは SoftEther 単体で構築します。
siomiz/softethervpn サーバ管理用のパスワードがあるとリモートから全ての設定が行えるので扱いに注意が必要です。
後ほど freeradius の設定を投入するのに使います。
1version:&amp;#34;3&amp;#34;2services:3vpn:4image:siomiz/softethervpn5cap_add:6- NET_ADMIN7ports:8- 443:4439environment:10SPW:sample_spw_passwordあとは README に従って諸々のファイルを用意します。</description></item><item><title>ロードバイク用品まとめ</title><link>https://blog.sky-net.pw/post/%E3%83%AD%E3%83%BC%E3%83%89%E3%83%90%E3%82%A4%E3%82%AF%E7%94%A8%E5%93%81%E3%81%BE%E3%81%A8%E3%82%81/</link><pubDate>Sun, 13 Nov 2022 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/%E3%83%AD%E3%83%BC%E3%83%89%E3%83%90%E3%82%A4%E3%82%AF%E7%94%A8%E5%93%81%E3%81%BE%E3%81%A8%E3%82%81/</guid><description>
去年の10月にロードバイクを買って1年経ったので買ったものをまとめておこうと思います。
ちなみに買ったのは Trek Domane AL2 Disc (2021) です。
サイコン周り Bontrager DuoTrap S Trek 車は専用のマウントポイントに取り付けられるセンサーがあるとのことだったのでこちらをセレクトしました。
見た目もスマートなのでオススメ。
ANT+ と Bluetooth に対応したサイコンにデータ連携できます。
Garmin Edge 130 plus サイコンは特に理由はなかったものの 後々 GoPro と組み合わせて使いたくて Garmin からセレクトしました。
（後から分かりましたが GPS 計測に対応しているサイコンであれば多分どれでも大丈夫でした）
こちらにした理由は値段からなのですが、遠出する際に地図見るのがしんどいのでもっと上位のモデルにすれば良かったかな…と反省しています。
スマホ積載して使っていますが2つデバイス載っているのもあれなので…。
Rec Mount Plus シリーズ Trek には Blendr システムと呼ばれるシームレスにアクセサリーを車体に取り付けられる仕組みがあるのですが、そちらと比較検討した上でこちらにしました。
今はこんな感じにナローマウントとダブルアームセットを組み合わせてサイコンともう 1 個任意のデバイスをつけられるようにしています。
スマホアダプタ届いたのでマウンタ入れ替えてナビ代わりにスマホおけるようにした pic.twitter.com/q6oZ5ea0Q3
&amp;mdash; スカイ (@skyblue3350) December 5, 2021 ダブルアーム載せてマウントポイント1箇所増やしつつGoPro載せてみた pic.twitter.com/r6D9j1K10Z
&amp;mdash; スカイ (@skyblue3350) December 4, 2021 これだけ色々載せてもグラついたことがないですし、様々な変換マウンタが出ているので GoPro 載せたりスマホ載せたり色々カスタマイズできます。
1枚目の写真にベルが写っていますがこれは Rec Mount の純正ベルではなくキャットアイの小さめのベルを結束バンドで止めています。</description></item><item><title>CKA取得しました</title><link>https://blog.sky-net.pw/post/cka%E5%8F%96%E5%BE%97%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F/</link><pubDate>Mon, 21 Mar 2022 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/cka%E5%8F%96%E5%BE%97%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F/</guid><description>
CKA 取りました
公式サイトの案内通りちょうど24時間後くらいに結果が通知されました。
66点ボーダーで90点でした。
気になったことややったことなどを軽くまとめておきます。
CKA受かってた
&amp;mdash; スカイ (@skyblue3350) February 27, 2022 バッググラウンド 研究で k8s ちょっと触って2年程お仕事で k8s の管理をしています。
基本的なリソース管理については知っていてラズパイで k8s hardway したことあるくらいの状態で勉強を始めました。
スケジュール 2月1日
CKA取得を決意して勉強開始 2月21日
CKA-JP 購入 2月24日
試験申し込み 2月26日
CKA 受験 2月27日
結果発表 勉強 先駆者の方々と同じく udemy の CKA コースを受けました。
定期的にセールしているのでセールしている時に買うのが良いです。
自分は 1500円の時に買いました。
https://www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests/ 一通り講義の動画を見て Practice Test をやり模擬試験を受けました。
この際につまりそうな点とかドキュメントを見たい部分についてはメモをとっておきブックマーク整理の際に利用しました。
恥ずかしいことに NetworkPolicy 周りについて全然知らずこの辺だけは少し勉強しました。
余談として模擬試験環境が結構瞬断するので本番でも起きないか不安でしたが特にそういうこともありませんでした。
ブックマークの準備 他の方が作成されたものをお借りして中身をざっと確認したあと udemy でブックマークしておきたいなと思ったページだけ追加しました。
また、うっかり他のブックマークを開いてしまわないように Google Chrome のプロファイルを分割しておきました。
受験 受験環境 試験の申し込みを数日前にしたせいか19時以降の時間しか取れず自宅で受験しました。</description></item><item><title>ブログをhugoに移設しました</title><link>https://blog.sky-net.pw/post/%E3%83%96%E3%83%AD%E3%82%B0%E3%82%92hugo%E3%81%AB%E7%A7%BB%E8%A8%AD%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F/</link><pubDate>Mon, 21 Mar 2022 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/%E3%83%96%E3%83%AD%E3%82%B0%E3%82%92hugo%E3%81%AB%E7%A7%BB%E8%A8%AD%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F/</guid><description>
まともにメンテしていないこともありブログを hugo にして Github pages で展開するようにしました。
skyblue3350/blog</description></item><item><title>VIRB Editでプレビューできない</title><link>https://blog.sky-net.pw/post/virb-edit%E3%81%A7%E3%83%97%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84/</link><pubDate>Sun, 12 Dec 2021 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/virb-edit%E3%81%A7%E3%83%97%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84/</guid><description>
GoPro で撮影した動画に Garmin サイコンで取ったデータをオーバーレイで載せてみたい！と思って VIRB Edit を触ったところ、VIRB Editで動画や画像がプレビューできない事象に遭遇したのでメモ
環境 発生バージョン
5.4.3 GPU Driver
30.0.14.9709 事象 動画や画像を読み込ませてプレビューしようとすると以下のようにエラー表示が出てしまい何も映らず…
何もわからん…になった pic.twitter.com/4hFOOTNblU
&amp;mdash; スカイ (@skyblue3350) December 12, 2021 エラー文の案内ではグラボのドライバ更新が案内されているがグラフィックカードのドライバは今日時点で最新のものを適用済み。
https://forums.garmin.com/ などを彷徨ってみましたが類似事象の報告はなし。
解消のため色々触っていたところ UI 表示が日本語以外だと問題なく動作することに気付き、インストール先（例 C:\Program Files\Garmin\VIRB Edit ）にある ja ディレクトリの名前を適当に変更し読み込めないようにすることで標準設定の英語で起動するようにできました。
追記1
検証で利用していた動画は再生できたのですが、GoPro で撮影した動画を読み込ませると同じエラーが発生してしまったため使用を諦めました…
追記2
上記に加えてVFRだとうまく再生できなさそうだったのでCFRに変換したところ再生はできました。
ただ、VFR -&amp;gt; CFR にした際に GoPro の GPS データの Stream が失われてしまうので位置合わせを手動でやる必要がでてきます…</description></item><item><title>Nature RemoをGrafanaで可視化する</title><link>https://blog.sky-net.pw/post/nature-remo%E3%82%92grafana%E3%81%A7%E5%8F%AF%E8%A6%96%E5%8C%96%E3%81%99%E3%82%8B/</link><pubDate>Tue, 01 Sep 2020 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/nature-remo%E3%82%92grafana%E3%81%A7%E5%8F%AF%E8%A6%96%E5%8C%96%E3%81%99%E3%82%8B/</guid><description>
ブログ移行中で記事にするのをすっかり忘れていたため、今更感はありますが4ヶ月前に作ったExporterの話
出来上がったものがこちら
適当にtokenを入れて docker-compose up すれば多分動きます
skyblue3350/nature-exporter Grafanaで適当にダッシュボードを作ったのが以下
前のボードそのまま流用して終わり pic.twitter.com/mbs4hWYUvI
&amp;mdash; スカイ (@skyblue3350) May 16, 2020</description></item><item><title>Ubuntu 20.04でステルスAPに接続する</title><link>https://blog.sky-net.pw/post/ubuntu-20.04%E3%81%A7%E3%82%B9%E3%83%86%E3%83%AB%E3%82%B9ap%E3%81%AB%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B/</link><pubDate>Sun, 19 Jul 2020 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/ubuntu-20.04%E3%81%A7%E3%82%B9%E3%83%86%E3%83%AB%E3%82%B9ap%E3%81%AB%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B/</guid><description>
ラズパイに Ubuntu を入れて Wi-Fi 接続しようとしまったらハマったのでメモ
環境 Raspberry Pi 4 Ubuntu 20.04 1$ cat /etc/lsb-release 2DISTRIB_ID=Ubuntu 3DISTRIB_RELEASE=20.04 4DISTRIB_CODENAME=focal 5DISTRIB_DESCRIPTION=&amp;#34;Ubuntu 20.04 LTS&amp;#34; 接続 以下を参考に設定ファイルを作成します。
Network - Configuration | Server documentation | Ubuntu ポイントは ssid の指定に wpa supplicant の scan_ssid を設定している点です。
1$ sudo vim /etc/netplan/99_config.yaml 2network: 3ethernets: 4eth0: 5dhcp4: true 6optional: true 7version: 2 8wifis: 9wlan0: 10dhcp4: true 11optional: true 12access-points: 13&amp;#34;ssid\&amp;#34;\n scan_ssid=1\n#&amp;#34;: 14password: &amp;#34;password&amp;#34; ※環境によっては一度ここでrebootする必要があるかもしれません。
ファイルを作成したら以下のコマンドで適用します。
1$ sudo netplan apply 適用後 IP が振られていることを確認します。</description></item><item><title>Django Rest Frameworkでソーシャルログインを実装する</title><link>https://blog.sky-net.pw/post/django-rest-framework%E3%81%A7%E3%82%BD%E3%83%BC%E3%82%B7%E3%83%A3%E3%83%AB%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E3%82%92%E5%AE%9F%E8%A3%85%E3%81%99%E3%82%8B/</link><pubDate>Sun, 02 Jun 2019 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/django-rest-framework%E3%81%A7%E3%82%BD%E3%83%BC%E3%82%B7%E3%83%A3%E3%83%AB%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E3%82%92%E5%AE%9F%E8%A3%85%E3%81%99%E3%82%8B/</guid><description>
Django Rest Framework（以降DRF）でソーシャルログインを実装したい時の話
色々試したものの上手いこと設定出来ず手こずったのでまとめ
DRFのドキュメントにあるソーシャルログインを試しました．
今回はGithubでテストしました．
環境 Python 3.7.3 パッケージ 1$ pip list 2Django 2.2.1 3django-allauth 0.39.1 4django-rest-auth 0.9.5 5djangorestframework 3.9.4 設定 DRFが動くところまでは済んでる前提です．
上記のパッケージのインストール
1$ pip install django-allauth django-rest-auth settings.pyにインストールしたアプリを追加
1INSTALLED_APPS = ( 2..., 3&amp;#39;django.contrib.sites&amp;#39;, # 設定してない場合追加しておく 4&amp;#39;rest_framework&amp;#39;, 5&amp;#39;rest_framework.authtoken&amp;#39;, 6&amp;#39;rest_auth&amp;#39; 7&amp;#39;allauth&amp;#39;, 8&amp;#39;allauth.account&amp;#39;, 9&amp;#39;allauth.socialaccount&amp;#39;, 10&amp;#39;allauth.socialaccount.providers.github&amp;#39;, 11) 12SITE_ID = 1 # 同上 データベースに反映します
1$ python manage.py migrate Github用の認証ビューを作ります
1class GithubLogin(SocialLoginView): 2adapter_class = GitHubOAuth2Adapter 3callback_url = &amp;#34;Githubのアプリ側で設定したコールバックURLと合わせる&amp;#34; 4client_class = OAuth2Client 適当なURLと紐づけます</description></item><item><title>k8sでPod内からAPIを叩く</title><link>https://blog.sky-net.pw/post/k8s%E3%81%A7pod%E5%86%85%E3%81%8B%E3%82%89api%E3%82%92%E5%8F%A9%E3%81%8F/</link><pubDate>Fri, 08 Mar 2019 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/k8s%E3%81%A7pod%E5%86%85%E3%81%8B%E3%82%89api%E3%82%92%E5%8F%A9%E3%81%8F/</guid><description>
k8sでAPIを叩く記事をだいぶ前に書きましたが最終的にPodとして配置することになりました．
この場合はtokenをベタに書かなくてももっと手軽に認証できるので試します．
環境はk8s v1.9.3で検証しています．
Goだと下記みたいなやつをPythonでやりたいというお話です．
https://github.com/kubernetes/client-go/tree/master/examples/in-cluster-client-configuration
ちなみにexampleの中にありました．
https://github.com/kubernetes-client/python/blob/master/examples/in_cluster_config.py
ほぼ前回のGKEでAPIを利用してみると同じです．
PodからAPIを利用するためにServiceAccountが必要となるのでまずServiceAccountを作成します．
今回以下の条件で作成します
Namespace
ns_sample ServiceAccount
sa_sample ClusterRole
cr_sample ClusterRoleBinding
crb_sample この条件でapi.ymlを作ってリソースを作成します．
1apiVersion:v12kind:Namespace3metadata:4name:ns_sample56---78apiVersion:v19kind:ServiceAccount10metadata:11name:sa_sample12namespace:ns_sample1314---1516kind:ClusterRole17apiVersion:rbac.authorization.k8s.io/v118metadata:19name:cr_sample20namespace:magi2122rules:23- apiGroups:[&amp;#34;*&amp;#34;]24resources:[&amp;#34;*&amp;#34;]25verbs:[&amp;#34;*&amp;#34;]2627---2829kind:ClusterRoleBinding30apiVersion:rbac.authorization.k8s.io/v131metadata:32name:crb_sample33namespace:ns_sample3435subjects:36- kind:ServiceAccount37name:sa_sample38namespace:ns_sample39roleRef:40kind:ClusterRole41name:cr_sample42apiGroup:rbac.authorization.k8s.ioリソースを作成します
1$ kubectl create -f api.yml 各リソースの状態に関しては前回の記事を参考に確認します．
最後にこれをPodから利用します．
Pod内部からの認証は下記コードでできます．
1from kubernetes import client, config 23config.load_incluster_config() このコードを実行するPodにServiceAccountを紐付ければ自動でSecretを読み込み認証が行われます．
1apiVersion:v12kind:Pod3metadata:4name:sample5spec:6serviceAccountName:sa_sample7containers:8- name:sample9image:sample/image既存の認証との切り替えは環境変数にKUBERNETES_SERVICE_HOSTがあるかを基準にすると良さそうです
1if os.environ.get(&amp;#34;KUBERNETES_SERVICE_HOST&amp;#34;): 2configuration = config.load_incluster_config()</description></item><item><title>YouTubeで特定の動画の音声が再生されない</title><link>https://blog.sky-net.pw/post/youtube%E3%81%A7%E7%89%B9%E5%AE%9A%E3%81%AE%E5%8B%95%E7%94%BB%E3%81%AE%E9%9F%B3%E5%A3%B0%E3%81%8C%E5%86%8D%E7%94%9F%E3%81%95%E3%82%8C%E3%81%AA%E3%81%84/</link><pubDate>Thu, 14 Feb 2019 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/youtube%E3%81%A7%E7%89%B9%E5%AE%9A%E3%81%AE%E5%8B%95%E7%94%BB%E3%81%AE%E9%9F%B3%E5%A3%B0%E3%81%8C%E5%86%8D%E7%94%9F%E3%81%95%E3%82%8C%E3%81%AA%E3%81%84/</guid><description>
先週末にPCの調子が悪くてWindows機の再インストールをしたのですが，それ以降特定のYouTubeの動画で音声が再生されない問題が発生していました．
その時の対応メモ.
基本的に問題なく動画も音声も出力されるのですが，一部の動画だけ音声が出力されません．
ただ，音量ミキサで見ていると出力はされているようだったのでデバイスの設定周りを調べました．
結果としてはタスクトレイのスピーカーを右クリ→サウンドから見るデバイスの一覧で既定のデバイスの設定を確認したところ，5.1ch設定になっていました．
使っているヘッドセットは普通のステレオのヘッドセットだったので，ステレオに変更したところ無事に聞こえるようになりました．
多分クリーンインストールした時に設定がリセットされたっぽいですね．</description></item><item><title>PowerShellのtab補完の挙動を変更する</title><link>https://blog.sky-net.pw/post/powershell%E3%81%AEtab%E8%A3%9C%E5%AE%8C%E3%81%AE%E6%8C%99%E5%8B%95%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B/</link><pubDate>Tue, 08 Jan 2019 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/powershell%E3%81%AEtab%E8%A3%9C%E5%AE%8C%E3%81%AE%E6%8C%99%E5%8B%95%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B/</guid><description>
PowerShell使うと毎回気になるのがTabで補完すると
1PS &amp;gt; .\hoge.txt 先頭に「.\」が自動で付与される挙動が微妙に気になっていたので，手を入れてみました．
環境 Windows 10 Home Edition PowerShell 1PS &amp;gt; $PSVersionTable 23Name Value 4---- ----- 5PSVersion 5.1.17134.407 6PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...} 7BuildVersion 10.0.17134.407 8CLRVersion 4.0.30319.42000 9WSManStackVersion 3.0 10PSRemotingProtocolVersion 2.3 11SerializationVersion 1.1.0.1 Tabに割り当てられているFunctionを探す tabという名称の付いたFunctionを探します．
1PS &amp;gt; ls function:*tab* 2CommandType Name Version Source 3----------- ---- ------- ------ 4Function TabExpansion2 ソースコードの取得と書き出し これのソースコードを取得します．
1PS &amp;gt; (Get-Command &amp;#39;TabExpansion2&amp;#39;).ScriptBlock 2もしくは 3PS &amp;gt; $function:tabexpansion2 で標準出力で確認出来るのでこれを適当なところにリダイレクトします．
1PS &amp;gt; $function:tabexpansion2 &amp;gt; /path/to/tab.ps1 あとはこれをISEなどで自分好みに加工します．</description></item><item><title>Windowsにインストールされたアプリケーションのパスを探す</title><link>https://blog.sky-net.pw/post/windows%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%95%E3%82%8C%E3%81%9F%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%83%91%E3%82%B9%E3%82%92%E6%8E%A2%E3%81%99/</link><pubDate>Sat, 15 Dec 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/windows%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%95%E3%82%8C%E3%81%9F%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%83%91%E3%82%B9%E3%82%92%E6%8E%A2%E3%81%99/</guid><description>
今書いてるスクリプトでWindowsで特定のアプリケーションのインストール場所を探す用事があったのでメモ．
Uninstall用のレジストリを探していって見つける．
レジストリキーを総なめしていって一致する名前を見つけたらそのキーのInstallLocationを取得してるだけ．
1$ python find_app.py 2Beat Saber 3C:\Program Files(x86)\Steam\steamapps\common\Beat Saber って感じで取れる．</description></item><item><title>Camera Remote APIを利用してILCE-6000のライブビューを取得する</title><link>https://blog.sky-net.pw/post/camera-remote-api%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6ilce-6000%E3%81%AE%E3%83%A9%E3%82%A4%E3%83%96%E3%83%93%E3%83%A5%E3%83%BC%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B/</link><pubDate>Fri, 14 Dec 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/camera-remote-api%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6ilce-6000%E3%81%AE%E3%83%A9%E3%82%A4%E3%83%96%E3%83%93%E3%83%A5%E3%83%BC%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B/</guid><description>
存在だけ知って触ったことのなかったCamera Remote APIを触ってみました．
環境 ILCE-6000
α6000
本体ソフトウェア Ver3.20 ドキュメントとか https://developer.sony.com/ja/develop/cameras/
公式ページのDownload SDKからドキュメント落とせるので基本的にはそれを見てHTTPを叩きます．
カメラがAPIに対応しているかは以下から確認できます．
https://developer.sony.com/ja/develop/cameras/api-information/supported-features-and-compatible-cameras
接続する まず，同じネットワークにつなぎます．
カメラ側を宅内のネットワークにつなげれば良いのですがAPの登録はできても接続し続けておく方法がわからなかった．
のでAP化する方法で進める．
カメラのAP化 MENU -&amp;gt; 設定 -&amp;gt; アプリ一覧からリモートコントロールを選択．
カメラのモニタにAP名とパスワードが出るのでPCを接続．
カメラのIPを調べる SSDPを使ってカメラのIPアドレスを教えてもらいます．
ただ，カメラをAPとして使っている場合は返ってくる値に変化はないのであんまりやる意味ないです．
上手く返ってくるパケットが捕まえられなかったので今回はWiresharkを使って戻ってきたパケットを読みました．
1import socket 23request = &amp;#34;\r\n&amp;#34;.join([ 4&amp;#34;M-SEARCH * HTTP/1.1&amp;#34;, 5&amp;#34;HOST: 239.255.255.250:1900&amp;#34;, 6&amp;#34;MAN: \&amp;#34;ssdp:discover\&amp;#34;&amp;#34;, 7&amp;#34;MX: 1&amp;#34;, 8&amp;#34;ST: urn:schemas-sony-com:service:ScalarWebAPI:1&amp;#34;]) 910sock = socket.socket(socket.AF_INET , socket.SOCK_DGRAM) 11sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL , 2) 1213msg_bytes = bytearray(request, &amp;#34;utf8&amp;#34;) 14sock.sendto(msg_bytes, (&amp;#34;239.255.255.250&amp;#34;, 1900)) 15sock.close() 送ってしばらくすると4種類くらいのフォーマットでカメラから応答が来るのでそこからXMLを返してくれるエンドポイントへアクセスします．
多分レスポンスの中に以下のURLがあります．
1192.168.122.1:61000/scalarwebapi_dd.xml これにアクセスするとこんな感じで欲しい情報が取れます．
何故かスクリプトから引っ張ってこれないのでパケットキャプチャして見た情報から叩いたけど一応取れた pic.twitter.com/VJCglZxtgT</description></item><item><title>ESXi6.5でUbuntuがネットワークに繋がらない</title><link>https://blog.sky-net.pw/post/esxi6.5%E3%81%A7ubuntu%E3%81%8C%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%AB%E7%B9%8B%E3%81%8C%E3%82%89%E3%81%AA%E3%81%84/</link><pubDate>Fri, 07 Dec 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/esxi6.5%E3%81%A7ubuntu%E3%81%8C%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%AB%E7%B9%8B%E3%81%8C%E3%82%89%E3%81%AA%E3%81%84/</guid><description>
ESXi上で動かしているとあるVMでパッケージのアップデートを適用して再起動したらネットワークに繋がらなくなってしまった．
ただ，他のVMでは問題なくネットワークに接続できているので設定の問題かな？と思ってDHCPに戻したりして検証していたが，一行に接続できず参ってしまったのでその時のメモ．
環境 ホスト
ESXi 6.5 ゲスト Ubuntu16.04（4.4.0-62-generic）
問題なく接続できていたVM Ubuntu16.04（4.4.0-140-generic）
接続できなくなったVM 原因（推測） 技術力不足でログを追うところまではいけませんでしたが，カーネルのアップデートでドライバが対応しきれなくなったのかなと思います．
一応lsmodした感じ対応したドライバが読み込まれているようでしたが動作しませんでした．
接続できなかったVMにはE1000eのNICが接続されていたのでe1000のドライバを拾ってきて入れてやれば多分動いたと思います．
一応，手元にあったカーネルで動作チェックしたところ，こんな感じでした．
4.4.0-140-generic 4.4.0-139-generic 4.4.0-137-generic
接続不可能 4.4.0-104-generic 4.4.0-62-generic
接続可能 解決方法 今回は対応するドライバを入れ直す方法ではなく，ESXiのアダプタタイプを変更することで解決しました．
ESXiの管理コンソールに入り，ネットワークアダプタの設定項目を開いて当該アダプタのアダプタタイプをVMXNET 3に変更することでドライバも併せたものに変更されました．
変更したところ上記の接続不可能だったカーネルでも問題なく接続できるようになったのを確認しました．</description></item><item><title>Oculus Rift買いました</title><link>https://blog.sky-net.pw/post/oculus-rift%E8%B2%B7%E3%81%84%E3%81%BE%E3%81%97%E3%81%9F/</link><pubDate>Fri, 30 Nov 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/oculus-rift%E8%B2%B7%E3%81%84%E3%81%BE%E3%81%97%E3%81%9F/</guid><description>
ブラックフライデーセールで5000円安くなったのでOculus Rift買いました．
25日に購入したので入荷待ちになるかな？と思いましたが，無事28日の午前には到着しました．
気になったことをまとめておきます．
セットアップ センサスタンド x 2（USB3.0 x 2）とRift本体（HDMI + USB3.0）をPCに接続する．
公式サイトからセットアップ用のexeを落としてきて実行する．
ウィザードの通り実行していき，問題なく終了．
セットアップが終わるとデモアプリが起動するので基本操作を学べる．この辺は親切さを感じた．
※1 RiftがHDMIを1つ取るので複数ディスプレイつないでる人は空きスロットを確認しておいて方が良い．
完全に失念したので変換ケーブル来るまで不便でした．
※2 メガネ族は大変というのは事前に聞いてましたが，実際大変なので何かしら対策考えたいと思います．
ショートテンプルが欲しいけど，現状売り切れてるので難しそう．
幸いなことに今使用してるメガネでもRiftはつけられました．
公式サイトにも説明がありますが，メガネ側から掛けていくと良いです．
Riftのレンズとメガネのレンズが当たりそうで怖かったので，Riftのレンズの保護カバーを外さずに何回か装着テストして大丈夫なことを確認してから保護シート剥がしました．
コンテンツ やった順に値段とやり方をまとめておきます．
Steamのものに関しては事前にSteamVRを設定しておく必要あり．
Robo Recall（無料）（Oculusストア） Oculusストアから無料で落とせる．
プレイ中にケーブルが絡まないかと心配していたが，移動方法が良く考えられていたので2時間くらい遊んで1回くらいしか絡まなかった．
YouTube VR（無料）（Steam） SteamにYouTubeのアプリがあるのでそれを入れた．
事前にSteamVRの設定が必要．Riftをつないだ状態でSteamクライアントを起動するとSteamVRを入れるように促されるのでそこからインストールして起動すると設定できる．
出てこなかったらSteamクライアント -&amp;gt; ライブラリ -&amp;gt; ツール -&amp;gt; 「SteamVR」で検索すると出てくるので，それをダウンロードする．
何故かRiftが認識されなかったがPCを再起動したら認識されるようになった．
あとはOculusの設定 -&amp;gt; 一般 -&amp;gt; 提供元不明アプリの許可をしておくのも忘れずに．
SteamVRさえ設定できていれば，YouTubeVR自体は問題なく起動できる．
動画は個人的にピンと来なかった．
Epic Roller Coasters（無料）（Oculusストア） VRと言えばジェットコースターみたいなところあるので試した．
Oculusストアからダウンロードできる．
結構没入感はあったが加減速の感覚がないのに視点が加減速してるせいか少し酔いそうになった．
Assetto Corsa（有料：2050円）（Steam） 設定のグラフィックス設定で出力方法をOculusに変更するだけで遊べるようになる．
ただ，Oculus Touchの操作は対応してないっぽいのでマウスが必要だった．
ゲーム始まってしまえばハンコンから操作できるので問題なし．
初期位置がおかしい時はOculus Touchを押してメニューに戻ると初期位置をリセットできるボタンがあるのでそこから．
細かいシート位置調整はゲーム中のUIの位置調整からできるので，ある程度はゲームからもできる．
ただゲーム内のappsの描画位置が顔に近すぎるので，もうちょい奥にして欲しい．
config書き換えればいけるかもしれない．
Euro Truck Simulator 2（有料：2280円）（Steam） 下記で詳細に説明されているので説明はそちらで．</description></item><item><title>GKEでAPIを利用してみる</title><link>https://blog.sky-net.pw/post/gke%E3%81%A7api%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B/</link><pubDate>Tue, 27 Nov 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/gke%E3%81%A7api%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B/</guid><description>
GKEのAPIを利用してリソースの操作してみるメモ．
多分オンプレも同じですがまだ検証してないので動作確認したら追記します．
追記　2019/03/06
オンプレ環境下でも問題なく動きました
環境 環境は以下です．
1$ kubectl version 2Client Version: version.Info{Major:&amp;#34;1&amp;#34;, Minor:&amp;#34;10&amp;#34;, GitVersion:&amp;#34;v1.10.7&amp;#34;, GitCommit:&amp;#34;0c38c362511b20a098d7cd855f1314dad92c2780&amp;#34;, GitTreeState:&amp;#34;clean&amp;#34;, BuildDate:&amp;#34;2018-08-20T10:09:03Z&amp;#34;, GoVersion:&amp;#34;go1.9.3&amp;#34;, Compiler:&amp;#34;gc&amp;#34;, Platform:&amp;#34;linux/amd64&amp;#34;} 3Server Version: version.Info{Major:&amp;#34;1&amp;#34;, Minor:&amp;#34;9+&amp;#34;, GitVersion:&amp;#34;v1.9.7-gke.11&amp;#34;, GitCommit:&amp;#34;dc4f6dda6a08aae2108d7a7fdc2a44fa23900f4c&amp;#34;, GitTreeState:&amp;#34;clean&amp;#34;, BuildDate:&amp;#34;2018-11-10T20:22:02Z&amp;#34;, GoVersion:&amp;#34;go1.9.3b4&amp;#34;, Compiler:&amp;#34;gc&amp;#34;, Platform:&amp;#34;linux/amd64&amp;#34;} APIの利用 とりあえず叩いてみる 公式ドキュメント記載の方法でひとまず叩いてみます
https://kubernetes.io/docs/tasks/administer-cluster/access-cluster-api/ 1$ APISERVER=$(kubectl config view | grep server | cut -f 2- -d &amp;#34;:&amp;#34; | tr -d &amp;#34; &amp;#34;) 2$ TOKEN=$(kubectl describe secret $(kubectl get secrets | grep default | cut -f1 -d &amp;#39; &amp;#39;) | grep -E &amp;#39;^token&amp;#39; | cut -f2 -d&amp;#39;:&amp;#39; | tr -d &amp;#39;\t&amp;#39;) 3$ echo ${APISERVER} 4$ echo ${TOKEN} 取得できたら試しに叩いてみます．</description></item><item><title>Falcon BMS 4.33で遊ぶ</title><link>https://blog.sky-net.pw/post/falcon-bms-4.33%E3%81%A7%E9%81%8A%E3%81%B6/</link><pubDate>Sat, 10 Nov 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/falcon-bms-4.33%E3%81%A7%E9%81%8A%E3%81%B6/</guid><description>
プレイ動画を見て興味を持ったのでFalcon BMSで遊んでみた．
詰まりそうなところが多かったので適宜メモしておく．
環境 Windows 10 Home GTX 1070（Driver 416.34） Saitek Cyborgの安いやつ
大昔に買ったので細かい型番がわからない… 必要なもの Falcon4.0
gogかsteamで売っているので買ってくる．
普段steamを利用してるので今回はそっちで買った． BMS 4.33
フォーラムのReleases &amp;amp; Updatesに最新のバージョンが並んでいるのでここから適宜落としてくる．
https://www.benchmarksims.org/forum/forumdisplay.php?29-Releases-amp-Updates アップデートは差分式っぽいので
U1 -&amp;gt; U2 -&amp;gt; U3 -&amp;gt; U4 -&amp;gt;U5
をダウンロードした．
現在はU2までしかWebから落とせないっぽいのでU3以降はtorrentを使って落としてくる．
それぞれ展開して実行してインストールしていく．
インストール Falcon 4.0
他のSteamのゲームと同じようにダウンロードキューに入れておくだけ．
特に起動とか必要なし． BMS 4.33
先程ダウンロードしたものを
U1 -&amp;gt; U2 -&amp;gt; U3 -&amp;gt; U4 -&amp;gt;U5
の順で適用していった． 起動と設定 デスクトップに作ったショートカットまたはインストール先から起動する．
ランチャーが起動するので右上が64bitなのを確認してlaunchボタンから起動する．
SETUP -&amp;gt; GRAPHICSと移動して
RESOLUTIONをディスプレイの解像度にしておく．
MULTISAMPLINGにチェックを入れ適用可能なものの中から一番良いものを選んでおく．
SETUP -&amp;gt; CONTROLLERSと移動して
使ってるジョイスティックを各種割り当てておく．</description></item><item><title>お名前.comのDDNSをスクリプトから行う</title><link>https://blog.sky-net.pw/post/%E3%81%8A%E5%90%8D%E5%89%8D.com%E3%81%AEddns%E3%82%92%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%8B%E3%82%89%E8%A1%8C%E3%81%86/</link><pubDate>Thu, 01 Nov 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/%E3%81%8A%E5%90%8D%E5%89%8D.com%E3%81%AEddns%E3%82%92%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%8B%E3%82%89%E8%A1%8C%E3%81%86/</guid><description>
滅多に変わらないので放置してたけど宅内の環境を整え直すついでに前々からやろうかなぁと思って放置してたDDNS周りにトライした．
最悪ヘッドレスブラウザで更新すれば良いかなと思ったら簡単にいけそうな記事を見かけたのでスクリプトに起こした．
標準ライブラリだけで動くので適当にcronで叩くようにして終わり．
参考記事 LinuxやMacで お名前.com ダイナミックDNS の IPアドレスを更新する</description></item><item><title>Ubuntu16.04 32bitでdnsdistをビルドする</title><link>https://blog.sky-net.pw/post/ubuntu16.04-32bit%E3%81%A7dnsdist%E3%82%92%E3%83%93%E3%83%AB%E3%83%89%E3%81%99%E3%82%8B/</link><pubDate>Tue, 23 Oct 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/ubuntu16.04-32bit%E3%81%A7dnsdist%E3%82%92%E3%83%93%E3%83%AB%E3%83%89%E3%81%99%E3%82%8B/</guid><description>
はじめに 様々な事情があってどうしようもないUbuntu16.04 32bit環境にdnsdistを入れることになった時の話．
公式で提供しているレポジトリは64bit向けしか提供されていないので自分でビルドする必要がある．
環境 Ubuntu 16.04 32bit 前提パッケージのインストール 一部不要なパッケージがある気がするが最終的に入れてパッケージ
1$ sudo apt-get install autoconf automake libtool git make gcc g++ libsodium-dev pkg-config ragel fstrm libssl-dev libsystemd-dev libprotoc-dev protobuf-compiler libprotobuf-dev protobuf python-pip python-virtualenv dnsdistのインストール レポジトリをクローンしてから当該バージョンに切り替える．
1$ git clone https://github.com/PowerDNS/pdns.git 2$ cd pdns 3$ git checkout refs/tags/dnsdist-1.3.2 ビルド用のディレクトリに移動してからビルドしてインストールする
1$ cd pdns/dnsdistdist/ 2$ autoreconf --install 3$ make 4$ ./configure 5$ sudo make install バージョンを確認する．
1$ dnsdist --version 2dnsdist 0.0.HEAD.ga63826e (Lua 5.</description></item><item><title>ペダルとシフターを統合する</title><link>https://blog.sky-net.pw/post/%E3%83%9A%E3%83%80%E3%83%AB%E3%81%A8%E3%82%B7%E3%83%95%E3%82%BF%E3%83%BC%E3%82%92%E7%B5%B1%E5%90%88%E3%81%99%E3%82%8B/</link><pubDate>Mon, 22 Oct 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/%E3%83%9A%E3%83%80%E3%83%AB%E3%81%A8%E3%82%B7%E3%83%95%E3%82%BF%E3%83%BC%E3%82%92%E7%B5%B1%E5%90%88%E3%81%99%E3%82%8B/</guid><description>
はじめに 前回と前々回でそれぞれの動作確認ができたが現段階だと2個それぞれProMicroに接続して使っている．
LPST-14900をArduinoに接続する その2 G25のペダルをArduinoにつなぐ これだと2ポート＋ハンドルで1ポートで3ポート使ってて頭悪いので1つのProMicroに統合した．
回路図 とりあえずよく見るFritzingで今後忘れないように回路図を書いてみる．
ProMicroはデフォルトで入ってないのでGithubで公開されていたファイルを導入しました．
コード コードはこんな感じにしました（前回の記事のコードをまとめただけ）
あとはアクリル板でそれっぽいケースを作って終わりです．
動作確認もできたので終わり pic.twitter.com/yagq9FarOp
&amp;mdash; スカイ (@skyblue3350) October 8, 2018 動作確認は既にしてあるので問題なく動いた．</description></item><item><title>UbuntuがDisk fullになってapt upgradeに失敗する</title><link>https://blog.sky-net.pw/post/ubuntu%E3%81%8Cdisk-full%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6apt-upgrade%E3%81%AB%E5%A4%B1%E6%95%97%E3%81%99%E3%82%8B/</link><pubDate>Sat, 06 Oct 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/ubuntu%E3%81%8Cdisk-full%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6apt-upgrade%E3%81%AB%E5%A4%B1%E6%95%97%E3%81%99%E3%82%8B/</guid><description>
はじめに 色々あって放置してたあるUbuntu Serverですが自動更新でカーネルが積み重なった結果/bootが100%になって死んでいました．
質の悪いことにあるカーネルをインストールしてる途中でDisk fullになったらしくアンインストールしようにも途中のものがあるからそっちを先に片付けろと言われうんともすんともいかない状態になりました．
その時のメモ
今考えたら--force-yesとかしたらアンインストールできたのかな？
現状確認 1$ df -h | grep /boot 2/dev/sda1 472M 472M 0M 100% /boot /bootがいっぱいになってる
ひとまずautoremoveで古いカーネルを消すかと思ったもののapt-get install -fしろと言ってきてどうにもならない
/bootがいっぱいなためインストール途中のカーネルインストールにこける
ググった感じこれといった解決方法を見つけられなかったのでちょっと強引だが以下の方法で解決した
解決まで まず現在利用しているカーネルバージョンをチェック
1$ uname -a 2Linux hoge 4.4.0-109-generic #132-Ubuntu SMP Tue Jan 9 19:52:39 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux 次にインストール済みのカーネルをチェック
1$ dpkg -l | grep linux-image 2rc linux-image-4.4.0-101-generic 4.4.0-101.124 amd64 Linux kernel image for version 4.4.0 on 64 bit x86 SMP 3rc linux-image-4.4.0-103-generic 4.</description></item><item><title>LPST-14900をArduinoに接続する その2</title><link>https://blog.sky-net.pw/post/lpst-14900%E3%82%92arduino%E3%81%AB%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B-%E3%81%9D%E3%81%AE2/</link><pubDate>Wed, 03 Oct 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/lpst-14900%E3%82%92arduino%E3%81%AB%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B-%E3%81%9D%E3%81%AE2/</guid><description>
はじめに 前回失敗したLPST-14900の値をArduinoで取得するのに再チャレンジした．
結果としては成功しました．
前回記事でも参考したレポジトリのピン配置と実装をほぼそのまま借りた形になっています．
検証はArduino Unoでやっているのでゲームパッドとして認識させられませんが前回の記事とか見て雰囲気で書けば使えます．
手持ちのProMicroが使用中なので新しいのが来たら…
ピン配置 ピンの位置はシフターのコネクタ側から見た時のピン番号です．
ただの自爆ですが，何も考えずにD-subのコネクタ側から見てピンを挿して混乱しました．
この記事のスクリプトではアナログピンをデジタルピンとして使えるので全部アナログピンを利用していますが実際に必要となるのはX/Y軸のピンだけです．
この記事では以下のように配置しています．
D-sub 1 -&amp;gt; A2 （デジタル入出力ピンとして使用） D-sub 2 -&amp;gt; A3 （デジタル入出力ピンとして使用） D-sub 3 -&amp;gt; A4 （デジタル入出力ピンとして使用） D-sub 4 -&amp;gt; A1 （アナログ入力ピンとして使用） D-sub 6 -&amp;gt; GND D-sub 8 -&amp;gt; A0 （アナログ入力ピンとして使用） D-sub 9 -&amp;gt; VCC プログラム 以下のような感じになりました．
必要な情報を設定すると出力されます．
手持ちのLPST-14900で問題なく全部取れました．
次はG25のペダルと組み合わせて1個のProMicroで完結するようにします．
参考記事 DIY G25 shifter interface with H-pattern, sequential and handbrake modes functionreturnfunction/G27_Pedals_and_Shifter</description></item><item><title>The ship Remasterでサーバーを建てる</title><link>https://blog.sky-net.pw/post/the-ship-remaster%E3%81%A7%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92%E5%BB%BA%E3%81%A6%E3%82%8B/</link><pubDate>Tue, 02 Oct 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/the-ship-remaster%E3%81%A7%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92%E5%BB%BA%E3%81%A6%E3%82%8B/</guid><description>
はじめに 今更ながらに購入して遊びました．
身内で遊ぶためにサーバーを建てたのですがぼちぼち詰まったので備忘録として残しておきます．
今の所Winしか提供されていないようなので他のプラットフォームで動かしたい時は頑張るしかなさそう．
手段 サーバーファイルを落としてきて使う
https://steamcommunity.com/linkfilter/?url=https://s3-eu-west-1.amazonaws.com/bgdownloads/Remasted+Dedicated.zip
で配布されているサーバーファイルを落としてきて使う（↑参考ページのところにあるリンクです）
がsteamconsole.dllがないとかで進まないのでひとまず諦め．
ゲーム内でCreate Serverしてみる 一番最初にこれを試しけどうまくいかなかった．
ただUDP開けずに試してた気がするのでTCP/UDP両方開ければいけるのかもしれない．
また機会があれば試します．
Steam上で動かす 試した中でこれが一番確実でした
ただSteamクライアントが当該機に入っていてゲームを購入している必要あり．
Steamクライアント -&amp;gt; ライブラリ -&amp;gt; ツール からThe Ship: Remasted Dedicated Serverをダウンロード
右クリックしてプロパティ -&amp;gt; ローカルファイル -&amp;gt; ローカルファイルを閲覧を選択
TSRDS_1ディレクトリ下にserver.cfgがあるので良しなに設定する
ルーターでserver.cfg上で定義したポートの前後のポートのTCP/UDPを開放する．
SteamクライアントからThe Ship: Remasted Dedicated Serverを起動する．
SteamクライアントからThe Ship: Remastedを起動してゲーム内のJoinからサーバー一覧を見ると出てくる．
らしいが出てこない．
サーバーだけ別PCで動かしてみるとか色々試したけどダメ．
どうも同一ネットワーク上で動作していると出てこないっぽい（身内からは見れるし入れるとのこと）
The shipと同様にSteamクライアント -&amp;gt; 表示 -&amp;gt; サーバー -&amp;gt; お気に入りから127.0.0.1:設定したポート+1を追加すると一応動作しているのは確認できる．
ゲームを起動した状態でゲームに参加を押すとゲーム側でロードが始まり入れたっぽい雰囲気を醸し出すが入れない．
The shipの様にコンソール（JSキーボードで半角全角/USキーボードで:）からconnectコマンドが使えれば良いがどうもないっぽい．
入れない原因はサーバーのホスト名がグローバルIPになってるからっぽい気がする．
が変更する手段がないようなので今回は諦めてとても強引だがサーバーを別PCで動かし自分だけVPNで入った．
NATループバックするようにすればいける気はする．
旧作の方が色々楽だったなぁ…というのが正直な感想
参考サイト Setting up your own Dedicated Server</description></item><item><title>G25のペダルをArduinoにつなぐ</title><link>https://blog.sky-net.pw/post/g25%E3%81%AE%E3%83%9A%E3%83%80%E3%83%AB%E3%82%92arduino%E3%81%AB%E3%81%A4%E3%81%AA%E3%81%90/</link><pubDate>Sun, 30 Sep 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/g25%E3%81%AE%E3%83%9A%E3%83%80%E3%83%AB%E3%82%92arduino%E3%81%AB%E3%81%A4%E3%81%AA%E3%81%90/</guid><description>
G25のペダルだけ入手したので独立させてPCにつなぎます．
G25のペダルにはD-sub9pinのオスがコネクタとしてついているのでD-sub9pinのメスコネクタを購入して線をArduinoまで引っ張って良しなにします．
https://github.com/functionreturnfunction/G27_Pedals_and_Shifter/
こちらにG27での利用例が一式上がっているのでこちらを参考にしました．
ペダルが5500円 ProMicroが400円しないくらい，
ジャンパワイヤとコネクタも安いので6500円くらいになりました．
使ったもの ブレッドボード x1 Arduino Pro Micro互換機 x1 Dsub 9pin メスコネクタ x1 ジャンパワイヤ オス-オス x10 熱収縮チューブ ハード側 7セグは外すのが面倒でつけっぱなしなだけで特に意味はありません．
pic.twitter.com/7wAlizGKp0
&amp;mdash; スカイ (@skyblue3350) September 29, 2018 事前準備 ジャンパワイヤを半分に切ってケーブルの被膜を向いておきます．
Dsub側に予備ハンダをつけてからケーブルをつけます．
使うピンは6本しかないので最低限のピンだけでも大丈夫です．下記参照
熱収縮チューブを収縮させて終わり．
配線 以下の表に従って配線します．
Dsub側 pin番号 Arduino側 pin番号 用途 1 +5V(VCC) +5V 2 A0 アクセル 3 A1 ブレーキ 4 A2 クラッチ 6 GND GND 9 GND GND ソフト側 事前準備 機器によって多少差があるので予めそれぞれのペダルの値の範囲を確認します．</description></item><item><title>Ubuntuにフォントを追加する</title><link>https://blog.sky-net.pw/post/ubuntu%E3%81%AB%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B/</link><pubDate>Mon, 17 Sep 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/ubuntu%E3%81%AB%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B/</guid><description>
Ubuntuにフォントを入れたい用事があったのでトライしてみたメモ
今回は全体に入れますがユーザー単位なら/.local/share/fontsに入れるだけで後同じだと思います
環境 Ubuntu 18.04
WSL環境です フォントの入手 今回は青柳隷書しもを導入してみます．
otfフォントなので少し追加でパッケージ入れたりがあります
予めDLして展開しておきます
導入 デフォルトではotfファイルを読み込まないのでランタイムを追加します
1$ sudo apt install libotf0 otfファイルは/usr/share/fonts/opentypeに格納するのでここにディレクトリを事前に作成しフォントファイルを配置します
1$ sudo mkdir -p /usr/share/fonts/opentype 2$ sudo mv ~/path/to/aoyagireisyosimo_otf_2_01.otf /usr/share/fonts/opentype あとはこれを読み込ませます
1$ sudo fc-cache -f -v 2/usr/share/fonts: caching, new cache contents: 0 fonts, 2 dirs 3/usr/share/fonts/opentype: caching, new cache contents: 1 fonts, 0 dirs &amp;lt;- これ 4/usr/share/fonts/truetype: caching, new cache contents: 0 fonts, 2 dir 5... のようにフォントが読み込まれます
一応フォント一覧を出して確認します
1$ fc-list | grep aoyagireisyo 2/usr/share/fonts/opentype/aoyagireisyosimo.</description></item><item><title>GitlabをPrometheusで監視する</title><link>https://blog.sky-net.pw/post/gitlab%E3%82%92prometheus%E3%81%A7%E7%9B%A3%E8%A6%96%E3%81%99%E3%82%8B/</link><pubDate>Fri, 14 Sep 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/gitlab%E3%82%92prometheus%E3%81%A7%E7%9B%A3%E8%A6%96%E3%81%99%E3%82%8B/</guid><description>
9.3からサポートされているGitlabのPrometheusのメトリクス公開を試してみた．
環境はsameersbn/docker-gitlabの11.2.3です．
公式イメージでもできるらしいですが未検証なので参考サイトのとこに情報だけ置いておきます．
Gitlab WebUI側での設定 Webから管理者アカウントでログインして管理画面へアクセスします．
Settings-&amp;gt;Metricsの項目にPrometheusがあるのでそこを開きます．
prometheus_multiproc_dirの環境変数が未定義との警告がありますがひとまず有効にします．
有効にした後再起動しないと利用出来ないので再起動する際に設定します．
コンソール側での設定 prometheus_multiproc_dirとモニタリング用のエンドポイントへアクセスできるようにホワイトリストへ追加します．
今回はGitlabのDockerイメージを使用しているので
1gitlab:2restart:always3image:sameersbn/gitlab:11.2.34...5environment:6...7# Prometheus Config8- prometheus_multiproc_dir=/dev/shm9- GITLAB_MONITORING_IP_WHITELIST=192.168.xxx.xxxのように必要な環境変数を設定します．
あとはコンテナに設定を適用して終わりです．
1$ docker-compose up -d これで
http://gitlab-host/-/metrics
からPrometheus用のフォーマットでメトリクスを収集することができます．
Prometheus 監視対象としていつも通り登録すれば終わりですがいつもと違い/metricsではなく/-/metricsとなるのでそこだけリラベルする必要があります．
1- targets:2- gitlab.local:100803labels:4__metrics_path__:/-/metrics参考サイト Gitlab doc GitLab Prometheus metrics Gitlab doc IP whitelist [SOLVED] Gitlab Docker prometheus_multiproc_dir and /-/metrics</description></item><item><title>blackbox_exporterで複数のmoduleを実行する</title><link>https://blog.sky-net.pw/post/blackbox_exporter%E3%81%A7%E8%A4%87%E6%95%B0%E3%81%AEmodule%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B/</link><pubDate>Sun, 09 Sep 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/blackbox_exporter%E3%81%A7%E8%A4%87%E6%95%B0%E3%81%AEmodule%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B/</guid><description>
blackbox_exporterでDNSの監視をしているのですが前回の記事のキャッシュサーバーのダウンを検知出来ませんでした．
使っていた設定とアラートはこんな感じです．
1- job_name:blackbox_dns2metrics_path:/probe3params:4module:[internal_dns, external_dns, cache_dns]5static_configs:6- targets:7- ns.local8relabel_configs:9- source_labels:[__address__]10target_label:__param_target11- source_labels:[__address__]12target_label:instance13- target_label:__address__14replacement:blackbox_exporter:9115アラート
1groups:2- name:general3rules:4- alert:DNSServiceDown5expr:probe_success{job=&amp;#34;blackbox_dns&amp;#34;} == 06for:5m7labels:8severity:critical9annotations:10summary:&amp;#34;DNSService {{ $labels.instance }} down&amp;#34;11description:&amp;#34;{{ $labels.instance }} が5分間ダウンしました&amp;#34;paramsで指定できるmoduleは1つみたいですね．
設定時にきちんとblackbox_exporterのログを確認すれば良かったのですがきちんと見てませんでした．
blackbox_exporterは動作してるポートにアクセスするとRecent Probesから直近のログを確認することができます．
ここ見てようやく1つしかmoduleが実行されていないことに気付きました．
複数個jobを作れば解決しますが今回はラベルのリライトで同一job上でmoduleを切り替えます
1- job_name:blackbox_dns2metrics_path:/probe3params:4module:[internal_dns]5static_configs:6- targets:7- ns.local|internal_dns8- ns.local|external_dns9- ns.local|cache_dns10relabel_configs:11- source_labels:[__address__]12regex:(.*?)\|(.*)13target_label:__param_target14replacement:${1}15- source_labels:[__address__]16regex:(.*?)\|(.*)17target_label:__param_module18replacement:${2}19- source_labels:[__address__]20regex:(.*?)\|(.*)21target_label:instance22replacement:${2}23- target_label:__address__24replacement:blackbox_exporter:9115「|」で区切ってそれを正規表現で抽出し適宜replaceする感じですね．
ルールの方は問題ないのでそのまま前回記事の方法でわざと色々落としてみて動作確認して終了．
検出出来たので終わりです pic.twitter.com/8XjCitGl0S
&amp;mdash; スカイ (@skyblue3350) September 8, 2018 参考記事 blackbox exporter duplicated text in configs</description></item><item><title>dnsdistでコンソールからサーバーを操作する</title><link>https://blog.sky-net.pw/post/dnsdist%E3%81%A7%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB%E3%81%8B%E3%82%89%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92%E6%93%8D%E4%BD%9C%E3%81%99%E3%82%8B/</link><pubDate>Mon, 03 Sep 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/dnsdist%E3%81%A7%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB%E3%81%8B%E3%82%89%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92%E6%93%8D%E4%BD%9C%E3%81%99%E3%82%8B/</guid><description>
dnsdistで管理してるキャッシュDNSサーバーがダウン判定されて復旧しているが再判定とかないのかダウンのままになっているので手動でUpに戻す
dnsdistのコンソールにアクセスする
前回の記事とかで設定済みの前提
1$ dnsdist -c xxx.xxx.xxx.xxx:5199 まず現在のサーバーの状態を確認する
1&amp;gt; showServers() 2# Name Address State Qps Qlim Ord Wt Queries Drops Drate Lat Outstanding Pools 30 powerdns-master xxx.xxx.xxx.xxx:53 up 0.0 0 1 1 41116479 12 0.0 0.3 0 auth 41 powerdns-recursor yyy.yyy.yyy.yyy:5353 down 0.0 0 1 1 96579 5 0.0 124.7 0 recursor 5All downになっているサーバーを取得してupにする
1&amp;gt; getServer(1) 2powerdns-recursor 3&amp;gt; getServer(1):setUp() 再確認する
1&amp;gt; showServers() 2# Name Address State Qps Qlim Ord Wt Queries Drops Drate Lat Outstanding Pools 30 powerdns-master xxx.</description></item><item><title>FirebaseでID Tokenを生成する</title><link>https://blog.sky-net.pw/post/firebase%E3%81%A7id-token%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B/</link><pubDate>Wed, 29 Aug 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/firebase%E3%81%A7id-token%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B/</guid><description>
FirebaseでID Tokenを生成する方法です．
Firebase Functionsで認証の仕組みを使った時にこれフロント作らないとデバッグ出来ないのか…？みたいな気持ちになったので生成方法メモしておきます．
必要なもの ウェブ API キー
プロジェクトの設定の全般から取得できます サービスアカウントの認証情報
プロジェクトの設定のサービスアカウントから新しい秘密鍵の生成で持ってこれます ログインしたいユーザーのuid
プロジェクトのAuthenticationのユーザーuidから持ってきます Functionsはこんな感じのなんか認証情報でアクセス許可したりしなかったりする感じ
1app.use((req, res, next) =&amp;gt; { 2const idToken = req.headers.authorization.replace(&amp;#34;Bearer &amp;#34;, &amp;#34;&amp;#34;); 3const decodedToken = await admin.auth().verifyIdToken(idToken); 4if (よしなに判定){ 5// 認証失敗 6 res.status(401).send(&amp;#34;認証いるよ&amp;#34;); 7} else { 8next(); 9} 10}); ここでBearerヘッダに入れるidTokenってどうやって入手するの…？となるわけですがフロントがあるなら
ログイン認証後に
1const idtoken = await firebase.auth().currentUser.getIdToken(); とかやると取れます（多分
ただフロントは今回全く書いてなかったので使わずに生成する方法です．
まずカスタムトークンが必要になるのでこれを生成します．
https://firebase.google.com/docs/auth/admin/create-custom-tokens?hl=ja
この辺に各言語でのやり方が書いてありますが今回はPythonで説明します．
以下のようなコードを使います．
必要部分は事前に取得したもので埋めて下さい．
1import firebase_admin 2from firebase_admin import credentials 3from firebase_admin import auth 45# 管理コンソールのサービスアカウントから取得する 6cred = credentials.</description></item><item><title>modprobeに頼らずinsmodする</title><link>https://blog.sky-net.pw/post/modprobe%E3%81%AB%E9%A0%BC%E3%82%89%E3%81%9Ainsmod%E3%81%99%E3%82%8B/</link><pubDate>Wed, 29 Aug 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/modprobe%E3%81%AB%E9%A0%BC%E3%82%89%E3%81%9Ainsmod%E3%81%99%E3%82%8B/</guid><description>
だいぶ前に書いた記事 [未解決]yum updateしたら立ち上がらなくなった話 の後日談です．
このマシン実は未だにレスキューモードで強引に動かしています．
今回ようやく移行機材が揃ったので移行先へファイルを移すためにNFSマウントしようとしたらモジュールが有効になってないので
1mount.nfs4: No such device と出てマウント出来ませんでした．
mountコマンドに-vをつけて実行した感じnfsv4が有効になってないようなのでこれを手動で有効にします．
普通の場合なら単に
1$ modprobe nfs として終わりですがレスキューモードだとmodules.depが読めないからか使えないので人力でやります．
1$ insmod /lib/modules/3.10.0-327.22.2.el7.x86_64/kernel/fs/nfs/nfsv4.ko 2Unknown symbol in module と出て前提モジュールがないので調べます．
1$ cat /lib/modules/3.10.0-327.22.2.el7.x86_64/modules.dep | grep nfsv4.ko: 2kernel/fs/nfs/nfsv4.ko: kernel/net/dns_resolver/dns_resolver.ko kernel/fs/nfs/nfs.ko kernel/fs/lockd/lockd.ko kernel/fs/nfs_common/grace.ko kernel/net/sunrpc/sunrpc.ko kernel/fs/fscache/fscache.ko で必要なものを1個ずつinsmodして繰り返していきます．
今回はdns_resolver.ko以外は
1$ insmod /lib/modules/3.10.0-327.22.2.el7.x86_64/kernel/fs/nfs/nfs.ko 2File exists と出て有効化してあったので
1$ insmod /lib/modules/3.10.0-327.22.2.el7.x86_64/kernel/net/dns_resolver/dns_resolver.ko 2$ insmod /lib/modules/3.10.0-327.22.2.el7.x86_64/kernel/fs/nfs/nfsv4.ko して終わりでした．
一応確認して無事NFSマウントできました．
1$ cat /proc/filesystems | grep nfs 2nodev nfsd 3nodev nfs 4nodev nfs4 5$ mount -t 192.168.xxx.xxx:/path/to/dir /mnt/path/to/dir -v</description></item><item><title>k8sでノードをメンテナンスする</title><link>https://blog.sky-net.pw/post/k8s%E3%81%A7%E3%83%8E%E3%83%BC%E3%83%89%E3%82%92%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%83%B3%E3%82%B9%E3%81%99%E3%82%8B/</link><pubDate>Tue, 28 Aug 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/k8s%E3%81%A7%E3%83%8E%E3%83%BC%E3%83%89%E3%82%92%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%83%B3%E3%82%B9%E3%81%99%E3%82%8B/</guid><description>
k8sでノードを切り離したい時やメンテナンスしたい時のメモ
1$ kubectl get node -o wide 2NAME STATUS ROLES AGE VERSION EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME 3kube01 Ready &amp;lt;none&amp;gt; 195d v1.9.3 &amp;lt;none&amp;gt; Ubuntu 16.04.3 LTS 4.4.0-112-generic docker://17.12.0-ce 4kube02 Ready &amp;lt;none&amp;gt; 195d v1.9.3 &amp;lt;none&amp;gt; Ubuntu 16.04.3 LTS 4.4.0-112-generic docker://17.12.0-ce 5kubemaster Ready master 195d v1.9.3 &amp;lt;none&amp;gt; Ubuntu 16.04.5 LTS 4.4.0-112-generic docker://18.6.0 6$ kubectl get pod -o wide --all-namespaces | grep kube02 7動いてるコンテナ一覧が見える というわけでノードに配置されているコンテナを追い出す
Deployment系は多分再配置が行われるがPOD単体のものなどは多分行われないので事前に確認しておくこと
1$ kubectl drain --ignore-daemonsets --force kube02 メンテが終わったら再スケジュールするようにする
1$ kubectl uncordon kube02</description></item><item><title>graphqlでファイルをアップロードする</title><link>https://blog.sky-net.pw/post/graphql%E3%81%A7%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89%E3%81%99%E3%82%8B/</link><pubDate>Sun, 26 Aug 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/graphql%E3%81%A7%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89%E3%81%99%E3%82%8B/</guid><description>
最近graphqlを触り始めました．
書いてて多分ぶち当たる案件にファイルのアップロードをどうするのかという問題があります．
この件についてこちらの記事が参考になります．
GraphQLの規格とプロダクトの隙間をどう埋めるか 〜ファイルアップロード〜 オチから書くと今回はbase64で実装しました．
記事中やGoogleで検索してると出てくるapollo-upload-server/clientが使いやすそうで良いのですが今回の実行環境がFirebase Functionsということがありそのままでは素直に動いてくれませんでした．
というのもapollo-upload-server/clientは以下で仕様が説明されている通りファイルをmultipartで送信します．
jaydenseric/graphql-multipart-request-spec Firebase functionsではユーザーが使用しているexpressの前にGoogle側のexpressがいるらしくこいつがRequestを先に読み出してしまうようです．
そのため内部で使用されているbusboyがRequestを正常にパースすることが出来ず結果として
1Missing multipart field ‘operations’ とエラーが返ってきてアップロードすることができません．
multipart自体は以下の記事の説明にある通りGoogle Functionsのページには説明がありましたが上手く組み込めなかったので諦めました．
Firebaseの小ネタ集 これについては
https://github.com/jaydenseric/apollo-upload-server/issues/19
https://github.com/jaydenseric/apollo-upload-server/issues/21
でも取り上げられていますが自分の技術力では解決出来なかったので誰か上手く行った方がいれば教えて欲しいです．
apollo-upload-server/client自体は以下のようなコードで動きます（多分
シンプルで良いですね．
server
1... 2import { GraphQLUpload } from &amp;#34;apollo-upload-server&amp;#34;; 3import { apolloUploadExpress } from &amp;#34;apollo-upload-server&amp;#34; 45const schema = new GraphQLSchema({ 6mutation: new GraphQLObjectType({ 7name: &amp;#34;Mutation&amp;#34;, 8fields: { 9uploadImage: { 10type: GraphQLBool, 11args: { 12image: {type: GraphQLUpload}, 13}, 14resolve: async (_, args) =&amp;gt; { 15return await uploadImage(args); 16} 17}, 18} 19}) 20}); 21const app = express(); 22.</description></item><item><title>Google Cloud Datastore Emulatorを使う</title><link>https://blog.sky-net.pw/post/google-cloud-datastore-emulator%E3%82%92%E4%BD%BF%E3%81%86/</link><pubDate>Sat, 18 Aug 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/google-cloud-datastore-emulator%E3%82%92%E4%BD%BF%E3%81%86/</guid><description>
Google Cloud Datastore Emulatorを使うことでクラウド上のDatastoreを使わずにローカルでDatastoreを建てて開発することができるようになります．
Firebase Datastoreも実質これなので使ってみました．
環境 1$ gcloud version 2Google Cloud SDK 212.0.0 3beta 2018.07.16 4bq 2.0.34 5cloud-datastore-emulator 2.0.1 6core 2018.08.13 7gsutil 4.33 8kubectl 9$ firebase -V 104.1.0 環境構築 前提パッケージのjreを入れておきます．
1$ sudo apt install openjdk-8-jre Google Cloud Datastore Emulatorをインストールします．
1$ gcloud components install cloud-datastore-emulator 使い方 gcloudでデフォルトプロジェクトを指定していない場合は``--project```でプロジェクトを指定しておきます．
1$ gcloud beta emulators datastore start --project hoge 2Executing: /Google/Cloud SDK/google-cloud-sdk/platform/cloud-datastore-emulator/cloud_datastore_emulator create --project_id=hoge ~/.config/gcloud/emulators/datastore 3[datastore] Aug 17, 2018 7:03:38 PM com.google.cloud.datastore.emulator.CloudDatastore$CreateAction$1 apply 4[datastore] INFO: Provided project_id to Cloud Datastore emulator create command, which is no longer necessary.</description></item><item><title>Google Payデビューした話</title><link>https://blog.sky-net.pw/post/google-pay%E3%83%87%E3%83%93%E3%83%A5%E3%83%BC%E3%81%97%E3%81%9F%E8%A9%B1/</link><pubDate>Sat, 18 Aug 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/google-pay%E3%83%87%E3%83%93%E3%83%A5%E3%83%BC%E3%81%97%E3%81%9F%E8%A9%B1/</guid><description>
最近kyashのリアルカードを手に入れました．
kyash自体は送金出来たりで割り勘する時に役立ってます．
ただリアルカードはサイン求められることがぼちぼちあるらしいのであんまり実店舗では使ってなかったりします．
Suicaとかで決済できると便利なので今年5月末にSuicaに対応したGoogle Payで使ってみることにしました．
ただGoogle Payが使える端末の条件は
Android 5以上 NFC対応（おサイフケータイ） です．
手持ちの端末ではどちらかしか満たせるものがないので新規に1台用意することにしました．
端末の探し方ですが条件に適合する型番をリストアップするのは骨が折れますがまとめて下さった方がいるので参考にします．
Google PayでSuicaなど4つの電子マネーが使えるようになったので、対応機種を調べてみた！ Suica等はネットワークに接続されていない状態でも利用可能ですがオートチャージや出先でのチャージを考えると何かしらのネットワークへの接続手段が欲しくなります．
運用的に通信量は極わずかなので運用する際は0SIMが良さそうです．
ただ，0SIMはdocomo網でしか提供されていないため中古で買った端末がSIMフリーでない場合困るのでdocomo端末に絞りました．
最後に上記のリストで注意が必要な点が1つあります．
それはリリース当初はAndroid4だったがアップグレードでAndroid5になるタイプの端末です．
これらの端末は修理対応期間中のみしかアップグレード用のファイルが提供されないようです．
例えばF-04Fですが修理対応期間が2018年6月末に終了しているため現時点でAndroid5を適用済みの端末でないと利用することができません．
逆に対応期間中であれば自分でアップグレード可能なため問題ありません．
ここまで条件を確認したところで中古ショップやヤフオク・メルカリを巡って安い端末を探しました．
安いのはヤフオク・メルカリですが前者はオークションなためどうしても運が良くないと落とせなかったので今回はメルカリで購入しました．
どちらも最安3000円くらいなので粘ればどちらもありだとは思います．
届いた端末を初期化した上でGoogle PayをインストールしてSuicaを登録します．
クレジットカードからのチャージでGoogle Paymentsにkyashのカードを登録してチャージします．
チャージしたら普通にSuicaとして使えるので適当に自販機とかで試してみます．
今回購入した端末は問題なく使えたのでしばらくこのまま使ってみます．
追記
初回だけでした
最後に1つ気になる点はGoogleの決済タイミング的にkyash側で余計なオートチャージが走ってしまう点です．
一度Google Servicesから決済されたあとに改めてGoogle Payから決済を行い，そのあとに一度目の決済をキャンセルしているらしく余分なオートチャージが走ってしまいます．</description></item><item><title>firebase loginをauthorization codeでする</title><link>https://blog.sky-net.pw/post/firebase-login%E3%82%92authorization-code%E3%81%A7%E3%81%99%E3%82%8B/</link><pubDate>Wed, 15 Aug 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/firebase-login%E3%82%92authorization-code%E3%81%A7%E3%81%99%E3%82%8B/</guid><description>
SSHしてるリモート上でfirebase loginしようとしたらログイン後のコールバックがlocalhostになってるので認証出来ず困ったのでそのメモ
オプションに--no-localhostをつけるとコードベースで認証できる
表示されたURLを適当なマシンで開いてアカウントの認証を済ませるとブラウザ上で認証用のコードが表示されるのでコンソールに貼り付けて終わり
1$ firebase login --no-localhost 2? Allow Firebase to collect anonymous CLI usage and error reporting information? No 34Visit this URL on any device to log in: 5https://accounts.google.com/o/oauth2/auth[省略] 67? Paste authorization code here: [ブラウザに表示されたコードを貼り付ける] 89✔ Success! Logged in as [username]@gmail.com 参考記事 Stackoverflow How to login to firebase-tools on headless remote server?</description></item><item><title>VMware Playerを削除する</title><link>https://blog.sky-net.pw/post/vmware-player%E3%82%92%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B/</link><pubDate>Sat, 04 Aug 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/vmware-player%E3%82%92%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B/</guid><description>
はじめに Windows10でVMware Playerをアンインストールする際にちょっと手間取ったのでメモ
環境 Windows10
Win7から引き継ぎで10にあげた環境 VMware Player 12.5.5
元々7のときにインストールして使ってた
10にしてから使おうとしたらエラーで再インストールするしかなくなった アンインストール 普通にコンパネから削除 できない
アンインストールがグレーアウトしてる
一応バージョン確認できる
インストーラーから削除 インストール時に使ってインストーラーから削除できるらしい
ただそんなものはだいぶ前に消したので拾ってくる
公式サイトに行くと最新の14.0のページしかない
昔はメジャーバージョンのメニューで過去のも選択出来た気がするんだけど見当たらないのでURLから飛ぶ
https://my.vmware.com/jp/web/vmware/free#desktop_end_user_computing/vmware_workstation_player/14_0
を
https://my.vmware.com/jp/web/vmware/free#desktop_end_user_computing/vmware_workstation_player/12_0
に変更すると過去のインストーラーが拾える
あとはインストーラーを起動して削除を選択すると削除できる
サービスとか止めてファイルの実体を削除しちゃってインストール情報だけ消すなら
1$ VMware-player-12.5.5-5234757.exe /clear とかで消せる
消した後に14に移行して終わり</description></item><item><title>デバイスの再スキャンをする</title><link>https://blog.sky-net.pw/post/%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%81%AE%E5%86%8D%E3%82%B9%E3%82%AD%E3%83%A3%E3%83%B3%E3%82%92%E3%81%99%E3%82%8B/</link><pubDate>Thu, 26 Jul 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%81%AE%E5%86%8D%E3%82%B9%E3%82%AD%E3%83%A3%E3%83%B3%E3%82%92%E3%81%99%E3%82%8B/</guid><description>
はじめに ホストマシンをリブートしないでHDDを認識させたい時の話
UbuntuとCentOSでマシンを落とさずにHDDを接続したい時があって困ったのでメモ
基本的にはrescan-scsi-busを使う方が楽で良い
使わない場合は手動でファイルに書き込んで再スキャンをするが接続ポートがわからないと片っ端から試さないといけないため面倒
共通 scsitoolsをインストールした上でrescan-scsi-busコマンドを実行する
1$ sudo apt-get install scsitools 2or 3$ sudo yum install scsitools 4$ rescan-scsi-bus Ubuntu 1$ sudo echo &amp;#39;1&amp;#39; &amp;gt; /sys/class/scsi_disk/0\:0\:0\:0/device/rescan CentOS 1$ sudo echo &amp;#34;1&amp;#34; &amp;gt; /sys/class/fc_host/hostn/issue_lip 2or 3$ sudo echo &amp;#34;- - -&amp;#34; &amp;gt; /sys/class/scsi_host/hostn/scan 参考記事 再起動なしで新規デバイスをスキャンさせる方法 How do I rescan drives I've expanded?</description></item><item><title>dockerの実行グループを変更する</title><link>https://blog.sky-net.pw/post/docker%E3%81%AE%E5%AE%9F%E8%A1%8C%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B/</link><pubDate>Mon, 23 Jul 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/docker%E3%81%AE%E5%AE%9F%E8%A1%8C%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B/</guid><description>
はじめに dockerコマンドを実行する際に実行ユーザーがdockerグループに所属していない場合sudoをつけて実行する必要があります．
ユーザーをdockerグループに所属させれば済む話ではありますが既にある程度の数のユーザーとそのユーザーが所属するグループがある場合いちいちdockerグループにユーザーを追加させるのは面倒です．
今回はdockerの実行グループを変更して解決します．
今回はserviceファイルに追記しますがdaemon.jsonに書いた方が良い気がします…
共通でやっておくこと まず目的のグループのIDをidコマンドかgetent辺りを使って確認します．
1$ getent group hoge 2hoge:*:9999:foo,bar serviceファイルに追記する場合 次にdocker.serviceを編集します．
Gオプションでデフォルトグループから変更出来るので変更します．
グループ名でも指定できますが当該グループがLDAPで管理されたグループの場合参照エラーが発生してサービスが起動しなかったためグループIDで指定しています．
1$ sudo vi /usr/lib/systemd/system/docker.service 2- ExecStart=/usr/bin/dockerd 3+ ExecStart=/usr/bin/dockerd -G 9999 サービスを再起動します
1$ sudo service docker restart これでグループhogeに所属しているユーザーはコマンドを実行できるようになったはずです．
daemon.jsonを利用する場合 /etc/docker/daemon.jsonがない場合は作成
何かしら書いている場合は整合性を保って以下を追記
1{ 2&amp;#34;group&amp;#34;: &amp;#34;9999&amp;#34; 3} あとはdockerサービスを上げ直して終了
1$ sudo service docker restart 参考記事 以下の記事が参考になりました．
low order magic docker -G and non-local groups</description></item><item><title>Grafana v4.6.3からv5.2.1まであげる</title><link>https://blog.sky-net.pw/post/grafana-v4.6.3%E3%81%8B%E3%82%89v5.2.1%E3%81%BE%E3%81%A7%E3%81%82%E3%81%92%E3%82%8B/</link><pubDate>Mon, 16 Jul 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/grafana-v4.6.3%E3%81%8B%E3%82%89v5.2.1%E3%81%BE%E3%81%A7%E3%81%82%E3%81%92%E3%82%8B/</guid><description>
Docker版のGrafana v4.6.3を使用していましたが使いたいダッシュボードがv5系で作られていてインポートにコケたのでアップデートしました．
そのまま素直にあげるとコケるのでその辺のメモ
まず元のdocker-compose.ymlが以下
1grafana:2image:grafana/grafana:4.6.33container_name:grafana4restart:always5ports:6- 3000:30007volumes:8- ./grafana:/var/lib/grafanaこのまま動かすDockerイメージのバージョンをあげると
1grafana | t=2018-07-16T09:51:34+0000 lvl=info msg=&amp;#34;Starting DB migration&amp;#34; logger=migrator 2grafana | t=2018-07-16T09:51:34+0000 lvl=info msg=&amp;#34;Executing migration&amp;#34; logger=migrator id=&amp;#34;Migrate all Read Only Viewers to Viewers&amp;#34; 3grafana | t=2018-07-16T09:51:34+0000 lvl=eror msg=&amp;#34;Executing migration failed&amp;#34; logger=migrator id=&amp;#34;Migrate all Read Only Viewers to Viewers&amp;#34; error=&amp;#34;attempt to write a readonly database&amp;#34; 4grafana | t=2018-07-16T09:51:34+0000 lvl=eror msg=&amp;#34;Exec failed&amp;#34; logger=migrator error=&amp;#34;attempt to write a readonly database&amp;#34; sql=&amp;#34;UPDATE org_user SET role = &amp;#39;Viewer&amp;#39; WHERE role = &amp;#39;Read Only Editor&amp;#39;&amp;#34; 5grafana | t=2018-07-16T09:51:34+0000 lvl=eror msg=&amp;#34;Server shutdown&amp;#34; logger=server reason=&amp;#34;Service init failed: Migration failed err: attempt to write a readonly database&amp;#34; と出てコケます</description></item><item><title>eslint5を設定する</title><link>https://blog.sky-net.pw/post/eslint5%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B/</link><pubDate>Fri, 06 Jul 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/eslint5%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B/</guid><description>
はじめに 良い加減ESLint導入したいなと思って試したのでメモ
ES6なreact/jsx環境で試しています
当初airbnbを導入しましたが5系で非推奨な設定項目があって警告が出て気になったので一旦外しました
環境構築 必要なパッケージを入れます
1$ npm install --save-dev eslint eslint-plugin-import eslint-plugin-jsx-a11y eslint-plugin-react 設定 npm scripts npm scriptsに追加してsrcディレクトリ下にあるjsxを対象にチェックを行うようにします
1&amp;#34;scripts&amp;#34;: { 2&amp;#34;test&amp;#34;: &amp;#34;echo \&amp;#34;Error: no test specified\&amp;#34; &amp;amp;&amp;amp; exit 1&amp;#34;, 3&amp;#34;lint&amp;#34;: &amp;#34;eslint --ext .jsx src&amp;#34; 4} jsに対しても行う場合は --ext jsと追加すれば良いです
eslintrc 必要な設定・ルール等を記述します
eslint:recommendedをベースに気になるルールの変更と追加をしました
1$ cat .eslintrc.yml 2env: 3es6: true 4browser: true 5parser: babel-eslint 6parserOptions: 7sourceType: module 8extends: 9- eslint:recommended 10plugins: 11- eslint-plugin-react 12rules: 13react/jsx-uses-vars: 1 14no-unused-vars: 15- error 16- args: none 17no-console: 18- warn 19quotes: 20- error 21- double 22semi: 23- error 24indent: 25- error 26- 4 27- SwitchCase: 1 28comma-spacing: 29- error 30comma-style: 31- error 32computed-property-spacing: 33- error 実行 先程登録しておいたのを呼び出しせば実行されます</description></item><item><title>LunaMultiplayerをDockerで起動する</title><link>https://blog.sky-net.pw/post/lunamultiplayer%E3%82%92docker%E3%81%A7%E8%B5%B7%E5%8B%95%E3%81%99%E3%82%8B/</link><pubDate>Fri, 06 Jul 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/lunamultiplayer%E3%82%92docker%E3%81%A7%E8%B5%B7%E5%8B%95%E3%81%99%E3%82%8B/</guid><description>
はじめに KSPのマルチMOD LunaMultiplayerのサーバー側をDockerコンテナで立ち上げる方法のメモ
monoのruntimeだけあれば動きますがUbuntuの公式レポから提供されてるmonoはバージョンが古く新しいの入れるのが面倒そうだったので…
ちなみに古いバージョンだとエラー吐いて動きませんでした
docker-compose.yml 1version:&amp;#34;3&amp;#34;23services:4ksp:5image:mono:latest6volumes:7- ./LMPServer:/LMPServer8ports:9- 8800:880010command:mono /LMPServer/Server.exeあとはzip落としてきて展開してコンテナあげて終わりです
1$ wget [リリースページの最新版のZip] 2$ unzip LunaMultiplayer-Release.zip 3$ docker-compose up -d</description></item><item><title>ArduinoJoystickLibraryを使う</title><link>https://blog.sky-net.pw/post/arduinojoysticklibrary%E3%82%92%E4%BD%BF%E3%81%86/</link><pubDate>Fri, 29 Jun 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/arduinojoysticklibrary%E3%82%92%E4%BD%BF%E3%81%86/</guid><description>
はじめに 簡単な工作したいなと思ったのでアケコンを作ってみた時に使ったArduinoJoystickLibraryの使い方のメモ
作ったの自体は機会があればまた別に記事書きます
必要なもの ATmega32U4を搭載したArduino
今回はPro Microの互換品を使います 環境構築 MHeironimus/ArduinoJoystickLibrary からcloneしてJoystickディレクトリをArduino IDEのインストールディレクトリにあるlibrariesに配置します
スケッチ あとはコード書くだけです
サンプルは公式にあるので実際に使ったスケッチを載せておきます
デフォルトだといろいろ有効になっているので不要なものは適宜コンストラクタでfalseにして無効にしておきます
これだけのコードでゲームパッドとして認識されるので便利な世の中ですね
1#include &amp;lt;Joystick.h&amp;gt;2 3Joystick_ Joystick = Joystick_( 40x03, // reportid 5 JOYSTICK_TYPE_GAMEPAD, // type 6 3, // button count 7 0, // hat switch count 8 true, // x axis enable 9 true, // y axis enable 10 false, // z axis enable 11 false, // right x axis enable 12 false, // right y axis enable 13 false, // right z axis enable 14 false, // rudder enable 15 false, // throttle enable 16 false, // accelerator enable 17 false, // brake enable 18 false // steering enable 19 ); 2021void setup(){ 22// Joystick 23 pinMode(2, INPUT_PULLUP); 24pinMode(3, INPUT_PULLUP); 25pinMode(4, INPUT_PULLUP); 26pinMode(5, INPUT_PULLUP); 2728// Switch 29 pinMode(6, INPUT_PULLUP); 30pinMode(7, INPUT_PULLUP); 31pinMode(8, INPUT_PULLUP); 3233// Joystick lib init 34 Joystick.</description></item><item><title>pyenvで3.7入れて試す</title><link>https://blog.sky-net.pw/post/pyenv%E3%81%A73.7%E5%85%A5%E3%82%8C%E3%81%A6%E8%A9%A6%E3%81%99/</link><pubDate>Thu, 28 Jun 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/pyenv%E3%81%A73.7%E5%85%A5%E3%82%8C%E3%81%A6%E8%A9%A6%E3%81%99/</guid><description>
はじめに 3.7リリースされてたので試そうかなと思ってpyenvで3.7インストールしたのでメモ
きれいな環境で1からpyenvやら置いて試したので色々前提パッケージがなくてエラった
環境 Ubuntu18.04 pyenv 1.2.5 環境構築 前提パッケージ 必要なパッケージを用意します．
足りないとインストール時に下記にまとめたエラーが出て詰まります．
1$ sudo apt-get install zlib1g-dev libffi-dev libbz2-dev libreadline-dev libssl-dev libsqlite3-dev インストール 1$ pyenv install 3.7.0 2Downloading Python-3.7.0.tar.xz... 3-&amp;gt; https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz 4Installing Python-3.7.0... 5Installed Python-3.7.0 to /path/to/.pyenv/versions/3.7.0 使ってみる 適当なディレクトリで
1$ pyenv local 3.7.0 2$ python -V 3Python 3.7.0 あとは適当に
エラーとか zipimport.ZipImportError: can't decompress data; zlib not available 必要なパッケージを入れます
1$ sudo apt-get install zlib1g-dev ImportError: No module named _ctypes https://github.com/pyenv/pyenv/issues/785</description></item><item><title>WSL環境構築まとめ</title><link>https://blog.sky-net.pw/post/wsl%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E3%81%BE%E3%81%A8%E3%82%81/</link><pubDate>Sun, 10 Jun 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/wsl%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E3%81%BE%E3%81%A8%E3%82%81/</guid><description>
はじめに 記事ぼちぼち書いてるのでご存知の通り未だにcygwin使っていますがようやく引っ越しする気になったので詰まった点とかまとめます．
WSLのインストール この辺はわかりやすい記事が色々あるので他の記事読んで下さい
今回はUbuntu18.04で検証しています
WSLの有効化 Winマークを右クリックして「アプリと機能」-&amp;gt;「プログラムと機能」-&amp;gt;「Windowsの機能の有効化または無効化」
と進んで「Windows subsystem for Linux」を有効化して再起動
開発者向け機能の有効化 Winマークを右クリックして「設定」-&amp;gt;「更新とセキュリティ」-&amp;gt;「開発者向け」から開発者モードに切り替えておく
イメージの入手 Winマークを左クリックして「store」と入力してMicrost Storeを開く
任意のイメージを検索してインストールする（Ubuntu18.04等）
WSLの起動 Winマークを左クリックして任意のイメージ名を入力して起動する
しばらく初期設定が走ったあと任意のユーザー名とパスワードを設定します
WSLの設定 ユーザーのホームディレクトリの変更 FSの都合上かなり深いところにWSLのホームディレクトリがあります
そのためWin側で都合が良い場所にホームディレクトリを移します
Win側でストレージは/mnt/[DriveName]
となっているので適宜好きな場所に変更します
例えば「C:\wsl/」としたい場合
1$ sudo vi /etc/passwd 2- sky:x:1000:1000:,,,:/home/sky:/bin/bash 3+ sky:x:1000:1000:,,,:/mnt/c/wsl:/bin/bash のように変更しWSLを再起動します
マウント方法の変更 /mnt下のドライブはマウント時にメタデータオプションが無効の状態でマウントされています
sshなどのファイルのパーミッションが重視されるものを利用しようとするとパーミッション周りでエラーがでるのでメタデータを有効にした状態でマウントするようにします
1$ sudo vim /etc/wsl.conf 2[automount] 3enable = true 4root = /mnt/ 5options = &amp;#34;metadata&amp;#34; 6mountFsTab = false 環境構築 WSL固有でトラブったやつとかだけまとめます
Docker どちらの方法を使用するにせよWSL上にDockerが必要なので予めインストールしておきます
ホスト側にDockerを入れて使う ホスト側にDockerを入れてTCPを有効にしWSL側から操作します
ただし以下に記載があるようにEnterprise、Professional、Educationでないと使うことができません
Windows 10 上に Hyper-V をインストールする ただ一度設定したら楽に使えるのでエディションの問題がなければありだと思います</description></item><item><title>k8sでNFSマウント出来なくて困った話</title><link>https://blog.sky-net.pw/post/k8s%E3%81%A7nfs%E3%83%9E%E3%82%A6%E3%83%B3%E3%83%88%E5%87%BA%E6%9D%A5%E3%81%AA%E3%81%8F%E3%81%A6%E5%9B%B0%E3%81%A3%E3%81%9F%E8%A9%B1/</link><pubDate>Tue, 29 May 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/k8s%E3%81%A7nfs%E3%83%9E%E3%82%A6%E3%83%B3%E3%83%88%E5%87%BA%E6%9D%A5%E3%81%AA%E3%81%8F%E3%81%A6%E5%9B%B0%E3%81%A3%E3%81%9F%E8%A9%B1/</guid><description>
はじめに k8sでNFSマウントしようとすると
1Unable to mount volumes for pod &amp;#34;test_default(xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)&amp;#34;: timeout expired waiting for volumes to attach/mount for pod &amp;#34;default&amp;#34;/&amp;#34;test&amp;#34;. list of unattached/unmounted volumes=[nfs] みたいなエラーで怒られて上手くいかなかったのでその原因の調べ方と設定時の注意点のメモ
そもそもどうやってマウントするの？みたいな話は公式のドキュメント見た方がわかりやすいのでそちらに譲ります
DockerホストでNFSをマウントして条件に合致するpodにデータボリュームでNFSの領域をマウントしてるっぽい
https://kubernetes.io/docs/concepts/storage/volumes/#nfs https://github.com/kubernetes/examples/tree/master/staging/volumes/nfs 環境 相変わらずオンプレです．
物理マシンを2台にUbuntu16.04をインストールし，それぞれMasterとClusterとして設定してあります．
バージョンはv1.9.3です．
1$ kubectl version 2Client Version: version.Info{Major:&amp;#34;1&amp;#34;, Minor:&amp;#34;9&amp;#34;, GitVersion:&amp;#34;v1.9.3&amp;#34;, GitCommit:&amp;#34;d2835416544f298c919e2ead3be3d0864b52323b&amp;#34;, GitTreeState:&amp;#34;clean&amp;#34;, BuildDate:&amp;#34;2018-02-07T12:22:21Z&amp;#34;, GoVersion:&amp;#34;go1.9.2&amp;#34;, Compiler:&amp;#34;gc&amp;#34;, Platform:&amp;#34;linux/amd64&amp;#34;} 3Server Version: version.Info{Major:&amp;#34;1&amp;#34;, Minor:&amp;#34;9&amp;#34;, GitVersion:&amp;#34;v1.9.3&amp;#34;, GitCommit:&amp;#34;d2835416544f298c919e2ead3be3d0864b52323b&amp;#34;, GitTreeState:&amp;#34;clean&amp;#34;, BuildDate:&amp;#34;2018-02-07T11:55:20Z&amp;#34;, GoVersion:&amp;#34;go1.9.2&amp;#34;, Compiler:&amp;#34;gc&amp;#34;, Platform:&amp;#34;linux/amd64&amp;#34;} 今回はMaster側にNFS Serverを設定しましたが適宜別のマシン等でNFSを提供できるように設定しておきます．
一応exportsは制限なしで設定した上でこの記事を書いていますが仕組み的にDockerをホストしているマシンからさえマウントできれば問題ありません．
1$ tail -n 1 /etc/exports 2/opt/nfs *(rw,sync,no_subtree_check,no_root_squash) 設定ファイル PVと作成してPVの条件に適合するPVCを作ってそれをpodにマウントしてやればOKです．</description></item><item><title>ESXiでghettoVCBを導入する</title><link>https://blog.sky-net.pw/post/esxi%E3%81%A7ghettovcb%E3%82%92%E5%B0%8E%E5%85%A5%E3%81%99%E3%82%8B/</link><pubDate>Sun, 13 May 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/esxi%E3%81%A7ghettovcb%E3%82%92%E5%B0%8E%E5%85%A5%E3%81%99%E3%82%8B/</guid><description>
はじめに ESXiでバックアップを取るためにghettoVCBを導入する
環境 ESXi 6.5 事前準備 SSHの有効化 SSHを有効にしないと各種操作が行えないので予めSSHを有効にしておく
WebUIにログインし
ホスト-&amp;gt;アクション-&amp;gt;サービス-&amp;gt;SSHの有効化
からSSHを有効化にしておく
インストール データストアブラウザから
https://github.com/lamw/ghettoVCB/blob/master/vghetto-ghettoVCB.vib
上記をダウンロードしたものをアップロードしておく
SSHでログインし
1# esxcli software vib install -v /path/to/vghetto-ghettoVCB.vib -f としてインストールを行う
インストールが出来た場合
1Installation Result 2Message: Operation finished successfully. 3Reboot Required: false 4VIBs Installed: virtuallyGhetto_bootbank_ghettoVCB_1.0.0-0.0.0 5VIBs Removed: 6VIBs Skipped: と結果が表示される
次にシェルスクリプトをコピーする
1# cp /opt/ghettovcb/bin/ghettoVCB.sh /path/to/ あとは環境に合わせて編集しdry-runしてテストした後に実際に実行してみて問題ないかテストする
ひとまず必要なのはバックアップデータの書き出し先なのでここだけ変更してみる
1- VM_BACKUP_VOLUME=/vmfs/volumes/mini-local-datastore-hdd/backups 2+ VM_BACKUP_VOLUME=/vmfs/volumes/ds2/backup dry-runして問題ないか確認する
1# ./ghettoVCB.sh -m VM名 -d dryrun 2Logging output to &amp;#34;/tmp/ghettoVCB-2018-05-13_02-00-31-1436833.log&amp;#34; ... 32018-05-13 02:00:31 -- info: = ghettoVCB LOG START = 4～略～ 52018-05-13 02:00:32 -- info: ###### Final status: OK, only a dryrun.</description></item><item><title>NFS上でCUDAが上手く動かない</title><link>https://blog.sky-net.pw/post/nfs%E4%B8%8A%E3%81%A7cuda%E3%81%8C%E4%B8%8A%E6%89%8B%E3%81%8F%E5%8B%95%E3%81%8B%E3%81%AA%E3%81%84/</link><pubDate>Fri, 04 May 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/nfs%E4%B8%8A%E3%81%A7cuda%E3%81%8C%E4%B8%8A%E6%89%8B%E3%81%8F%E5%8B%95%E3%81%8B%E3%81%AA%E3%81%84/</guid><description>
症状 Nvidia Docker2で作ったコンテナの/homeにNFSマウントした状態でChainerを使うと
1CUDARuntimeError: cudaErrorUnknown: unknown error と怒られて動かない
解決方法 NFSマウントを外すと上手く動くのでNFSによるものらしい
ので以下のようにNFSのバージョンを明示的に最新の4を指定する
デフォルトだとどうも3でマウントしてるっぽい
1version:&amp;#34;3&amp;#34;23services:4sample:5build:.6tty:true7volumes:8- nfs:/home910volumes:11nfs:12driver:local13driver_opts:14type:nfs15o:addr=192.168.1.xxx,hard,rsize=1048576,wsize=1048576,nfsvers=416device::/homeその他試したこと Problem with CUDA 8 with 381.09 drivers on Ubuntu 16.04, GTX 1080Ti
CUDA_CACHE_PATHを指定することで他の場所に作れるらしい
元の位置は~/.nv
変更したがダメだった
投稿者と同じくドライバが384系だったので390系まであげたものの解決せず メモ 多分Dockerに限らず起きる気がする
Dockerを使っていないベタな環境で似たような環境がありますがそちらではこのエラーが出ないので比較したらそちらはNFSがバージョン4でマウントされてました</description></item><item><title>sphinxでうまいこと仮想環境を見てくれない時</title><link>https://blog.sky-net.pw/post/sphinx%E3%81%A7%E3%81%86%E3%81%BE%E3%81%84%E3%81%93%E3%81%A8%E4%BB%AE%E6%83%B3%E7%92%B0%E5%A2%83%E3%82%92%E8%A6%8B%E3%81%A6%E3%81%8F%E3%82%8C%E3%81%AA%E3%81%84%E6%99%82/</link><pubDate>Wed, 25 Apr 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/sphinx%E3%81%A7%E3%81%86%E3%81%BE%E3%81%84%E3%81%93%E3%81%A8%E4%BB%AE%E6%83%B3%E7%92%B0%E5%A2%83%E3%82%92%E8%A6%8B%E3%81%A6%E3%81%8F%E3%82%8C%E3%81%AA%E3%81%84%E6%99%82/</guid><description>
Sphinxで上手いこと仮想環境を見てないと
1The &amp;#39;sphinx-build&amp;#39; command was not found. Make sure you have Sphinx 2installed, then set the SPHINXBUILD environment variable to point 3to the full path of the &amp;#39;sphinx-build&amp;#39; executable. Alternatively you 4may add the Sphinx directory to PATH. 56If you don&amp;#39;t have Sphinx installed, grab it from 7http://sphinx-doc.org/ とか出てきたりして困る
エラーの通りSPHINXBUILDにsphinx-buildのパスを入れても良いがこれだと仮想環境使ってる時困るので
Winならmake.batに
1if &amp;#34;%SPHINXBUILD%&amp;#34; == &amp;#34;&amp;#34; ( 2set SPHINXBUILD=python -m sphinx 3) Linux系列ならMakefileに
1SPHINXBUILD = python -m sphinx と書いておくと仮想環境に切り替わっていればPythonのパスは仮想環境へ向いてるはずなので良い感じに動く</description></item><item><title>Gitlabを8系から10系までアップデートする</title><link>https://blog.sky-net.pw/post/gitlab%E3%82%928%E7%B3%BB%E3%81%8B%E3%82%8910%E7%B3%BB%E3%81%BE%E3%81%A7%E3%82%A2%E3%83%83%E3%83%97%E3%83%87%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B/</link><pubDate>Mon, 16 Apr 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/gitlab%E3%82%928%E7%B3%BB%E3%81%8B%E3%82%8910%E7%B3%BB%E3%81%BE%E3%81%A7%E3%82%A2%E3%83%83%E3%83%97%E3%83%87%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B/</guid><description>
はじめに 手元にsameersbn氏作成のGitlabの環境が2つあって双方ともアップデートするの忘れてたので最新版まであげる
現在の最新リリースが10.6.4なのでここまであげる
ダウンタイムはある程度生まれるけど1秒落ちたら殺される環境でもないので許容する
環境 以下2環境が動いてる
8.17.4 9.2.7 バックアップ 定時バックアップしてたら不要ですが片方別の方法でバックアップしてたので手動でバックアップ取る
この段階で一応Gitlabを落とした方が多分良いけど落とさなくてもできました（ドキュメントにも記述あるけど多分落とした方が安全です
1$ docker-compose down gitlab 2$ docker-compose run --rm gitlab app:rake gitlab:backup:create アップデート image書き換えたら勝手にやってくれます　楽ですね
一応以下を確認してバージョン間の問題があるか事前に調べます
https://github.com/sameersbn/docker-gitlab#upgrading
今回のバージョンは問題なさそうなので最新までそのままあげます
ダメな場合は間のバージョンに一度上げてから最新まであげれば大丈夫です
docker-compose.ymlを以下のように書き換えます
1- image: sameersbn/gitlab:8.17.4 2+ image: sameersbn/gitlab:10.6.4 3$ docker-compose up -d 4docker-compose logs -f gitlab 5gitlab_1 | Migrating database... 6gitlab_1 | Missing Rails.application.secrets.jws_private_key for production environment. The secret will be generated and stored in config/secrets.yml. 7gitlab_1 | Recompiling assets (relative_url in use), this could take a while.</description></item><item><title>自前運用のGitlabでパスワード認証ができない</title><link>https://blog.sky-net.pw/post/%E8%87%AA%E5%89%8D%E9%81%8B%E7%94%A8%E3%81%AEgitlab%E3%81%A7%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E8%AA%8D%E8%A8%BC%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84/</link><pubDate>Sat, 14 Apr 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/%E8%87%AA%E5%89%8D%E9%81%8B%E7%94%A8%E3%81%AEgitlab%E3%81%A7%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E8%AA%8D%E8%A8%BC%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84/</guid><description>
表題の通りですがcloneとかする時にhttpsでユーザー認証しようとすると
1remote: HTTP Basic: Access denied と怒られてしまう
構成はNginx -&amp;gt; Docker Gitlabって感じでhttpsでリバースプロキシしてる環境
nginxのconfで
1proxy_set_header X-Scheme $scheme; してないといけない
何故か抜けてて認証通らなくて唸ってた
追記　2018年4月17日
余談ですがこのような構成下でアクセストークン等を利用した認証をしようとすると通らなくてかなり悩んでいたんですがドキュメントの「Using HTTPS with a load balancer」の最後に
In case GitLab responds to any kind of POST request (login, OAUTH, changing settings etc.) with a 422 HTTP Error, consider adding this to your reverse proxy configuration:
proxy_set_header X-Forwarded-Ssl on; (nginx format)
とあって追加でこのヘッダをつける必要がありました
以下を追記しておきます
1proxy_set_header X-Forwarded-SSL on;</description></item><item><title>jupyterhubあれこれ</title><link>https://blog.sky-net.pw/post/jupyterhub%E3%81%82%E3%82%8C%E3%81%93%E3%82%8C/</link><pubDate>Wed, 11 Apr 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/jupyterhub%E3%81%82%E3%82%8C%E3%81%93%E3%82%8C/</guid><description>
はじめに jupyterをLDAP認証と組み合わせて複数人で使えるようにしたいなと前から思ってたのをテストしたのでメモ
jupyterを複数人で利用するにはjupyterhubを利用すれば良いらしい
ただjupyterhubはjupyter notebookを複数人で利用できるようにするものでjupyterlabを複数人で利用するにはjupyterlab hubを利用しないといけないらしい
正直ドキュメント読んでも？？？状態になってしまったのでそれぞれ環境を作る
以下の2つの組み合わせでテストしました
jupyter notebook + jupyterhub （+ ldapauthenticator） jupyter lab + jupyterhub （+ ldapauthenticator） 環境はUbuntu16.04です
Docker上でイメージ作った際のコマンドを普通の環境用の書き直してるので素直に動かないかもしれないのでその時はrootで作業して下さい…
jupyterhub 環境構築 必要なパッケージをそれぞれ揃えます．
1$ sudo apt-get install -y curl python3 npm nodejs-legacy 2$ curl -kL https://bootstrap.pypa.io/get-pip.py | sudo python3 3$ sudo npm install -g configurable-http-proxy pipでjupyter notebookとhubをインストールします
1$ sudo pip3 install jupyterhub 2$ sudo pip3 install --upgrade notebook デフォルトの認証ではシステムにいるユーザーが利用されます
説明用にデモユーザーを作ります
1$ sudo useradd testuser 2$ sudo passwd testuser 3Enter new UNIX password:[適当に入力] 4Retype new UNIX password:[適当に入力] 5$ sudo mkdir /home/testuser 6$ sudo chown testuser /home/testuser 実行 ここまで来たら実行します</description></item><item><title>jupyterがNFS上で動作しない</title><link>https://blog.sky-net.pw/post/jupyter%E3%81%8Cnfs%E4%B8%8A%E3%81%A7%E5%8B%95%E4%BD%9C%E3%81%97%E3%81%AA%E3%81%84/</link><pubDate>Wed, 11 Apr 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/jupyter%E3%81%8Cnfs%E4%B8%8A%E3%81%A7%E5%8B%95%E4%BD%9C%E3%81%97%E3%81%AA%E3%81%84/</guid><description>
はじめに 一つ前の記事でjupyterlabを複数人で使える環境を作ったわけですがいざ本番環境と同等の環境でテストしたら動きませんでした．
開発環境と違うのはホームディレクトリをNFSマウントしているかどうかだったのでその辺を調べたらjupyterやipythonがデータの管理にsqliteを使っていることが影響しているそうです．
sqliteはNFS上では利用できないためうんともすんとも言わない状況になるとのこと．
追記　2018年5月4日
最近この辺の課題にリトライして気づいたのですがNFSのマウント時のバージョンが3以下だと発生するようです
バージョン4でテストしたところ以下の設定はなくとも動作することを確認しました
追記　終わり
症状 ちなみに実行するとセルが実行中の状態
[*] print(&amp;quot;hoge&amp;quot;)
の状態で止まって5分くらい待たされます
5分くらい待つとログに
1[IPKernelApp] ERROR | Failed to open SQLite history /home/sky/.ipython/profile_default/history.sqlite (database is locked). 2[IPKernelApp] ERROR | History file was moved to /home/sky/.ipython/profile_default/history-corrupt.sqlite and a new file created. と表示され記事冒頭の理由が発覚します．
対策 jupyterで生成されるファイルとipythonで生成されるファイルをそれぞれNFSボリュームの外に生成するようにすれば解決します
前者のファイルはjupyte_notebook_config.pyに以下の設定を作ることでメモリ上に作成して誤魔化します
jupyter ファイルパス書けば良いので適当にどっか指定した方が多分良いです
システム全体に適用したいので/etcに置いて全ユーザーに適用させます
1$ sudo cat &amp;lt;&amp;lt; EOS &amp;gt; /etc/jupyter/jupyter_notebook_config.py 2c.HistoryManager.hist_file = &amp;#39;:memory:&amp;#39; 3c.NotebookNotary.db_file = &amp;#39;:memory:&amp;#39; 4EOS ipython 後者は環境変数IPYTHONDIRが定義されていない時にホームディレクトリにファイルを作成するのでこれを指定して解決します．
1$ sudo echo &amp;#34;IPYTHONDIR=/tmp/jupyter/\${USER}&amp;#34; &amp;gt;&amp;gt; /etc/environment 2$ sudo mkdir /tmp/jupyter 3$ sudo chmod 777 /tmp/jupyter とかしておきます</description></item><item><title>pyvenvで環境が作れない</title><link>https://blog.sky-net.pw/post/pyvenv%E3%81%A7%E7%92%B0%E5%A2%83%E3%81%8C%E4%BD%9C%E3%82%8C%E3%81%AA%E3%81%84/</link><pubDate>Wed, 11 Apr 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/pyvenv%E3%81%A7%E7%92%B0%E5%A2%83%E3%81%8C%E4%BD%9C%E3%82%8C%E3%81%AA%E3%81%84/</guid><description>
はじめに Ubuntu16.04 Python3.5環境下での出来事
新しく作った環境でいつも通り環境を作ろうとすると
1$ python3 -m venv . 2The virtual environment was not created successfully because ensurepip is not 3available. On Debian/Ubuntu systems, you need to install the python3-venv 4package using the following command. 56apt-get install python3-venv 78You may need to use sudo with that command. After installing the python3-venv 9package, recreate your virtual environment. 1011Failing command: [&amp;#39;/home/sky/bin/python3&amp;#39;, &amp;#39;-Im&amp;#39;, &amp;#39;ensurepip&amp;#39;, &amp;#39;--upgrade&amp;#39;, &amp;#39;--default-pip&amp;#39;] 怒られる
対処 ここまではいつも通りなのでパッケージを入れる
1$ sudo apt-get install python3-venv これで問題なく生成できるはずですが今回はダメでした</description></item><item><title>Seleniumあれこれ</title><link>https://blog.sky-net.pw/post/selenium%E3%81%82%E3%82%8C%E3%81%93%E3%82%8C/</link><pubDate>Wed, 11 Apr 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/selenium%E3%81%82%E3%82%8C%E3%81%93%E3%82%8C/</guid><description>
はじめに Seleniumでちょっとあれこれした時のメモ
インストール 各種ドライバは環境に合わせて落とす
1$ pip install selenium 2$ wget https://chromedriver.storage.googleapis.com/2.37/chromedriver_win32.zip 3$ unzip chromedriver_win32.zip 今回の要件 スクロールに合わせてコンテンツが読み込まれていくタイプのページで何が読み込まれていったのか知りたい
自動でスクロールさせる SeleniumでJSを実行させることができるのでJSを流し込んでスクロールさせます
1from selenium import webdriver 23driver = webdriver.Chrome() 4driver.get(&amp;#34;http://example.com&amp;#34;) 5cmd = &amp;#34;document.querySelector(\&amp;#34;.example_class\&amp;#34;).scrollTo(0, 100);&amp;#34;) 6driver.execute_script(cmd) コンテンツの高さを取得する 同じくjsを実行して取得します
returnすると値をPython側でもらうことができます
1from selenium import webdriver 23driver = webdriver.Chrome() 4driver.get(&amp;#34;http://example.com&amp;#34;) 5cmd = &amp;#34;return document.querySelector(\&amp;#34;.example_class\&amp;#34;).scrollHeight;&amp;#34;) 6height = driver.execute_script(cmd) バックグラウンドでアクセスしたページを調べる SeleniumはChromeのみPerformanceへのアクセスができるみたいなのでこれを使います
いろいろデータが取れるので各自確認していただきたいですがコンテンツの取得が完了した際に「Network.responseReceived」というmethodが呼ばれるみたいなのでこれを捕まえます
1from selenium import webdriver 2from selenium.webdriver.common.desired_capabilities import DesiredCapabilities 34caps = DesiredCapabilities.CHROME 5caps[&amp;#34;loggingPrefs&amp;#34;] = {&amp;#34;performance&amp;#34;: &amp;#34;ALL&amp;#34;} 6driver = webdriver.Chrome(desired_capabilities=caps) 78driver.</description></item><item><title>nvidia-dockerで特定のバージョンが動作しない</title><link>https://blog.sky-net.pw/post/nvidia-docker%E3%81%A7%E7%89%B9%E5%AE%9A%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%81%8C%E5%8B%95%E4%BD%9C%E3%81%97%E3%81%AA%E3%81%84/</link><pubDate>Sun, 08 Apr 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/nvidia-docker%E3%81%A7%E7%89%B9%E5%AE%9A%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%81%8C%E5%8B%95%E4%BD%9C%E3%81%97%E3%81%AA%E3%81%84/</guid><description>
Nvidia-docker2で特定のバージョン以降が動作しない
例えばCUDA9.0のイメージは
1$ docker run --runtime=nvidia --rm nvidia/cuda:9.0-devel-ubuntu16.04 nvidia-smi 2Sun Apr 8 03:27:41 2018 3+-----------------------------------------------------------------------------+ 4| NVIDIA-SMI 384.111 Driver Version: 384.111 | 5|-------------------------------+----------------------+----------------------+ 6| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | 7| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | 8|===============================+======================+======================| 9| 0 GeForce GTX 980 Ti Off | 00000000:01:00.0 On | N/A | 10| 0% 36C P8 14W / 250W | 32MiB / 6075MiB | 1% Default | 11+-------------------------------+----------------------+----------------------+ 12| 1 GeForce GTX 980 Ti Off | 00000000:02:00.</description></item><item><title>cygwinにjupyterlabを入れる</title><link>https://blog.sky-net.pw/post/cygwin%E3%81%ABjupyterlab%E3%82%92%E5%85%A5%E3%82%8C%E3%82%8B/</link><pubDate>Mon, 02 Apr 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/cygwin%E3%81%ABjupyterlab%E3%82%92%E5%85%A5%E3%82%8C%E3%82%8B/</guid><description>
表題の通りです
詰まったのでメモです
素直に入れるとpyzmqのインストールでコケます
1$ pip install jupyterlab 2bundled/zeromq/src/signaler.cpp:62:25: 致命的エラー: sys/eventfd.h: No such file or directory 3#include &amp;lt;sys/eventfd.h&amp;gt; 4^ 5コンパイルを停止しました。 6error: command &amp;#39;gcc&amp;#39; failed with exit status 1 なのでソースから入れます
1$ wget https://github.com/zeromq/libzmq/releases/download/v4.2.1/zeromq-4.2.1.tar.gz 2$ tar -zxvf zeromq-4.2.1.tar.gz 3$ cd zeromq-4.2.1 4$ ./configure 5$ make 6$ make install ここまで入れたら再度入れ直します
1$ pip install jupyterlab 入ってので終わりだけど一応動作確認
1$ jupyter lab --no-browser 2[I 09:13:01.480 LabApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).</description></item><item><title>apt updateが0% Workingで止まる</title><link>https://blog.sky-net.pw/post/apt-update%E3%81%8C0-working%E3%81%A7%E6%AD%A2%E3%81%BE%E3%82%8B/</link><pubDate>Fri, 30 Mar 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/apt-update%E3%81%8C0-working%E3%81%A7%E6%AD%A2%E3%81%BE%E3%82%8B/</guid><description>
はじめに 表題の通りなんですが新規インストールしたマシンにNvidia-Dockerをインストールしているときにハマった
結論としてはapt-transport-httpsが入っていなかったのが原因
最初ansibleのテストしてたのでてっきり最初ansibleでなにか間違えてるのかと思ってた
TL;DR 1$ sudo apt install apt-transport-https しとこうね
症状 apt updateすると以下の状態で止まる
1$ sudo apt update 2Hit:1 http://jp.archive.ubuntu.com/ubuntu xenial InRelease 3Get:2 http://jp.archive.ubuntu.com/ubuntu xenial-updates InRelease [102 kB] 4Get:3 http://jp.archive.ubuntu.com/ubuntu xenial-backports InRelease [102 kB] 50%[Working] で永遠に処理してる
対策 apt cleanしてみる 効果なし curlで試しにリソース持ってきてみる できる 再起動 効果なし 次に読まれそうなnvidia-dockerのレポジトリをcurlしてみる 302が帰ってくる
ん？
ってところでapt-transport-httpsないじゃん…って気づいたという話 あとはこの辺のIssueとかですね…
https://github.com/NVIDIA/nvidia-docker/issues/642
いつも先にDocker入れてたので意識せずに使ってたので良くなかったですね</description></item><item><title>k8sでingress-nginxを設定する</title><link>https://blog.sky-net.pw/post/k8s%E3%81%A7ingress-nginx%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B/</link><pubDate>Thu, 29 Mar 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/k8s%E3%81%A7ingress-nginx%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B/</guid><description>
はじめに オンプレk8sでingress-nginxを設定する記事があんまり見つからないので苦労したのでメモ
環境 Master Clusterともに同じ環境です
説明の都合上
Masterは192.168.1.10
Workerは192.168.1.11
で説明します
1$ cat /etc/lsb-release 2DISTRIB_ID=Ubuntu 3DISTRIB_RELEASE=16.04 4DISTRIB_CODENAME=xenial 5DISTRIB_DESCRIPTION=&amp;#34;Ubuntu 16.04.3 LTS&amp;#34; 6$ kubeadm version 7kubeadm version: &amp;amp;version.Info{Major:&amp;#34;1&amp;#34;, Minor:&amp;#34;9&amp;#34;, GitVersion:&amp;#34;v1.9.3&amp;#34;, GitCommit:&amp;#34;d2835416544f298c919e2ead3be3d0864b52323b&amp;#34;, GitTreeState:&amp;#34;clean&amp;#34;, BuildDate:&amp;#34;2018-02-07T11:55:20Z&amp;#34;, GoVersion:&amp;#34;go1.9.2&amp;#34;, Compiler:&amp;#34;gc&amp;#34;, Platform:&amp;#34;linux/amd64&amp;#34;} 8kubectl version 9Client Version: version.Info{Major:&amp;#34;1&amp;#34;, Minor:&amp;#34;9&amp;#34;, GitVersion:&amp;#34;v1.9.3&amp;#34;, GitCommit:&amp;#34;d2835416544f298c919e2ead3be3d0864b52323b&amp;#34;, GitTreeState:&amp;#34;clean&amp;#34;, BuildDate:&amp;#34;2018-02-07T12:22:21Z&amp;#34;, GoVersion:&amp;#34;go1.9.2&amp;#34;, Compiler:&amp;#34;gc&amp;#34;, Platform:&amp;#34;linux/amd64&amp;#34;} 10Server Version: version.Info{Major:&amp;#34;1&amp;#34;, Minor:&amp;#34;9&amp;#34;, GitVersion:&amp;#34;v1.9.3&amp;#34;, GitCommit:&amp;#34;d2835416544f298c919e2ead3be3d0864b52323b&amp;#34;, GitTreeState:&amp;#34;clean&amp;#34;, BuildDate:&amp;#34;2018-02-07T11:55:20Z&amp;#34;, GoVersion:&amp;#34;go1.9.2&amp;#34;, Compiler:&amp;#34;gc&amp;#34;, Platform:&amp;#34;linux/amd64&amp;#34;} インストール 基本的にymlをドキュメント通り入れるだけです
1$ curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/namespace.yaml \ 2| kubectl apply -f - 3$ curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/default-backend.yaml \ 4| kubectl apply -f - 5$ curl https://raw.</description></item><item><title>Pythonで外部プロセスを一時停止する</title><link>https://blog.sky-net.pw/post/python%E3%81%A7%E5%A4%96%E9%83%A8%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%82%92%E4%B8%80%E6%99%82%E5%81%9C%E6%AD%A2%E3%81%99%E3%82%8B/</link><pubDate>Sat, 24 Mar 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/python%E3%81%A7%E5%A4%96%E9%83%A8%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%82%92%E4%B8%80%E6%99%82%E5%81%9C%E6%AD%A2%E3%81%99%E3%82%8B/</guid><description>
Pythonで外部プロセスを一時停止する要件できたのでメモ
メモリ解析ツールとかでお世話になるのでスクリプトから使えたら便利かなって…
ダメだったけどwatchdogでファイル監視しつつ変更検知したら消される前に横取りするスクリプトで使えないかなーと思って書いてた
環境はWindows10 Python3です
使うのはpsutilで以下のレポジトリ参照です
https://github.com/giampaolo/psutil
pipで入るので入れます
1$ pip install psutil READMEに全部書いてあるので読んだ方が早いですが停止と再開のサンプルはこんな感じ
プロセスIDが1234で3秒間停止させてみる
1import time 23import psutil 45pid = 1234 6p = psutil.Process(pid) 7p.suspend() 8time.sleep(3) 9p.resume() これだと不便なので特定のプロセスを3秒だけ止める（ペイント）
1import time 23import psutil 45pid = None 6for proc in psutil.process_iter(attrs=[&amp;#34;pid&amp;#34;, &amp;#34;name&amp;#34;]): 7if proc.info[&amp;#34;name&amp;#34;] == &amp;#34;mspaint.exe&amp;#34;: 8pid = proc.info[&amp;#34;pid&amp;#34;] 910if not pid: 11exit(1) 1213p = psutil.Process(pid) 14p.suspend() 15time.sleep(3) 16p.resume()</description></item><item><title>githubでセキュリテイ警告が出るのを治す</title><link>https://blog.sky-net.pw/post/github%E3%81%A7%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A4%E8%AD%A6%E5%91%8A%E3%81%8C%E5%87%BA%E3%82%8B%E3%81%AE%E3%82%92%E6%B2%BB%E3%81%99/</link><pubDate>Sun, 18 Mar 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/github%E3%81%A7%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A4%E8%AD%A6%E5%91%8A%E3%81%8C%E5%87%BA%E3%82%8B%E3%81%AE%E3%82%92%E6%B2%BB%E3%81%99/</guid><description>
少し前に作ったFlaskとReactで作ったWebアプリのテンプレートで依存してるライブラリにセキュリテイの脆弱性があるってgithubから通知が来たので直した
npm lsすると依存関係が見えるのでそこから探す
なにか良い探し方あるのかもしれないけど調べるより前に前行の表示でいけばいけるか…と思って実行してしまったのでもっと良い調べ方があるのかもしれない
1$ npm ls --depth=2 | grep ssri -B 15 2| | +-- prop-types@15.6.0 deduped 3| | `-- warning@3.0.0 deduped 4| `-- warning@3.0.0 deduped 5+-- uglifyjs-webpack-plugin@1.1.8 6| +-- cacache@10.0.2 7| | +-- bluebird@3.5.1 8| | +-- chownr@1.0.1 9| | +-- glob@7.1.2 10| | +-- graceful-fs@4.1.11 11| | +-- lru-cache@4.1.1 12| | +-- mississippi@1.3.1 13| | +-- mkdirp@0.5.1 deduped 14| | +-- move-concurrently@1.0.1 15| | +-- promise-inflight@1.0.1 16| | +-- rimraf@2.</description></item><item><title>PythonでRAWデータをjpgに変換する</title><link>https://blog.sky-net.pw/post/python%E3%81%A7raw%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92jpg%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B/</link><pubDate>Sat, 17 Mar 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/python%E3%81%A7raw%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92jpg%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B/</guid><description>
はじめに 記事にしたか忘れましたが半年程前にSonyのα6000を購入しました．
撮影してるとRAWで書き出したファイルが積み重なっていくわけですがどうせなら一括処理とかできないかなと思ってrawpyを使って画像変換を試してみました．
環境 Windows10 Python3 インストール 必要なライブラリを入れます．
1$ pip install opencv-python numpy rawpy imageio lensfunpy 処理 画像の読み込み-&amp;gt;書き出し 1filename = &amp;#34;DSC00209.ARW&amp;#34; 2raw = rawpy.imread(filename) 3# raw -&amp;gt; numpy array 4rgb = raw.postprocess( 5bright=1.3, 6use_camera_wb=True, 7) 8imageio.imsave(&amp;#34;output.jpg&amp;#34;, rgb) レンズの歪みの補正 このままだと放射状歪み？をしているので補正します．
補正は使用しているレンズごとに変わってくるので決め打ちかEXIFから取得した値で適宜変える必要があります．
lensfunpyというライブラリが良い感じにしてくれるのでこれを使います．
自分のカメラだと以下のようになります．
1# レンズ補正用設定読み込み 2db = lensfunpy.Database() 3cam = db.find_cameras(&amp;#34;SONY&amp;#34;, &amp;#34;ILCE-6000&amp;#34;)[0] 4lens = db.find_lenses(cam, &amp;#34;SONY&amp;#34;, &amp;#34;E 16-50mm f/3.5-5.6 OSS&amp;#34;)[0] 探し方ですが
1cam = db.find_cameras(&amp;#34;SONY&amp;#34;, None) 2for c in cam: 3print(c) とかすると良い感じに見えるので参考にしつつ探します．</description></item><item><title>dnsdistを試してみた</title><link>https://blog.sky-net.pw/post/dnsdist%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F/</link><pubDate>Sun, 11 Mar 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/dnsdist%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F/</guid><description>
はじめに DNSロードバランサのdnsdistを試してみました．
というのもPowerDNSを試すのがメインだったのですがBINDのようにアクセス元に応じた振り分けが欲しくて困ったときに見つけた．
こちらのスライドで存在を知りました．ありがとうございます．
dnsdistとNSDとUnboundでBINDのふりをさせる話
https://dnsops.jp/bof/20161201/bind2other.pdf
というわけで使ってみます．
環境 OS
Ubuntu16.04 内部ネットワーク
192.168.1.0/24 インストール Ubuntu公式レポジトリから提供されているdnsdistはver1.0.0α版と古いのでdnsdistの公式レポジトリを登録して使います．
有名どころなディストリビューションは提供されています．
https://repo.powerdns.com/
今回は「Ubuntu16.04 dnsdist - version 1.2.X」に従ってレポジトリを追加します．
1$ sudo cat &amp;lt; EOS &amp;gt;&amp;gt; /etc/apt/preferences.d/dnsdist 2deb [arch=amd64] http://repo.powerdns.com/ubuntu xenial-dnsdist-12 main 3EOS 4$ sudo cat &amp;lt; EOS &amp;gt;&amp;gt; /etc/apt/sources.list.d/pdns.list 5Package: dnsdist* 6Pin: origin repo.powerdns.com 7Pin-Priority: 600 8EOS 鍵を登録してインストールします．
1$ curl https://repo.powerdns.com/FD380FBB-pub.asc | sudo apt-key add - 2$ sudo apt-get update 3$ sudo apt-get install dnsdist 4インストールすると自動でサービスが上がるみたいです． 56$ sudo service dnsdist status 7● dnsdist.</description></item><item><title>bash historyを無効にする</title><link>https://blog.sky-net.pw/post/bash_history%E3%82%92%E7%84%A1%E5%8A%B9%E3%81%AB%E3%81%99%E3%82%8B/</link><pubDate>Fri, 02 Mar 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/bash_history%E3%82%92%E7%84%A1%E5%8A%B9%E3%81%AB%E3%81%99%E3%82%8B/</guid><description>
Ubuntuでbash historyを無効にしたい時の話
一部のコマンドだけとかはわりと記事出て来るけど全部は需要ないのかすぐ見つからなかったのでメモ．
setコマンドを使ってhistoryを無効にできる．
のでこうなる．
1$ set +o history ただこれだと入力したターミナルでのみ無効になるので次回以降も記録されないようにする．
1$ echo &amp;#39;set +o history&amp;#39; &amp;gt;&amp;gt; ~/.bashrc 最後に既に記録されているhistoryを削除しておしまい
1$ rm ~/.bash_history ログアウトしてコマンド打って再ログインしてみて記録されてないかチェックして問題なければおっけー</description></item><item><title>コンテナが起動した瞬間に死ぬ</title><link>https://blog.sky-net.pw/post/%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%81%8C%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%9F%E7%9E%AC%E9%96%93%E3%81%AB%E6%AD%BB%E3%81%AC/</link><pubDate>Mon, 26 Feb 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%81%8C%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%9F%E7%9E%AC%E9%96%93%E3%81%AB%E6%AD%BB%E3%81%AC/</guid><description>
前も同じことして悩んだので戒めも含めてメモ．
コンテナを立ち上げた瞬間に落ちて無限にリスタート地獄に陥った．
ログ見ると
1$ docker-compose ps 2sample | standard_init_linux.go:178: exec user process caused &amp;#34;exec format error&amp;#34; 3sample | standard_init_linux.go:178: exec user process caused &amp;#34;exec format error&amp;#34; 4sample | standard_init_linux.go:178: exec user process caused &amp;#34;exec format error&amp;#34; 5sample | standard_init_linux.go:178: exec user process caused &amp;#34;exec format error&amp;#34; 6... なエラーが出てた．
entrypoint用に書いてるシェルスクリプトに問題があった
1FROM ubuntu 23～中略～ 45COPY entrypoint.sh / 6ENTRYPOINT [&amp;#34;/entrypoint.sh&amp;#34;] 7CMD [&amp;#34;something&amp;#34;] みたいなDockerfileを書いてた．
entrypoint.shは軽く前処理をしたら引数にもらったCMDを実行するだけのシンプルなシェルスクリプト
1if [ ${MASTER} = &amp;#34;yes&amp;#34; ]; then 2cat &amp;lt;&amp;lt; EOS &amp;gt; /etc/powerdns/pdns.</description></item><item><title>YoutubeAPIで特定チャンネルが投稿した動画を調べる</title><link>https://blog.sky-net.pw/post/youtubeapi%E3%81%A7%E7%89%B9%E5%AE%9A%E3%83%81%E3%83%A3%E3%83%B3%E3%83%8D%E3%83%AB%E3%81%8C%E6%8A%95%E7%A8%BF%E3%81%97%E3%81%9F%E5%8B%95%E7%94%BB%E3%82%92%E8%AA%BF%E3%81%B9%E3%82%8B/</link><pubDate>Sat, 24 Feb 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/youtubeapi%E3%81%A7%E7%89%B9%E5%AE%9A%E3%83%81%E3%83%A3%E3%83%B3%E3%83%8D%E3%83%AB%E3%81%8C%E6%8A%95%E7%A8%BF%E3%81%97%E3%81%9F%E5%8B%95%E7%94%BB%E3%82%92%E8%AA%BF%E3%81%B9%E3%82%8B/</guid><description>
はじめに YoutubeAPIで特定チャンネルの投稿一覧が取得したいけどどうすれば良い？って質問が来たので試した．
ついでに特定期間内に投稿された動画の取得方法も試してみた．
ソースコードはgistに置いておきます．
動かし方は前回の記事とか見てください．
https://gist.github.com/skyblue3350/005b65c1d2f156d872188842753c677c
叩くAPI 基本的にSearch: listを使えば出来ます．
https://developers.google.com/youtube/v3/docs/search/list?hl=ja
今回は適当なvtuberのチャンネルで試します．
チャンネルの投稿動画の取得 channelIdパラメータを使って目的のチャンネルの動画だけ検索して
orderパラメータで日付順にすることで投稿日順にソートします．
maxResultsパラメータで50件まで一度に取れますがそれ以上ある場合は前回と同様にpageTokenを回して2ページ目を取得します．
特定期間の投稿の取得 期間の指定はpublishedAfterとpublishedBeforeパラメータから行います．
publishedAfter～publishedBeforeです．
リクエストはRFC 3339形式で送ります．
Pythonで綺麗に文字列化する方法がわからなかったのでdt.isoformat()して末尾にZを足して誤魔化しました．
あとはチャンネル投稿動画の取得と同様のパラメータを使えば良い感じに取得出来ます．</description></item><item><title>Raspberry PiでUSBヘッドセットを使う</title><link>https://blog.sky-net.pw/post/raspberry-pi%E3%81%A7usb%E3%83%98%E3%83%83%E3%83%89%E3%82%BB%E3%83%83%E3%83%88%E3%82%92%E4%BD%BF%E3%81%86/</link><pubDate>Sat, 10 Feb 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/raspberry-pi%E3%81%A7usb%E3%83%98%E3%83%83%E3%83%89%E3%82%BB%E3%83%83%E3%83%88%E3%82%92%E4%BD%BF%E3%81%86/</guid><description>
はじめに Raspberry PiでUSBヘッドセットを使いたいって相談を受けて試してみたのでメモ．
Raspberry Pi2で検証しましたが基本的にはどれでも同じはず．
Raspberry Pi2はクリーンインストールしたキレイな状態です．
環境 Raspberry Pi 2 1pi@raspberrypi:~ $ cat /etc/debian_version 29.3 3pi@raspberrypi:~ $ lsb_release -a ※lsb-releaseパッケージ入れました 4No LSB modules are available. 5Distributor ID: Raspbian 6Description: Raspbian GNU/Linux 9.3 (stretch) 7Release: 9.3 8Codename: stretch ヘッドセット（バッファロー BUFFALO BSHSUH12BK） 環境構築 パッケージのアップデート いつも通りアプデします．
1pi@raspberrypi:~ $ sudo apt-get update -y 2pi@raspberrypi:~ $ sudo apt-get upgrade -y スピーカーで音を聞くまで Raspberry Piを起動した状態でUSB接続します．
認識したか確認します．大体末尾の番号のやつがそうです．
1pi@raspberrypi:~ $ lsusb 2Bus 001 Device 005: ID 046d:c52b Logitech, Inc.</description></item><item><title>自宅ネットワークをv6プラス化した</title><link>https://blog.sky-net.pw/post/%E8%87%AA%E5%AE%85%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%92v6%E3%83%97%E3%83%A9%E3%82%B9%E5%8C%96%E3%81%97%E3%81%9F/</link><pubDate>Mon, 05 Feb 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/%E8%87%AA%E5%AE%85%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%92v6%E3%83%97%E3%83%A9%E3%82%B9%E5%8C%96%E3%81%97%E3%81%9F/</guid><description>
はじめに 自宅の回線が去年（2017年10月）くらいから回線速度が徐々に落ちていき11月前にはサイト閲覧すら違和感感じるくらいには速度落ち込んで来て気になってきました．
我が家は@niftyですが11月中旬にプロバイダの設備増強工事があり改善を期待したもののそこまで効果は実感できずプロバイダの乗り換えを含め検討しはじめました．
その辺含めて調べているとv6プラスを使いIPv6 IPoE + IPv4 over IPv6するとPPPoEの混雑を避けられて結果的に速度が向上するとの記事を見つけたので試してみたのでそのメモ．
メモというより仕組みとか申し込み方法については先駆者様方が書いてくださってるので疑問点とかのまとめです．
利点とか欠点については以下の記事が参考になりました．ありがとうございます．
ダウンロードのみ遅いフレッツ速度 問題をIPv6(IPoE)+DS-Liteで解決してみた 対応してるか調べる @niftyはv6プラスというサービス名称で対応していました．
※v6オプションはv6のみIPoEで通信しv4はPPPoEで通信するためあまり解決になりません（v6対応してるところはマシになりますけども
ひかり電話を利用しているので我が家にはONU/ルーターとしてPR-400KIがあります．
HGWの対応状況は以下で確認できます．
我が家は対象だったので追加でルーター等の購入は不要でした．（買っちゃいましたけど）
フレッツ・v6オプション 申し込む 申し込みは以下のページから行えます．
6プラスのご案内 ： @nifty v6オプションを申し込んでいる場合は一度解約しv6プラスの申し込みを別途行う必要があります．
あとは待ってれば勝手に設定されます．
SSHでリモートで作業してたらアクセスもとがNGNのネットワークからになったので通知のメールが来る前に気付きましたけど申し込んで1日くらいで切り替わってました．
勝手にリモートで設定されるらしいです．なにそれこわい．
確認する 回線が正しくIPoE + IPv4 over IPv6になっているかは以下のサイトで確認出来ます．
IPv4/IPv6接続判定ページ チェック項目9は構成によってはNGと出るかもしれませんが10がOKなら問題ないです．
あとは雑記です．
疑問点まとめ NTTからルーターを借りてる場合とWN-AX1167GRを使って検証した場合を一応書いておきます．
どうやって有効無効を切り替えるの？ NTTのルーターを借りてる人 PR-400KI（http://ntt.setup）にアクセスしても
接続先設定（IPv4 PPPoE）
しか設定が表示されずIPv6がどっかに行きます．
ついでに接続や切断もできなくなります．
接続設定は配信済事業者ソフトウェア（http://ntt.setup:8888/t/）へアクセスして設定を変えます．
※http://ntt.setup/t/ だとアイコンが出てこなくてリンク先にも飛べなくなてハマります．
飛んだ先にある「【IPv4 ON/OFF設定】」-&amp;gt;「IPv4の一時停止」の「機能停止」にチェックを入れて設定を入れれば元のPPPoEに戻すことが出来ます．
逆にまた有効にしたい場合はチェックを外せば元に戻ります．
それ以外 PPPoEセッションを張れば良いはず…
自宅サーバー等使ってるけどポートとかどうなるの？ v4のIPは共有なのでウェルノウンポートに関しては使えなくなります．
NTTのルーターを借りてる人
一応先程の管理ページに飛ぶと空いてるポートが見えます． それ以外
対応ルーターを使えばそちらのルーターの管理画面からも見れるはずです． 対策 80と443を使う関係で使えないのは困るのでサーバーだけPPPoEセッションを張ります．</description></item><item><title>DockerでXWindowを使う</title><link>https://blog.sky-net.pw/post/docker%E3%81%A7xwindow%E3%82%92%E4%BD%BF%E3%81%86/</link><pubDate>Thu, 18 Jan 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/docker%E3%81%A7xwindow%E3%82%92%E4%BD%BF%E3%81%86/</guid><description>
はじめに UbuntuでDockerで建てたコンテナからXWindowを飛ばしてみたくなったのでメモ．
SSHは使わずにTCPでXWindowを飛ばします．
環境 今回は同一のマシン上で行います．
1$ cat /etc/lsb-release 2DISTRIB_ID=Ubuntu 3DISTRIB_RELEASE=16.04 4DISTRIB_CODENAME=xenial 5DISTRIB_DESCRIPTION=&amp;#34;Ubuntu 16.04 LTS&amp;#34; 6$ docker -v 7Docker version 17.03.1-ce, build c6d412e 8$ docker-compose -v 9docker-compose version 1.14.0-rc1, build c18a7ad ホスト側 設定の変更 Ubuntuはlightdmが上がってる想定で書いてますが違う場合はそれぞれの環境に合わせて下さい．
デフォルトではTCPでListenするようになってないので設定を加えます．
ファイルがない場合は作成し，ある場合は追記します．
1$ sudo vi /etc/lightdm/lightdm.conf 2[SeatDefaults] 3xserver-allow-tcp=true システムを再起動して変更を適用します．
正しく設定出来ている場合は6000番のポートが開放されているはずです．
1$ netstat -anp | grep 6000 2tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN - 3tcp6 0 0 :::6000 :::* LISTEN - 最後にこのXWindowサーバーにアクセス可能なクライアントの許可を出します．
とりあえず動作確認に無制限にしますが適宜制限を設けた方が良いです．
1$ xhost + クライアント側 ディレクトリ構成 適当に配置します．</description></item><item><title>kubernetesでGPUコンテナを動かす</title><link>https://blog.sky-net.pw/post/kubernetes%E3%81%A7gpu%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%82%92%E5%8B%95%E3%81%8B%E3%81%99/</link><pubDate>Sat, 13 Jan 2018 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/kubernetes%E3%81%A7gpu%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%82%92%E5%8B%95%E3%81%8B%E3%81%99/</guid><description>
はじめに 1.7まではこちらに書いてある方法でしかGPUコンテナが扱えませんでしたが，
k8s-device-pluginを使うことでk8s上でもう少し簡単にGPUコンテナを扱えるようになるみたいなので試してみました．
前提 基本的に前回と同じで物理マシン2台ですがk8sのバージョンだけあげています．
v1.9.1のk8s環境が構築されていることと各pod間とグローバルにつながっていることくらいです．
バージョンアップ自体はドキュメント通りやればあがりますが色々検証しているうちに動かなくなってしまったので一度k8s絡みのパッケージを削除した上でクリーンなk8s環境を作り直しています．
環境 Master 1root@kubernetes:~# cat /etc/lsb-release 2DISTRIB_ID=Ubuntu 3DISTRIB_RELEASE=16.04 4DISTRIB_CODENAME=xenial 5DISTRIB_DESCRIPTION=&amp;#34;Ubuntu 16.04.3 LTS&amp;#34; 6root@kubernetes:~# uname -a 7Linux kubernetes 4.4.0-62-generic #83-Ubuntu SMP Wed Jan 18 14:10:15 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 8root@kubernetes:~# kubectl version 9Client Version: version.Info{Major:&amp;#34;1&amp;#34;, Minor:&amp;#34;9&amp;#34;, GitVersion:&amp;#34;v1.9.1&amp;#34;, GitCommit:&amp;#34;3a1c9449a956b6026f075fa3134ff92f7d55f812&amp;#34;, GitTreeState:&amp;#34;clean&amp;#34;, BuildDate:&amp;#34;2018-01-04T11:52:23Z&amp;#34;, GoVersion:&amp;#34;go1.9.2&amp;#34;, Compiler:&amp;#34;gc&amp;#34;, Platform:&amp;#34;linux/amd64&amp;#34;} 10Server Version: version.Info{Major:&amp;#34;1&amp;#34;, Minor:&amp;#34;9&amp;#34;, GitVersion:&amp;#34;v1.9.1&amp;#34;, GitCommit:&amp;#34;3a1c9449a956b6026f075fa3134ff92f7d55f812&amp;#34;, GitTreeState:&amp;#34;clean&amp;#34;, BuildDate:&amp;#34;2018-01-04T11:40:06Z&amp;#34;, GoVersion:&amp;#34;go1.9.2&amp;#34;, Compiler:&amp;#34;gc&amp;#34;, Platform:&amp;#34;linux/amd64&amp;#34;} 11root@kubernetes:~# kubeadm version 12kubeadm version: &amp;amp;version.Info{Major:&amp;#34;1&amp;#34;, Minor:&amp;#34;9&amp;#34;, GitVersion:&amp;#34;v1.9.1&amp;#34;, GitCommit:&amp;#34;3a1c9449a956b6026f075fa3134ff92f7d55f812&amp;#34;, GitTreeState:&amp;#34;clean&amp;#34;, BuildDate:&amp;#34;2018-01-04T11:40:06Z&amp;#34;, GoVersion:&amp;#34;go1.</description></item><item><title>Win10のVMwareでブリッジ接続が出来ない</title><link>https://blog.sky-net.pw/post/win10%E3%81%AEvmware%E3%81%A7%E3%83%96%E3%83%AA%E3%83%83%E3%82%B8%E6%8E%A5%E7%B6%9A%E3%81%8C%E5%87%BA%E6%9D%A5%E3%81%AA%E3%81%84/</link><pubDate>Sun, 24 Dec 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/win10%E3%81%AEvmware%E3%81%A7%E3%83%96%E3%83%AA%E3%83%83%E3%82%B8%E6%8E%A5%E7%B6%9A%E3%81%8C%E5%87%BA%E6%9D%A5%E3%81%AA%E3%81%84/</guid><description>
はじめに Windows10でVMware Workstation player 12でブリッジ接続しようとしたら上手くいかなかったのでその時の対応メモ
環境 Windows10 Home 64bit VMware Workstation player 12 NICは2つ WiFi 今回はこっちのネットワークにブリッジさせたい LAN VMwareのネットワーク設定 NICの設定 コンパネからネットワークアダプタの設定へ移動して今回ブリッジさせたいNICを選ぶ．
今回はWiFiなのでワイヤレスネットワークを選択しプロパティを開く．
使用する項目内に「VMware Bridge Protocol」があるか確認しある場合はチェックをつける．
逆にない場合はインストール-&amp;gt;サービス-&amp;gt;製造元：VMwareの中にある当該Protocolを追加しチェックをつける．
また，使わないNICに当該Protocolがある場合はチェックを外しておく．
一度再起動しておく．
仮想ネットワークの設定 VMwareの仮想ネットワークはvmnetcfg.exeを使用することで設定出来るらしい．
しかし無償版のVMware Workstationにはこのツールが入っていないので有償版のProのインストーラーをダウンロードする．
それを7-zip等のアーカイバを使い中身を開くと中にCore.cabというキャビネットファイルがあるので更にそれを展開する．
その中に件のexeファイルが入っているのでこれをVMwareをインストールしたディレクトリに配置する．
配置する場所を間違えると「glib-2.0.dllがありません」等のエラーが出て起動出来ない．
起動したら既にあるアダプタの設定を変更若しくは追加する．
既存のものを編集するのは躊躇われたので今回は追加した．
追加して接続方法からブリッジを選択し，先程設定したNICデバイスをブリッジ先として選択する．
再起動せずにここまで来ていると選択可能なデバイスがないとエラーが出るので適宜1つ前の設定を行った上で再起動し設定する．
正しく設定出来たらブリッジ接続したいVMの設定からネットワークアダプタを追加し，ネットワーク接続の種類からカスタムを選び，追加したアダプタを選択する．
これでVM内から利用することが出来るようになるので適宜ネットワークの設定等を行えばブリッジ接続が利用出来る．</description></item><item><title>Azure Computer Vision APIをcurlで試す</title><link>https://blog.sky-net.pw/post/azure-computer-vision-api%E3%82%92curl%E3%81%A7%E8%A9%A6%E3%81%99/</link><pubDate>Mon, 27 Nov 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/azure-computer-vision-api%E3%82%92curl%E3%81%A7%E8%A9%A6%E3%81%99/</guid><description>
はじめに Azure Computer Vision APIをcurlで試してみます．
普通に適当な言語でコードを書いた方が楽なんですがちょっと諸事情あってシェルスクリプト書かないといけなくなったのでメモ．
事前準備 予めコンソールの方でAPIを有効化しておきAPIキーを取得しておきます．
curlで取得してみる 1行で書くとわかりにくいのでシェルスクリプトにしておきます．
スクリプト内のLOCATION変数はAPI有効化の時に選択したロケーションと一致している必要があります．
1IMAGE=&amp;#34;./sample.jpg&amp;#34; 2LOCATION=&amp;#34;southeastasia&amp;#34; 3VISUALFEATURES=&amp;#34;Categories&amp;#34; 4DETAILS=&amp;#34;&amp;#34; 5LANGUAGE=&amp;#34;en&amp;#34; 6APIKEY=&amp;#34;取得したキー&amp;#34; 78curl -s -X POST \ 9&amp;#34;https://${LOCATION}.api.cognitive.microsoft.com/vision/v1.0/analyze?visualFeatures=${VISUALFEATURES}&amp;amp;details=${DETAILS}&amp;amp;language=${LANGUAGE}&amp;#34; \ 10-H &amp;#34;Content-Type: application/octet-stream&amp;#34; \ 11-H &amp;#34;Ocp-Apim-Subscription-Key: ${APIKEY}&amp;#34; \ 12--data-binary &amp;#34;@${IMAGE}&amp;#34; レスポンスはjsonなのでjqコマンドとかでパースすると良い感じです．
カテゴリ名とスコアが欲しかったら
1$ curl ～省略～ | jq -r &amp;#39;.categories[] | &amp;#34;\(.name), \(.score)&amp;#34;&amp;#39; 2abstract_nonphoto, 0.23828125 3abstract_texture, 0.53515625 とかでとれます．
参考記事 Computer Vision cURL Quick Starts</description></item><item><title>Youtube LiveStreaming APIで配信のコメントを取得する</title><link>https://blog.sky-net.pw/post/youtube-livestreaming-api%E3%81%A7%E9%85%8D%E4%BF%A1%E3%81%AE%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B/</link><pubDate>Mon, 27 Nov 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/youtube-livestreaming-api%E3%81%A7%E9%85%8D%E4%BF%A1%E3%81%AE%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B/</guid><description>
はじめに 読み上げをYoutubeの配信中にもやりたいなーと思ってコメントの取得方法調べたら結構面倒なのでメモ
大まかな流れとしては
配信先のURLからライブのIDを取得 -&amp;gt; ライブのIDからチャットのIDを取得 -&amp;gt; チャットIDを使ってチャットの取得
といった感じ
ライブのIDからチャットのIDを取得するAPIにOauth認証が必要だったりで結構面倒
環境 Python3 APIキーを用意する この辺は他のAPIと同じなので他のサイトの方を見たほうがわかりやすいです．
いつも通りGoogle Cloud Platformへ行き新しくプロジェクトを作成し，APIの中から「YouTube Data API v3」を有効にしておく．
その上で認証情報 -&amp;gt; Oauth同意画面と進み必要な項目を埋めておく．（最低限サービス名だけ埋まっていれば良い）
認証情報の画面まで戻り認証情報を作成 -&amp;gt; OauthクライアントIDを選択する．
アプリケーションの種類は「その他」にして進める．名前は適当に決める．
作成するとIDとシークレットが表示されるが後でダウンロードするjsonに入ってるのでOKをクリックして閉じる．
OAuth 2.0 クライアント IDの部分に今回作成したキーがあるはずなのでこれを右端のアイコンからダウンロードしておく．
今回はclient.jsonとしてダウンロードしておく．
ライブラリを用意する httplib2とoauth2clientを使うのでこれらを入れておく．
1$ pip install httplib2 oauth2client 認証する 一度目はお馴染みのOauth認証画面に飛ばされるが一度認証すると不要になるのでその辺込みでこんな感じ
client.jsonがさっき落としてきた認証情報でcredentials.jsonが認証済みの情報．
1import httplib2 2from oauth2client import tools 3from oauth2client import client 4from oauth2client.file import Storage 56credentials_path = &amp;#34;credentials.json&amp;#34; 7if os.path.exists(credentials_path): 8# 認証済み 9store = Storage(credentials_path) 10credentials = store.</description></item><item><title>Azure CLI2.0をインストールして使ってみる</title><link>https://blog.sky-net.pw/post/azure-cli2.0%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%A6%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B/</link><pubDate>Sat, 25 Nov 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/azure-cli2.0%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%A6%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B/</guid><description>
はじめに Azure CLIを使いたい用事が出来たのでcygwinにAzure CLIを入れたのでその時のメモ
一般のディストリビューションならパッケージが提供されてるのでそっちをインストールした方が遥かに楽です
Storageを取得するところまでやります
環境 cygwin
apt-cygが使える前提です 前提パッケージのインストール 1$ apt-cyg install python2-devel libffi-devel openssl-devel CLIのインストール 1$ curl -L https://aka.ms/InstallAzureCli | bash 待ってるとインストールが終わります
1$ az -v 2azure-cli (2.0.21) ログイン 対話式でログインしてみます
表示されたURLにアクセスしてアクセスコード（例ではAB12C34DE）を入力した後に使用するアカウントでログインします．
ブラウザ上で一通り作業が終了するとログイン情報のjsonが表示されます
1$ az login 2To sign in, use a web browser to open the page https://aka.ms/devicelogin and enter the code AB12C34DE to authenticate. 3[ 4{ 5&amp;#34;cloudName&amp;#34;: &amp;#34;AzureCloud&amp;#34;, 6&amp;#34;id&amp;#34;: &amp;#34;xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx&amp;#34;, 7&amp;#34;isDefault&amp;#34;: true, 8&amp;#34;name&amp;#34;: &amp;#34;無料試用版&amp;#34;, 9&amp;#34;state&amp;#34;: &amp;#34;Enabled&amp;#34;, 10&amp;#34;tenantId&amp;#34;: &amp;#34;xxxxxxxx-0000-0000-xxxx-xxxxxxxxxx&amp;#34;, 11&amp;#34;user&amp;#34;: { 12&amp;#34;name&amp;#34;: &amp;#34;example@example.</description></item><item><title>kubernetes 1.8を構築する</title><link>https://blog.sky-net.pw/post/kubernetes-1.8%E3%82%92%E6%A7%8B%E7%AF%89%E3%81%99%E3%82%8B/</link><pubDate>Sun, 12 Nov 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/kubernetes-1.8%E3%82%92%E6%A7%8B%E7%AF%89%E3%81%99%E3%82%8B/</guid><description>
はじめに kubernetes 1.8を構築してみた
swapが有効だと裏でサービスがコケて上手く行かなかったり権限周りでダッシュボードが動かなかったりと詰まりポイントが多かったのでメモ書き程度に残しておく
追記
1.8と1.9.2と1.9.3で同じ方法でセットアップできるのを確認しました．
アップグレードはドキュメント読んでやってください．
ドキュメント 公式を読みます
kubernetes setup Installing kubeadm 環境 Ubuntu 16.04 x 2
2台とも物理マシン Master 1root@kubernetes:~# cat /etc/lsb-release 2DISTRIB_ID=Ubuntu 3DISTRIB_RELEASE=16.04 4DISTRIB_CODENAME=xenial 5DISTRIB_DESCRIPTION=&amp;#34;Ubuntu 16.04.3 LTS&amp;#34; 6root@kubernetes:~# uname -a 7Linux kubernetes 4.4.0-62-generic #83-Ubuntu SMP Wed Jan 18 14:10:15 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux Worker 1root@kubernetes-node:~# cat /etc/lsb-release 2DISTRIB_ID=Ubuntu 3DISTRIB_RELEASE=16.04 4DISTRIB_CODENAME=xenial 5DISTRIB_DESCRIPTION=&amp;#34;Ubuntu 16.04.2 LTS&amp;#34; 6root@kubernetes-node:~# uname -a 7Linux kubernetes-node 4.4.0-92-generic #115-Ubuntu SMP Thu Aug 10 09:04:33 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 環境構築 途中までは一緒</description></item><item><title>Ubuntu16.04でYoloを試す</title><link>https://blog.sky-net.pw/post/ubuntu16.04%E3%81%A7yolo%E3%82%92%E8%A9%A6%E3%81%99/</link><pubDate>Mon, 18 Sep 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/ubuntu16.04%E3%81%A7yolo%E3%82%92%E8%A9%A6%E3%81%99/</guid><description>
はじめに 今更ながらにYoloを試します．
基本的には公式サイトの通りに実行するだけですが少し詰まったのでメモ．
コンソールで結果を見るだけなら公式サイト通りやって終わりです．
環境 Ubuntu 16.04 OpenCV 3.1.0 環境構築 OpenCV 過去記事を参考にしつつ環境構築します
1$ sudo apt-get install cmake libgtk2.0-dev pkg-config 2$ git clone https://github.com/Itseez/opencv.git 3$ cd opencv 4$ git tag 5$ git checkout 3.1.0 6$ mkdir build &amp;amp;&amp;amp; cd build 7$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_CREATE_DISRIB=ON -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D WITH_FFMPEG=OFF -D BUILD_opencv_python2=ON -D BUILD_opencv_python3=ON -D PYTHON_EXECUTABLE=$(which python) .. 8$ make 9$ sudo make install Python用のパッケージも作ってるけど特に意味はない</description></item><item><title>DockerizedしたFlaskをサブディレクトリで運用する</title><link>https://blog.sky-net.pw/post/dockerized%E3%81%97%E3%81%9Fflask%E3%82%92%E3%82%B5%E3%83%96%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%A7%E9%81%8B%E7%94%A8%E3%81%99%E3%82%8B/</link><pubDate>Sun, 03 Sep 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/dockerized%E3%81%97%E3%81%9Fflask%E3%82%92%E3%82%B5%E3%83%96%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%A7%E9%81%8B%E7%94%A8%E3%81%99%E3%82%8B/</guid><description>
はじめに DockerizedしたFlaskをサブディレクトリ等からリバースプロキシでアクセスするとリダイレクト周りでおかしくなって辛いことになります
ベタに実行しないで大人しくApacheかNginxから動くイメージを作れば良いんですけど…
設定 Nginx フロントのNginxからリバースプロキシするときに必要な情報を提供してあげます
1location /hoge/fuga/service/ { 2proxy_set_header Host $host; 3proxy_set_header X-Real-IP $remote_addr; 4proxy_set_header X-Scheme $scheme; 5proxy_set_header X-Forwarded-Host $host; 6proxy_set_header X-Forwarded-Server $host; 7proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 8proxy_set_header X-Script-Name /hoge/fuga/service; 9proxy_pass http://192.168.xxx.xxx:8888; 10} Flask http://flask.pocoo.org/snippets/35/
snippetsにあるコードを少し変更して使います
先程もらってきた値を参照してFlask側で使用するようにします
これで実行時にremoteの正しいIPを見るようになりURL周りの挙動も直ります
挙動が怪しいときはprint(environ, &amp;quot;\n&amp;quot;, file=sys.stderr)辺りのコメントアウトを外してdocker log見れば直せます（適当
reverseproxy.py
1import sys 23class ReverseProxy(object): 4def __init__(self, app): 5self.app = app 67def __call__(self, environ, start_response): 8# print(environ, &amp;#34;\n&amp;#34;, file=sys.stderr) 910script_name = environ.get(&amp;#34;HTTP_X_SCRIPT_NAME&amp;#34;, &amp;#34;&amp;#34;) 11if script_name: 12environ[&amp;#34;SCRIPT_NAME&amp;#34;] = script_name 13path_info = environ[&amp;#34;PATH_INFO&amp;#34;] 14if path_info.</description></item><item><title>gitlab-ci-multi-runnerの動作確認をする</title><link>https://blog.sky-net.pw/post/gitlab-ci-multi-runner%E3%81%AE%E5%8B%95%E4%BD%9C%E7%A2%BA%E8%AA%8D%E3%82%92%E3%81%99%E3%82%8B/</link><pubDate>Tue, 22 Aug 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/gitlab-ci-multi-runner%E3%81%AE%E5%8B%95%E4%BD%9C%E7%A2%BA%E8%AA%8D%E3%82%92%E3%81%99%E3%82%8B/</guid><description>
はじめに Sphinx用のGitlabタスクランナーを久しぶりに作ってたらどうもうまく動かなくて困った
原因としては他のプロジェクトのランナーが有効になってたのを見落としてただけだった
良く見ればわかるんだけどもうちょっと直感的にわかりやすく表示して欲しいなって…
環境 こんな感じのDockerコンテナが動いてる状況
1FROM gitlab/gitlab-runner:v9.2.0 23RUN apt-get update 4RUN wget https://bootstrap.pypa.io/get-pip.py \ 5&amp;amp;&amp;amp; python3 get-pip.py \ 6&amp;amp;&amp;amp; apt-get install python3.4-venv -y \ 7&amp;amp;&amp;amp; apt-get clean \ 8&amp;amp;&amp;amp; apt-get autoremove 910ENTRYPOINT [&amp;#34;/usr/bin/dumb-init&amp;#34;, &amp;#34;/entrypoint&amp;#34;] 11CMD [&amp;#34;run&amp;#34;, &amp;#34;--user=gitlab-runner&amp;#34;, &amp;#34;--working-directory=/home/gitlab-runner&amp;#34;] デバッグする 対象のコンテナで
1# docker-compose exec gitlab-runner bash 2# su - gitlab-runner 3$ gitlab-ci-multi-runner --debug run 4Checking for jobs... nothing runner=[ランナーID] 5Feeding runners to channel builds=0 と監視してる状況を見れるのでGitlab上でjobを動かして見てみる
今回はこれでそもそも違うコンテナで動いてることに気付いた
蓋をあけると一瞬で片がついたけど時間かかったなぁ…
おまけ この後無事venv環境に切り替えて作業出来たのですが
1$ pip install -r requirements.</description></item><item><title>Ubuntu16.04でRuby on Railsのチュートリアルをする</title><link>https://blog.sky-net.pw/post/ubuntu16.04%E3%81%A7ruby-on-rails%E3%81%AE%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%92%E3%81%99%E3%82%8B/</link><pubDate>Sun, 06 Aug 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/ubuntu16.04%E3%81%A7ruby-on-rails%E3%81%AE%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%92%E3%81%99%E3%82%8B/</guid><description>
はじめに https://railsguides.jp/getting_started.html
こちらのチュートリアルをやる上で詰まったところとかのメモ
環境 検証はDockerのUbuntu16.04で行いました
最終的にこうなりました
1$ ruby -v 2ruby 2.3.1p112 (2016-04-26) [x86_64-linux-gnu] 3$ rails -v 4Rails 5.1.3 環境構築 Rubyのインストール 後者4つのパッケージはいれておかないとnokogiriとsqlite3のインストール時にコケます
1$ sudo apt-get install ruby ruby-dev build-essential zlib1g-dev libsqlite3-dev Railsのインストール 1$ gem install rails とりあえずこれだけで終わり
プロジェクト作成 チュートリアル通り作る
1$ rails new blog プロジェクトの実行 チュートリアル通りサーバーを立ち上げようとするとエラーで止まる
1$ rails server 2えらー ので
1$ vi Gemfile 2- # gem &amp;#39;therubyracer&amp;#39;, platforms: :ruby 3+ gem &amp;#39;therubyracer&amp;#39;, platforms: :ruby 4$ bundle install のようにコメントを外しておく
ただこのまま実行しても
1$ rails server 2/var/lib/gems/2.</description></item><item><title>Ubuntu16.04にZabbix3.2をインストールする</title><link>https://blog.sky-net.pw/post/ubuntu16.04%E3%81%ABzabbix3.2%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B/</link><pubDate>Sun, 23 Jul 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/ubuntu16.04%E3%81%ABzabbix3.2%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B/</guid><description>
はじめに Ubuntu16.04でZabbix3.2をインストールして使えるようにする
でもこれ良く考えたらDockerで良かったのでは…？感がある
環境 Ubuntu 16.04 4.4.0-83-generic Zabbix 3.2 環境構築 フォント グラフ描画時に必要になるとのことなのでインストールしておく
1# apt-get install fonts-vlgothic MySQL インストール 予めインストールして設定しておく
1# apt-get install mysql-server 2# vi /etc/mysql/mysql.conf.d/mysqld.conf 3character-set-server = utf8 4collation-server = utf8_bin 5skip-character-set-client-handshake 6innodb_file_per_table データベースとユーザー作成 zabbixで利用するデータベースを作る
DBユーザー名：hoge
DBパスワード：fuga
な場合はこんな感じ
ユーザー名はコンフィグのデフォルトがzabbixなのでその方が良いかも
1# mysql -uroot -p 2Enter password: 3mysql&amp;gt; create database zabbix; 4mysql&amp;gt; grant all privileges on hoge.* to zabbix@localhost identified by &amp;#39;fuga&amp;#39; ; 5mysql&amp;gt; exit Zabbix レポジトリの追加 今回は3.2なので
http://repo.zabbix.com/zabbix/3.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.2-1+xenial_all.deb</description></item><item><title>Discordでボイスロイドに読み上げさせる</title><link>https://blog.sky-net.pw/post/discord%E3%81%A7%E3%83%9C%E3%82%A4%E3%82%B9%E3%83%AD%E3%82%A4%E3%83%89%E3%81%AB%E8%AA%AD%E3%81%BF%E4%B8%8A%E3%81%92%E3%81%95%E3%81%9B%E3%82%8B/</link><pubDate>Sat, 22 Jul 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/discord%E3%81%A7%E3%83%9C%E3%82%A4%E3%82%B9%E3%83%AD%E3%82%A4%E3%83%89%E3%81%AB%E8%AA%AD%E3%81%BF%E4%B8%8A%E3%81%92%E3%81%95%E3%81%9B%E3%82%8B/</guid><description>
はじめに Discordでボイスロイドに読み上げさせてみたくなった．
のでとりあえずやってみる
環境 Windows7 64bit Python3.5 64bit discord.py 0.15.1
※3.4を使う場合は記法が異なる部分があるので前回の記事を見て下さい コード voiceroid voiceroidを喋らせる部分は前回のコードを利用します．
discord Oauth2認証挟んでtokenを発行した方が良い気もしたけどとりあえずIDとPWで認証してAPIが使えるのでひとまずこれでいく
1import discord 23from voiceroid import VoiceRoid 45vr = VoiceRoid(&amp;#34;VOICEROID＋ 結月ゆかり EX&amp;#34;) 6client = discord.Client() 78@client.event 9async def on_ready(): 10print(&amp;#34;-&amp;#34;*20) 11print(&amp;#34;ユーザー名：&amp;#34;, client.user.name) 12print(&amp;#34;ユーザーID：&amp;#34;, client.user.id) 13print(&amp;#34;-&amp;#34;*20) 1415@client.event 16async def on_message(message): 17print(&amp;#34;投稿者：&amp;#34;, message.author) 18print(&amp;#34;メッセージ：&amp;#34;, message.content) 19print(&amp;#34;サーバー：&amp;#34;, message.server) 20print(&amp;#34;チャンネル：&amp;#34;, message.channel) 2122vr.say(message.content) 2324client.run(&amp;#34;メールアドレス&amp;#34;, &amp;#34;パスワード&amp;#34;) ところでvoiceroid2でUIが統合されてるっぽいから多分これ使えないですね
買いたいけどぼちぼちするので難しい</description></item><item><title>Gitlab pagesをサブディレクトリで公開する</title><link>https://blog.sky-net.pw/post/gitlab-pages%E3%82%92%E3%82%B5%E3%83%96%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%A7%E5%85%AC%E9%96%8B%E3%81%99%E3%82%8B/</link><pubDate>Sun, 25 Jun 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/gitlab-pages%E3%82%92%E3%82%B5%E3%83%96%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%A7%E5%85%AC%E9%96%8B%E3%81%99%E3%82%8B/</guid><description>
はじめに Gitlab CE版でも8.17辺りからGitlab Pagesが使えます．
前提としてGitLab Runnerが使える必要があります．
※そちらの設定も詰まったのでぼちぼち時間ある時に書きます．
本来Gitlab pagesはサブドメイン上で利用される機能ですが今回これを諸般の事情からサブディレクトリで動かします．
今回も使うのはsameersbn氏のsameersbn/docker-gitlabです．
検証環境 docker
Docker version 17.03.1-ce, build c6d412e docker-compose
docker-compose version 1.13.0, build 1719ceb Gitlab
9.2.7 CE Gitlab Runner（Dockerイメージを使用）
gitlab/gitlab-runner:v9.2.0 設定方法 pages の設定 docker-compose.ymlに以下を追記します．
1- GITLAB_PAGES_ENABLED=true 2- GITLAB_PAGES_DOMAIN=pages.hoge.jp 3- GITLAB_PAGES_HTTPS=false 4- GITLAB_PAGES_PORT=80 本来であれば*.pages.hoge.jpを本コンテナまでリバースプロキシで繋げば終わりです.
今回は適当な名前をつけておきます.
DNSの設定 内向きだけでいいので
*.pages.hoge.jp
をコンテナのホストのIPを向くように設定します.
リバースプロキシの設定 今回はサブドメイン上ではなくサブディレクトリ上で公開します.
本来であればhttp://username.domain/projectname/で公開されるものをhttp://domain/pages/username/projectname/で公開します.
リバースプロキシを以下のように設定します.
どうするのがお作法的に良いのかわからないのでひとまず正規表現でゴリ押しな感じになってます.
1location ~ ^/pages/(?&amp;lt;user&amp;gt;[\w-]+)/(?&amp;lt;project&amp;gt;[\w-]+)(?&amp;lt;path&amp;gt;\S*)$ { 2resolver 192.xxx.xxx.xxx; 3proxy_redirect off; 4proxy_set_header Host $user.pages.hoge.jp; 5proxy_pass http://$user.pages.hoge.jp:10080/$project/$path; 6} タスクの登録 予めタスクランナーをプロジェクトで有効にしておくか新規登録しておいて下さい．</description></item><item><title>ReactをES2015で書く環境を作る その2</title><link>https://blog.sky-net.pw/post/react%E3%82%92es2015%E3%81%A7%E6%9B%B8%E3%81%8F%E7%92%B0%E5%A2%83%E3%82%92%E4%BD%9C%E3%82%8B-%E3%81%9D%E3%81%AE2/</link><pubDate>Wed, 21 Jun 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/react%E3%82%92es2015%E3%81%A7%E6%9B%B8%E3%81%8F%E7%92%B0%E5%A2%83%E3%82%92%E4%BD%9C%E3%82%8B-%E3%81%9D%E3%81%AE2/</guid><description>
はじめに 大体その1と同じ内容
ReactRouter入れたりくらいの変更
webpackも変遷の中で今微妙とかなんとか聞くけどとりあえずこれで…
目標 ReactとReact RouterとMaterial UIを入れてES2015で書ける環境を作る
環境構築 プロジェクト作成 1$ npm init -yes パッケージを揃える react-routerがv3からv4に変わる過程でreact-router-domになったので注意する
1$ npm install --save react react-dom material-ui react-router-dom 2$ npm install --save-dev webpack webpack-dev-server babel-loader babel-core babel-preset-react babel-preset-es2015 webpack.config.js とりあえずこんな感じで
minifyする際にオプションを追加する必要があるけど今のところは置いておくのでこんな感じ
1var path = require(&amp;#34;path&amp;#34;); 2var webpack = require(&amp;#34;webpack&amp;#34;); 34module.exports = { 5entry: &amp;#34;./src/main.jsx&amp;#34;, 6output: { path: path.join(__dirname, &amp;#34;dist&amp;#34;), filename: &amp;#34;bundle.js&amp;#34; }, 7module: { 8loaders: [{ 9test: /.jsx?$/, 10loader: &amp;#34;babel-loader&amp;#34;, 11exclude: /node_modules/, 12query: { 13presets: [&amp;#34;es2015&amp;#34;, &amp;#34;react&amp;#34;] 14} 15}] 16} 17}</description></item><item><title>clubskin0.3をpukiwiki1.5.1に適用する</title><link>https://blog.sky-net.pw/post/clubskin0.3%E3%82%92pukiwiki1.5.1%E3%81%AB%E9%81%A9%E7%94%A8%E3%81%99%E3%82%8B/</link><pubDate>Mon, 12 Jun 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/clubskin0.3%E3%82%92pukiwiki1.5.1%E3%81%AB%E9%81%A9%E7%94%A8%E3%81%99%E3%82%8B/</guid><description>
はじめに この前dockerhubに公開したpukiwikiにclubskinを適用しようとしてハマったので軽くメモ
個人的にはLDAPで認証掛けられて左側にツリーメニューが出せてMDで書ければそちらに移行したいけどなかなか見つからないのでご存知の方がいたら教えて欲しい
自作してるけどなんかイマイチ
環境 pukiwiki 1.5.1 php 7系 作業 適用前作業 ポイントは2つで
文法を7系に合わせる 全部コピーしない 1$ wget http://www.kazuwaya.jp/clubskin/clubskin-0.3-utf8.zip 2$ unzip clubskin-0.3-utf8.zip 3$ rm -rf clubskin-0.3-utf8/clubskin-0.3-utf8/lib 4$ rm clubskin-0.3-utf8/clubskin-0.3-utf8/pukiwiki.ini.php 5$ vi clubskin-0.3-utf8/clubskin-0.3-utf8/lib/convert_html.php 6$ vi clubskin-0.3-utf8/clubskin-0.3-utf8/plugin/secedit.inc.php 7$ vi clubskin-0.3-utf8/clubskin-0.3-utf8/plugin/attach.inc.php 8&amp;amp; newとなっている部分の&amp;amp;を消す 9&amp;amp; newだったり&amp;amp;newだったり表記ゆれしてるので適宜検索か置換コマンドで消す 適用 1$ cp -R clubskin-0.3-utf8/clubskin-0.3-utf8/. pukiwikidir あとは再度アクセスしてみて変わっているか確認する
その他 ajaxtreeの一部項目を非表示にする このサイトについてとかHelpとか消したい時
1$ vi plugin/ajaxtree.inc.php 2// Ignore list 3if (!defined(&amp;#39;PLUGIN_AJAXTREE_NON_LIST&amp;#39;)) { 4define(&amp;#39;PLUGIN_AJAXTREE_NON_LIST&amp;#39;, &amp;#39;このサイトについて|Help|BracketName|FormattingRules|InterWiki|InterWikiName|InterWikiSandBox|MenuBar|PHP|PukiWiki|RecentChanges|RecentDeleted|SandBox|WikiEngines|WikiName|WikiWikiWeb|YukiWiki|ヘルプ&amp;#39;);// kazuwaya 5} 46行目付近に非表示リストが正規表現で書かれているので適宜合わせて編集する
ソーシャルアイコンを消したい 一部古かったりhttpで取りに行ってるのでhttps化するとmixedコンテンツになって困る</description></item><item><title>ESXi6.5まとめ</title><link>https://blog.sky-net.pw/post/esxi6.5%E3%81%BE%E3%81%A8%E3%82%81/</link><pubDate>Mon, 12 Jun 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/esxi6.5%E3%81%BE%E3%81%A8%E3%82%81/</guid><description>
ESXi6.5を使い始めるにあたって気になった点とか使って困った点とかのまとめ
インストール前の話 利用料金 無償版か有償版か選べる
ただし無償版でもVMwareに登録必須
登録するとライセンスキーが発行される
インストーラーは一緒だけど無償版のライセンスキーをいれない場合は30日の体験版扱いになる
機器 出来れば公式で対応を謳っているものを使用した方がトラブルは少ない（らしい
今回は公式対応が表明されているものを利用した
自分でドライバを追加して使うことも出来るようなのでその辺は調べてみて下さい
管理 6.5から？WebUIに統一されたようです
5.5時代にお世話になっていたVSphereでアクセスすると一部機能が使えないなどWebUI推奨なようです
インストールイメージ もし公式が対応を歌っている製品の場合はそのメーカーが専用のカスタムイメージを配布している場合があるので探すことを推奨する
なければ公式のをインストール
インストールメディアはCD・DVDなどのディスクにダウンロードしたisoを焼くかUSB等のメディアもBIOSが対応していれば使える
今回はUnetbootinを利用しました
RAID ハードウェアRAIDしか対応していないそうです
今回はソフトウェアRAIDしか用意できなかったため諦めました
インストール後の話 再インストールしたい 一般のディストリビューションならインストール時にパーティション構成が変更出来ますがESXiの場合既にインストールしていることを検知すると上書きでしかインストールできない様子
ファイル破損時とかには便利かもしれない
一度クリーンにしたい状況になったので他のディストリビューションを利用してパーティションを再構成しました
NICが1つしか認識しない 今回公式対応のNICを2つ用意して構築しましたが初回インストール時はなぜか1つしか認識しませんでした
NIC2つにLANケーブルを指した状態で再度インストールを行うことで認識されました
※一応SSHで入って確認すると認識はしてるようですが管理画面の選択リストに表示されませんでした
ライセンスキーを入力したい メンテナンスモードに変更して入力
ファイル転送時などにエラーが出て転送出来ない IP直打ちでログインしているとそういったことが起きるようです
DNSサーバーを置くかローカルのhostsファイルの編集で適当な名前を与えて接続することで解消
SSH接続したい トップ画面から有効にしてSSHログイン
デフォルトならrootで22番ポートから入れます
Teratermの場合はチャレンジレスポンス認証です
使う時だけオンにした方が良さ気
ドメイン名をなんとかしたい デフォルトだとlocalhost.localdomainになっていてかっこ悪いです
SSHを有効にしてログインし
1# esxcli system hostname set --host=&amp;#34;esxi&amp;#34; --domain=&amp;#34;hoge&amp;#34; 2or 3# esxcli system hostname set --host=&amp;#34;esxi&amp;#34; などとして設定できます
VM名を変更したい WebUIから変更出来ますがその場合は表示名のみ変更されます
実ファイルがあるディレクトリ名は変わらないため今後不都合が生じる可能性があります
例）hogeからfugaに変える場合
予めVMは停止しておきます
1# cd /vmfs/volumes/datastore1/ 2# cd hoge 3# vmkfstools -E hoge_0.</description></item><item><title>NginxでLDAPを用いた閲覧制限を設ける</title><link>https://blog.sky-net.pw/post/nginx%E3%81%A7ldap%E3%82%92%E7%94%A8%E3%81%84%E3%81%9F%E9%96%B2%E8%A6%A7%E5%88%B6%E9%99%90%E3%82%92%E8%A8%AD%E3%81%91%E3%82%8B/</link><pubDate>Mon, 12 Jun 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/nginx%E3%81%A7ldap%E3%82%92%E7%94%A8%E3%81%84%E3%81%9F%E9%96%B2%E8%A6%A7%E5%88%B6%E9%99%90%E3%82%92%E8%A8%AD%E3%81%91%E3%82%8B/</guid><description>
LDAPを用いた管理をしていてそのグループ内専用のWebサービスを公開している場合に困るのが閲覧制限です．
ApacheでやるにしろNginxでやるにしろ基本的に提供されているのはBasic認証を用いたシンプルな認証機構です．
なければ作ろうな精神で作りました
https://github.com/skyblue3350/cypress
仕組み自体の説明は
クックパッド開発者ブログ nginx で omniauth を利用してアクセス制御を行う にて説明されているのでこちらを参考にして下さい
Python3系で作りましたがLDAP関連のモジュールの基幹ライブラリが2系にしか対応していないので有名どころなモジュールは軒並み使えないのが痛いです．
早く対応してほしい．
使い方はシンプルですのでログイン画面を良い感じのテーマに変更したい場合はHTMLの知識さえあればカスタマイズ出来ると思います
今回もDockerを用いた開発になったのでそのうちDockerhubで公開するつもりです</description></item><item><title>docker hubにイメージを公開してみた</title><link>https://blog.sky-net.pw/post/docker-hub%E3%81%AB%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%82%92%E5%85%AC%E9%96%8B%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F/</link><pubDate>Sun, 04 Jun 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/docker-hub%E3%81%AB%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%82%92%E5%85%AC%E9%96%8B%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F/</guid><description>
はじめに Docker hubにイメージを公開してみた
今まで個人的にビルドして使ってるだけだったので試験も兼ねて公開してみた
結構手軽に出来たので今後のぼちぼち公開していこうかな
https://hub.docker.com/r/skyblue3350/alpine-pukiwiki/
公開方法 Githubでレポジトリを作る いつも通りレポジトリを作ります
ただしレポジトリのルートディレクトリにDockerfileを置きましょう
それ以外の構成でもビルド出来るようですが面倒っぽいので大人しく置いた方が良さげ
Docker hubのアカウントを作る あれば良いです
今回はなかったので作りました
特に苦労することもないと思います
アカウントを紐付ける 上部メニューの Create -&amp;gt; Create Automated Build を選びます
アカウントのリンクが出て来るので好きな方のアカウントを選びます
Githubを選ぶとリンク方式を選ぶ画面が出てきますが今回はLimited Accessの方を選んで見ます
Public and Private
自動ビルドに対応させることが出来ます
また、プライベートレポジトリの場合はこちらを選ぶ必要があります Limited Access
Docker hub側でビルドボタンを押す等の方法でビルドする必要があります
また、レポジトリがパブリックである必要があります レポジトリを選ぶ 先程作成しておいたレポジトリを選びます
Dockerhub側の説明文等を簡単に書きます
Github側にREADMEがある場合はそちらも表示されるので簡潔なものでかまわないでしょう
ビルドしてみる Build Settingsからデフォルトで用意されてるmasterブランチのビルド設定を走らせます
Triggerボタンを押すとそのうちビルドされます
数分待ったらビルドされました</description></item><item><title>iCloudにスクリプトから画像をアップロードする</title><link>https://blog.sky-net.pw/post/icloud%E3%81%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%8B%E3%82%89%E7%94%BB%E5%83%8F%E3%82%92%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89%E3%81%99%E3%82%8B/</link><pubDate>Tue, 30 May 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/icloud%E3%81%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%8B%E3%82%89%E7%94%BB%E5%83%8F%E3%82%92%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89%E3%81%99%E3%82%8B/</guid><description>
はじめに AppleTVにはスクリーンセーバーにアルバムの写真を流す機能がある
今回は複数人でこのアルバムに写真を追加してAppleTVのスクリーンセーバーに流したくない？という話になったけどアルバムに追加するにはWeb経由（iCloud）からかApple端末のアルバムの共有機能を使って写真を追加するしかない
そこでスクリプトから写真をアップロードできるようにできたらSlackやらで専用チャンネルを用意しそこに写真をあげてもらうことで簡単に写真の追加が出来るんじゃないかな？と思ったのでトライしたメモ
余談ですがpngの画像のアップロードはまた事情が異なるみたいです
また、肝心のアルバムへの追加はできていません
iCloud 写真の追加、アルバムの編集等の操作はWebから行うことができる
https://www.icloud.com/
今回はこれを利用してみることにしたがAPIなどは非公開のようなので適当にちょろめのDeveloperToolを使って解析した内容を元にスクリプトを書いてみた
余談ですがこちらのライブラリ使うとiCloudの他の情報が欲しい場合は便利です
写真のダウンロードしか出来なかったので今回は使用しませんでした
https://github.com/picklepete/pyicloud
ログイン 必要なヘッダを用意してIDとパスワードをなげるとAPIの一覧が入ったjsonが返ってくる
1import json 2import requests 34s = requests.Session() 56data = s.post( 7&amp;#34;https://setup.icloud.com/setup/ws/1/login&amp;#34;, 8headers={ 9&amp;#34;Origin&amp;#34;: &amp;#34;https://www.icloud.com&amp;#34; 10}, 11data=json.dumps({ 12&amp;#34;apple_id&amp;#34;: &amp;#34;めーるあどれす&amp;#34;, 13&amp;#34;password&amp;#34;: &amp;#34;ぱすわーど&amp;#34; 14}) 15).json() 写真のアップロード アップロード先のAPIはjsonの中に入っているのでまずURLを抽出します
1url = data[&amp;#34;webservices&amp;#34;][&amp;#34;uploadimagews&amp;#34;][&amp;#34;url&amp;#34;] 必要な各種パラメータを用意します
1params = { 2&amp;#34;lastModDate&amp;#34;: 1397975488598, 3&amp;#34;timezoneOffset&amp;#34;: -540, 4&amp;#34;filename&amp;#34;: &amp;#34;test.jpg&amp;#34;, 5&amp;#34;dsid&amp;#34;: data[&amp;#34;dsInfo&amp;#34;][&amp;#34;dsid&amp;#34;] 6} 最後に用意したデータでAPIを叩きます
1p = s.post(url + &amp;#34;/upload&amp;#34;, 2params=params, 3headers={ 4&amp;#34;Origin&amp;#34;: &amp;#34;https://www.icloud.com&amp;#34; 5}, 6data=open(&amp;#34;test.jpg&amp;#34;, &amp;#34;rb&amp;#34;).read() 7) 89print(p.text) アルバムに写真を追加する ここでコケました</description></item><item><title>Jupyter Notebook上でCanvasを利用して画像を生成する</title><link>https://blog.sky-net.pw/post/jupyter-notebook%E4%B8%8A%E3%81%A7canvas%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6%E7%94%BB%E5%83%8F%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B/</link><pubDate>Sun, 14 May 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/jupyter-notebook%E4%B8%8A%E3%81%A7canvas%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6%E7%94%BB%E5%83%8F%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B/</guid><description>
はじめに Jupyter Notebook上でCanvasを使って画像を作って読み込めない？と相談を受けて調べたら
1from IPython.core.display import HTML を使うとHTMLをセルの結果表示部分に表示させることが出来るのでトライしたメモ
成果物はgistにあげてるのでご興味があればどうぞ
js_canvas.ipynb Python3でテストしましたが依存してそうなのはByteIOくらいなのでStringIOに置き直せば2系でも動くと思います
キャンバスを生成する 先程のモジュールを使って要素を生成します
ブラウザで動かせるものならなんであれ使えるはずなのでjqueryで動作するもっと高機能なものを持ってきても良いと思います
1&amp;lt;canvas id=&amp;#34;canvas&amp;#34; height=&amp;#34;300px&amp;#34; width=&amp;#34;300px&amp;#34; style=&amp;#34;border: 1px solid;&amp;#34;&amp;gt;&amp;lt;/canvas&amp;gt; 2&amp;lt;p&amp;gt;&amp;lt;input id=&amp;#34;variable&amp;#34; type=&amp;#34;text&amp;#34; placeholder=&amp;#34;Input python variable name&amp;#34; size=&amp;#34;30&amp;#34;&amp;gt;&amp;lt;/p&amp;gt; 3&amp;lt;p&amp;gt; 4&amp;lt;button id=&amp;#34;clear&amp;#34;&amp;gt;Clear&amp;lt;/button&amp;gt; 5&amp;lt;button id=&amp;#34;submit&amp;#34;&amp;gt;Save image to variable&amp;lt;/button&amp;gt; 6&amp;lt;/p&amp;gt; 固定の変数名に書き出す場合は不要ですがPython側の変数名を指定するインプットボックスとキャンバスをクリアするボタンを用意して置きます
キャンバスにお絵かきできるようにする 良い感じにJSを書いてお絵かきできるようにします
この辺のデバッグは普通にHTML書いてやった方が幸せな気がします
1var config = { 2&amp;#34;linesize&amp;#34;: 7, 3&amp;#34;linecolor&amp;#34;: &amp;#34;#000000&amp;#34; 4} 56var mouse = { 7&amp;#34;X&amp;#34;: null, 8&amp;#34;Y&amp;#34;: null, 9} 1011var canvas = document.getElementById(&amp;#34;canvas&amp;#34;); 12var ctx = canvas.getContext(&amp;#34;2d&amp;#34;); 13canvas.</description></item><item><title>VMware Toolsのインストールに失敗する</title><link>https://blog.sky-net.pw/post/vmware-tools%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%AB%E5%A4%B1%E6%95%97%E3%81%99%E3%82%8B/</link><pubDate>Sun, 14 May 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/vmware-tools%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%AB%E5%A4%B1%E6%95%97%E3%81%99%E3%82%8B/</guid><description>
はじめに 普段VMware Toolsのインストールを行う時はPlayerのメニューから管理 -&amp;gt; VMware Toolsのインストール と移動するとインストーラーの入ったディスクがマウントされるのでそこから展開してインストーラーを実行すれば出来る
コケるとしてもgccが入ってないとかその程度のもの
ただ今回はすんなりいかなかったのでメモ
エラー この手のエラーが大量に出てビルドにコケる
1/tmp/modconfig-O5xscq/vmhgfs-only/dir.c:1174:13: error: ‘struct file’ has no member named ‘f_dentry’ 2!(file-&amp;gt;f_dentry-&amp;gt;d_inode)) { 解決方法 Error VMware Tools Installation (Shared Folder) - Ubuntu 15.04 [SOLVED!] こちらにある通り下記レポジトリのパッチをあてたデータを利用させてもらうことでインストール出来ました
rasa/vmware-tools-patches Quick Start の項目の通りに実行するだけなので大した手間もなく助かりました</description></item><item><title>sharelatexでjarticleをつかえるようにする その2</title><link>https://blog.sky-net.pw/post/sharelatex%E3%81%A7jarticle%E3%82%92%E3%81%A4%E3%81%8B%E3%81%88%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B-%E3%81%9D%E3%81%AE2/</link><pubDate>Sun, 16 Apr 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/sharelatex%E3%81%A7jarticle%E3%82%92%E3%81%A4%E3%81%8B%E3%81%88%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B-%E3%81%9D%E3%81%AE2/</guid><description>
はじめに 前回の記事からバージョン上がったりしてそのままじゃいけなかったので改めて検証してDockerfileを書いた
LDAPやアカウント管理機能がPro版でしか対応されてないみたいなので利用するか迷うところ
アカウントを作成するだけならadminのアカウントで/admin/registerから作成できます
ただ作成したアカウントの一覧は見れません 不便
DBを直に見に行けば見えるでしょうけど…
環境 Docker version 17.03.1-ce Docker-compose version 1.12.0 sharelatex/sharelatex:0.6.1 ディレクトリツリー data以下に各コンテナをマウントさせる
1. 2├─ data 3├─ docker-compose.yml 4└─ sharelatex 5├─ Dockerfile 6└─ jlisting.sty Dockerfile platexが使えるようにするのとソースコードを貼る際に困るのでjlistingを導入する
1FROM sharelatex/sharelatex:0.6.1 23# platex install 4RUN apt-get update \ 5&amp;amp;&amp;amp; apt-get install texlive-lang-cjk -y \ 6&amp;amp;&amp;amp; apt-get clean \ 7&amp;amp;&amp;amp; apt-get autoremove 89# latexmk 10RUN cd /usr/local/texlive/2016/bin/x86_64-linux/ \ 11&amp;amp;&amp;amp; sed -ri &amp;#34;s/$latex = &amp;#39;latex %O %S&amp;#39;;/$latex = &amp;#39;platex -shell-escape %O %S&amp;#39;;/g&amp;#34; latexmk \ 12&amp;amp;&amp;amp; sed -ri &amp;#34;s/$bibtex = &amp;#39;bibtex %O %B&amp;#39;;/$bibtex = &amp;#39;pbibtex %O %B&amp;#39;;/g&amp;#34; latexmk \ 13&amp;amp;&amp;amp; sed -ri &amp;#34;s/$dvipdf = &amp;#39;dvipdf %O %S %D&amp;#39;;/$dvipdf = &amp;#39;dvipdfmx %O -o %D %S&amp;#39;;/g&amp;#34; latexmk 1415# jlisting 16ADD jlisting.</description></item><item><title>JenkinsのLDAP連携</title><link>https://blog.sky-net.pw/post/jenkins%E3%81%AEldap%E9%80%A3%E6%90%BA/</link><pubDate>Tue, 11 Apr 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/jenkins%E3%81%AEldap%E9%80%A3%E6%90%BA/</guid><description>
はじめに 前回GitlabをLDAP連携したので今度はJenkinsでもLDAP連携してみる
こちらも例の如くDocker上で動かす
環境 Docker version 17.03.1-ce Docker-compose version 1.12.0 jenkinsci/jenkins:2.54-alpine 構築 Jenkinsの起動 何はともあれdocker-compose.ymlを書く
1version:&amp;#34;2&amp;#34;23services:4jenkins:5restart:always6image:jenkinsci/jenkins:2.54-alpine7ports:8- &amp;#34;50000:50000&amp;#34;9- &amp;#34;8080:8080&amp;#34;10volumes:11- /home/jenkins:/var/jenkins_home実行する
1$ docker-compose up -d 8080ポートをブラウザ上で開いたら初期登録のウィザードが始まるのでウィザードに従っていく
最初のパスワードはブラウザ上で指定された場所に一時キーが書き込まれたファイルがあるので確認する
1$ docker exec -it jenkins_jenkins_1 bash 2# cat /var/jenkins_home/secrets/initialAdminPassword 確認したキーをブラウザ上に貼り付けユーザー作成や各種プラグインのインストール等を済ませる
これでひとまず終わり
LDAP 設定 Jenkinsの管理 -&amp;gt; グローバルセキュリティの設定 と移動する
JenkinsのユーザーデータベースからLDAPに変更し
サーバー
LDAP認証を提供しているサーバーを指定する
例）ldap://192.168.1.123
[高度な設定]ボタンをクリック root DN
対象となるLDAPグループのDNを入力する
例）dc=hoge,dc=fuga,dc=com User search base
ユーザーの検索に使われる
LDAP側の設定に合わせる
例）ou=people User search filter
ユーザー名の検索に使用される
LDAP側の設定に合わせる
例）uid={0} 権限管理
この時点ではまだ「全員に許可」にしておく
ログイン方式を1つしか選択出来ない？ようなので設定漏れがあった際にログイン出来なくなってしまうため ここまで設定したら保存する</description></item><item><title>ReaperでRecord Monitoringを有効にする</title><link>https://blog.sky-net.pw/post/reaper%E3%81%A7record-monitoring%E3%82%92%E6%9C%89%E5%8A%B9%E3%81%AB%E3%81%99%E3%82%8B/</link><pubDate>Sun, 09 Apr 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/reaper%E3%81%A7record-monitoring%E3%82%92%E6%9C%89%E5%8A%B9%E3%81%AB%E3%81%99%E3%82%8B/</guid><description>
はじめに 昔買った某ゲーム用のリアルトーンケーブルがあるので
ギター→リアルトーンケーブル→PCと繋いでDAWでPCをアンプとして使えないかなって画策した
無料でやるにはReaper＋フリーのアンプシミュを使うのが良さげだったのでその辺を利用した
ド素人なのでもっと良い方法があるのかもしれない
今回はリアルトーンケーブル使ってるけど記事書いてる時点ではマイクでテストしてるのでリアルトーンケーブルでなくとも録音デバイスとして認識されるものを利用すれば同様の方法で出来ると思う
環境構築 Reaper公式からインストーラー落としてきてインストールする
記事執筆時点でVer5.4です
REAPER | Audio Production Without Limits ※C:\ 以外のところにインストールしてもプラグインの読み込みパスがC:\になるんだけど…
日本語化出来るらしいけど特にしてないです
LePou PluginsからVSTを落としてくる
LePou Plugins プラグイン読み込み インストール先にVSTとか適当なディレクトリを作成しておく
その中に落としてきたVST（*.dll）を全て置いておく
Option→properties（Ctrl + P）で設定画面を呼び出す
左側メニューのPlug-ins→VSTと移動してAddから先程作成したディレクトリを指定する
指定したらRe-Scanでスキャンしておく
デバイスの設定 左側メニューのAudio→Deviceと移動してAudio SystemをDirect Soundにする
Input Deviceを手持ちの当該デバイスにする
Output Deviceはスピーカーやヘッドホンやら適当に
あとは適当に設定しOKで設定を保存しておく
音作り 初期画面まで戻りTrack→Insert New Track（Ctrl + T）を押す
新しくトラックが作成されるので追加されたトラック右側の録音ボタンを押す
先程正しい設定がなされていれば入力レベルが表示されてるのが分かるはず
録音する場合 Record（Ctrl + R）で録音出来るので録音して再生ボタンで確認できる
リアルタイムに聞く場合 こっちでハマった
デフォルトだとこのようになってるがこれだとRecord Monitoringのボタンが出てこない
このように画面比を変えて縦長にすると出て来る
このボタンをクリックにして有効にすることでリアルタイムで音が聞けるようになる</description></item><item><title>GitlabのLDAP連携</title><link>https://blog.sky-net.pw/post/gitlab%E3%81%AEldap%E9%80%A3%E6%90%BA/</link><pubDate>Sun, 02 Apr 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/gitlab%E3%81%AEldap%E9%80%A3%E6%90%BA/</guid><description>
はじめに sameersbn/docker-gitlabでLDAP連携するメモ
環境 Docker-compose version 1.11.2, build dfed245 Docker version 17.03.1-ce, build c6d412e sameersbn/docker-gitlab 8.17.4 設定 レポジトリにあるdocker-compose.xmlを参考に記述する
docker-gitlab/docker-compose.yml ※余談ですがバックアップがdailyになっててテスト環境でテストしてたら死にました
設定値例 LDAPホスト：192.168.1.30 LDAPポート：389 認証ユーザーグループ：dc=hoge,dc=fuga,dc=foo,dc=co,dc=jp ユーザー名：uid 必要部分だけ抜粋
1～略～ 2gitlab: 3restart: always 4image: sameersbn/gitlab:8.17.4 5～中略～ 6environment: 7- DEBUG=false 8～中略～ 9- LDAP_ENABLED=true 10- LDAP_LABEL=えるだっぷ 11- LDAP_HOST=192.168.1.30 12- LDAP_PORT=389 13- LDAP_BASE=dc=hoge,dc=fuga,dc=foo,dc=co,dc=jp 14- LDAP_UID=uid LDAP_LABELはトップページのログイン方式選択のラベルで表示される
LDAP_BASEは””とかで囲む必要はない　これでハマったので今回の記事書いたところもある
LDAP_UIDはLDAP側ユーザー名として設定してるものに合わせる
確認 コンテナを起動して確かめる
1$ cd gitlab 2$ docker-compose up -d このように表示されてればとりあえずおっけー
あとはログインしてみて正しくログイン出来れば終わり
設定値の確認 ダメそうだったらコンテナの中に入って確認してみる</description></item><item><title>Pythonで他プロセスのメモリを読む</title><link>https://blog.sky-net.pw/post/python%E3%81%A7%E4%BB%96%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AE%E3%83%A1%E3%83%A2%E3%83%AA%E3%82%92%E8%AA%AD%E3%82%80/</link><pubDate>Fri, 24 Feb 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/python%E3%81%A7%E4%BB%96%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AE%E3%83%A1%E3%83%A2%E3%83%AA%E3%82%92%E8%AA%AD%E3%82%80/</guid><description>
はじめに Windows上のPythonで他のプロセスのメモリの内容を読んで見る
使うのはWin32apiで他の言語同様調べれば良い
今回はなんとなく斑鳩のスコアを読み出してみる
プレイ時間と同時に取れたらグラフ化したりしてモチベに繋がらないかなって思ったので
予めメモリの必要な番地は適当に調べておきます
今回はうさみみで調べておきました
読み方 プロセスを取ってハンドルを取得したらReadProcessMemoryを呼ぶだけ
読み出すだけならこんな感じにシンプルに書ける
1from ctypes import windll, create_string_buffer 2import time 3import sys 45pid = 11111 67OpenProcess = windll.kernel32.OpenProcess 8ReadProcessMemory = windll.kernel32.ReadProcessMemory 9CloseHandle = windll.kernel32.CloseHandle 10PROCESS_ALL_ACCESS = 0x1F0FFF 11# ツールで見た時の番地 12address = 0x09412838 13size = 64 14buf = create_string_buffer(size) 1516processHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid) 17if ReadProcessMemory(processHandle, address, buf, size, None): 18print buf.raw 斑鳩のスコアを読む 今回の目的の斑鳩はうさみみで調べると0x09412838からリトルエンディアンで入ってるみたいなのでひたすら読み出して変換して表示するだけ
こんな感じでスコアが取れる
1# coding:utf-8 2from ctypes import windll, create_string_buffer 3import time 4import sys 5import struct 6import win32gui 78def getProcessId(classname): 9result = [] 1011def window(hwnd, a): 12# if win32gui.</description></item><item><title>sharelatexでjarticleをつかえるようにする</title><link>https://blog.sky-net.pw/post/sharelatex%E3%81%A7jarticle%E3%82%92%E3%81%A4%E3%81%8B%E3%81%88%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B/</link><pubDate>Sun, 19 Feb 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/sharelatex%E3%81%A7jarticle%E3%82%92%E3%81%A4%E3%81%8B%E3%81%88%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B/</guid><description>
ShareLatex とは Web上でLatexが書けるオープンソースプロジェクト
Webサービスとしても提供されてるけどオープンソースなので自前のサーバーで動かすこともできる
ただCloud LaTeXと違ってjarticleが使えないのでその辺もなんとかします
大体参考元記事のままです
というか大人しくDockerfile書いた方が早いです
環境 Docker
1.13.1 build 092cba3 Docker-compose
1.11.1 build 7c5d5e4 環境構築 イメージの用意 公式がDockerイメージを提供しているのでこちらを利用します
1$ mkdir sharelatex 2$ cd sharelatex 3$ wget https://raw.githubusercontent.com/sharelatex/sharelatex/master/docker-compose.yml 4$ docker-compose up -d 80番にフォワーディングされてるので一度アクセスして動作することを確認します
起動直後は502 bad gatewayが出ますがしばらく待てばログイン画面がでます
アカウント設定 docker execで管理用アカウントのIDを発行します
1$ docker exec sharelatex /bin/bash -c &amp;#34;cd /var/www/sharelatex; grunt user:create-admin --email joe@example.com&amp;#34; 登録用 URL
登録用URLにアクセスしてパスワードを設定しサンプルプロジェクトを作って問題なく動作することを確認します
イメージの編集 コンテナ内に入って作業します
1$ docker exec -it sharelatex bash platexのインストール 何はともあれplatexがないことには始まらないのでインストールします
1# apt-add-repository ppa:texlive-backports/ppa 2# apt-get install texlive-lang-cjk ここまででかなり時間かかるのでここで一度適当にコンテナをcommitしておくと失敗した時のダメージが軽くなります</description></item><item><title>rails-erdで多対多のリレーションの描画</title><link>https://blog.sky-net.pw/post/rails-erd%E3%81%A7%E5%A4%9A%E5%AF%BE%E5%A4%9A%E3%81%AE%E3%83%AA%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E6%8F%8F%E7%94%BB/</link><pubDate>Wed, 01 Feb 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/rails-erd%E3%81%A7%E5%A4%9A%E5%AF%BE%E5%A4%9A%E3%81%AE%E3%83%AA%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E6%8F%8F%E7%94%BB/</guid><description>
tl;dr rails-erdでE-R図描いたら多対多のリレーションが表示されない
→rails-erdはhas_manyやthroughを使ったリレーションは一方向にしか表示されない
らしいので結局railroadyを使った
使った環境がだいぶ前に構築したものだからかもしれないので備忘録の側面が強い
初めてrails触ってるのでそもそも何か間違ってるのかもしれない
以下備忘録代わりのメモ
作業内容 例えば記事に複数のカテゴリをつけられるようなリレーションモデルを作成する
プロジェクト生成と設定 生成と必要なライブラリの追加とか
1$ rails new blog 2$ vi Gemfile 3gem &amp;#34;railroady&amp;#34; 4gem &amp;#34;rails-erd&amp;#34; 5を末尾に追加 6$ bundle install 7$ rake db:create:all DBの設定 DBの設定をする
1$ vi config/database.yml モデルの生成 記事としてArticle　カテゴリとしてCategoryモデルを作る
そして これらをつなぐ中間モデルArticleCategoryを作成する
1$ rails g scaffold Article title:text date:datetime body:text 2$ rails g scaffold Category name:text description:text 3$ rails g scaffold ArticleCategory article:references category:references 各モデルのリレーションを記述する
1$ vi app/models/article.rb 2class Article &amp;lt; ActiveRecord::Base 3has_many :ArticleCategorys 4has_many :Categorys, through: :ArticleCategorys 5end 67$ vi app/models/category.</description></item><item><title>TAITAN XのChainerセットアップ</title><link>https://blog.sky-net.pw/post/taitan-x%E3%81%AEchainer%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97/</link><pubDate>Sun, 29 Jan 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/taitan-x%E3%81%AEchainer%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97/</guid><description>
はじめに UbuntuにTAITAN Xを載せた学習環境の構築メモ
何故かシステムが起動しなくなったりしたのでその辺の対処も含めて
環境 特筆すべきところだけ
OS
Ubuntu 14.04.05 Server GPU
GPU TAITAN X（pascal） インストール OS インストール 特に問題なく終わる
NVIDIAドライバインストール http://www.nvidia.co.jp/Download/index.aspx?lang=jp
公式サイトから適宜環境にあったドライバを選択する
製品のタイプ
GeForce 製品シリーズ
GeForce 10 series 製品ファミリー
NVIDIA TAITAN X (pascal) オペレーティングシステム
Linux 64bit 言語
日本語 検索 -&amp;gt; ダウンロードと進み同意ボタンが出て来る画面で同意ボタンのURLをコピーしておく
インストール先で
1# wget コピーURL でインストーラーをダウンロードする
1# chmod +x NVIDIA-Linux-x86_64-xxx.xx.run 2# ./NVIDIA-Linux-x86_64-xxx.xx.run あとは通常通りのインストールと同様
インストール終了後にnvidia-smiして確認する
1# nvidia-smi 2+-----------------------------------------------------------------------------+ 3| NVIDIA-SMI 375.26 Driver Version: 375.26 | 4|-------------------------------+----------------------+----------------------+ 5| GPU Name Persistence-M| Bus-Id Disp.</description></item><item><title>LPST-14900をArduinoに接続する</title><link>https://blog.sky-net.pw/post/lpst-14900%E3%82%92arduino%E3%81%AB%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B/</link><pubDate>Fri, 20 Jan 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/lpst-14900%E3%82%92arduino%E3%81%AB%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B/</guid><description>
追記 上手く行ったので新しく記事を書き直しました
LPST-14900をArduinoに接続する その2 はじめに 試行の記事なのでうまくいったら別記事でまとめます
先に結論だけ書いとくとNと1～6速まで問題なく取れます
Rだけ試行錯誤中
いけました
経緯 だいぶ前にDriving Force GTを購入してETSとかして遊んでるんですがシーケンシャルじゃなくてシフターが欲しくなった
かといってG25等々を新規に買うのは高いのでシフター単独でUSB接続出来るものを探した
追記　2017年9月17日
fanatec系列ならUSB アダプター買えば使えるっぽいのでそっちの方が良いかもしれない
シフター結構するけど…
シフター探し
TH8Aとかが単独で接続可能っぽかったけどいかんせん高い
価格： ￥ 19,380
のでもう少し安いシフターを探した
すると尼でLPST-14900がオススメに出てきてこちらは価格が5000円ちょっとで安い
ただG29にしか対応してない様子
どうにかこうにか単独で接続できないか調べると
G25やG27・G29のシフターをUSBに変換するアダプタを見つけた
Shifter Interface USB adapter for Logitech® G25, G27 and G29 1-9 $25.72
でありかなと思える価格 G29も対応してるっぽいのでこれでいけそうではある
けど送料込み込みだともう少し高そうなので自作できないか調べた
追記
このアダプタ購入して試しましたが無事使えました
コネクタ形状はD-subっぽいのでこれを良い感じにArduinoで読み出してLeonardoかMicroでUSBキーボードとして認識させれば実質単独でシフターとして運用出来るかもしれないと思って調べるとG25で既に動作するものを作ってる人がいる
Arduino based G25/27 Shifter Standalone Youtube 動画の説明文に詳細な解説付きのフォーラムのページがある
DIY G25 shifter interface with H-pattern, sequential and handbrake modes 似たような感じでいけるんじゃないかと思って早速LPST-14900を購入してみた</description></item><item><title>[未解決]yum updateしたら立ち上がらなくなった話</title><link>https://blog.sky-net.pw/post/yum-update%E3%81%97%E3%81%9F%E3%82%89%E7%AB%8B%E3%81%A1%E4%B8%8A%E3%81%8C%E3%82%89%E3%81%AA%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F%E8%A9%B1/</link><pubDate>Sun, 08 Jan 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/yum-update%E3%81%97%E3%81%9F%E3%82%89%E7%AB%8B%E3%81%A1%E4%B8%8A%E3%81%8C%E3%82%89%E3%81%AA%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F%E8%A9%B1/</guid><description>
はじめに 未解決なので経緯と作業ログだけのメモです
経緯 年始にサーバーのアップデートを行ったところ起動しなくなった
BIOS起動→GRUB2メニュー→kernel選択→起動時のプログレスバーが100%になるも起動せず
ログは手打ちなので間違ってるところあるかも
環境 2TB HDD*4でマザボでRAID5を構成した上にCentOS7をインストール
6TBになるためUEFI
用途 SSH NFS LDAP 作業ログ プロセスがどこで止まってるのか調べる ※十字キーで切り替えることが出来たのでこの作業しなくても見れました
kernel選択画面で任意kernelを選択した状態でeキーを押してオプションの編集画面へ入り
linuxefiで始まる行の末尾にある「 rhgb quiet 」を削除してCtrl+xで起動
しばらく待っていると以下のログまで確認出来る
1[ OK ] Started Show Plymouth Boot Screen. 2[ OK ] Reached target Paths. 3[ OK ] Reached target Basic System. 45[ 180.055751] dracut-initqueue[334]: Warning: dracut-initqueue timeout - starting timeout scripts 6～以下時間経過して同じログが続く～ 7一定時間経つと 89[--*-- ] A start job is running for dev-mapper\x2root ( 3min 0sec / no limit) あとは無限にこの待機状態が続く</description></item><item><title>CentOS7でinitramfsを展開する</title><link>https://blog.sky-net.pw/post/centos7%E3%81%A7initramfs%E3%82%92%E5%B1%95%E9%96%8B%E3%81%99%E3%82%8B/</link><pubDate>Thu, 05 Jan 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/centos7%E3%81%A7initramfs%E3%82%92%E5%B1%95%E9%96%8B%E3%81%99%E3%82%8B/</guid><description>
はじめに CentOS7であるモジュールがカーネルに組み込まれているか知りたくなったが従来の方法では展開出来なかったのでまとめ
今までの手順でgunzipをcpioにパイプすると
1gzip: initramfs.gz: not in gzip format みたいに怒られてうまくいかない
展開方法 まずbinwalkというアプリケーションが必要なのでインストール
インストール https://github.com/devttys0/binwalk
からクローンしてインストールする
1$ git clone https://github.com/devttys0/binwalk 2$ cd binwalk 3$ sudo python setup.py install 展開する バイナリでgzipが始まるところ以降を展開したいので調べる
1$ binwalk /boot/initramfs-3.10.0-514.2.2.el7.x86_64.img 23DECIMAL HEXADECIMAL DESCRIPTION 4-------------------------------------------------------------------------------- 50 0x0 ASCII cpio archive (SVR4 with no CRC), file name: &amp;#34;.&amp;#34;, file name length: &amp;#34;0x00000002&amp;#34;, file size: &amp;#34;0x00000000&amp;#34; 6112 0x70 ASCII cpio archive (SVR4 with no CRC), file name: &amp;#34;kernel&amp;#34;, file name length: &amp;#34;0x00000007&amp;#34;, file size: &amp;#34;0x00000000&amp;#34; 7232 0xE8 ASCII cpio archive (SVR4 with no CRC), file name: &amp;#34;kernel/x86&amp;#34;, file name length: &amp;#34;0x0000000B&amp;#34;, file size: &amp;#34;0x00000000&amp;#34; 8356 0x164 ASCII cpio archive (SVR4 with no CRC), file name: &amp;#34;kernel/x86/microcode&amp;#34;, file name length: &amp;#34;0x00000015&amp;#34;, file size: &amp;#34;0x00000000&amp;#34; 9488 0x1E8 ASCII cpio archive (SVR4 with no CRC), file name: &amp;#34;kernel/x86/microcode/GenuineIntel.</description></item><item><title>postfixでGmailのリレー設定</title><link>https://blog.sky-net.pw/post/postfix%E3%81%A7gmail%E3%81%AE%E3%83%AA%E3%83%AC%E3%83%BC%E8%A8%AD%E5%AE%9A/</link><pubDate>Sun, 01 Jan 2017 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/postfix%E3%81%A7gmail%E3%81%AE%E3%83%AA%E3%83%AC%E3%83%BC%E8%A8%AD%E5%AE%9A/</guid><description>
はじめに システムのメール送信をGmailでリレーして簡単に送信出来るように設定しておく
mailコマンドでメールが送れるようになるので手軽にログを送ったりするのに使える
この手の記事はたくさんあるがうまくいくものがなかなかなかったのでメモ
環境 Ubuntu 16.04.1 LTS 64bit インストール postfixとmailをコマンドを使うためにmailutilsのパッケージを導入する
1$ sudo apt-get install postfix mailutils インストール中のpostfixの質問では「設定なし」を選択する
設定 gmail の事前設定 Gmailではアプリケーション側がパスワードを持つようなアプリケーションはそのままでは使えないのでGmail側の設定を変更する
https://www.google.com/settings/u/2/security/lesssecureapps
からアクセスをオンにしておく
コンフィグファイルの作成 main.cfを新たに作成する
1$ cat /etc/postfix/main.cf 2relayhost = smtp.gmail.com:587 3smtp_use_tls = yes 4smtp_sasl_auth_enable = yes 5smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd 6smtp_sasl_security_options = noanonymous 7smtp_sasl_tls_security_options = noanonymous ログイン情報の作成 1$ sudo vi /etc/postfix/sasl/sasl_passwd 2smtp.gmail.com:587 hoge@gmail.com:password 使用するユーザー名とパスワードを入力する
これをハッシュ化する 元ファイルは不要なので削除する
1$ sudo postmap /etc/postfix/sasl/sasl_passwd 2$ sudo rm /etc/postfix/sasl/sasl_passwd テスト mailコマンドを使用してメールの送信を確認する
1$ mail target@example.</description></item><item><title>Chainer1.19.0インストール</title><link>https://blog.sky-net.pw/post/chainer1.19.0%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/</link><pubDate>Fri, 30 Dec 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/chainer1.19.0%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/</guid><description>
はじめに 1.15.0→1.19.0へ更新した
環境 Windows 7 64bit GTX 1070 Python3.5 64bit Microsoft Visual Studio 14 Cuda 8.0 cudnn 8.0 v5.1 基本的に前回の記事と同一のもの
作業 1$ python3 -m pip install -U chainer して終わりかと思ったら
1cupy\cuda\cudnn.cpp(3650): error C3861: &amp;#39;cudnnAddTensor_v3&amp;#39;: identifier not found 2cupy\cuda\cudnn.cpp(4307): error C3861: &amp;#39;cudnnGetFilterNdDescriptor_v5&amp;#39;: identifier not found 3cupy\cuda\cudnn.cpp(5056): error C3861: &amp;#39;cudnnSetConvolutionNdDescriptor_v3&amp;#39;: identifier not found 4cupy\cuda\cudnn.cpp(6839): error C3861: &amp;#39;cudnnConvolutionBackwardFilter_v3&amp;#39;: identifier not found 5cupy\cuda\cudnn.cpp(7729): error C3861: &amp;#39;cudnnConvolutionBackwardData_v3&amp;#39;: identifier not found 6error: command &amp;#39;VSのインストールパス\\cl.exe&amp;#39; failed with exit status 2 公式レポジトリのv1.</description></item><item><title>React RouterでBasenameを指定する</title><link>https://blog.sky-net.pw/post/react-router%E3%81%A7basename%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%99%E3%82%8B/</link><pubDate>Mon, 19 Dec 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/react-router%E3%81%A7basename%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%99%E3%82%8B/</guid><description>
はじめに React Routerでルート以外の時に作成したアプリを置きたい時とかの話
1ReactDOM.render( 2&amp;lt;Router history={browserHistory}&amp;gt; 3&amp;lt;Route path=&amp;#34;/&amp;#34; component={App} /&amp;gt; 4&amp;lt;Route path=&amp;#34;/pageA&amp;#34; component={pageA} /&amp;gt; 5&amp;lt;Route path=&amp;#34;/pageB&amp;#34; component={pageB} /&amp;gt; 6&amp;lt;Route path=&amp;#34;/pageC&amp;#34; component={pageC} /&amp;gt; 7&amp;lt;/Router&amp;gt;, 8document.getElementById(&amp;#34;app&amp;#34;) 9); みたいなルーティングをした状態でルート以外に作成したアプリを配置をしたい時の話
このままだとデプロイ先のルートにしか置けないので困る
かといってフルパスでルーティングを書くわけにもいかない
対処法 historyライブラリを使うことで解決出来る
/hogeに配置するコードはこんな感じ
1import { createHistory, useBasename } from &amp;#34;history&amp;#34;; 23let history = useBasename(createHistory)({ 4basename: &amp;#34;/hoge/&amp;#34; 5}) 67ReactDOM.render( 8&amp;lt;Router history={history}&amp;gt; 9&amp;lt;Route path=&amp;#34;/&amp;#34; component={App} /&amp;gt; 10&amp;lt;Route path=&amp;#34;/pageA&amp;#34; component={pageA} /&amp;gt; 11&amp;lt;Route path=&amp;#34;/pageB&amp;#34; component={pageB} /&amp;gt; 12&amp;lt;Route path=&amp;#34;/pageC&amp;#34; component={pageC} /&amp;gt; 13&amp;lt;/Router&amp;gt;, 14document.getElementById(&amp;#34;app&amp;#34;) 15); これで/hoge/pageAの用なルーティングを実現することが出来る
参考記事 mjackson/history Basename Support</description></item><item><title>Amazon Dash Buttonを初期化する</title><link>https://blog.sky-net.pw/post/amazon-dash-button%E3%82%92%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%99%E3%82%8B/</link><pubDate>Mon, 12 Dec 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/amazon-dash-button%E3%82%92%E5%88%9D%E6%9C%9F%E5%8C%96%E3%81%99%E3%82%8B/</guid><description>
はじめに 一つ前の記事で普通に設定して注文まで試した上でハックする記事を読んだら
商品を選ばない(取説と違う)
＿人人人人人人人人人人人人人人人＿
＞　商品を選ばない(取説と違う)　＜
￣Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y￣
これもう商品注文出来るだけのボタンなの…？ってなりましたが初期化すれば大丈夫でした
対処法 Amazonのアプリでアカウントサービス -&amp;gt; Dash Buttonの管理から当該のボタンを選んで無効化します
これで再度セットアップを行うことが出来るので再度設定を行い商品を選ばずに設定ウィザードを抜けて解決
ちょっと焦った
Wiresharkでパケットキャプチャしたらちゃんと来るようになりました
取れてる pic.twitter.com/zHdmuNIWdt
&amp;mdash; スカイ (@skyblue3350) December 11, 2016</description></item><item><title>Amazon Dash Buttonの初期設定でWi-Fiに繋がらない</title><link>https://blog.sky-net.pw/post/amazon-dash-button%E3%81%AE%E5%88%9D%E6%9C%9F%E8%A8%AD%E5%AE%9A%E3%81%A7wi-fi%E3%81%AB%E7%B9%8B%E3%81%8C%E3%82%89%E3%81%AA%E3%81%84/</link><pubDate>Sun, 11 Dec 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/amazon-dash-button%E3%81%AE%E5%88%9D%E6%9C%9F%E8%A8%AD%E5%AE%9A%E3%81%A7wi-fi%E3%81%AB%E7%B9%8B%E3%81%8C%E3%82%89%E3%81%AA%E3%81%84/</guid><description>
はじめに 噂のAmazon Dash Buttonを購入して早速セットアップしてたら早速トラブったのでメモ
結論 先に結論だけ
無線ルーターでチャンネルを40MHz固定にしていたからでした
これを自動選択に切り替えてつながるようになりました
現象 このボタンの初期設定の方法は3つ
Bluetooth 超音波 Wi-Fi どれを使ってもボタンとの導通まではいけるけどWi-Fiの設定をしたところでボタン側が赤く点滅したあとうんともすんとも言わなくなる
そのあとアプリ側では接続に失敗しましたとしか表示されずに手詰まりになった
解決方法 ツイート検索でこちらの記事を見つけたので無線ルーター側の設定を見直しました
我が家の無線ルーターはBUFFALOだったので設定項目名は倍速モードでしたが
設定画面でTop -&amp;gt; 無線設定 -&amp;gt; 倍速モードで40MHzが選択されていました
これを40MHz/20MHz自動選択に変更しました
ルーターの設定反映後 再度設定を行ったところ無事設定出来ました
無事ボタンから初回の注文も完了
ただこれだとノートPCとかで繋ぐとリンク速度が65Mbpsで20MHz扱いっぽい…
家ではデスクトップでしか作業しないけど少し気になる
参考記事 Amazon Dash Buttonは低い受信レートが有効なWi-Fiアクセスポイントでないと繋がらない</description></item><item><title>ScapyをWindowsにインストールする</title><link>https://blog.sky-net.pw/post/scapy%E3%82%92windows%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B/</link><pubDate>Sun, 11 Dec 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/scapy%E3%82%92windows%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B/</guid><description>
はじめに ScapyをWindowsにインストールする記事を調べると色々面倒な手順が書いてあるが最近は楽
ただそのまま使えないので便宜上使えるようにする
sniff使おうとしたら出たので他の機能を使うなら出ないかもしれない
インストール クローンするかリリースから最新のものを落とす
今回はv2.3.3を使います
解凍したら
1$ python setup.py install して終わり
修正 scapy/arch/windows/compatibility.pyを編集する
冒頭に
1from scapy.arch.pcapdnet import PcapTimeoutElapsed を追加する
185行目をコメントアウト
1if offline is None: 2# log_runtime.info(&amp;#39;Sniffing on %s&amp;#39; % conf.iface) 3if L2socket is None: 4L2socket = conf.L2listen 終わり
エラー global name 'log_runtime' is not defined とりあえず必要ないので当該行をコメントアウトして対応
global name 'PcapTimeoutElapsed' is not defined import文を追加して対応</description></item><item><title>アップグレードしたらnvidia-smi出来なくなった話</title><link>https://blog.sky-net.pw/post/%E3%82%A2%E3%83%83%E3%83%97%E3%82%B0%E3%83%AC%E3%83%BC%E3%83%89%E3%81%97%E3%81%9F%E3%82%89nvidia-smi%E5%87%BA%E6%9D%A5%E3%81%AA%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F%E8%A9%B1/</link><pubDate>Thu, 08 Dec 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/%E3%82%A2%E3%83%83%E3%83%97%E3%82%B0%E3%83%AC%E3%83%BC%E3%83%89%E3%81%97%E3%81%9F%E3%82%89nvidia-smi%E5%87%BA%E6%9D%A5%E3%81%AA%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F%E8%A9%B1/</guid><description>
経緯 別件で環境構築している時にupgradeやらdist-upgradeしたらカーネルが新しくなってnvidia-smiが実行できなくなりました
解決に1日掛かったので一応メモ
こんな感じ
1$ nvidia-smi 2NVIDIA-SMI has failed because it couldn&amp;#39;t communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running. 3もしくは 4modprobe: ERROR: could not insert &amp;#39;nvidia_367&amp;#39; 5... 67$ nvcc -V 8nvcc: NVIDIA (R) Cuda compiler driver 9Copyright (c) 2005-2015 NVIDIA Corporation 10Built on Tue_Aug_11_14:27:32_CDT_2015 11Cuda compilation tools, release 7.5, V7.5.17 アップデート前環境 当初以下の環境を組んでいました
Ubuntu14.04 LTS（64bit） GTX980 Ti nvidia-361（361.42） CUDA （7.5） ドライバ CUDA 共にnvidia公式からダウンロードしたものを使用して構築しました.</description></item><item><title>DiscordでBotをつくる</title><link>https://blog.sky-net.pw/post/discord%E3%81%A7bot%E3%82%92%E3%81%A4%E3%81%8F%E3%82%8B/</link><pubDate>Sun, 04 Dec 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/discord%E3%81%A7bot%E3%82%92%E3%81%A4%E3%81%8F%E3%82%8B/</guid><description>
はじめに DiscordのAPIを利用してオウム返しをするBotを作成してみます.
環境 Windows7 64bit Python3.5 64bit 環境構築 discord用のライブラリがあるのでそれを利用します.
1$ python3 -m pip install discord コード こんな感じのコードでメッセージを受信してオウム返し出来ます.
asyncioの関係で3.4と3.5では文法が変わります.
こんな感じ
@asyncio.coroutine → async
yield from → await
まぁドキュメントに書いてあるんですけどね
1import discord 23client = discord.Client() 45@client.event 6async def on_ready(): 7print(&amp;#34;-&amp;#34;*20) 8print(&amp;#34;ユーザー名：&amp;#34;, client.user.name) 9print(&amp;#34;ユーザーID：&amp;#34;, client.user.id) 10print(&amp;#34;-&amp;#34;*20) 1112@client.event 13async def on_message(message): 14if not message.author.id == client.user.id: 15await client.send_message(message.channel, message.content) 16print(&amp;#34;投稿しました&amp;#34;) 1718print(&amp;#34;投稿者：&amp;#34;, message.author) 19print(&amp;#34;メッセージ：&amp;#34;, message.content) 2021client.run(os.environ[&amp;#34;DISCORD_API_TOKEN&amp;#34;]) 結構簡単に出来るのが良いですね
追記　2018-07-12
検索で来る人が結構いるみたいなのでTOKENの取り方とBotをサーバーに参加させる方法
DISCORD_API_TOKENは以下のURLから発行できます
https://discordapp.com/developers/applications/me
ここから新しいアプリ -&amp;gt; アプリを作成からアプリを作ります</description></item><item><title>ReactをES2015で書く環境を作る</title><link>https://blog.sky-net.pw/post/react%E3%82%92es2015%E3%81%A7%E6%9B%B8%E3%81%8F%E7%92%B0%E5%A2%83%E3%82%92%E4%BD%9C%E3%82%8B/</link><pubDate>Sun, 04 Dec 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/react%E3%82%92es2015%E3%81%A7%E6%9B%B8%E3%81%8F%E7%92%B0%E5%A2%83%E3%82%92%E4%BD%9C%E3%82%8B/</guid><description>
はじめに フロント界隈の変遷が激しいですね良く分からないです
未だにjQueryでゴリゴリ書いてる人間なので少し勉強することにしたけど忘れそうなのでメモ
ちなみにRiotとFetchくらいしか触ったことない人間です
環境構築してチュートリアルまで流します
Webpack + React + ES6の最小構成を考えてみる。 ほぼこちらの記事のまんまです
環境 Windows7 64bit 環境構築 Node.js 公式から落としてきてインストールする
パスを以下の2箇所に通す（インストーラーがやってくれてるかも）
nodejsのインストール場所 Users/Username/AppData/Roaming/npm プロジェクト作成 1$ npm init 適当に答えてpackage.jsonを作成する
ライブラリを揃える npm install --save 利用時に必要なライブラリを追加する
1$ npm install --save react react-dom whatwg-fetch reactとreact-domはreactを使うために入れる
whatwg-fetchはFetchAPIを対応してないブラウザでも使うためのpolyfill
npm install --save-dev 開発時に必要なライブラリを追加する
1$ npm install --save-dev webpack webpack-dev-server 2$ npm install --save-dev babel-loader babel-core babel-preset-react babel-preset-es2015 タスク コマンド打っても良いけど面倒なので何回もしそうなことは予め書いておく
package.jsonのscriptsの項目に以下を追記する
1&amp;#34;scripts&amp;#34;: { 2&amp;#34;test&amp;#34;: &amp;#34;echo \&amp;#34;Error: no test specified\&amp;#34; &amp;amp;&amp;amp; exit 1&amp;#34;, 3&amp;#34;build&amp;#34;: &amp;#34;webpack&amp;#34;, 4&amp;#34;server&amp;#34;: &amp;#34;webpack-dev-server --progress --colors --hot --open&amp;#34; 5}, これで</description></item><item><title>SWFバイナリのパース</title><link>https://blog.sky-net.pw/post/swf%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA%E3%81%AE%E3%83%91%E3%83%BC%E3%82%B9/</link><pubDate>Sun, 27 Nov 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/swf%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA%E3%81%AE%E3%83%91%E3%83%BC%E3%82%B9/</guid><description>
はじめに 今までバイナリに触れる機会がなかったのでとりあえずPythonでバイナリを読めるようになろうかなって思った
とりあえず仕様が公開されてるSWFの画像・音声（動画）をバイナリから引っこ抜くところまでを目標にする
ちなみにバイナリについてバイナリエディタで開いてほーん…ってなるくらいしか知らない
仕様書 Adobeがファイルフォーマットの仕様書を公開しているので基本はこれを読みながらやる
http://wwwimages.adobe.com/content/dam/Adobe/en/devnet/swf/pdf/swf-file-format-spec.pdf
読み方としては15ページのInteger Typesは先に目を通してから27ページのSWFのフォーマットについて読むと良い
それ以外は読み飛ばして必要に応じて読めば良い
レポジトリ とりあえずの作業スペース
https://github.com/skyblue3350/swf
作業 最低限のバイナリの読み込み とりあえずバイナリエディタみたいに16進数で表示してみる
structモジュールとかあるけど使わないで書いてみる
1fp = open(&amp;#34;test.swf&amp;#34;, &amp;#34;rb&amp;#34;) 2while True: 3b = fp.read(1) 4if b == &amp;#34;&amp;#34;: break 5print hex(ord(b)) 6fp.close() 1バイトずつ読み出してordで10進数にしてそれをhexで16進数に変換する
ヘッダの読み込み ヘッダは以下で構成される
Signature
圧縮されているかどうか Version
このSWFファイルのバージョン情報 FileLength
このSWFファイルの大きさ FrameSize
フレームの縦横の大きさ FrameRate
FPS FrameCount
フレームの数 1個ずつ読んでいく
Signature Sinatureは3バイトで表される
1バイト目が圧縮 2バイト目（W）と3バイト目（S）は固定（仕様書27ページ参照）
1バイト目がFの時 未圧縮 Cの時 zlib圧縮 Zの時 LZMA圧縮
UI8が8bit→8*3で24ビット→8ビット1バイトで3バイトなのでreadで3バイト読み出す
1fp = open(&amp;#34;test.swf&amp;#34;, &amp;#34;rb&amp;#34;) 23signature = fp.read(3) 4print &amp;#34;Signature&amp;#34;, signature 5fp.</description></item><item><title>FFmpegでエンコードした動画をTwitterにあげる</title><link>https://blog.sky-net.pw/post/ffmpeg%E3%81%A7%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89%E3%81%97%E3%81%9F%E5%8B%95%E7%94%BB%E3%82%92twitter%E3%81%AB%E3%81%82%E3%81%92%E3%82%8B/</link><pubDate>Sun, 20 Nov 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/ffmpeg%E3%81%A7%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89%E3%81%97%E3%81%9F%E5%8B%95%E7%94%BB%E3%82%92twitter%E3%81%AB%E3%81%82%E3%81%92%E3%82%8B/</guid><description>
はじめに ShadowPlayで撮影したゲームの一シーンとかTwitterにあげたいなって時の話
GUIツール入れるのめんどくさいのでFFmpegで任意部分をカットしてエンコードする
環境 Windows 7 64bit ffmpeg version N-81609-g7b3bc36 動画の切り出し 10分30秒から2分切り出す場合
入力ファイル
input.mp4 出力ファイル名
output.mp4 1$ ffmpeg -ss 00:10:30 -i input.mp4 -t 120 output.mp4 こんな感じで切り出せる
iオプションよりssオプションを前に持ってくることでシーク時間が早くなる
逆にするとファイルの最初から読み出すため動画が長ければ長い程シークに時間を取られる
YouTube等の動画サイトにあげる時はこれで良いがTwitterにあげる際にはもう1つオプションを追加する必要がある
1$ ffmpeg -ss 00:10:30 -i input.mp4 -t 120 -pix_fmt yuv420p output.mp4 これでTwitterの公式サイトの方でD&amp;amp;Dすると動画をアップロードすることが出来る
少し前からFFmpegがCUDA対応してるからそれ込みで使えば多少長くても結構早めに切り出せるかな
こんな感じ
1$ ffmpeg -ss 00:10:30 -i input.mp4 -t 120 -vcodec nvenc -pix_fmt yuv420p output.mp4 もし動画連結するなら
1$ ffmpeg -i input_1.movie -i input_2.movie -filter_complex &amp;#34;concat=n=2:v=1:a=1&amp;#34; output.mp4 参考記事 FFmpegで素早く正確に動画をカットする自分的ベストプラクティス Twitterに動画を投稿する際に行ったffmpegの設定</description></item><item><title>MongoDBでオートインクリメントする</title><link>https://blog.sky-net.pw/post/mongodb%E3%81%A7%E3%82%AA%E3%83%BC%E3%83%88%E3%82%A4%E3%83%B3%E3%82%AF%E3%83%AA%E3%83%A1%E3%83%B3%E3%83%88%E3%81%99%E3%82%8B/</link><pubDate>Tue, 15 Nov 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/mongodb%E3%81%A7%E3%82%AA%E3%83%BC%E3%83%88%E3%82%A4%E3%83%B3%E3%82%AF%E3%83%AA%E3%83%A1%E3%83%B3%E3%83%88%E3%81%99%E3%82%8B/</guid><description>
はじめに MongoDBの_idにはオリジナルなObjectIDがついてるけどこれをMySQLとかでいうようなオートインクリメントさせたい時の話
調べたら公式にドキュメントがあった
Create an Auto-Incrementing Sequence Field のでこれをJavaで使ってみる
ライブラリの追加 3.3.0のドライバを追加しておく
1&amp;lt;dependency&amp;gt; 2&amp;lt;groupId&amp;gt;org.mongodb&amp;lt;/groupId&amp;gt; 3&amp;lt;artifactId&amp;gt;mongo-java-driver&amp;lt;/artifactId&amp;gt; 4&amp;lt;version&amp;gt;3.3.0&amp;lt;/version&amp;gt; 5&amp;lt;/dependency&amp;gt; countersコレクションの作成 参考ドキュメントの1番相当
コンソールからmongoDBにアクセスしてコレクションを予め作成しておく
1$ mongo 2&amp;gt; db.counters.insert({_id: &amp;#34;userid&amp;#34;, seq: 0}) 3WriteResult({ &amp;#34;nInserted&amp;#34; : 1 }) getNextSequenceの作成 参考ドキュメントの2番相当
1public Object getNextSequence(DB db){ 2DBCollection counter = db.getCollection(&amp;#34;counters&amp;#34;); 3BasicDBObject find = new BasicDBObject(); 4find.put(&amp;#34;_id&amp;#34;, &amp;#34;userid&amp;#34;); 5BasicDBObject update = new BasicDBObject(); 6update.put(&amp;#34;$inc&amp;#34;, new BasicDBObject(&amp;#34;seq&amp;#34;, 1)); 7DBObject obj = counter.findAndModify(find, update); 89return obj.get(&amp;#34;seq&amp;#34;); 10} 利用する 利用する時は上で作った関数を呼んでその結果を当該ドキュメントの_idとして扱うだけで良い
もしカウンタの値をリセットする時はdropして最初のinsertをもう1回すれば良い</description></item><item><title>JAX-RSでJsonを返す</title><link>https://blog.sky-net.pw/post/jax-rs%E3%81%A7json%E3%82%92%E8%BF%94%E3%81%99/</link><pubDate>Mon, 14 Nov 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/jax-rs%E3%81%A7json%E3%82%92%E8%BF%94%E3%81%99/</guid><description>
はじめに JAX-RSで
1@Path(&amp;#34;test&amp;#34;) 2@GET 3public Map hoge(){ 4Map&amp;lt;String, String&amp;gt; data = new HashMap&amp;lt;&amp;gt;(); 5data.put(&amp;#34;key&amp;#34;, &amp;#34;value&amp;#34;); 6return data; 7} とかしたい時の話
依存性の追加 jersey-serverとjersey-jsonを追加する
追加してからメニューの実行-&amp;gt;プロジェクトをビルド（F11）する
pom.xmlに追記するか依存性の追加から
1&amp;lt;dependency&amp;gt; 2&amp;lt;groupId&amp;gt;com.sun.jersey&amp;lt;/groupId&amp;gt; 3&amp;lt;artifactId&amp;gt;jersey-server&amp;lt;/artifactId&amp;gt; 4&amp;lt;version&amp;gt;1.8&amp;lt;/version&amp;gt; 5&amp;lt;/dependency&amp;gt; 6&amp;lt;dependency&amp;gt; 7&amp;lt;groupId&amp;gt;com.sun.jersey&amp;lt;/groupId&amp;gt; 8&amp;lt;artifactId&amp;gt;jersey-json&amp;lt;/artifactId&amp;gt; 9&amp;lt;version&amp;gt;1.8&amp;lt;/version&amp;gt; 10&amp;lt;/dependency&amp;gt; コード 冒頭と同じだけど
WebApplication.java
1import javax.ws.rs.ApplicationPath; 2import javax.ws.rs.core.Application; 34@ApplicationPath(&amp;#34;/api&amp;#34;) 5public class WebApplication extends Application { 6} Hoge.java
1@Path(&amp;#34;/&amp;#34;) 2public class Hoge { 3@Path(&amp;#34;test&amp;#34;) 4@GET 5public Map hoge(){ 6Map&amp;lt;String, String&amp;gt; data = new HashMap&amp;lt;&amp;gt;(); 7data.put(&amp;#34;key&amp;#34;, &amp;#34;value&amp;#34;); 8return data; 9} 10} してテスト　おわり</description></item><item><title>Vector Thrust日本語化メモ</title><link>https://blog.sky-net.pw/post/vector-thrust%E6%97%A5%E6%9C%AC%E8%AA%9E%E5%8C%96%E3%83%A1%E3%83%A2/</link><pubDate>Sat, 12 Nov 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/vector-thrust%E6%97%A5%E6%9C%AC%E8%AA%9E%E5%8C%96%E3%83%A1%E3%83%A2/</guid><description>
Vector Thrust Steamで売ってるエースコンバットもどき
日本語化してる人がいないみたいなのでチャレンジした
手順 そのうち公開するレポジトリから落として上書きする
公開した
ただフォントの定義がまだ適当だからこれだと一部の文字が小さくなる
core_font_JP.xmlのFont要素を必要な個数増やして必要な属性を修正して種類を増やした上で
Font_Lang_JP.iniに対応するFont要素名を書けば直せる
ただそれだと文字が欠けた時に修正が面倒なのでこういう構成になってる
ここまでやったは良いけどしばらく時間が取れないから続きの作業が出来ないし困った
メモ ファイル構成 ゲームのインストールディレクトリ（Steam/steamapp/common/VectorThrust/）をルートとして
Language 翻訳ファイルとゲーム側の定義とフォントの定義の紐付けをするファイルが入ってる
Lang_JP.iniが翻訳ファイル
Font_Lang_JP.iniがゲーム側の定義とフォントの定義の紐付け
1[Fonts] 2Default = &amp;#34;JP.19&amp;#34; と書くとゲーム側のDefaultフォントの参照がcore_font_JP.xmlのFont要素のname属性の対応するものが参照される
ゲーム内で使われてるフォントは「フォント定義名」のとこで調べられる
media/MyGUI_Media GUI周りのファイルが入ってる
core_font_JP.xml
1&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;utf-8&amp;#34;?&amp;gt; 2&amp;lt;MyGUI type=&amp;#34;Font&amp;#34;&amp;gt; 3&amp;lt;Font name=&amp;#34;JP.19&amp;#34; source=&amp;#34;jp.ttf&amp;#34; size=&amp;#34;16&amp;#34; resolution=&amp;#34;50&amp;#34; antialias_colour=&amp;#34;false&amp;#34; space_width=&amp;#34;4&amp;#34; tab_width=&amp;#34;8&amp;#34; cursor_width=&amp;#34;2&amp;#34; distance=&amp;#34;5&amp;#34; offset_height=&amp;#34;0&amp;#34;&amp;gt; 4&amp;lt;Code range=&amp;#34;33 126&amp;#34;/&amp;gt; 5&amp;lt;Code range=&amp;#34;1025 1105&amp;#34;/&amp;gt; 6&amp;lt;Code range=&amp;#34;8470&amp;#34;/&amp;gt; 7&amp;lt;!-- ぁ - ん --&amp;gt; 8&amp;lt;Code range=&amp;#34;12353 12435&amp;#34;/&amp;gt; 9&amp;lt;!-- ア - ン --&amp;gt; 10&amp;lt;Code range=&amp;#34;12449 12534&amp;#34;/&amp;gt; 11&amp;lt;!-- 亜 - 熙 --&amp;gt; 12&amp;lt;Code range=&amp;#34;19968 39640&amp;#34;/&amp;gt; 13&amp;lt;!</description></item><item><title>PT3で録画と視聴が出来なくなった</title><link>https://blog.sky-net.pw/post/pt3%E3%81%A7%E9%8C%B2%E7%94%BB%E3%81%A8%E8%A6%96%E8%81%B4%E3%81%8C%E5%87%BA%E6%9D%A5%E3%81%AA%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F/</link><pubDate>Fri, 11 Nov 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/pt3%E3%81%A7%E9%8C%B2%E7%94%BB%E3%81%A8%E8%A6%96%E8%81%B4%E3%81%8C%E5%87%BA%E6%9D%A5%E3%81%AA%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F/</guid><description>
はじめに 結論はpt3_drvが消えてたのでリビルドした
Chinachuを利用して録画鯖を建ててるけど今日リアルタイム視聴しようとしたら視聴出来ないことに気付いた
ここのところ放置して利用してなかったから気づかなかった
心当たりがあるのはdist-upgradeしたことくらい
VLCでxspf開いたら何回も認証を要求される
最初はVLCで認証がコケてる？と思ったので試しにxspfで呼びに行くURLを叩いてみた
1&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;UTF-8&amp;#34;?&amp;gt; 2&amp;lt;playlist version=&amp;#34;1&amp;#34; xmlns=&amp;#34;http://xspf.org/ns/0/&amp;#34;&amp;gt; 3&amp;lt;trackList&amp;gt; 4&amp;lt;track&amp;gt; 5&amp;lt;location&amp;gt;URL&amp;lt;/location&amp;gt; 6&amp;lt;title&amp;gt;ほげほげ&amp;lt;/title&amp;gt; 7&amp;lt;/track&amp;gt; 8&amp;lt;/trackList&amp;gt; 9&amp;lt;/playlist&amp;gt; URLをブラウザで開いて認証してみたら認証は通る
ただwatch.m2tsが空で落ちてくる
のでそもそもPT3からデータが抜けてないんじゃないかなって思った
試しに録画してみる のでとりあえず録画コマンドからテストしてみる
1$ recpt1 --b25 --strip 27 20 test.ts 2using B25... 3enable B25 strip 4pid = 2787 5Cannot tune to the specified channel 録画出来ない…
ということは録画前の環境構築かなって思って調べたらドライバを無効にして有効にすると録画出来るらしい
1$ sudo modprobe -r pt3_drv sudo modprobe pt3_drv 2modprobe: FATAL: Module pt3_drv not found. そもそもなかった
pt3_drvをビルドする
1$ git clone https://github.com/m-tsudo/pt3.git 2$ cd pt3 3$ make 4$ sudo make install 5$ sudo modprobe pt3_drv これで解決した</description></item><item><title>pythonのslackclientでmessage buttonを作る</title><link>https://blog.sky-net.pw/post/python%E3%81%AEslackclient%E3%81%A7message-button%E3%82%92%E4%BD%9C%E3%82%8B/</link><pubDate>Fri, 11 Nov 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/python%E3%81%AEslackclient%E3%81%A7message-button%E3%82%92%E4%BD%9C%E3%82%8B/</guid><description>
はじめに チームで共有出来るTodoリスト的なものを目指してMessage Buttonの出し方を調べてみた
結構Jsonで直にAPIを叩く記事は見つかるけどslackclientを使ったものは見かけないのでメモ
slackclient slackapi/python-slackclient PythonからslackのAPIが叩けるライブラリ
予めアクセストークンを用意しておく必要がある
投稿 Basic Usage Sending a message 1from slackclient import SlackClient 23slack_token = os.environ[&amp;#34;SLACK_API_TOKEN&amp;#34;] 4sc = SlackClient(slack_token) 56sc.api_call( 7&amp;#34;chat.postMessage&amp;#34;, 8channel=&amp;#34;#python&amp;#34;, 9text=&amp;#34;Hello from Python! :tada:&amp;#34; 10) シンプル
ボタン付き投稿 ボタンの作り方自体は
Making messages more interactive with buttons に書いてある　これを参考に作る
1import json 2from slackclient import SlackClient 34slack_token = os.environ[&amp;#34;SLACK_API_TOKEN&amp;#34;] 5sc = SlackClient(slack_token) 67attachments = [{ 8&amp;#34;fallback&amp;#34;: &amp;#34;&amp;#34;, 9&amp;#34;text&amp;#34;: u&amp;#34;ボタンの説明&amp;#34;, 10&amp;#34;callback_id&amp;#34;: &amp;#34;&amp;#34;, 11&amp;#34;color&amp;#34;: &amp;#34;#008000&amp;#34;, 12&amp;#34;attachment_type&amp;#34;: &amp;#34;default&amp;#34;, 13&amp;#34;actions&amp;#34;: [ 14{ 15&amp;#34;name&amp;#34;: &amp;#34;done&amp;#34;, 16&amp;#34;text&amp;#34;: &amp;#34;ボタン1&amp;#34;, 17&amp;#34;type&amp;#34;: &amp;#34;button&amp;#34; 18} 19] 20}] 2122sd.</description></item><item><title>Atomでパッケージ一覧の書き出しと読み込み</title><link>https://blog.sky-net.pw/post/atom%E3%81%A7%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E4%B8%80%E8%A6%A7%E3%81%AE%E6%9B%B8%E3%81%8D%E5%87%BA%E3%81%97%E3%81%A8%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF/</link><pubDate>Mon, 07 Nov 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/atom%E3%81%A7%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E4%B8%80%E8%A6%A7%E3%81%AE%E6%9B%B8%E3%81%8D%E5%87%BA%E3%81%97%E3%81%A8%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF/</guid><description>
はじめに Atomでパッケージ一覧の書き出しと読み込みのメモ
環境を別にPCに移すだけならUserDir/.atomを丸々コピーするのもあり
apmコマンドを使う　多分デフォでパスが通ってる
Winだと
1UserDir/AppData/Local/atom/bin/apm.cmd とかインストールしたところに入ってる
書き出し 1$ apm list --installed --bare &amp;gt; package-list.txt 一覧がバージョンと共に書き出される
読み込み 1$ apm install --packages-file package-list.txt スター付き アカウントあればスター付きのやつを拾ってきたりすることも出来るっぽいけど前者で事足りたのでメモ程度
詳しくは参考元を
1$ apm star --installed 参考 Installed packages list into single file</description></item><item><title>RaspberryPi2でrootなしでGPIOを操作する</title><link>https://blog.sky-net.pw/post/raspberrypi2%E3%81%A7root%E3%81%AA%E3%81%97%E3%81%A7gpio%E3%82%92%E6%93%8D%E4%BD%9C%E3%81%99%E3%82%8B/</link><pubDate>Sun, 06 Nov 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/raspberrypi2%E3%81%A7root%E3%81%AA%E3%81%97%E3%81%A7gpio%E3%82%92%E6%93%8D%E4%BD%9C%E3%81%99%E3%82%8B/</guid><description>
はじめに RaspberryPi2のApache上でWebからGPIOを操作する際に詰まったのでメモ
前回の方法で使ってるWiringPi2だとGPIOを利用する際に
1wiringpi2.wiringPiSetupGpio() するとroot権が必要とのエラーが出て止まります
1wiringpi2.wiringPiSetupSys() だとroot権なしで実行出来ますがこれだとdigitalWriteは出来ますがPWM等を制御することは出来ない様です
というわけで使うモジュールを変えました
元々入ってるRPi.GPIOで簡単にroot権なしでPWM制御出来たのでコードを載せておきます
1import RPi.GPIO as GPIO 23PIN1 = 13 45GPIO.setmode(GPIO.BCM) 6GPIO.setup(PIN1, GPIO.OUT) 7servo = GPIO.PWM(PIN1, 50) 89getDuty = lambda angle: (1.0 + angle/180.0)/20.0*100.0 1011while True: 12i = raw_input() 13if i == &amp;#34;e&amp;#34;: 14break 15servo.start(getDuty(int(i))) 1617servo.stop() 18GPIO.cleanup() これでmod_wsgi使いつつFlaskでWebから操作出来る監視カメラもどきが出来ました
前はrootでapp.runして強引に動かしてました
もしダメだったらApacheの実行ユーザー（www-data）をgpioグループに追加するとうまくいくと思います
1$ sudo cat /etc/apache2/envvars | grep APACHE_RUN_USER 2とかして確認する 3$ sudo gpasswd -a www-data gpio 4$ sudo service apache2 restart</description></item><item><title>NW.jsでデスクトップウィジェット的な</title><link>https://blog.sky-net.pw/post/nw.js%E3%81%A7%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97%E3%82%A6%E3%82%A3%E3%82%B8%E3%82%A7%E3%83%83%E3%83%88%E7%9A%84%E3%81%AA/</link><pubDate>Wed, 02 Nov 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/nw.js%E3%81%A7%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97%E3%82%A6%E3%82%A3%E3%82%B8%E3%82%A7%E3%83%83%E3%83%88%E7%9A%84%E3%81%AA/</guid><description>
前回トラブって上手くいかなかったのでNW.jsでリトライした
仕組みの都合上フロントのjsからウィンドウ操作が簡単に出来るので共存出来ました
こちらのコードをほぼそのままお借りました
変えたのは操作対象をwindowにしたくらい
NWjs: Chat head click not working if -webkit-app-region: drag is set package.json
1{ 2&amp;#34;name&amp;#34;: &amp;#34;desktop&amp;#34;, 3&amp;#34;version&amp;#34;: &amp;#34;1.0.0&amp;#34;, 4&amp;#34;description&amp;#34;: &amp;#34;&amp;#34;, 5&amp;#34;main&amp;#34;: &amp;#34;index.html&amp;#34;, 6&amp;#34;scripts&amp;#34;: { 7&amp;#34;test&amp;#34;: &amp;#34;echo \&amp;#34;Error: no test specified\&amp;#34; &amp;amp;&amp;amp; exit 1&amp;#34;, 8&amp;#34;start&amp;#34;: &amp;#34;nw&amp;#34; 9}, 10&amp;#34;window&amp;#34;: { 11&amp;#34;width&amp;#34;: 400, 12&amp;#34;height&amp;#34;: 600, 13&amp;#34;toolbar&amp;#34;: false, 14&amp;#34;transparent&amp;#34;: true, 15&amp;#34;frame&amp;#34;: false, 16&amp;#34;resizable&amp;#34;: false, 17&amp;#34;always-on-top&amp;#34;: true 18} 19} transparentとframeしか有効になってない気がする
常に全面になってないしツールバーはtrue/false時に挙動が変わらないような…
index.html
1&amp;lt;!DOCTYPE html&amp;gt; 2&amp;lt;html lang=&amp;#34;ja&amp;#34;&amp;gt; 3&amp;lt;head&amp;gt; 4&amp;lt;meta charset=&amp;#34;utf-8&amp;#34;&amp;gt; 5&amp;lt;title&amp;gt;デスクトップマスコット&amp;lt;/title&amp;gt; 67&amp;lt;script src=&amp;#34;js/jquery.</description></item><item><title>win-mouseが使えない話</title><link>https://blog.sky-net.pw/post/win-mouse%E3%81%8C%E4%BD%BF%E3%81%88%E3%81%AA%E3%81%84%E8%A9%B1/</link><pubDate>Tue, 01 Nov 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/win-mouse%E3%81%8C%E4%BD%BF%E3%81%88%E3%81%AA%E3%81%84%E8%A9%B1/</guid><description>
未解決です
はじめに Electronでウィジェットを作ってる時に画面全体をドラッグで移動＋クリックで別の動作をしたいみたいな事例
まず普通にElectron側
フレームなしの背景透過状態にする
1&amp;#34;use strict&amp;#34;; 23const electron = require(&amp;#34;electron&amp;#34;); 4const app = electron.app; 56const BrowserWindow = electron.BrowserWindow; 7let mainWindow; 89app.on(&amp;#34;window-all-closed&amp;#34;, function() { 10if (process.platform != &amp;#34;darwin&amp;#34;) { 11app.quit(); 12} 13}); 1415app.on(&amp;#34;ready&amp;#34;, function() { 16mainWindow = new BrowserWindow({ 17width: 400, 18height: 600, 19transparent: true, 20frame: false, 21}); 2223mainWindow.loadURL(&amp;#34;file://&amp;#34; + __dirname + &amp;#34;/index.html&amp;#34;); 24mainWindow.openDevTools(); 2526mainWindow.on(&amp;#34;closed&amp;#34;, function() { 27mainWindow = null; 28}); 29}); 次にhtml側
1&amp;lt;!DOCTYPE html&amp;gt; 2&amp;lt;html lang=&amp;#34;ja&amp;#34;&amp;gt; 3&amp;lt;head&amp;gt; 4&amp;lt;meta charset=&amp;#34;utf-8&amp;#34;&amp;gt; 5&amp;lt;title&amp;gt;ほげ&amp;lt;/title&amp;gt; 6&amp;lt;style&amp;gt; 7html, body{ 8margin: 0; 9padding: 0; 10width: 100%; 11height: 100%; 12} 13body{ 14-webkit-app-region: drag; 15-webkit-user-select: none; 16} 17&amp;lt;/style&amp;gt; 18&amp;lt;/head&amp;gt; 19&amp;lt;body&amp;gt; 20なんか適当にコンテンツ 21&amp;lt;/body&amp;gt; 22&amp;lt;/html&amp;gt; みたいな感じで開発すると中に置いたコンテンツをドラッグすることでウィンドウを移動させることが出来る</description></item><item><title>UnityでKinect v2を利用する</title><link>https://blog.sky-net.pw/post/unity%E3%81%A7kinect-v2%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B/</link><pubDate>Mon, 31 Oct 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/unity%E3%81%A7kinect-v2%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B/</guid><description>
はじめに UnityでKinect v2を利用するメモ
画像を出したりだとかはいっぱいサンプルあるので単純に人を検出するだけのシンプルなコード
バージョン Unity 5.3 Kinect v2 2.0.1410 必要なライブラリ Kinect v2のSDK（ https://www.microsoft.com/en-us/download/confirmation.aspx?id=44561 ）を入れた上で
http://download.microsoft.com/download/F/8/1/F81BC66F-7AA8-4FE4-8317-26A0991162E9/KinectForWindows_UnityPro_2.0.1410.zip
からUnity用のパッケージを落とす
Kinect.2.0.1410.19000.unitypackageをインポートして全部入れる
ソース 起動と終了時の処理 最低限のコードだけならこんな感じ
Kinect.cs
1using UnityEngine; 2using System.Collections; 3using System.Collections.Generic; 45using Windows.Kinect; 67public class Kinect : MonoBehaviour { 8KinectSensor _Sensor; 9BodyFrameReader _Reader; 10Body[] _Data = null; 1112void Start () { 13_Sensor = KinectSensor.GetDefault(); 14if (_Sensor != null){ 15_Reader = _Sensor.BodyFrameSource.OpenReader(); 16if (!_Sensor.IsOpen){ 17_Sensor.Open(); 18} 19} 20} 2122void OnApplicationQuit(){ 23if (_Reader !</description></item><item><title>Unityでソケットサーバーを建てる</title><link>https://blog.sky-net.pw/post/unity%E3%81%A7%E3%82%BD%E3%82%B1%E3%83%83%E3%83%88%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92%E5%BB%BA%E3%81%A6%E3%82%8B/</link><pubDate>Sun, 30 Oct 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/unity%E3%81%A7%E3%82%BD%E3%82%B1%E3%83%83%E3%83%88%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92%E5%BB%BA%E3%81%A6%E3%82%8B/</guid><description>
はじめに ソケットサーバー作るよ！
Unityでソケット通信したい！って思って調べたらあんまり情報が見つからなかったので泣いた
のでメモ
バージョン Unity 5.3 コード 幾つかポート開けて見たかったので適当に継承して使うクラスを作ってみた
C#良く分からんので指摘があったら是非
try-catch今書いたからおかしいかもしれない
SocketServer.cs
1using UnityEngine; 2using System; 3using System.IO; 4using System.Net; 5using System.Net.Sockets; 6using System.Collections.Generic; 78public class SocketServer : MonoBehaviour { 9TcpListener listener = null; 10List&amp;lt;TcpClient&amp;gt; clients = new List&amp;lt;TcpClient&amp;gt;(); 11readonly object lockObj = new object(); 1213protected void listen(string host, int port){ 14IPAddress ip = IPAddress.Parse(host); 15listener = new TcpListener(ip, port); 16listener.Start(); 17listener.BeginAcceptSocket(OnRequested, listener); 18} 1920public void sendMessage(string msg){ 21if (clients.</description></item><item><title>GitlabのWebAPIを使う話</title><link>https://blog.sky-net.pw/post/gitlab%E3%81%AEwebapi%E3%82%92%E4%BD%BF%E3%81%86%E8%A9%B1/</link><pubDate>Sat, 29 Oct 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/gitlab%E3%81%AEwebapi%E3%82%92%E4%BD%BF%E3%81%86%E8%A9%B1/</guid><description>
WebAPI Webhook触ったついでに試す
バージョンの差異でないことがあったりするのであれ？って思ったらドキュメントを読む
https://github.com/gitlabhq/gitlabhq/tree/master/doc/api
左上からブランチを適宜自分のバージョンに変更して読むと捗ります
適当に検索して見つけたAPI叩こうとしたら使用しようと思ったGitlabが古すぎて使えなかったりしました
試す Google Chromeの拡張機能のPostmanとかが気軽に試せてオススメ
抑えるべき点はヘッダーにPRIVATE-TOKENが必要だということ
これは自分のユーザーページに飛べばあります　コピペして使います
ハマりどころ GET /projects/:id/repository/commitsでレポジトリ名で指定したい時
:idのところにNAMESPACE/PROJECT_NAMEで書けとドキュメントにあります
この間のスペースはエンコードした「%2F」で書く必要があります
つまりユーザー名がhogeでレポジトリ名がfugaの場合
/projects/hoge%2Ffuga/repository/commits
となります</description></item><item><title>GitlabのWebhookを使う話</title><link>https://blog.sky-net.pw/post/gitlab%E3%81%AEwebhook%E3%82%92%E4%BD%BF%E3%81%86%E8%A9%B1/</link><pubDate>Fri, 28 Oct 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/gitlab%E3%81%AEwebhook%E3%82%92%E4%BD%BF%E3%81%86%E8%A9%B1/</guid><description>
はじめに GitlabでWebhook使ってSlackにでも投稿しようか、という試み
Gitlabに限らずGithubにもあるのでそちらの場合は適宜ドキュメントを読む
ドキュメント読もうにもバージョンが分からん…って時は
https://ドメイン名/help
とか見れば分かる
※そもそもSlackへの通知は公式でサポートされてるのでわざわざ作る必要ないです
追記
Gitlabをオンプレで運用しててローカルネットへのWebhookが動かない！って場合は管理コンソールで内側ネットワークへのアクセスを許可しないと動きません．
バージョン 8.5.1 Webhookとは コミットとか各種イベントが発生した時に向こうからURLを叩いてくれる
のでURLの用意とそこで動くWebアプリだけ用意しておけば良い感じに受け取って処理出来る
Webhookの登録 どのバージョンのGitlabも
https://ドメイン名/ユーザー名/レポジトリ名/hooks
に登録画面がある
適宜必要なイベントにチェックする
今回はコミットログだけ拾えれば良いのでpushだけセレクト　URLは適当に
チャンネル名を指定してもらうついでにただ適当にURL叩かれて動いても困るので適当なクエリをひっつけて一応Gitlabからってことを確認しておく
http://ドメイン名/パス/?channel=チャンネル名&amp;amp;secretkey=hogehoge
みたいな感じにした
アプリの作成 コード とりあえずFlaskでサクッと作る
Jsonのフォーマットは
https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/web_hooks/web_hooks.md
こことか読みましょう
1# -*- coding:utf-8 -*- 23import json 4import requests 5from flask import Flask, request, abort 6app = Flask(__name__) 78secretkey = &amp;#34;hogehoge&amp;#34; 910@app.route(&amp;#34;/&amp;#34;, methods=[&amp;#34;POST&amp;#34;]) 11def index(): 12if secretkey != request.args.get(&amp;#34;secretkey&amp;#34;, &amp;#34;&amp;#34;): 13abort(400) 1415data = json.loads(request.data) 1617temp = u&amp;#34;&amp;#34;&amp;#34;レポジトリ「{repo}」に{name}がコミットしました 18{msg}19{url}&amp;#34;&amp;#34;&amp;#34; 20message = temp.</description></item><item><title>PTC Creo 3.0でデフォルトの単位系を変更する</title><link>https://blog.sky-net.pw/post/ptc-creo-3.0%E3%81%A7%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E3%81%AE%E5%8D%98%E4%BD%8D%E7%B3%BB%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B/</link><pubDate>Wed, 19 Oct 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/ptc-creo-3.0%E3%81%A7%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E3%81%AE%E5%8D%98%E4%BD%8D%E7%B3%BB%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B/</guid><description>
PTC Creo 3.0はデフォルトの単位系だとインチポンド秒になっててわかりにくいのでミリメートルキログラム秒に変更する
プロジェクト単位だとファイル→準備→モデル特性から変更出来る
ただこれだと毎回操作が必要なのでconfig.proを編集してデフォルト値を変更する
インストールパス\PTC\Creo 3.0\M070\Common Files\text\config.pro
にコンフィグファイルがあるのでこれを編集する
当該箇所は249行目付近
1***** Options for MMKS Unit System ***** の方がコメントついてると思うので外して
1***** Options for INLBS Unit System ***** の方にコメントをつける（頭に!を付与する）
上記操作をすると多分こんな感じになる
1! ***** Options for MMKS Unit System ***** 2! 3drawing_setup_file $pro_directory\creo_standards\draw_standards\standard_mm.dtl 4pro_unit_length unit_mm 5pro_unit_mass unit_kilogram 6pro_unit_sys mmks 7template_designasm $pro_directory\creo_standards\templates\start_assembly_mmks.asm 8template_drawing $pro_directory\creo_standards\templates\a3_drawing.drw 9template_mfgcast $pro_directory\creo_standards\templates\mmks_mfg_cast.asm 10template_mfgemo $pro_directory\creo_standards\templates\mmks_mfg_emo.asm 11template_mfgmold $pro_directory\creo_standards\templates\mmks_mfg_mold.asm 12template_mfgnc $pro_directory\creo_standards\templates\mmks_mfg_nc.asm 13template_sheetmetalpart $pro_directory\creo_standards\templates\sheetmetal_start_part_mmks.prt 14template_solidpart $pro_directory\creo_standards\templates\solid_start_part_mmks.prt 15weld_ui_standard iso 16! 17! ***** Options for INLBS Unit System ***** 18!</description></item><item><title>PTC Creo 3.0の登録</title><link>https://blog.sky-net.pw/post/ptc-cero-3.0%E3%81%AE%E7%99%BB%E9%8C%B2/</link><pubDate>Tue, 18 Oct 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/ptc-cero-3.0%E3%81%AE%E7%99%BB%E9%8C%B2/</guid><description>
はじめに PTC Cero 3.0の学生版は無料で使えるので登録してみる
少し手間取ったのでメモ
会員登録
Create New PTC eSupport Account
から会員登録する ダウンロード
学生向け無料ダウンロード
からアンケート的なものに答える
最初このページから出来るのかと思って格闘してたけど無駄な時間だった
Thank you for Registration! みたいな画面が出るので1個目のPDFを開く
PDFを開くとダウンロードのURLが書いてあるのでそこへアクセス
ログインする必要があるので1の会員登録した情報でログインする
MED-100WIN-CD-400_M070_Win64.zip
をダウンロードする インストール
解凍してsetup-student.exeを実行する
起動時にこちらもログインを求められるので先程と同じくログイン
インストールするパッケージはデフォルトのままにした
インストール位置だけ変更した
変更方法はエクスプローラーでインストール先パスをコピーしてそれをインストーラーの当該箇所にコピペする 起動
スタートメニューなどからPTC Creo Parametric 3.0 M070を起動する
無事起動したら終わり</description></item><item><title>JAX-RSを試す</title><link>https://blog.sky-net.pw/post/jax-rs%E3%82%92%E8%A9%A6%E3%81%99/</link><pubDate>Sun, 16 Oct 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/jax-rs%E3%82%92%E8%A9%A6%E3%81%99/</guid><description>
はじめに NetBeansでJAX-RSを動かすところまでメモ
環境 NetBeans 8.2 EE版
https://netbeans.org/downloads/?pagelang=ja GlassFish 4.1.1
上のに付属してるやつ プロジェクト作成 プロジェクトを選択
ファイル→新規プロジェクト→Maven→Webアプリケーション 名前と場所
設定値は適当に決める
この記事の値は全部デフォルト値で作成した時の話 設定
サーバー：GlassFish Server4.1.1
JavaEEバージョン：JavaEE 7 Web 終了押してプロジェクトを作成する
実装 左側のプロジェクトツリーのソース・パッケージの欄にある先ほど作成したパッケージ名の上で右クリック
新規→Javaクラス
WebApplicationとかで作成
中身を
1package com.mycompany.mavenproject1; 2import javax.ws.rs.ApplicationPath; 3import javax.ws.rs.core.Application; 45@ApplicationPath(&amp;#34;/&amp;#34;) 6public class MyWebApplication extends Application { 7} 適当にもう1個クラスを作成する
1package com.mycompany.mavenproject1; 23import javax.ws.rs.GET; 4import javax.ws.rs.Path; 56@Path(&amp;#34;test&amp;#34;) 7public class Rest { 8@GET 9public String helloWorld() { 10return &amp;#34;Hello World!!&amp;#34;; 11} 12} 実行 ここまで作ったら保存して実行する</description></item><item><title>JSON-libを使う</title><link>https://blog.sky-net.pw/post/json-lib%E3%82%92%E4%BD%BF%E3%81%86/</link><pubDate>Sun, 16 Oct 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/json-lib%E3%82%92%E4%BD%BF%E3%81%86/</guid><description>
はじめに 前回と同じく使い方で困ったのでメモ
環境 NetBeans 8.2
というか1個前の記事JAX-RSを試すと同じ インストール プロジェクトツリーのプロジェクトファイル→pom.xmlを開く
以下を追加する
1&amp;lt;dependencies&amp;gt; 2// ここから 3&amp;lt;dependency&amp;gt; 4&amp;lt;groupId&amp;gt;net.sf.json-lib&amp;lt;/groupId&amp;gt; 5&amp;lt;artifactId&amp;gt;json-lib&amp;lt;/artifactId&amp;gt; 6&amp;lt;version&amp;gt;2.4&amp;lt;/version&amp;gt; 7&amp;lt;classifier&amp;gt;jdk15&amp;lt;/classifier&amp;gt; 8&amp;lt;/dependency&amp;gt; 9// ここまで 10&amp;lt;dependency&amp;gt; 11&amp;lt;groupId&amp;gt;javax&amp;lt;/groupId&amp;gt; 12&amp;lt;artifactId&amp;gt;javaee-web-api&amp;lt;/artifactId&amp;gt; 13&amp;lt;version&amp;gt;7.0&amp;lt;/version&amp;gt; 14&amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt; 15&amp;lt;/dependency&amp;gt; 16&amp;lt;/dependencies&amp;gt; 記述元はここからJson Lib » 2.4
ただこれだけだと動かない
1&amp;lt;classifier&amp;gt;jdk15&amp;lt;/classifier&amp;gt; が要る
JSON-lib Frequently Asked Questions How do I configure Json-lib as a dependency with Maven2 ?
As Json-lib comes in two flavors (for the time being) you'll have to add to your dependency declaration, like the following:</description></item><item><title>ゲームのスコアをスプレッドシートに書き出す</title><link>https://blog.sky-net.pw/post/%E3%82%B2%E3%83%BC%E3%83%A0%E3%81%AE%E3%82%B9%E3%82%B3%E3%82%A2%E3%82%92%E3%82%B9%E3%83%97%E3%83%AC%E3%83%83%E3%83%89%E3%82%B7%E3%83%BC%E3%83%88%E3%81%AB%E6%9B%B8%E3%81%8D%E5%87%BA%E3%81%99/</link><pubDate>Thu, 22 Sep 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/%E3%82%B2%E3%83%BC%E3%83%A0%E3%81%AE%E3%82%B9%E3%82%B3%E3%82%A2%E3%82%92%E3%82%B9%E3%83%97%E3%83%AC%E3%83%83%E3%83%89%E3%82%B7%E3%83%BC%E3%83%88%E3%81%AB%E6%9B%B8%E3%81%8D%E5%87%BA%E3%81%99/</guid><description>
はじめに ゲームのスコアをスプレッドシートに書き出しといたらあとで振り返りとか成長が見れて面白いんじゃないかなって思ったのでやってみた
仕組みはシンプルでスプレッドシートのGASを使ってAPIを叩いてその結果をシートに書き込むだけ
GASはcronみたいに定期的に呼び出すことが出来るので一度設置したらひたすら書き出してくれる
あとはグラフを作るなりGASでAPI化して自サイトで公開するなり色々出来る　LineBotも作れるしGASっょぃ
とりあえず今回はosuのスコアを保存してみる
APIさえあれば適宜取るとこと保存するとこ変えるだけ
ファイルの作成 Google Driveから新しくスプレッドシートを作成する
シートの作成 シート名をゲーム名に変えておく　今回は「osu」
1行目に適当にデータ名を入れとく
GAS 上のメニューの「ツール」→「スクリプトエディタ」を開く
スクリプトを作成する　ゲーム名.gsとかで
コードはこんな感じにする
1function getScore() { 2// ユーザーのスコアデータ取得 3 var baseurl = &amp;#34;https://osu.ppy.sh&amp;#34;; 4var getuser = &amp;#34;/api/get_user&amp;#34;; 56var req = [ 7&amp;#34;k=&amp;#34; + &amp;#34;APIキー&amp;#34;, 8&amp;#34;u=&amp;#34; + &amp;#34;ユーザー名&amp;#34;, 9] 1011var url = baseurl + getuser + &amp;#34;?&amp;#34; + req.join(&amp;#34;&amp;amp;&amp;#34;); 12var res = UrlFetchApp.fetch(url); 13var data = JSON.parse(res)[0]; 1415// Spreadsheetに書き出し 16 var sheet = SpreadsheetApp.getActive().getSheetByName(&amp;#34;osu&amp;#34;); 17var row = sheet.</description></item><item><title>LimeChatのマクロ設定メモ</title><link>https://blog.sky-net.pw/post/limechat%E3%81%AE%E3%83%9E%E3%82%AF%E3%83%AD%E8%A8%AD%E5%AE%9A%E3%83%A1%E3%83%A2/</link><pubDate>Sun, 18 Sep 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/limechat%E3%81%AE%E3%83%9E%E3%82%AF%E3%83%AD%E8%A8%AD%E5%AE%9A%E3%83%A1%E3%83%A2/</guid><description>
ゲームの垂れ流ししてる時に滅多にないけどコメント貰っても気付け無いからどうしようかなーって思ったときに
TwitchならIRCでチャットに接続出来るので
Twitch→IRC（LimeChat2）→自作スクリプト
で良い感じに扱えるんじゃないかと思って試したら少し詰まったのでメモ
LimeChat 接続 予めサーバーに接続してチャンネルに入ってWeb上の方と問題なく接続出来るか確認しておく
この辺は解説記事が多いので詰まることもなかった
一応メモっておくと
http://www.twitchapps.com/tmi/ に接続してパスワードを発行する LimeChatを起動して「自分で設定する（上級者向け）」みたいな文言のを選択する サーバーの追加（Ctrl+Q）から以下のように設定する 設定名：適当にわかりやすいのを ホスト名：irc.twitch.tv ポート：80 サーバーパスワードを使う：チェック サーバーパスワード：先程生成したのを貼り付け ニックネーム：TwitchのアカウントID 左上のボタン（Alt+C）で接続してみる チャンネル追加（Ctrl+W）で自分のチャンネル（#で始まるもの）を入力 チャンネルに入って適当にWebとLimeChat両方から入力してみてテスト マクロ 設定→マクロ設定（Alt+Shift+M）を開く 新規ボタンをクリックして設定名を入力して新しく作成 マクロファイルの編集画面が開くので新規を押して新しく作成 設定を以下のようにする ユーザー：%me|* コマンド：Privmsg チャンネル：#hogehoge（自分のチャンネル名） メッセージ：空 自分と送信者の状態：なし 動作：Execute（確認用に表示させてるので動いたらExecuteMinimizeに変更する） 送信者：空 動作の情報：ここに自分のプログラムの実行パスを書く 例）python hoge.py &amp;quot;%n %m&amp;quot;
%nにはユーザー名
%mにはメッセージが入る
今回は読み上げするだけなので一文にして渡してるけど必要に応じて適宜送ったり送らなかったりすれば良い OKを2回押してマクロの設定まで戻る 設定名の右横を右クリックし有効にする
これ忘れてて結構ハマりました　しょーもない プログラム ただ引数として投げられてくるので各言語のargvを参照して好きなように料理すれば良い
とりあえずこんな感じのコードでも置いてゆかりさんに読み上げてもらうことにした</description></item><item><title>PyQtでサブウィンドウを作る</title><link>https://blog.sky-net.pw/post/pyqt%E3%81%A7%E3%82%B5%E3%83%96%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%82%92%E4%BD%9C%E3%82%8B/</link><pubDate>Thu, 15 Sep 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/pyqt%E3%81%A7%E3%82%B5%E3%83%96%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%82%92%E4%BD%9C%E3%82%8B/</guid><description>
はじめに いつも検索しちゃうのでメモ
QtDesignerで作ったオリジナルなダイアログを出したい時の話
PyQt5で書いてるけど4でも大体同じ
ウィンドウを作る 予め2つのウィンドウを作成します
メインの画面はMainWindowを使って作り
サブの画面はFormを使って作成します
コンバート いつも通りpyファイルを生成する
1$ pyuic5 mainwindow.ui &amp;gt; ui_mainwindow.py 2$ pyuic5 subwindow.ui &amp;gt; ui_subwindow.py コード 1# -*- coding: utf-8 -*- 23import sys 4from PyQt5 import QtWidgets 567class SubWindow(QtWidgets.QDialog): 8def __init__(self, parent=None): 9QtWidgets.QDialog.__init__(self, parent) 10self.ui = Ui_SubWindow() 11self.ui.setupUi(self) 1213def show(self): 14self.exec_() 1516class MainWindow(QtWidgets.QMainWindow): 17def __init__(self, parent=None): 18QtWidgets.QMainWindow.__init__(self, parent) 19self.ui = Ui_MainWindow() 20self.ui.setupUi(self) 2122self.sub = SubWindow(self) 2324def openDialog(self): 25self.sub.show() 2627if __name__ == &amp;#34;__main__&amp;#34;: 28app = QtWidgets.QApplication(sys.argv) 29myapp = MainWindow() 30myapp.</description></item><item><title>Pythonで動画情報を取得する</title><link>https://blog.sky-net.pw/post/python%E3%81%A7%E5%8B%95%E7%94%BB%E6%83%85%E5%A0%B1%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B/</link><pubDate>Thu, 15 Sep 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/python%E3%81%A7%E5%8B%95%E7%94%BB%E6%83%85%E5%A0%B1%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B/</guid><description>
はじめに Pythonで動画情報の取得をしたかった時に色々モジュール試してみたけど大抵どれも裏でffmpegかffprobe使っててPythonで完結してるものを見つけられなかったのでメモがてら使い方を書いておく
hachoir ファイルのメタデータの取得・編集が出来る
対応ファイルフォーマットは以下参考
http://hachoir3.readthedocs.io/metadata.html
Python2 インストール pipで入れる
幾つかにパッケージが分かれてて既に厄介　今回はhachoir_metadataを使うので
1$ pip install hachoir_core hachoir_metadata hachoir_parser 使い方 1# -*- coding: utf-8 -*- 23from hachoir_parser import createParser 4from hachoir_metadata import extractMetadata 56filepath = u&amp;#34;ファイルパス&amp;#34; 7parser = createParser(filepath) 89meta = extractMetadata(parser) 10print meta.exportPlaintext() 11print meta.get(&amp;#34;duration&amp;#34;) 再生時間はtimedeltaで返ってくる
素直に添字で取れれば良いのにgetメソッド使わないといけなかったりで微妙に使いづらい
meta.dict[&amp;quot;_Metadata__data&amp;quot;].keys()
とか使えば一応添字の一覧が見れる　なぜkeysメソッドとかがないのか
Githubで探すとexportPlaintextの結果を「:」でsplitしたりしててみんな困ったんだろうなって
ドキュメント見ても良い感じのやり方を見つけられなかったのでぼちぼち元のコードを見つつ・・・
Python3 インストール pipでは入らないのでソースコードを直接落として使う
レポジトリは
https://bitbucket.org/haypo/hachoir3/overview
にあるのでcloneするかファイル→ダウンロードで最新のコードを落としてくる
必要なのはhachoirディレクトリだけ今回は試すだけなのでそれだけディレクトリにコピーした
使い方 1from hachoir.metadata import extractMetadata 2from hachoir.parser import createParser 34filepath = u&amp;#34;ファイルパス&amp;#34; 5parser = createParser(filepath) 6meta = extractMetadata(parser) 7duration = meta.</description></item><item><title>Unable to find vcvarsall.bat</title><link>https://blog.sky-net.pw/post/unable-to-find-vcvarsall.bat/</link><pubDate>Sat, 10 Sep 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/unable-to-find-vcvarsall.bat/</guid><description>
問題点 Windows7 64bit Python3.5 環境でパッケージ入れようとしたら以下のエラーで怒られた
1Unable to find vcvarsall.bat その解決策
環境作ると毎回これやってる気がする
解決策 コンパイラを入れる
対応してるのは
How to deal with the pain of “unable to find vcvarsall.bat” で確認する
2.6 ～ 3.2 Microsoft Visual C++ Compiler for Python 2.7 3.3 ～ 3.4 Windows SDK for Windows 7 and .NET 4.0 3.5 Visual C++ Build Tools 2015
or Visual Studio 2015 3.</description></item><item><title>Python3.5でexe作る話</title><link>https://blog.sky-net.pw/post/python3.5%E3%81%A7exe%E4%BD%9C%E3%82%8B%E8%A9%B1/</link><pubDate>Fri, 09 Sep 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/python3.5%E3%81%A7exe%E4%BD%9C%E3%82%8B%E8%A9%B1/</guid><description>
はじめに 2系の時はpy2exeに頼りっきりだった
インストーラー欲しい時だけ他のものに浮気してたけどzipオプション有効にすれば一塊になって配布しやすかったので
3.5から事情が変わったらしいので少しトラブりました故にメモ
記事書いてる時点での話なので日が経ってる様なら状況が変わってるかもしれません
Python3.5 64bit Windows7 64bit 環境でのお話
py2exe 今までお世話になってた
2系の時はインストーラーを落としてきてインストールした気がする
3系からpipで入るみたいですが3.4までしかサポートしてません
ソース1：Is there a py2exe version that's compatible with python 3.5?
3.5から内部仕様が変わって動かないとのこと
run-py3.5-win-amd64.exeに変更したら動くかと思ったけどそんなに甘くなかった
cx_Freeze pipから入れると
1error: file &amp;#39;~\build\cx-freeze\cxfreeze-postinstall&amp;#39; does not exist. pipから入るのはバージョンが古い（4.3.4）です　公式サイトに騙されました
ソース2：Missed cxfreeze-postinstall script in source distribution
新しいものなら大丈夫なのでレポジトリをクローンしてきてそこからインストールします
もしくはソース1で紹介されてるwhlを落として使えば良いと思います
https://github.com/sekrause/cx_Freeze-Wheels</description></item><item><title>PyQt5でメインウィンドウの表示</title><link>https://blog.sky-net.pw/post/pyqt5%E3%81%A7%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%81%AE%E8%A1%A8%E7%A4%BA/</link><pubDate>Thu, 08 Sep 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/pyqt5%E3%81%A7%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%81%AE%E8%A1%A8%E7%A4%BA/</guid><description>
はじめに 今更ながらにPyQt5に移行したのでメモ
PyQt4から少し変わってるのでそのままだと動かない
インストール pipからできようになった
1$ pip3 install pyqt5 2または 3$ python3 -m pip install pyqt5 とかでインストール出来る
～2016年9月8日現在の話～
QtDesignerが入らないっぽいので現状Qtの公式のインストーラーからツールだけ選択して落としたQtCreatorを使うしかなさ気？
Toolだけ選択しても2GB近くあるので心証が宜しくない
QtDesignerと同じ画面を呼ぶにはファイル→ファイル/プロジェクトの新規作成→ファイルとクラスからQt→Qt Designer フォームを選択でいつもの慣れ親しんだ画面が出てくる
waybackとかで見る限り5.6まではexeで配布されてたので入ってるっぽいですが5.7（7月末）から変わった？
どこかからQtDesignerだけ落とすかと思ったけど見当たらず
詳細分かる方教えて下さい
～終わり～
ウィンドウ作成 いつも通りQtDesignerを使って作成する（今回はPyQt4の時に使ってたQtDesignerで作業した）
作るのはMainWindowの方
uiファイル読み込む派の人はサンプル探せばあるのでそちらで
pyファイルに変換するにはpyuic5を使う
1$ where pyuic5 2インストールパス/Scripts/pyuic5 3$ pyuic5 hoge.ui &amp;gt; ui.py スクリプトを書く パッケージ名がPyQt4→PyQt5に変わったのと
QtGuiから呼んでたものがQtWidgetsから呼ぶようになった感じ
1# -*- coding: utf-8 -*- 23import sys 4from PyQt5 import QtWidgets 5from ui import Ui_MainWindow 678class Application(QtWidgets.QMainWindow): 9def __init__(self, parent=None): 10QtWidgets.QMainWindow.__init__(self, parent) 11self.ui = Ui_MainWindow() 12self.ui.setupUi(self) 1314if __name__ == &amp;#34;__main__&amp;#34;: 15app = QtWidgets.</description></item><item><title>C#のソケット通信でクライアントが切断したか調べる</title><link>https://blog.sky-net.pw/post/csharp%E3%81%AE%E3%82%BD%E3%82%B1%E3%83%83%E3%83%88%E9%80%9A%E4%BF%A1%E3%81%A7%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%81%8C%E5%88%87%E6%96%AD%E3%81%97%E3%81%9F%E3%81%8B%E8%AA%BF%E3%81%B9%E3%82%8B/</link><pubDate>Mon, 22 Aug 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/csharp%E3%81%AE%E3%82%BD%E3%82%B1%E3%83%83%E3%83%88%E9%80%9A%E4%BF%A1%E3%81%A7%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%81%8C%E5%88%87%E6%96%AD%E3%81%97%E3%81%9F%E3%81%8B%E8%AA%BF%E3%81%B9%E3%82%8B/</guid><description>
あとで別記事書きますが簡単なソケット通信サーバーを書いた時に困ったのでメモ
クライアントの切断を検知するのにConnectedプロパティを使えば良さそうだなって思って痛い目にあった
信頼と実績のstackoverflowに解決策がありました
How to check if a socket is connected/disconnected in C#? Socketクラスの場合 1Socket client = listener.EndAcceptSocket(ar); 23while (clinet.Connected){ 4byte[] bytes = new byte[256]; 5client.Receive(bytes); 6string s = Encoding.UTF8.GetString(bytes); 78// 何かする 910if ( client.Poll(1000, SelectMode.SelectRead) &amp;amp;&amp;amp; (client.Available == 0) ){ 11break; 12} 13} こんな感じ
余談ですがwhileの外にstring buf = &amp;quot;&amp;quot;;って宣言してその変数に加算代入していくと最初に代入した値しか入ってないんですがバグですかね・・・？
結局TCPClientクラスからNetWorkStream貰ってStreamReaderで取得したんですが
TCPClientクラスの場合 TcpClientのプロパティにClientがあり、ここからSocketクラスが取得出来るのでほぼ一緒です
1TcpListener listener = (TcpListener) ar.AsyncState; 2TcpClient client = listener.EndAcceptTcpClient(ar); 3NetworkStream stream = client.GetStream(); 4StreamReader reader = new StreamReader (stream); 56while (client.</description></item><item><title>GTX1070のChainerセットアップ</title><link>https://blog.sky-net.pw/post/gtx1070%E3%81%AEchainer%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97/</link><pubDate>Tue, 09 Aug 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/gtx1070%E3%81%AEchainer%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97/</guid><description>
はじめに Windows7 64bit GPU GTX1070 Python2 64bit 環境でのChainerのGPU処理を有効にしてインストールする方法のメモ
ちゃんと学習するところまでやってなかったので大幅に加筆修正した（2016/09/06）
メモ nvcc fatal : Value 'sm_61' is not defined for option 'gpu-architecture'
CUDA7.5がGTX1080をサポートしてない GTX1070も同様っぽい
8.0からサポートっぽいです
ソースは下記
When the CUDA Toolkit will support GTX1070 Graphics Card???
train_mnist on Chainer 1.10 + Ubuntu 16.04 + Cuda V7.5 公式を確認すると
Out of box performance improvements on Tesla P100, supports GeForce GTX 1080
とのこと
インストール Python 今回は2系の64bitを使う
既に32bitが居座ってたのでpython64.batみたいなファイルを置いて誤魔化して使ってるんですが良い解決方法ご存知の方いたら教えて下さい</description></item><item><title>LINE BOTメモ書き</title><link>https://blog.sky-net.pw/post/line-bot%E3%83%A1%E3%83%A2%E6%9B%B8%E3%81%8D/</link><pubDate>Sun, 31 Jul 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/line-bot%E3%83%A1%E3%83%A2%E6%9B%B8%E3%81%8D/</guid><description>
はじめに 最初の公開時に登録して放置してあったLINEBOTを触り始めました
公開時の情報しか持ってなかったので現時点での情報整理
必要なもの HTTPS通信出来る鯖
herokuとかGASとかがお手軽？
あと自分の動かしたいコードが動かせる鯖
前は固定IPな必要があったりと色々不便だったけど改善してたらしい メモ 固定IPはオプションになった
必要なら登録出来るが任意になった
These settings will take effect immediately.
Registering an IP address is optional.
You may choose to register IP addresses for security purposes.
HTTPSの認証局
API公開時はletsencryptだとダメだったけど現在は対応済みだったらしい
ちょうど2週間くらい前に相談受けたのでその時に知ってれば良かった
ドキュメント 良く探すやつだけまとめ
メッセージの種類 とりあえず自鯖でテスト中 Apache+Flaskで動かしてるけどFalconとか使えば良かった</description></item><item><title>Raspberry Pi2でサーボを動かす</title><link>https://blog.sky-net.pw/post/raspberry-pi2%E3%81%A7%E3%82%B5%E3%83%BC%E3%83%9C%E3%82%92%E5%8B%95%E3%81%8B%E3%81%99/</link><pubDate>Sun, 24 Jul 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/raspberry-pi2%E3%81%A7%E3%82%B5%E3%83%BC%E3%83%9C%E3%82%92%E5%8B%95%E3%81%8B%E3%81%99/</guid><description>
はじめに Raspberry Pi2でサーボを動かします
このカメラマウントを動かすので制御するサーボは2つになります 1つを制御する記事は多かったけど2つのサーボを制御する記事があんま見つかりませんでした ちなみにこのカメラマウントレビューにもある通りサーボ付属のホーンが使えず少し加工が必要です 大した手間じゃないですが若干面倒
必要なもの Raspberry Pi2 SG90*2 カメラマウント 作業 組み立て カメラマウントは説明書もないっぽいので適当にググって先人の知恵をお借りして頑張って組み立てます
配線 この辺とかが実際のRaspberryPi2の画像とかあって見やすいです
Pin Numbering - Raspberry Pi 2 Model B GPIOの配置はこんな感じ
https://www.raspberrypi.org/documentation/usage/gpio/README.md
サーボ側のデータは秋月電子で公開されてるPDFを読む
SG90 9 g Micro Servo
2ページ目に線の説明がある　実物だと色が見づらいけど束ねられてる線の真ん中が赤色 ここを参考にすると下記の通り
オレンジ
PWM レッド
Vcc（+） ブラウン
Ground（-） やることとしては5VとGNDに繋いでPWMをクロック違うところに繋ぐだけ
GPIO図のPWM0とかPWM1とかがクロックが違うのでうっかりPWM0とPWM0に繋ぐと2つのサーボが同じ挙動して焦る（実際にやった）
実際の配置はこんな感じ
サーボ1
オレンジ　→　PIN32
レッド　→　PIN2
ブラウン　→　PIN30 サーボ2
オレンジ　→　PIN33
レッド　→　PIN4</description></item><item><title>PythonでFalconを試す</title><link>https://blog.sky-net.pw/post/python%E3%81%A7falcon%E3%82%92%E8%A9%A6%E3%81%99/</link><pubDate>Sat, 16 Jul 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/python%E3%81%A7falcon%E3%82%92%E8%A9%A6%E3%81%99/</guid><description>
Falcon 公式サイト Falcon is a very fast, very minimal Python web framework for building microservices, app backends, and higher-level frameworks.
というわけで高速で最小なWebフレームワークです
とりあえず実際にApache上で動かすところまで試したのでメモだけ
Windows上でテストしてUbuntuのApacheで動かしてみた
こちらのQiitaの記事が参考になります　というかほぼ丸パクリです
Falconで光速のWeb APIサーバーを構築する インストール 1$ pip install falcon おわり
テスト 公式のサンプルに参考記事の
1if __name__ == &amp;#34;__main__&amp;#34;: 2from wsgiref import simple_server 3httpd = simple_server.make_server(&amp;#34;127.0.0.1&amp;#34;, 8000, app) 4httpd.serve_forever() の部分を借りてきて実行してlocalhost:8000/quoteを見て問題なければOK
Apache上で動かす とりあえずこんな感じの想定で
設置場所：/var/falcon/fuga
URL：http://serverurl/falcon/fuga
さっきのコードをmain.pyって名前にして/var/falcon/fuga/main.pyに配置
1$ sudo apt-get install apache2 libapache2-mod-wsgi 2$ sudo vi /etc/apache2/sites-available/000-default.</description></item><item><title>PythonでMalmoを試してみた Windows編</title><link>https://blog.sky-net.pw/post/python%E3%81%A7malmo%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F-windows%E7%B7%A8/</link><pubDate>Fri, 15 Jul 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/python%E3%81%A7malmo%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F-windows%E7%B7%A8/</guid><description>
Malmoとは マインクラフトで人工知能を育てる「Project Malmo」、MicrosoftがGitHubで一般公開
Microsoftが3月に「Project AIX」としてプライベートプレビューを開始した「Minecraft（マインクラフト）」で人工知能（AI）を訓練するプロジェクト「Project Malmo」を一般公開した。GitHubからmodとコードをダウンロードできる。
ITMediaニュース
というわけでこれをチュートリアルのテストコードの動作確認まで試します
環境 Win7 64bit Python2.7 32bit64bit環境が必要でした
マインクラフトは普通に購入したのインストールしてあったけど不要っぽい？ 環境構築 基本的には公式のドキュメント通り
https://github.com/Microsoft/malmo
各プラットフォーム向けの実行環境をダウンロードする 下記から各プラットフォーム向けのものをダウンロードする
https://github.com/Microsoft/malmo/releases
各プラットフォームで必要な環境の構築
Windowsの場合は下記を参考に構築する
https://github.com/Microsoft/malmo/blob/master/doc/install_windows.md
7-zip インストールするだけ
FFMPEG 公式から64bit版のexeをダウンロードしてからC:\FFMEPG\ffmpeg.exeとか適当なところに配置してパスを通す
1&amp;gt; ffmpeg -version 2&amp;#39;ffmpeg&amp;#39; は、内部コマンドまたは外部コマンド、 3操作可能なプログラムまたはバッチ ファイルとして認識されていません。 パスが通ってないとこうなる
コマンド・プロンプト起動時に読み込まれるので環境変数の編集前に開いてたなら開き直すこと
1&amp;gt; ffmpeg -version 2ffmpeg version N-80129-ga1953d4 Copyright (c) 2000-2016 the FFmpeg developers 3built with gcc 5.3.0 (GCC) 4... って感じなら問題なし
CodeSynthesis http://www.codesynthesis.com/products/xsd/download.xhtml
ここからxsd-4.0.msiをダウンロード・インストール
インストール時のオプションは特に変更しなかった
パスを通すってオプションだけチェック入ってるか確認しておくこと
Python 公式から落としてパスを通すだけ
※64bit版をインストールして下さい
その他メモ 1ImportError: DLL load failed: %1 は有効なWin32 アプリケーションではありません 32bit版のPythonから起動しているとimport MalmoPythonの時点で上記エラーが出ます</description></item><item><title>自分向けgitメモ</title><link>https://blog.sky-net.pw/post/%E8%87%AA%E5%88%86%E5%90%91%E3%81%91git%E3%83%A1%E3%83%A2/</link><pubDate>Thu, 14 Jul 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/%E8%87%AA%E5%88%86%E5%90%91%E3%81%91git%E3%83%A1%E3%83%A2/</guid><description>
はじめに いろいろ毎回やらかすのでメモしておく
ある程度まとまったらマークダウンメモの方に移動する
clone 編 ユーザー情報の確認と設定 1$ git config --global --list 2user.email=hoge@fuga.com 3user.name=hoge このままコミットするとこのユーザー情報でコミットされる
違うユーザー情報で使用してるレポジトリとかでやらかすと恥ずかしい
cloneしたら意識して設定するようにする
1$ cd プロジェクト 2$ git config user.name hogehoge 3$ git config user.email hogehoge@fuga.com 4$ git config --list 5user.email=hogehoge@fuga.com 6user.name=hogehoge commit 編 コミットメッセージ間違えた Winのコマンド・プロンプトでコミットメッセージ書いてると時々盛大にミスする
1$ git commit --amend してから一番上の行を編集する　文字化けしてても別に気にしなくて良い
編集後にきちんとプレビューで表示されてればおっけー
空コミットしたい 最初は空コミットした方が気兼ねなく操作できるようになるので良いと思う
1$ git commit --allow-empty -m &amp;#34;sky commit&amp;#34; みたいな感じ
一時的にファイルを避難したい 空コミットし忘れた時とかその他諸々で一時的にファイルを元の状態に戻す
1$ git stash save して一時的に避難
いろいろ作業が終わって戻す時
1$ git stash list 2リストが出る 3$ git stash apply stash@{0} あとはコミットするなりお好きに</description></item><item><title>SL4Aを使ってAndroidとArduinoでシリアル通信をする</title><link>https://blog.sky-net.pw/post/sl4a%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6android%E3%81%A8arduino%E3%81%A7%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%AB%E9%80%9A%E4%BF%A1%E3%82%92%E3%81%99%E3%82%8B/</link><pubDate>Wed, 13 Jul 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/sl4a%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6android%E3%81%A8arduino%E3%81%A7%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%AB%E9%80%9A%E4%BF%A1%E3%82%92%E3%81%99%E3%82%8B/</guid><description>
はじめに AndroidとArduinoでPythonを使ってシリアル通信をしたかった
Android上でPythonを実行するアプリはいくつかあるけどQPythonのserialモジュールでは失敗した
QRコードでコード読み込めたりして便利だったけど残念
SL4A Android上でスクリプト言語で開発できるソフト、RubyとかPythonとかその他諸々に対応してる
インストール SL4Aのインストール 昔はここで配布してたけどGoogle Codeはサービスを終了してるので拾えない
こちらの方が使えるapkファイルをビルドされているので対応するアーキテクチャのものをダウンロードしてAndroid端末にインストールしておく
https://github.com/kuri65536/sl4a/releases
SL4Aで使うPythonのインストール アプリ内からインストールすることもできるがこの時インストールされるのはPython2.6です
特に理由がなければ先ほどの方がPython2.7のapkファイルをビルドされてるので借りてくるのをオススメ
https://github.com/kuri65536/python-for-android/releases
Pythonモジュールのインストール 今回の記事で必要なものはないですが地味に引っかかるところなのでメモ代わりに
eggファイルでのインストールしか対応してないのでzipとか投げてもダメです
eggで配布されてなかったらeggファイルを予め作っておく必要があります
1$ python setup.py bdist_egg dist/hoge.eggと出力されるのでそれを端末にコピってインストールします（Python2.6使用時）
2.7を使用する場合は逆に.eggだとダメなのでこれを.zipに名前を変更して使用します
テスト 適当にハローワールドとか書いて試す
サンプルスクリプトが入ってるはずなのでその辺で試す
Androidとシリアル通信をする https://github.com/kuri65536/sl4a/blob/master/android/USBHostSerialFacade/samplescripts/testusbserial.py
基本的にはこれの通りです
Arduinoの場合は47行目のloads後のリストの最後がArduinoになるのでこのコードを書き換えて使用します
1# -*- encoding=utf-8 -*- 2import android as _android 3import json 4import time 56android = _android.Android() 7l = android.usbserialGetDeviceList().result.items() 8print l 910h = json.loads(l[0][1]) 11ret = android.usbserialConnect(h[-1]) 12print ret 1314uuid = json.loads(ret.result)[-1] 15print uuid 16time.sleep(5)#すぐ通信を開始すると失敗する 17while True: 18time.sleep(1) 19#読み込み 20print android.</description></item><item><title>Pyro4の使い方</title><link>https://blog.sky-net.pw/post/pyro4%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/</link><pubDate>Tue, 12 Jul 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/pyro4%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/</guid><description>
Pyro4 異なるアーキテクチャ間でリモートでメソッドコールできるライブラリ
あんまり日本語の情報がないのでメモ程度に書いておく
日本語の情報はほとんどないから諦めて英語で探す
https://pythonhosted.org/Pyro4/
公式のGithubのExampleとか参考にする
https://github.com/delmic/Pyro4/
インストール 1$ pip install Pyro4 Pyroだと古いバージョンが入るので注意がいる
ネームサーバーなし ネームサーバーがあると裏で勝手に名前解決してくれるので楽になるけどなしでもできる
基本的に自分がクライアント側になるはず
ホスト側 1import Pyro4 23def getHoge(): 4return &amp;#34;test&amp;#34; 56Pyro4.Daemon.serveSimple( 7{getHoge:&amp;#39;HogeMethod&amp;#39;}, 8host=&amp;#34;自分のIP&amp;#34;, 9port=9090,#適当なポート 10ns=False, 11) クライアント側 1import Pyro4 23name = &amp;#34;HogeMethod&amp;#34; 4ip = &amp;#34;相手のIP&amp;#34; 5port = 9090#適当なポート　合わせる 6s = &amp;#34;PYRO:%s@%s:%s&amp;#34; % (name, ip, port) 7remote = Pyro4.Proxy(s) 8remote.getHoge() みたいな感じで呼べる
ネームサーバあり ネームサーバ 用意されてるものを使う場合は
1$ python -m Pyro4.naming 随時オプションをつける
WindowsだとCtrl+Cとかで抜けられないので不便
自分でコードを書くなら
1import Pyro4 2import socket 34host = socket.</description></item><item><title>Flaskでブログっぽいもの作ってみた</title><link>https://blog.sky-net.pw/post/flask%E3%81%A7%E3%83%96%E3%83%AD%E3%82%B0%E3%81%A3%E3%81%BD%E3%81%84%E3%82%82%E3%81%AE%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%9F/</link><pubDate>Mon, 11 Jul 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/flask%E3%81%A7%E3%83%96%E3%83%AD%E3%82%B0%E3%81%A3%E3%81%BD%E3%81%84%E3%82%82%E3%81%AE%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%9F/</guid><description>
貧弱な自鯖だとWordPressの表示に時間が掛かるので自作してみた
ソースコードはそのうち公開するかもしれない
アカウントの認証はTwitterアカウント
記事はマークダウンでGFMライクに書ける感じにしてみた
その他いろいろ拡張機能入れてみたので便利になった
RSSも一応書いてみたけどまともに機能してるのかわからん
ソーシャルボタンも結構適当だけど全体を見れば良い感じに仕上がったのでしばらく使ってみることにする
貧者なうちのサーバーではWordPressより軽快だし
コメント機能はつけられんことはないけど需要うすそうなので実装するのをやめた</description></item><item><title>Ubuntu16.04のPython3でOpenCV3を使う</title><link>https://blog.sky-net.pw/post/ubuntu16.04%E3%81%AEpython3%E3%81%A7opencv3%E3%82%92%E4%BD%BF%E3%81%86/</link><pubDate>Sun, 10 Jul 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/ubuntu16.04%E3%81%AEpython3%E3%81%A7opencv3%E3%82%92%E4%BD%BF%E3%81%86/</guid><description>
OpenCVについて 画像処理するライブラリ
2系入れたいならディストリビューションごとにパッケージあるからそっち使いましょう
3系はパッケージが現時点（2016/06/24）でないから自分でビルドする
3.1.0しか検証してないけど多分ほかでも問題ないはず
Windowsは某所でwhl配布されてるからそれを使うと楽
ダウンロード Sourceforgeからソースを落とせみたいな記事がたくさんあるけど罠です
makeでコケるのでGithubからcloneすると良いです
1$ cd ~ 2$ git clone https://github.com/Itseez/opencv.git 3$ cd opencv 4$ git tag 5タグ一覧が出るから使いたいバージョンを探す 6$ git checkout 3.1.0 7ダメだったらcloneしたやつそのまま使えばいけるかもね（今回の記事ではcloneしたのをそのまま使用） 2016年11月24日 追記
バニラな環境でやったらハマったのでメモ
1-D PYTHON_EXECUTABLE=$(which python) $(which python) は単にパス探してるだけなので
バニラだとpythonじゃなくてpython3で探さないとダメだった
ビルド 1$ pwd 2/home/hoge/opencv 3$ mkdir build 4$ cd build 5$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D WITH_FFMPEG=OFF -D BUILD_opencv_python2=ON -D BUILD_opencv_python3=ON -D PYTHON_EXECUTABLE=$(which python) .. 6ログの途中にちゃんとPythonが対象に含まれてるか確認しておく 7これはpyenvでの結果だけどノーマルのPythonでもこんな感じで含まれてるはず 8-- Python 2: 9-- Interpreter: /usr/local/pyenv/shims/python (ver 3.</description></item><item><title>Dockerでマインクラフトのサーバーを建てる</title><link>https://blog.sky-net.pw/post/docker%E3%81%A7%E3%83%9E%E3%82%A4%E3%83%B3%E3%82%AF%E3%83%A9%E3%83%95%E3%83%88%E3%81%AE%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92%E5%BB%BA%E3%81%A6%E3%82%8B/</link><pubDate>Sat, 09 Jul 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/docker%E3%81%A7%E3%83%9E%E3%82%A4%E3%83%B3%E3%82%AF%E3%83%A9%E3%83%95%E3%83%88%E3%81%AE%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92%E5%BB%BA%E3%81%A6%E3%82%8B/</guid><description>
いろいろ投げやり
こんな感じでDockerfile書いて
docker build -t hoge/minecraft .
で終わり
適当にJavaに投げるオプションを適宜変更してビルドする
実行は
1docker run -d -p 25565:25565 -v /hoge/fuga:/home/minecraft hoge/minecraft するだけ
ボリュームで置いたファイルを呼んでるだけの手抜きイメージを走らせてる　最高に手抜き
参考サイトみたいにした方がいいと思うけどとりあえずJava動くイメージが作ってみたかっただけなんだ…
とりあえずイメージの作り方の勉強にお試しでという感じ
参考 DockerでMinecraft forgeのマルチサーバを立てる</description></item><item><title>Pythonから結月ゆかりを喋らせる</title><link>https://blog.sky-net.pw/post/python%E3%81%8B%E3%82%89%E7%B5%90%E6%9C%88%E3%82%86%E3%81%8B%E3%82%8A%E3%82%92%E5%96%8B%E3%82%89%E3%81%9B%E3%82%8B/</link><pubDate>Fri, 08 Jul 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/python%E3%81%8B%E3%82%89%E7%B5%90%E6%9C%88%E3%82%86%E3%81%8B%E3%82%8A%E3%82%92%E5%96%8B%E3%82%89%E3%81%9B%E3%82%8B/</guid><description>
この前結月ゆかりさんをお迎えしてしまいました　ほぼノリです
昨日の夜ポチってしまった pic.twitter.com/AKEhQQ9VVE
&amp;mdash; スカイ (@skyblue3350) March 10, 2016 というわけでこれをPythonから操作して喋らせます
他の言語だと誰かしら書いてるようですがPythonだとどうも見つからないので自分で書きました
コード自体はこんな感じ
あとは
1voiceroid.say(u&amp;#34;文字列&amp;#34;) とかで喋ってくれる
コード見ればわかるけどgetVolueとかメソッド実装したけど動かない
音程とかのキーボックスにキー入力までは送れるけどsubmitイベント？とかが発生しないらしく値が反映されない
そのうち解決して実装しよう
んでここまで出来たので試しにSlackにストリーミング接続して来たチャット通知を片っ端から喋らせるスクリプト書いてみたけど結構面白かった
今のところは通知用の用途での使用を考えてるのでTwitterのリプライとかSlackの通知とか読み上げてくれるBot的なものを作成しようかなぁ</description></item><item><title>owncloudの移行でハマった</title><link>https://blog.sky-net.pw/post/owncloud%E3%81%AE%E7%A7%BB%E8%A1%8C%E3%81%A7%E3%83%8F%E3%83%9E%E3%81%A3%E3%81%9F/</link><pubDate>Thu, 07 Jul 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/owncloud%E3%81%AE%E7%A7%BB%E8%A1%8C%E3%81%A7%E3%83%8F%E3%83%9E%E3%81%A3%E3%81%9F/</guid><description>
ハマったというより自爆ですが一応メモ
ラズパイから物理鯖に鋭意移転中です
owncloudの移行をするときに9.0がリリースされていたので新規インストールで移行することにしました
今までと特に変わりなくDBを設定しインストールしました
ただサーバー側がApacheからNginxに変更していたため.htaccessが使えません
そこでNginxの設定ファイルに記述するのですがどうも参照していたドキュメントが古かったらしくクライアントからアクセスしようとすると
Error downloading https://test.hoge.com/remote.php/webdav/ -server replied: Method Not Allowed
とエラーが出て認証が進みません
というわけで設定ファイルは正しいものを参照しましょう
https://doc.owncloud.org/server/9.0/admin_manual/installation/nginx_configuration.html
これにSSLの設定を書き加えて完了です</description></item><item><title>WordPress移行まとめ</title><link>https://blog.sky-net.pw/post/wordpress%E7%A7%BB%E8%A1%8C%E3%81%BE%E3%81%A8%E3%82%81/</link><pubDate>Wed, 06 Jul 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/wordpress%E7%A7%BB%E8%A1%8C%E3%81%BE%E3%81%A8%E3%82%81/</guid><description>
概要 当初ラズパイで建ててたサーバー（Apache）から物理マシンのサーバー（nginx）へ移行しました
その時のメモ
環境 引越元環境
サーバー：Apache
URL：http://sky-net.pw/blog
引越先環境
サーバー：Nginx
URL：http://blog.sky-net.pw
作業 再インストール 引越自体はファイルを移動させるのみ
その後適切なパーミッションと所有者に変更する
DB移行 エクスポート もしサイトのURLを変更する場合は先に元環境で設定→一般→サイトURLを予め移転先へ変更してからMySQLのエクスポートをする
元の状態のままエクスポートして移転先にインポートしたらCookieが無効になっていてどうのでログインすることが出来なかった
エクスポート自体は
1$ mysqldump -h ホスト名 -u ユーザー名 -p DB名 &amp;gt; 書き出しファイル名 で出来る　設定値はconfig.php見ればわかる
インポート インポートは予め受け入れ先DBを作成した上でインポート
1$ mysql -u root -p 2mysql&amp;gt; create database DB名 default character set utf8 default collate utf8_general_ci; 3mysql&amp;gt; create user ユーザー名@ホスト名 IDENTIFIED BY パスワード; 4mysql&amp;gt; grant all privileges on DB名.* TO ユーザー名@ホスト名; 5mysql&amp;gt; exit 1$ mysql -h ホスト名 -u ユーザー名 -p DB名 &amp;lt; ファイル名 ここまででトップページの表示は問題なく行えるようになったはず</description></item><item><title>Raspberry Pi2でPHP7のビルド・インストール</title><link>https://blog.sky-net.pw/post/raspberry-pi2%E3%81%A7php7%E3%81%AE%E3%83%93%E3%83%AB%E3%83%89%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/</link><pubDate>Tue, 05 Jul 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/raspberry-pi2%E3%81%A7php7%E3%81%AE%E3%83%93%E3%83%AB%E3%83%89%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/</guid><description>
はじめに PHP7が出たので自鯖のPHPを5.3から7へ移行しました
自鯖で稼働しているPHP関連のものはowncloudとWordpressですが移行後特にこれといった問題は起きていません
PHP7のインストールからMySQLの接続確認まで行います
インストールした環境はRaspberry Pi2 Wheezy上になります
Debian系やその他OSでも前提パッケージ名が違う程度だと思います
前提パッケージのインストール 1$ sudo apt-get install libxml2 libxml2-dev pkg-config libssl-dev libreadline5 libreadline-gplv2-dev libpspell-dev apache2-dev libcurl4-openssl-devもいるかもしれません
コンパイル　インストール 適当に公式からアーカイブファイルを落として展開する
その後
1$sudosh./configure\2--with-readline\3--enable-pcntl\4--with-gettext\5--enable-phpdbg\6--enable-phpdbg-webhelper\7--enable-mbstring\8--enable-zip\9--enable-bcmath\10--enable-ftp\11--enable-exif\12--enable-calendar\13--enable-sockets\14--enable-sysvmsg\15--enable-sysvsem\16--enable-sysvshm\17--enable-wddx\18--with-curl\19--with-mcrypt\20--with-iconv\21--with-pspell\22--with-gd\23--enable-gd-native-ttf\24--enable-gd-jis-conv\25--with-openssl\26--enable-soap\27--with-zlib-dir=/usr\28--with-zlib=/usr\29--with-bz2=/usr\30--with-apxs2\31--with-mysqli=mysqlnd\32--with-pdo-mysql=mysqlnd\33--with-mysql-sock=/var/run/mysqld/mysqld.sock34$sudomake-j`nproc`35$sudoapt-getremovephp*36$sudomakeinstallnprocはそのPC上の最大を表すらしい　知らなかった
おそらくconfigureは前提パッケージを全て入れていれば通るはず
トラブった時は以下のページが参考になった
https://blog.flowl.info/2015/how-to-install-php7-on-ubuntu-or-debian/
各種設定 設定ファイルのコピー パスを調べてからそこにファイルを配置する
1$ php -i | grep php.ini 2$ sudo cp ./hoge/php-7.0.3/php.ini-production /usr/local/lib/php.ini 1$ vi /usr/local/lib/php.ini 2必要な設定をする 3必要な項目を検索して適宜書き換え 4expose_php = On → Offに 5;date.timezone = → date.timezone = &amp;#39;Asia/Tokyo&amp;#39; 6;error_log = php_errors.log → error_log = &amp;#34;適当なパス/error.log&amp;#34;//対象ファイルの所有者をdaemonに権限を755にしておく 7mysqli.default_socket = → mysqli.</description></item><item><title>タスクバーのショートカット一覧</title><link>https://blog.sky-net.pw/post/%E3%82%BF%E3%82%B9%E3%82%AF%E3%83%90%E3%83%BC%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E4%B8%80%E8%A6%A7/</link><pubDate>Mon, 04 Jul 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/%E3%82%BF%E3%82%B9%E3%82%AF%E3%83%90%E3%83%BC%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E4%B8%80%E8%A6%A7/</guid><description>
メモ程度だけど
1C:\Users\ユーザー名\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar にタスクバーのショートカット一覧がある
1C:\Users\skyblue\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\StartMenu Winボタン押してすぐ出てくるメニューの一覧はここ</description></item><item><title>Docker環境の構築</title><link>https://blog.sky-net.pw/post/docker%E7%92%B0%E5%A2%83%E3%81%AE%E6%A7%8B%E7%AF%89/</link><pubDate>Sun, 03 Jul 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/docker%E7%92%B0%E5%A2%83%E3%81%AE%E6%A7%8B%E7%AF%89/</guid><description>
はじめに とりあえず使ってみたので今後使うことがあった時のためにメモ
インストール 1$ wget -qO- https://get.docker.com/ | sh アプデの時は
1$ wget -N https://get.docker.com/ | sh ユーザーの追加 1$ sudo usermod -aG docker user名 でユーザーをグループに追加
その後再起動で反映（重要）
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
とか出て怒られる
イメージの取得 とりあえず今回は試したいものがあったのでそれを拾ってくる
https://hub.docker.com　から拾ってくる時はページの右上にあるコマンドをそのまま投入する
1$ docker pull イメージ名 DLとpullが完了したら確認する
1$ docker images 使い方 実行 1$ docker run -it イメージ名 で実行と同時にログインするからCtrl+P、Qで離脱
1$ docker ps でプロセスを確認
終了 1$ docker stop ID IDはプロセス確認の時見れる</description></item><item><title>Atom環境構築まとめ</title><link>https://blog.sky-net.pw/post/atom%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E3%81%BE%E3%81%A8%E3%82%81/</link><pubDate>Sat, 02 Jul 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/atom%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E3%81%BE%E3%81%A8%E3%82%81/</guid><description>
はじめに 環境移行するときはユーザーディレクトリ以下の~/.atomを丸々運んだ方が楽
あとフォントは現在等幅フォントで落ち着いてるからいろいろ書き直すところある
ダウンロードとインストール 最初はとりあえずAtomをダウンロードしてインストール。
パッケージの導入 ファイル→環境設定（Ctrl+,）で設定を開いてインストールのタブをクリック。
以下のパッケージと必要に応じてパッケージを導入する。
autocomplete-paths
パスを入力する時に自動で補完してくれるプラグイン、結構便利　同階層の時は./とかで出る chary-tree-view
デフォルトのツリービューはシングルクリックでファイルを展開してしまうのでダブルクリックに変更するプラグイン file-icons
ツリービューのファイルアイコンをそれっぽく表示してくれる。気分的なとこで japanese-menu
UIの日本語化 minimap
エディタに良くあるミニマップを表示するプラグイン pigments
CSSとか書いてる時の色を実際に表示してくれるプラグイン terminal-plus
エディタ内にコンソールを表示してくれるプラグイン 日本語の表示の調整 日本語の表示がちゃっちぃのでフォントを変更する
ファイル→スタイルシートから編集
1atom-workspace { 2font-family: &amp;#34;Meiryo&amp;#34;; 3} 45atom-text-editor { 6font-family: &amp;#34;Meiryo&amp;#34;; 7} 89.tooltip { 10font-family: &amp;#34;Meiryo&amp;#34;; 11} 1213.markdown-preview { 14font-family: &amp;#34;Meiryo&amp;#34;; 15} ショートカットキーの変更 現在の割当状況は環境設定→キーバインドから見れる。
割り当てられてないものや変更したいもののcommand部分をメモしておく。
今回はCtrl+nで新規ファイル作成をツリービューの新規ファイル作成の呼び出しに上書きする。
ツリービューでのファイルの追加はtree-view:add-fileというcommandなのでファイル→キーマップでkemap.csonを開き下記を追加する
1&amp;#39;body&amp;#39;: 2&amp;#39;ctrl-n&amp;#39;: &amp;#39;tree-view:add-file&amp;#39; これで呼び出せるようになってればOK
ダメな時はCtrl+.で現在どのショートカットが呼び出されているのか検証することが出来るので重複していないかどうか調べる。
unset!を割り当てると割当を取り消すことが出来るので間違えて呼び出しちゃうキーとかを封印出来る。
ダメな時はこれを利用して一度無効にしてから再度割り当てるといける。
1&amp;#39;body&amp;#39;: 2&amp;#39;ctrl-n&amp;#39;: &amp;#39;unset!&amp;#39; 3&amp;#39;ctrl-n&amp;#39;: &amp;#39;tree-view:add-file&amp;#39; その他設定 ファイル→環境構築→設定から設定を適宜自分好みに変更しておく。
自分の場合はTabキーを押した時にスペース4つで置換されるのが嫌なのでデフォルトでチェックの入っているソフトタブを外しておく。
これらの設定は全てWinだとユーザーディレクトリ下の.atomフォルダに入っているのでこれをコピペすれば他の環境でもすぐ同じ環境が構築出来る。
他のプラットフォームでも同様の位置にあるはず。</description></item><item><title>サーバーが飛んだので再設定した話</title><link>https://blog.sky-net.pw/post/%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%8C%E9%A3%9B%E3%82%93%E3%81%A0%E3%81%AE%E3%81%A7%E5%86%8D%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%9F%E8%A9%B1/</link><pubDate>Fri, 01 Jul 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%8C%E9%A3%9B%E3%82%93%E3%81%A0%E3%81%AE%E3%81%A7%E5%86%8D%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%9F%E8%A9%B1/</guid><description>
経緯 WordPressのレスポンスが遅いので色々入れた途中でRaspberry Pi 2のオーバークロックしたら起動しなくなった。
起動しなくなった場合はShiftキーを押しながら起動すればオーバークロックせずに起動出来るので回避出来ますが昨日時点では知りませんでした。
ので1からインストールし直したのでブログを移転したついでにRaspberry Piの設定をメモし直す
データ救出 DiskInternals Linux Readerを使用して予めファイルの救出を行っておきます。
MicroSDのフォーマット 既にOSをインストール済みのMicroSDはパーティションが切られていてWinのクイックフォーマットではWinから見える領域しかフォーマットできません。
そのためにSDCardFormatterを使用してフォーマットを掛けます。
OSのダウンロード OSを公式サイトからダウンロードしてきます。
今回はRASPBIANをインストールするのでRASPBIAN JESSIE LITEをダウンロード。
OSのインストール Win32DiskImagerを使用してダウンロードしてきたイメージファイルを書き込む。
初期設定 HDMI・USBキーボード・電源を接続して起動します。ログイン画面には以下のIDとPWでログイン
ユーザー：pi
パスワード：raspberry
でログイン出来るのでログインする。
1$ sudo raspi-config して初期設定をする。
Internationalisation Optionsから
Change Local -&amp;gt; es_US.UTF-8とja_JP.UTF-8 を選択 -&amp;gt; es_US.UTF-8をデフォルトにする
Change Timezone -&amp;gt; Asia -&amp;gt; Tokyoを選択
Change keyboard layout -&amp;gt; Generic 105-key(intl) PC -&amp;gt; Other -&amp;gt; Japanese -&amp;gt; Japanese
Finishしてrebootしておく
再起動してログインしたら
1$ sudo adduser hoge 2$ sudo visudo 3#pi ALL=(ALL) NOPASSWD: ALL 4hoge ALL=(ALL) PASSWD:ALL して保存</description></item><item><title>WordPress設置まとめ</title><link>https://blog.sky-net.pw/post/wordpress%E8%A8%AD%E7%BD%AE%E3%81%BE%E3%81%A8%E3%82%81/</link><pubDate>Thu, 30 Jun 2016 00:00:00 +0000</pubDate><guid>https://blog.sky-net.pw/post/wordpress%E8%A8%AD%E7%BD%AE%E3%81%BE%E3%81%A8%E3%82%81/</guid><description>
はじめに FC2のブログをやめて自鯖にWordPressを設置したので最初の記事はWordPress設置についてのまとめ
ApacheとMySQLだけ予めインストールしておく
MySQLの設定 適当な名前で必要なテーブルやパスワードを作成する
今回は以下の設定での例
項目 設定値 データベース名 wp_hogehoge ユーザー名 fuga パスワード aiueo ホスト名 l ocalhost 1$ mysql -u root -p 2mysql&amp;gt; create database wp_hogehoge; 3mysql&amp;gt; grant all on wp_hogehoge.* to &amp;#39;fuga&amp;#39;@&amp;#39;localhost&amp;#39; identified by &amp;#39;aiueo&amp;#39;; 4mysql&amp;gt; exit 5Bye WordPressのダウンロード 次に公式サイトからWordPressをダウンロードしておく
ダウンロードしたものを解凍してブログを設置するディレクトリにアップロードしておく
もし実ディレクトリとURLを別にするならドキュメント読んで適当に設置する
最後にオーナーをApacheの実行ユーザーに変更する
1$ wget URL 2$ unzip hoge.zip 3$ mv hoge /var/www/blog 4$ sudo chown -R www-data /var/www/blog WordPressのインストール アップロードしたURLにアクセスして初期設定を行う</description></item></channel></rss>