Growi更新
Growiの更新
Growiのバージョンを新しくするための方法と手順について簡単にまとめる。
移行手順
Haskellで動的計画法(最長共通部分列問題)
蟻本の「最長共通部分列問題」(56p)をHaskellで実装してみた。
Haskellでの動的計画法(DP)の実装方法が全然わからなかったので、以下のリンクを参考にした - Haskellで蟻本やるぜ5(DP)
{-# LANGUAGE BangPatterns, FlexibleContexts #-} import Control.Monad import Control.Monad.ST import Data.Array import Data.Array.ST import Data.Time import Debug.Trace -- 最長共通部分列問題 -- 再帰(Data.Array) solver :: Int -> Int -> [String] -> [String] -> Int solver n m ss ts = rec n m where memo = listArray ((0, 0), (n, m)) [rec i j | i <- [n..0], j <- [m..0]] -- rec 0 _ = 0 rec _ 0 = 0 rec i j = if si == tj then 1 + rec (pred i) (pred j) else max (rec (pred i) j) (rec i (pred j)) where si = ss !! (pred i) tj = ts !! (pred j) -- STモナド solver' :: Int -> Int -> [String] -> [String] -> Int solver' n m ss ts = runST $ do dp <- newArray ((0, 0), (n, m)) 0 :: ST s (STUArray s (Int, Int) Int) forM_ [0..(pred n)] $ \i -> do let si = ss !! i forM_ [0..(pred m)] $ \j -> do let tj = ts !! j if si == tj then do x <- readArray dp (i, j) writeArray dp (succ i, succ j) (x + 1) else do x1 <- readArray dp (i, succ j) x2 <- readArray dp (succ i, j) writeArray dp (succ i, succ j) (max x1 x2) readArray dp (n, m) -- STモナド&再帰 solver'' :: Int -> Int -> [String] -> [String] -> Int solver'' n m ss ts = runST $ do dp <- newArray ((0, 0), (n, m)) 0 :: ST s (STUArray s (Int, Int) Int) memo <- newArray ((0, 0), (n, m)) False :: ST s (STUArray s (Int, Int) Bool) -- (0, _), (_, 0)のときは0なので計算済みにしておく sequence [writeArray memo (0, i) True | i <- [0..m]] sequence [writeArray memo (i, 0) True | i <- [0..m]] rec dp memo (n, m) where rec dp memo (i, j) = do exists <- readArray memo (i, j) when (not exists) $ do let si = ss !! (pred i) tj = ts !! (pred j) if si == tj then do x <- rec dp memo (pred i, pred j) writeArray dp (i, j) (x + 1) else do x1 <- rec dp memo (pred i, j) x2 <- rec dp memo (i, pred j) writeArray dp (i, j) (max x1 x2) writeArray memo (i, j) True readArray dp (i, j) main = do -- answer : 3 let n = 4 m = 4 s = "abcd" t = "becd" print $ solver n m (map (:[]) s) (map (:[]) t) print $ solver' n m (map (:[]) s) (map (:[]) t) print $ solver'' n m (map (:[]) s) (map (:[]) t)
実装した感じだと、2番目の「STモナド」利用が、元のソースと同じような感覚で書けた。
C++から移植する際は2番目の書き方ベースで進めると良いかもしれない。
Crowiを使いたい
概要
ローカルWikiを構築したい。
調べるとCrowiなるものがあるらしく、記事はMarkdownで書けるらしい。
なお、今回はGROWIなるCrowiの拡張をDockerで簡単にインストールできるらしいので、こっちをインストールする。
環境
OS
Ubuntu 20.04
インストール
docker
まず、ここを参考にして、Dockerをインストールする。
docker-compose
次に、docker-composeなるdockerのラッパーみたいなやつを、ここを参考にインストールする。
GROWI
dockerからのインストール手順は、ここに書いてある。
なお、githubからDLしたプロジェクトは今後も使うので、適当な場所においておくこと。
公開設定
デフォルトだと、ローカルホストの3000ポートからしかアクセスできないので、ここを参考に設定を変更する。
設定ファイルは、DLして来たディレクトリのgrowi/docker-compose.yml
にある。
今回はローカルネットワーク上から見れれば良いので、0.0.0.0:3000:3000
にする。
services: app: build: context: ... ports: - 127.0.0.1:3000:3000 # ← これを変更する
起動
DLしたディレクトリに移動して、sudo docker-compose up
を叩けば良い。
毎回移動するのが面倒な場合は、以下のスクリプトを作っておいておけば良い。
#!/bin/bash pushd . cd "DLしたGROWIプロジェクトのパス" sudo docker-compose up popd
その他
nmap
サーバーの公開ポート一覧を表示するコマンド。
上記の3000が公開されているか見るには、以下の様にすれば良い。
nmap サーバのIPアドレス
dockerコマンド
上記ではdocker-compose
を利用したが、dockerコマンドからも同様のことができる。
公開ポートを変更するには、-p
オプションをつければいいらしい → 参考
参考
- https://qiita.com/yuki-takei/items/5df9601039ccfc1df01f
- https://qiita.com/tksugimoto/items/23fcce1b067661e8aa46
- https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-20-04-ja
- https://docs.docker.jp/compose/install.html
- https://github.com/weseek/growi-docker-compose
- https://qiita.com/ksato9700/items/0b4c7de5d857dc731443
Android Studioとスマホを連携させる
概要
Linux(Ubuntu)でAndroid Studioを導入し、Androidの実機でアプリを起動するための設定方法を調査した。
尚、前提としてAndroid Studioは導入済みとする。
環境
開発PC(OS) | Ubuntu 20.04 |
スマホ | SO-04K |
スマホ(OS) | Android 10 |
設定
スマホ側
開発者向けオプションが表示される様にする
設定 → デバイス情報 → ビルド番号を複数回タッチする
USBデバッグをONにする
設定 → システム → 開発者向けオプション → USBデバッグをONにする
開発PC側
ログインユーザにplugdevグループを追加する
sudo usermod -aG plugdev $LOGNAME
端末を認識するように設定する
管理者権限で以下のデバイス設定ファイルを作成する
/etc/udev/rules.d/51-android.rules
# 以下の内容を記述した SUBSYSTEM=="usb",ATTR{idVendor}=="0fce",MODE="0666",GROUP="plugdev"
Android Studioで対象のバージョンのSDKをインストールする
Tools → SDK Manager → Android 10.0 にチェックを入れる → OK
※ 実機のAndroid OSのバージョンに応じて、チェックを入れる箇所は変更すること。
adbをインストールする
sudo apt-get install adb
SDKのツールをインストールする
Tools → SDK Manager → SDK Toolsタブに移動 → Android SDK Command-line Tools(latest)にチェックを入れる → OK
トラブルシューティング
Android Studioが実機を認識しない
コマンドadb devices
では認識されているのに、Android Studioが実機を認識しなかったので、いろいろ調べた。
adbは、Android StudioでSDKをインストールすると、~/Android/Sdk/platform-tools/
にadbがインストールされるので、それを利用していたが、それがダメだったらしい。
linuxのapt-getでadbをインストールしたところ正常に認識する様になった。
serviceか何かの問題かな?
参考
GraphQLのサンプルプログラム
概要
GraphQL APIを試した際のサンプルプログラム
プログラム
GraphiQL
クライアント側のプログラムを作成しなくても、ブラウザから下記のように試すことができる。
上記のサーバ側プログラムを起動後、下記のアドレスにアクセスすると開く。
クライアント側
クライアントアプリをflutterで作成した。
とりあえず、一覧表示、追加、削除に対応させた。
追加は、メッセージを入力して、赤ボタンを押下する。
削除は、消したいメッセージを右から左にスワイプする。
(2021/05/29 追記)
Packet Tracerのメモ
概要
- Packet TracerとIOSの使い方メモ
Tips
configureコマンドが打てないんだけど
- "enable" を実行してRouterの設定モードに移行しましょう
接続した線を付け替えられないの?
- やり方がわからん、できないのか?
MPLSができないんだけど
- Packet Tracerは非対応
- GNS3でやるしか無い
Packet Tracerのインストール
概要
- CiscoのPacket Tracerをインストールした際のメモ
環境
Packet Tracerって何?
インストール
Packet Tracerのダウンロード
Packert Tracerのインストール(Linux) できなかった
- 下記のパッケージファイルがダウンロードできるのでインストールする。
sudo dpkg -i PacketTracer_800_amd64_build212_final.deb
- 下記コマンドで実行すると何も表示されない
packettracer
- 直接起動しないとエラーメッセージが破棄される様になっているので、直接起動する
/opt/pt/bin/PacketTracer
- ライブラリが不足している場合は、何かしらのメッセージが表示されるのでインストールする
Linux版がインストールできなかった件
Qtのバージョンが5.15じゃないとダメらしい
- Qt-5.15.2 でもダメだった
- Qtのオンラインインストーラーのバージョンが5.15.2だった(2021-02-14現在)
Ubuntuのバージョンは18.04ではダメだった
- libm6 に含まれるGLIBのバージョン自体が古いと、PacketTracerが起動しない
UbuntuのQtのモジュールに含まれていないライブラリが必要とか言われる
- libQt5QmlModels.so.5 がUbuntuのやつには無い
Windowsバージョンのインストール
- 32/64 bitバージョンのインストールができるので、おとなしくコレをインストールしよう