Growi更新

Growiの更新

Growiのバージョンを新しくするための方法と手順について簡単にまとめる。

移行手順

  1. バックアップをとる
    wikiは元の状態に復活してくれるが、念の為取っておく
    左下の歯車アイコン → データアーカイブアーカイブの新規作成 → DLして保存する

  2. READMEのUpgradeの手順でGrowiの停止〜再起動までを行う
    これは手順通りに行えば良い。

  3. ローカルで公開するので、docker-compose.ymlの公開アドレスを変更する
    127.0.0.1:30000.0.0.0:3000にする。

  4. Texを利用したいので、MATHJAX = 1コメントアウトを外す

  5. 以上

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オプションをつければいいらしい → 参考

参考

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 StudioSDKをインストールすると、~/Android/Sdk/platform-tools/にadbがインストールされるので、それを利用していたが、それがダメだったらしい。
linuxのapt-getでadbをインストールしたところ正常に認識する様になった。
serviceか何かの問題かな?

参考

GraphQLのサンプルプログラム

概要

GraphQL APIを試した際のサンプルプログラム

プログラム

GraphiQL

クライアント側のプログラムを作成しなくても、ブラウザから下記のように試すことができる。
f:id:killingout_n-bita:20210525070939p:plain 上記のサーバ側プログラムを起動後、下記のアドレスにアクセスすると開く。

クライアント側

クライアントアプリをflutterで作成した。
とりあえず、一覧表示、追加、削除に対応させた。
追加は、メッセージを入力して、赤ボタンを押下する。
削除は、消したいメッセージを右から左にスワイプする。
(2021/05/29 追記)

f:id:killingout_n-bita:20210529151647p:plain

Packet Tracerのメモ

概要

  • Packet TracerとIOSの使い方メモ

Tips

configureコマンドが打てないんだけど

  • "enable" を実行してRouterの設定モードに移行しましょう

接続した線を付け替えられないの?

  • やり方がわからん、できないのか?

MPLSができないんだけど

  • Packet Tracerは非対応
  • GNS3でやるしか無い

Packet Tracerのインストール

概要

  • CiscoのPacket Tracerをインストールした際のメモ

環境

Packet Tracerって何?

  • Ciscoのネットワーク機器をSW上で操作できるシミュレータ
  • 要は、ネットワークのお勉強ツールということ。
  • 参考

インストール

Packet Tracerのダウンロード

  • この記事が詳しい
  • キモ
    • Ciscoのアカウントを作ること」
    • 「本体はNetwork Academyの最初のコースを受講しないとDLできないこと」

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のやつには無い
  • Ubuntuと相性が悪いみたい、CentOSとかならば難なくインストールできるのだろうか

Windowsバージョンのインストール

  • 32/64 bitバージョンのインストールができるので、おとなしくコレをインストールしよう