「技術」カテゴリーアーカイブ

これぞ究極のバックアップ術

これを散々悩んできた。

過去に、大量のメディアファイルを抱えてきたのですが、その主たるバックアップ方法はCD/DVDに書き込んで保存する事。

しかし、過去に二回バックアップを紛失しました。

やっぱりCD/DVDの管理は難しい。

しかも、データサイズも大きくなってきたので、DVDでも書き込むのは難しくなってきました。

そこで、考えたのは、オンラインストレージへのバックアップです。

今抱えているメディアファイルの容量はおよそ400GBなので、最低1TBは必要と考えています。

では、どのオンラインストレージサービスを利用するか。

ひとつずつ確認していきましょう。

Box

https://www.box.com/ja-jp/home

こちらはパーソナルプラン。

容量が100GBまでなので、お話になりません。

こちらはビジネスプラン。

月1800円で容量無限というワードに惹かれますが、契約は3ライセンスからと言うことに気をつけて貰いたい。

3ライセンスと言うことは、月1800円×3ライセンスなので、月5400円必要と言うことです。

小規模プロジェクトならば問題ありませんが、個人で利用するには難しそうです。

DropBox

https://www.dropbox.com

Dropboxは最近になって、無料で利用できるデバイスの数が3つまでに制限されてしまいました。

有料プランにすると、最低でも2TB、月1500円必要ですが、デバイス数の制限が撤廃されます。

ちなみに、ビジネスプランは当然のごとく、最低3ライセンス必要になります。

oneDrive

https://onedrive.live.com/about/ja-jp/

oneDriveの強みはofficeとの連携ですね。

office 365 soloを使用していれば自動的に1TBのストレージが使用できるようになります。

これはどちらかというより、普段使用しているローカルファイルのバックアップ、編集、同期に向いているのかな、と思います。

勿論バックアップとしても使用できますが、ローカルドライブに大容量のメディアファイルを入れておくのは嫌なので、こちらはsoloプランのまま使用します。

office 365 soloを契約していなくても、比較的格安で大容量のストレージが使用できます。

Google One

https://one.google.com/about?gclid=CjwKCAjwldHsBRAoEiwAd0JybeTD2OoOuZ-ONhaYx4lVMKOI0Z-YS9zAf18-ontOIjO1ipoa095LuhoC9QgQAvD_BwE#upgrade

こちらも比較的安価で2TBのストレージが使用できます。

しかし、オイラは(確か)ローカルガイドの特典でGoogle Oneのサービスを無料で貰っていてすでに100GBのストレージを貰っています。

オイラは、oneDriveと組み合わせて、ローカルデータと同期させて、複数のオンラインストレージに分散させて保存させています。

データを複数のストレージに分散させて同期を取るようにすれば、万が一クラウドストレージに障害が発生しても、損害がが最小限になります。

Amazon Drive

https://www.amazon.co.jp/gp/feature.html?ie=UTF8&docId=3077664656

お値段お得に見えますが、年払いなのでご注意を。

iCloud

iCloudはiPhone/iPad/Macで使用する場合に真価を発揮します。

あまりオンラインストレージとしての魅力は無いかもしれません。

ここまで調べて、わかったのは、容量当たりの料金としてはDropBoxとGoogle Oneが優秀。

しかし、オイラはすでにGoogle Oneの100GBをサービスで貰っているので、こちらはローカルデータをoneDriveと分散同期させて、頻繁にアクセスするファイルのバックアップに使用します。

なので、DropBoxの2TBプランを使用しました。

クライアントソフトをアンインストールして、ブラウザ経由で大量のメディアファイルをアップロード。

普段は外付けHDDにあるでーたを使用しますが、このHDDがクラッシュしたりした場合はクラウドのデータを使用する、というように使用したいと思います。

うむ、これでバックアップ問題は解決。

windowsでlsコマンドを使いたい

こう思ったのは、linux経験者ならわかると思いますが、ファイルリストを表示するときに

$ ls

と入力します。

しかし、Windowsでは

> dir

と入力します。

なので、

こういうことが起こります。あるあるですな。

