Kusanagi自動アップデート化

なぜ作ったか アップデートが面倒 アップデートが管理画面上だとうまく行かなかったりする アップデートが面倒 メリット アップデートを気にしなくても良い アップデートがほぼ失敗しない セキュリティがアップデートしないよりは安心 デメリット アップデートによるバグのリスク 使い方 kusanagiが前提だけど、wp-cliをインストールすれば通常のWordPressでも利用可能。

Webサーバー「H2O」の使い方 on Ubuntu 18.04(Let’s EncryptによるSSL化)

最近はめっぽうH2Oを使うことが多くなったので、紹介。 インストール H2Oの設定ファイルを記載 h2o.confの内容 systemd用の設定ファイルを作成 h2o.serviceの中身 H2Oを起動 ブラウザで ドメインにアクセスして Hello H2O! と表示されたら成功。 SSL化 H2Oに適用 h2o.confの中身 H2Oを再起動 ブラウザでドメインにアクセスして、https://〜 にアクセスしていたら成功。また、「HTTP/2 and SPDY indicator」(https://chrome.google.com/webstore/detail/http2-and-spdy-indicator/mpbpobfflnpcgagjijhmgnchggcjblin )をインストールしてアクセスしてみて、下の画像のように青くなっていたらHTTP2によるアクセスが可能となっている。

Software Design 2019年3月号の微分積分の章を執筆させていただきました!

2019年1月号の線形代数の章に引き続き、微分積分の章を執筆させていただきました。 今回は、微分積分の初歩をざっとおさらいする感覚で書いています。大きく分けて次の5節です。 事前知識 微分 積分 偏微分の導入 微分方程式の導入 今回は、歴史的な背景を解説にいれ、「微分積分」という言葉に少しでも抵抗なく読んでいただけるように工夫してみました。まず手にとって、「ふーん」と思っていただけたら成功だと思っています。 また、更に厳密に議論するために、編集者の皆様にお願いしまして、本編の数倍の分量の「解説」をダウンロードしていだけるように手配していただきました。編集長の池本様を始め編集部の皆様、ギリギリまでご対応いただきありがとうございました。解説では、数とはなにか、からはじまり、実数の性質、実数の連続性をε-δ論法を用いた解説を行っています。分量はかなり少ないですが練習問題も添付しております。ぜひご購入いただいた方は付録の解説もダウンロードして読んでいただけますと幸いです。

Software Design 2019年1月号を執筆させていただきました!

今回のテーマが機械学習と線形代数ということで、行列解析が大学院までの専門分野であったことから、執筆させていただいた。なるべくわかりやすく書いたつもりだったのですが、書いているうちに書きたいことが山のように増えてしまい、奥様に読ませたところ、「よくわからない。。。」といわれてしまった。難しくなったかな。 テーマは、 1. 線形性 2. ベクトル 3. 行列 の三段構成となっている。行列式に関しては、定義の方法はあるもののいずれも難しいため、計算方法(余因子展開)のみを紹介するにとどまった。また、固有値に関しても、もっともっと書きたいことがあったのだけれど、定義するにとどまった。機械学習で使うということを念頭において書いたつもりだけれど、少し脱線している感は否めない。 執筆後、何度も修正を入れていただいたため、編集部の方々には本当にお礼を申し上げます。ありがとうございました。 とにかく読んでいただけたら幸いです。 Netflixの電車の広告じゃないけど、 山手線内のNETFLIX広告の本気感がすごい。 この広告のターゲットにならない人間の方が恐らく世に少ないのに、刺りそうな内容。 pic.twitter.com/s87ZSeLXBN — DARS(須田 幸平) (@dars8612) 2018年12月17日 実家は意外とやることがないぞ!線形代数を勉強しよう!

【Ubuntu】公式のMastodon構築マニュアルで、足りないパッケージ【Mastodon】

