C++のstd::functionを触ってみた

はじめに

C++版LINKSでのゲームメニューがかなり冗長だった(メニュー項目分だけ異なる関数を呼び出す形になってたから)ので、短くできないかなーと思い色々調べてたのが事のきっかけ

 

で、色々調べてたらstd::arrayに関数オブジェクトとして格納できるらしい……?ということを知ったので試してみた。

 

実際のコードはこちら

wandbox.org

 

やってること

std::fuctionを使ってラムダ式を関数オブジェクトとして受け取る。

std::function<void(void)> func1 = []{ std::cout << "func1" << std::endl; return 0;};

 

で、それをstd::arrayに代入してるだけ

std::array<std::function<void(void)>, 3> Func = {func1, func2, func3};

 

あとは、std::arrayなどで使えるrange-based-forを使って各ラムダ式を実行するだけ

for(auto func : Func)

  func(); 

 こんなかんじで、ラムダ式をstd::arrayに渡してrange-based-forで回して実行できる

 

あと、既存の関数とか実行する時はこんなかんじでいけるみたい

wandbox.org

 

おわりに

これで、ゲームメニュー周りのコードなんかも短くできるんじゃないかと思う

はじめて触ってみたけど、std::function便利だなぁ

AmazonDashボタンを使ってMastodonへにゃーんって呟いてみる

はじめに

先日の松江Ruby会議09でのセッション時に話してた「にゃーんボタン」をさっそく作ってみた

 

ちなみに、その時のスライドはこれ

speakerdeck.com

 

必要なもの

  • AmazonDashボタン(お好きなものを)
  • Linuxマシン(amazon-dashを使うため)
  • Wifi環境

 

AmazonDashボタンの購入

AmazonDashボタンはプライム会員であれば簡単に購入できます。ちなみに、こちらから購入可能

www.amazon.co.jp

 

購入後は下記の記事にあるようにスマホからセットアップを行う。

肝は、LinuxマシンとAmazonDashボタンの接続するWifiは同一のものを選ぶことと、商品選択は無視して設定を終了すること

qiita.com

 

Linuxマシンでの設定

仮想マシンでもいいので、Linuxマシンを用意する。

 

用意出来たら、Python3とpipをインストール。

ちなみに僕が使ったのはLubuntu18.04だったので、Python3は既にインストール済みだったので、以下のコマンドを使ってpipだけをインストール

curl -O https://bootstrap.pypa.io/get-pip.py

python3 get-pip.py

 

pipをインストールした後は、amazon-dashをインストールする

pip install amazon-dash

 

次に、AmazonDashボタンのMACアドレスを調べる。

sudo amazon-dash discovery

このコマンドを実行後、AmazonDashボタンを押すとMACアドレスが表示される。

 

そして、amazon-dash.ymlを作成し、以下のように記述していく

settings:

  delay: 0

devices:

  AA:AA:AA:AA:AA:AA:

    name: meow

    user: SH

    cmd ruby /home/SH/Desktop/nyaaan/meow.rb

 

で、実際にMastodonへ呟くmeow.rbを作成

require 'mastodon'

  client = Mastodon::REST::Client.new(base_url:"呟きたいMastodonのURL", bearer_token: "アクセストークン")

 

response = client.create_status("にゃーん!")

 

最後に、rootで叩けるように変更

touch amazon-dash.yml

sudo chown root:root amazon-dash.yml

 

あとは、以下のコマンドを実行してAmazonDashボタンを連打するだけ

sudo amazon-dash run

o

おわりに

とりあえず、これでAmazonDashボタンを使ってのMastodonへ「にゃーん!」って呟けるようになった!

 

皆さんも、ストレスがたまった時に押してみてはどうでしょうか?

 

以下、参考資料

qiita.com

qiita.com

 

 

松江Ruby会議09でMastodonについて話してきた

 

昨日、松江のオープンソースラボで開催された松江Ruby会議09に参加してきた。

matsue.rubyist.net

 

地域Ruby会議に参加するのは今回が初めてで、なおかつセッションで話すということでいい経験をさせてもらったと思う。

なによりMatzさんの前で話すことになるって知ってたので、会場へ行くまでの道中は結構緊張してた。

 

 

で、Mastodonについて話してきた。

これがその時のスライド

speakerdeck.com

 

ところどころにネタを突っ込んでて、笑いが取れることを期待しつつセッションしたね

思ってたよりは反応が良かったので、うれしかったねー

 

今後も機会があればお邪魔させてもらおうかなと思うねー

Foods Checher for Mastodon をPWA化してスマホ対応した

はじめに

先日のいわみくと!に参加した際に「PWAってWebアプリをネイティブアプリみたく使えるんですよ」という話を聞いたのが今回のきっかけ

 

いわみくと!(いわみ ICT 協議会) | Doorkeeper

 

 

以前から、スマホ対応したいなぁと考えていたこともあり、今回PWA化してみた。

 

ちなみに、PWAって何という方はこちらをご覧ください

いまさら聞けないPWAとAMP

 

やったこと

基本的にはこちらの記事二つを参考に必要なgemを追加してインストールコマンドを実行しただけ


rossta.net

 

RailsアプリケーションをPWA化する目論見

 

以下、実際の手順

RailsアプリのHTTPS化対応

config/environments/production.rb 内に以下のような記述がある。そこにtrueを渡してやればHTTPS化は完了

 

config.force_ssl = true

 

②gemの追加

Gemfileに以下のようにgemを追記して、

 

gem "serviceworker-rails"

 