他のシステムではUnixをベースにして作られているので、lsコマンドが一般的なのですが、WindowsはMS-DOSがベースになっているので、そのままdirが使用されています。

というか、Windowsのコマンドプロンプトはそれで一連の処理を自動化させる想定になっていない(そういうのはPower-Shellを使用することを想定している)ので、ここしばらくメンテナンスされていない。

それが最近ようやくになってメンテされ(下記参照)

・・・とはいってもやはりは所詮コマンドプロンプト

ファイル一覧はdirなのです。

これはなんとかならないかと。

こちらのサイトを見つけました。

https://qiita.com/jonghyo/items/655ce8fc97ae25e3b43d

おもに対策は二つあります。

・GOW(GNU on Windows)を使用する
・Bash on Windowsを使用する

しかし、GOWが最終更新日が2015年、Bash on Windowsが2004年である。

今使用しているubuntu18は2018年、ちと古いかな。メンテされていない気がする。

・・・作るか。

HTTPSに対応してみた。

https://taki-lab.site/bocci

多分、上のリンクにアクセスできるはず。

HTTPS化することはSEO対策的にも有効らしい。

で、HTTPS化するのには証明書を発行して貰う必要があるのですが、Let’s Encriptを使用すると、無料で信頼できる証明書を発行してくれるらしい。

まずはクライアントツールをインストール。

あとあとめんどいので、rootで作業します。

# apt-get -y install letsencrypt
# letsencrypt certonly --webroot -w /var/www/html -d taki-lab.site

nginxの設定に以下を追加して、ポート443を受け付けれるようにする。

server {

listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate     /etc/letsencrypt/live/taki-lab.site/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/taki-lab.site/privkey.pem;

}

そして、nginxを再起動する

# systemctl restart nginx

証明書の有効期間は90日なので、定期的に証明書を更新する必要があります。

# letsencrypt renew

今回はこちらのサイトを参考にさせて頂きました。

https://www.server-world.info/query?os=Ubuntu_16.04&p=ssl&f=2

https://webjin.work/set-up-ssl-certificate-of-lets-encrypt/

Excelのマナーって言い出したの誰よ?

まぁ、昔から言われてきたことなんですが。

エクセルを保存するときに、全シートのカーソルの位置をA1に移動し、一番左のシートのA1にカーソルがある状態で保存する、というもの。

どうやら、お客さんがそのエクセルを開いたときに、表紙に当たる一番左のシートを表示して、ちゃんと画面が見えるようにしないと失礼だという事らしい。

いや、言いたいことはわかるんだけど、制作側はそこまで意識しなくちゃいけないのが気に入らないです。

何か良い方法ないかね?

マクロでも作る?

そもそも7Payって必要なのかよ?

7Payに限らずコンビニ独自の電子決済って必要なのかって思います。

なぜなら、その決済は基本的にそのコンビニでしか使えない。

一時的には、新規登録者にはサービスがあったりしますが、結局はそれだけ。利便性を考えると、PayPayとかの方が使い勝手が良いです。

そもそも、バーコード決済は必要なのか?

元々はSUICAなどの交通系電子決済から始まりました。

目的は切符を買う手間を省くことで、改札前の混雑を解消するため。(と考えています。)

そういう意味では、Felicaは非常に優秀で、非接触型通信は何種類かありますが、Felicaは段違いで決済速度が速いのです。

その後、非接触型カードの電子決済が数多く登場しました。便利と言えば便利なのですが、やはり、一番のネックは導入コストの高さ。

専用のカードリーダーを設置しなければいけないので、導入側のコストは半端ない。なので、小規模の小売店には大きなハードルでした。

一方で、バーコード決済は、そのハードルを一気に下げて、基本的にバーコードリーダーと決済処理するソフトウェアがあれば導入できます。

PayPayがコンビニだけで無く、個人ショップや飲食店でも使えるのにはこういうポイントがあったのです。

ただ、いちいちスマホでバーコードを表示して読み取って貰うのと、お財布からお金を数えるの、どっちが早いというかというと、ちょっと微妙なんですよね。

なので、バーコード決済する場合はあらかじめ(レジ待ちの時点で)アプリを起動しておくといいですよ。

その点カード決済は(クレジットカードも含む)その手間は大幅に改善されますけどね。