公式のMastodonのインストール方法で足りないパッケージがあったため、メモ。 sudo apt-get install libpq-dev libidn11-dev libicu-dev libprotobuf-dev libprotoc-dev protobuf-compiler curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add – echo “deb https://dl.yarnpkg.com/debian/ stable main” | sudo tee /etc/apt/sources.list.d/yarn.list sudo apt-get update sudo apt-get -o Dpkg::Options::=”–force-overwrite” install yarn

LogStashでMySQLのデータをElasticSearchに流し込んだ

MySQLに集めたものの、どうしたら良いの状態だったため。 LogStashをインストール Logstashから/usr/local/binにダウンロードしてインストール。ElasticSearchのバージョンに合わせる必要あり? cd /usr/local/bin sudo curl -O https://artifacts.elastic.co/downloads/logstash/logstash-6.3.1.deb sudo dpkg -i logstash-6.3.1.deb mysql-connector-javaをインストール https://dev.mysql.com/downloads/connector/j/からダウンロードしてサーバーにアップロード して、解凍して/usr/local/binに移動。現バージョンはmysql-connector-java-8.0.11。 ls /usr/local/bin/mysql-connector-java-8.0.11|grep mysql-connector mysql-connector-java-8.0.11.jar LogStashの設定ファイルを作成する sudo vi /etc/logstash/conf.d/mysql.conf input { jdbc { jdbc_driver_library => “/usr/local/bin/mysql-connector-java-8.0.11/mysql-connector-java-8.0.11.jar” jdbc_driver_class => “com.mysql.jdbc.Driver” jdbc_connection_string => “jdbc:mysql://localhost:3306/DB名” jdbc_user => “ユーザー名” jdbc_password => “パスワード” statement => “SQL文を書く” type => “タイプ” } } output { if [type] == “iphone” { elasticsearch { manage_template => false hosts => [“localhost:9200”] index => “iphone” document_type => “%{type}” document_id => “%{id}” } stdout {codec => rubydebug {metadata => true }} } } 実行する LogStashを実行して、データを流し込む。 sudo systemctl start logstash sudo /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/mysql.conf

今更ながらElasticSearch3.6.1 + Kibana + Nginx をUbuntu上に構築してみた

案件で触っているため。 Oracle Java8をインストール sudo apt-get update sudo apt-get -y dist-upgrade sudo apt-get install -y wget curl sudo apt-get install -y software-properties-common python-software-properties sudo add-apt-repository ppa:webupd8team/java sudo apt-get update sudo apt-get install -y oracle-java8-installer ElasticSearchをインストール wget -qO – https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add – sudo apt-get install apt-transport-https echo “deb https://artifacts.elastic.co/packages/6.x/apt stable main” | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list sudo apt-get -y update sudo apt-get install -y elasticsearch sudo systemctl start elasticsearch sudo systemctl enable elasticsearch 動作確認 $ curl localhost:9200 { “name” : “5GgIcSS”, “cluster_name” : “elasticsearch”, “cluster_uuid” : “X7GDMguuTrq4_DAnDUGq8Q”, “version” : { “number” : “6.3.1”, “build_flavor” : “default”, “build_type” : “deb”, “build_hash” : “eb782d0”, “build_date” : “2018-06-29T21:59:26.107521Z”, “build_snapshot” : false, “lucene_version”…

Djangoでテンプレート内でユーザー権限を扱う(カスタムタグ)

毎回忘れるので、もう忘れないための方法。 appディレクトリにtemplatetagsディレクトリを作成する app/templatetags templateディレクトリに__init__.pyファイルを作成 /app/templatettags/ +- __init__.py templateディレクトリにtag_extras.pyファイルを作成 ファイル名は何でも良い。 /app/templatettags/ +- __init__.py +- tag_extras.py tag_extras.pyに次のソースを記述する # -*- coding: utf-8 -*- from django import template register = template.Library() @register.filter(name=”has_perm”) def has_perm(user, permission_name): return user.has_perm(permission_name) テンプレートでカスタムタグを使う 以下は利用する例 {# admin_pages.can_view権限を持っているユーザーは表示される #} {% if user|has_perm:’admin_pages.can_view’ %} 表示される {% endif %}