そのあとは、bundle install を実行

 

bundle install 

 

③service worker のインストール

以下のコマンドを実行するとRailsでservice workerを利用することができるようになる

 

rails g serviceworker:install

 

とりあえず、これだけで既存のRailsアプリをとりあえずはPWAとして動くようにすることができる。

 

あとは、PWA対応したWebアプリをそれぞれのOSでデスクトップにインストールするだけ。

iOSならSafariで「ホーム画面に追加」を選択すればOK。

AndroidChromeから「ホーム画面に追加」を選択してください。

 

なお、iOSの場合は11.4以降のOSでないとOauth認証が別ブラウザで実行されてしますので注意が必要。

Androidの場合は特に気にしなくてもOK。

 

参考記事

いまさら聞けないPWAとAMP

 

RailsアプリケーションをPWA化する目論見

 

rossta.net

 

github.com

VS2017+Jenkinsな環境でC++を書く

はじめに

以前からJenkinsなどのCIツールによる開発環境に興味があり、今回構築してみた。

これはその時の備忘録。

 

前提

まず、使用環境としては下記の通り

 

使用環境

・Windows10 Pro 64bit

Visual Studio 2017 Community

 

また、サーバ上にJenkinsを構築するのではなく、ローカルにJenkinsをインストールして使用する。

 

あと、ローカルリポジトリにコミットするたびにビルドやテストが実行されるようにしたい。

 

環境構築

まずはローカルにJenkinsをインストールする。

jenkins.io

 

Windows用のバイナリを上記のリンクからダウンロードしてきて、インストールするだけ。

そのあと、localhost:8080へブラウザからアクセス。

表示されているパスにあるファイルを開いて、そこに記載されているパスワードを入力する。

あとはログイン用のアカウントを作成するぐらいなので、そんなに難しくはない。

 

 ログインしたのち、下記の記事を参考に必要なプラグインのインストールなどを行う

sh-yoshida.hatenablog.com

 

で、C#のプロジェクトであれば上記の記事の通りでビルドできるようになる。

けど、C++でビルドする場合はvcxprojファイルを指定してやる必要がある。そこだけ注意が必要。

 

最後に、コミットごとにビルドやテストを実行するように設定を行う。

下記の記事を参考に設定を行います。

simple-it-life.com

 

「ビルド・トリガ」は「SCMをポーリング」を選択します。「スケジュール」欄には「* * * * *」と入力してください。

 

あと、「ソースコードの管理」にローカルリポジトリを設定するので、「file://sample_test」といった形でリポジトリへのパスを設定する必要があります。

 

これで、コミットするたびに自動的にビルドやテストが走るようになります。

 

 

参考記事など

sh-yoshida.hatenablog.com

sh-yoshida.hatenablog.com

sh-yoshida.hatenablog.com

simple-it-life.com

 

おわりに

今回初めてJenkinsを使ってみましたが、かなり楽ができそうで良いですねー。

特に良いのがビルドを自動で行ってくれるところですね。

 

 

今後はRailsなどの環境でもJenkinsを使っていきたいと思いますね

さくらのMasotodonスタートアップスクリプトを使ったインスタンスが v2.4.0 へアップデートする際のアレコレ

昨夜遅く、Masotodon v2.4.0 が正式にリリースされた

github.com

 

ただ、今回のアップデートは少し一波乱ありそうなんだよね

 

なぜかというと、Postgres9.4以降出ないと使用できないカラム:jsonb が追加されている

そのため、Postgresのバージョンが古いインスタンスなんかではアップデート時の RAILS_ENV=production bundle exec rails db:migrate が通らない。

 

この問題が起きそうなのは、さくらのクラウドMastodonスタートアップスクリプトを使っているインスタンスに絞られそう。

 

実際、僕のとこのCreatodonもスタートアップスクリプトを使って建ててて、この問題にぶち当たった。

 

 

一応、公式のIssue に意見は出しといたけど……

github.com

 

対処法

対処法としては以下の二つがある。

①:該当箇所のコミットの打ち消し

②:Postgresqlのアップデート

 

①に関して

一番簡単な方法は該当しているコミットを打ち消してやる方法かな?

Creatodonも一時的に該当箇所のコミットを打ち消してやることでmaster追従してた。

なお、git で該当のコミットを打ち消すには以下のコマンドを実行すればいい

git revert 78ed4ab75ff77d7cba60d478aa1f45d1c104785d

 

②に関して

以下の二つの記事を参考にPostgresのアップデートを行ったね

medium.com

 

beeete2.hatenablog.jp

 

 

 

より詳しい手順に関してはハル氏の記事が分かりやすいので、そちらを参照されるとよい

note.mu

 

 

とりあえず、実際のインスタンス運営の方針によってはプロフィール欄を追加しなくてもいいだろうから、revertするのも一つかもしれないね

Boostライブラリ使ってLINKSを改良してみた

最近、Boostライブラリを弄りたいと思ってたので、C++版LINKSの機能拡張もかねてBoostを弄ってみた

Boost C++ Libraries

 

実際に実装したもの

github.com

 

github.com

 

github.com

 

今回、主に使ったのは boost::xpressiveを正規表現に使ってた感じ

あとは素材の読み込み関係とかかな?

 

結論

正直、Boost便利だなぁと思ったねー

ちょっとしたサンプルなら既に逆引きリファレンスとかで載ってるしね

boostjp.github.io

 

もうちょい早めに弄ればよかったと少し後悔。

 

今後は、boost弄りながらLINKSの改良を進めていこうかね