まぁ、結局の所、自分の生活スタイルに合わせて使い分ければ良いのでは無いでしょうか?(暴論)

職場にEdy対応の自動販売機があれば、自然にEdyを使うようになりますよね?

Linuxでメモリを増設する!

コンピュータでメモリは重要。

一般的な使い方をする場合ならメモリは4GBで十分かもしれないけど、やはり快適に使うには8GBはほしい。

ソフトウェア開発者なら16GB、動画編集とかだったらより多くのメモリが必要だったりします。

なぜメモリが必要なのか?

コンピュータはプログラムを実行するのにメモリを使用します。

なのでたくさんコンピュータにお仕事させると、それだけたくさんメモリを消費します。

でもメモリの量は有限なので、たくさん仕事させると、いつかはメモリが足りなくなります。

そうなった場合、コンピュータはメモリ領域を確保するために、メモリのデータをストレージに吐き出し、メモリの容量を確保します。

このデータ領域を仮想メモリ、こういった処理をスワッピングまたはページングといいます。

この機能があるがために、少ないメモリでもコンピュータは動作できるのですが、この処理が頻発すると、ストレージのアクセスが多くなり、大幅な遅延が発生します。

この処理を減らすにはメモリの量を増やすしかありません。快適に作業するにはメモリを増やすのが一番良かったりします。

では、Linuxでメモリを確認する方法。

ターミナルを起動し、以下のコマンドを入力します。

$ sudo lshw

ハードウェアの情報を出力します。

その中にこんな表示があります。

bank0が元々搭載されていたメモリ、bank1が新たに追加したメモリです。

詳細の項目にSODIMMとあるのは、これはノートPC用のメモリであるということを示しています。デスクトップ用とノート要はパーツのサイズが違うので、物理的に増設することができません。

また、DDR3というのはメモリの種類、1600MHzというのはメモリの動作環境です。これらは元々積んであるメモリと同じ型を選択したほうがいいでしょう。

というわけで、追加したメモリと同じ物を買いました。

そして、増設後はlshwの出力はこうなりました。

メモリのサイズが4GBから16GBに増えました!

これでこのPCも開発用PCです!!

Jenkinsサーバを立ち上げてみた

Jenkinsというと、自動的にビルドしてくれたり、自動的にテストしてくれるというイメージがあるんですが、今のプロイジェクトでも使用しているので、使ってみました。

使い方はこちらを参照すれば一発で使用できます。

https://jenkins.io/doc/pipeline/tour/getting-started/

英語で書かれているけど、これくらいは読めるようになれよな。

要はファイルをダウンロードして、コマンドを叩いて、ブラウザからアクセスすればOK

フォルダにパスコードが書かれたファイルが出来上がるので、をれを開いてコピペすればセットアップが始まります。

様々なビルドに対応出来るように、必要な機能はプラグインが用意されています。

で、使ってみた感想。

簡単に自動ビルドや自動テストができる、というのは建前で、

実際は、

cronに毛が生えたもの

ビルドするためのスクリプトは基本的に自分で用意します。Jenkinsはそのスクリプトを、様々な条件をトリガとして実行してくれるものです。

ただ、gitと連動して、バックグラウンドでgitサーバから最新ファイルをチェックアウトして、ビルド処理を実行してくれるのは結構らくちん。

やり方次第では自動デプロイとかもできるかもしれない。

ただ、

どこのサーバで稼働させるか、が、ちょっと悩みどころで。

メリットを生かすためには常時稼働しているサーバがふさわしいので、ラズパイをもう一回買ってみるかなー

Alexaさんで遊ぼう Fire TVと連携させる

fire tv stickを買いました。

これを買おうと思ったポイントは、Amazon Echoと連携できることもそうですが、利用できるコンテンツとして、AbemaTVとDアニメストアが使用できる点です。

やっぱりテレビの大画面で見たいです。

開封

スティック側をテレビのHDMIポートに挿し、USBから電源を供給すればセットアップが始まります。

このとき、Amazon Echoがあれば自動的にリンクしてくれます。

セットアップ完了。

DアニメストアやAbemaTVは、アプリという形で提供されています。