TweepyのTwitter StreamingがPython3.7.0で使えない模様

Python3.7.0でtweepyを使おうとしたところ Twitter Streaming APIをPython3.7.0環境のTweepy使おうとしたところ、次のようなエラーが出た。 python main.py Traceback (most recent call last): File “main.py”, line 7, in <module> import tweepy File “/home/ubuntu/.venv/watson/lib/python3.7/site-packages/tweepy/__init__.py”, line 17, in <module> from tweepy.streaming import Stream, StreamListener File “/home/ubuntu/.venv/watson/lib/python3.7/site-packages/tweepy/streaming.py”, line 358 def _start(self, async): ^ SyntaxError: invalid syntax 何かなーと思ったら、asyncが3.7.0から予約語に入っていた。 What’s New In Python 3.7 対処方法としては、site-packages/tweepy/streaming.pyの async を sync などの変数名に置換してしまうことだけど、 pull request出したほうが良さそうね。

Raspbian StretchにBazelをインストール(Tensorflow利用時に使用)

RaspberryPiでTensorflowを使いたいという案件があり、そのために。 最新版の Raspberry Pi3 B+ 関連パッケージインストール sudo apt-get install pkg-config zip g++ zlib1g-dev unzip echo “deb https://ppa.launchpad.net/webupd8team/java/ubuntu xenial main” | tee /etc/apt/sources.list.d/webupd8team-java.list echo “deb-src https://ppa.launchpad.net/webupd8team/java/ubuntu xenial main” | tee -a /etc/apt/sources.list.d/webupd8team-java.list sudo apt-get update sudo apt-get install oracle-java8-installer Bazelインストール wget https://github.com/bazelbuild/bazel/releases/download/0.5.3/bazel-0.5.3-dist.zip unzip -d bazel bazel-0.5.3-dist.zip cd bazel vi scripts/bootstrap/compile.sh //中略:124行目// -encoding UTF-8 “@${paramfile}” -J-Xmx500M vi src/BUILD // 182行目 “//src/java_tools/singlejar:SingleJar_deploy.jar”, ./compile.sh

Django2.0でViewにアクセス権限を設けたい場合

チュートリアルが難解だったので、簡単な使い方をば。 メモ書き程度なので、雑な説明になってしまっていることをご了承願いたい。 ただ、重要な部分はコメントを入れておく。 アクセス権限を設けたいappのmodels.pyに追記する 以下のようなpermissionをmodels.pyから作成する。 # Create your models here. class PermissionModel(models.Model): # Mataクラスでpermissionを作成する。 class Meta: permissions = ( (“view_admin_page”, “Can see admin pages.”), ) migrateする。 python manage.py makemigrations python manage.py migrate ログイン時にアクセス権に応じてリダイレクトをかける from django.contrib.auth import authenticate, login def authentication(request): form = LoginForm(request.POST) if form.is_valid(): username = form.cleaned_data[‘username’] password = form.cleaned_data[‘password’] user = authenticate(username=username, password=password) if user is not None: if user.is_active: login(request, user) ## 管理者権限を持っていたら管理者ページへ if user.has_perm(“admin_pages”): return redirect(“/admin_pages”) else: return redirect(“/user_pages”) form.add_error(None, ‘LOGIN_ID、またはPASSWORDが違います。’) return render(request, ‘accounts/login.html’, {‘form’: form}) ログインしている状態でログインページにアクセスした場合にリダイレクトをかける ログインしている状態でログインページにアクセスしたときに、ログイン画面がでると混乱するのでリダイレクトをかけてみた。 from django.contrib.auth import authenticate, login from django.contrib.auth.models import User def login_page(request): form = LoginForm() # ログインしていたらリダイレクト if request.user.id: user = User.objects.filter(id=request.user.id).first() if user.has_perm(“view_admin_pages”): return redirect(“/admin_pages”) else: return redirect(“/user_pages”)…