なので、視聴したいときは

「アレクサ、アベマTVを開いて」

「アレクサ、Dアニメストアを開いて」

という感じで使用します。

コンテンツの名前を指定した場合はプライムビデオを検索しにいきます。

つまり、Dアニメストア内のコンテンツを声で指定することはできないのです。

まぁ、それは仕方が無いか。

残念なのはDアニメストアのマイページ。

続きから見る、という項目がないのです。

不便。

視聴履歴は引き継がれているので、そこから折っていくしかありません。

YouTubeはブラウザ経由での視聴ですが、使用感覚はPS4のYouTubeとほぼ同じでした。

【C言語】浮動小数点数(実数型)

小数点を扱うことができるデータ型です。

実行結果はこうなります。

浮動小数点数は符号ビット、指数部、実数部でデータを持っています。

といっても、オイラは仕事で少数の数字は余り使うことは無かったので、余り詳しくはありませんが。

こんなもんだと考えてもらえれば問題ありません。

小数をprintf()で表示するにはフォーマットを%fで記述します。

そうした場合、小数の桁数が固定になるため、表示したい桁数を示す場合は、上記のように%とfの間に数字を記入します。

と、ここまで変数について記載しましたが、

実際に現場では下記のようにtypedefで再定義する事が多いです。


実行結果はこうなります。

こう書けば、その型が符号付きなのか、何ビットデータなのかが一目瞭然になります。

【C言語】整数型

変数を扱うに当たって、重要なのは変数が扱える値の範囲を意識することです。

データ型によって、変数が扱える値の範囲が変わります。

その基準がその型がどれだけのバイトサイズか、と言うことで決まります。

こんな検証用のコードを書きました。

sizeof()というのは、型で使用するデータサイズを計算してくれます。単位はバイトです。

実行結果はこうなりました。


1バイトというのは8ビット、8個の0/1でデータを表現しています。

さらに、signedとunsignedというのがあり、signedというのは、符号付き、という意味で、マイナスの値を表すのに1ビットを使用します。

それぞれの型が表現できる型は、以下の式で表現できます。

・符号付き(signed)の場合(nはビット数)

-2^(n-1) ~ (2^(n-1))-1

・符号無し(unsigned)の場合(nはビット数)

0 ~ 2^n-1

charを例に取れば、扱える値の範囲は-128~127、ということになります。

では、この範囲を超えてしまう場合はどうなるのでしょうか?

こんなコードを書いてみました。

charが扱える最大値に+1しました。

実行結果はこうなります。

これはどういうことかというと、+1することによってcharが扱えるデータの範囲を超えてしまったため、入りきらずに溢れたデータは消失してしまいます。

その結果、データの値的にはcharの一番小さな値になります。これは、ロールオーバーと呼んでいます。

小さな値を扱うには問題無いかと思いますが、大きな値を扱う場合は、データ型がどこまで扱えるか、というのを意識しなければなりません。

その意識が漏れてしまうと、想定外の値となってしまい、それが原因で、バグが発生してしまいます。

プログラムを設計する場合は扱えるデータの範囲とロールオーバーを意識しなければなりません。

それを解決するには、16進数、10進数、2進数の変換をスムーズに行えなければ難しいでしょう。

10進数への変換は電卓アプリに任せるとして、16進数と2進数の変換はプログラマーなら覚えておくべきです。

16進数 2進数 10進数
0x0 → 0000b → 0
0x1 → 0001b → 1
0x2 → 0010b → 2
0x3 → 0011b → 3
0x4 → 0100b → 4
0x5 → 0101b → 5
0x6 → 0110b → 6
0x7 → 0111b → 7
0x8 → 1000b → 8
0x9 → 1001b → 9
0xA → 1010b → 10
0xB → 1011b → 11
0xC → 1100b → 12
0xD → 1101b → 13
0xE → 1110b → 14
0xF → 1111b → 15

こんな感じでテンプレートみたいに覚えておくと、後々役に立ちます。

16進数の0~Fを2進数の0/1に置き換えれば簡単に変換出来ますので。

例えばunsigned char型なら最大値が0xFF(1バイト)なので、2進数に変換すると0x11111111となります。