markdownで内部リンク

環境

  • vimmarkdownpreviewする機能を用いて、markdown文法を利用している
    • 今回の方法は、 Hatena Blogとか、Qiitaではできないので注意
      • Qiitaの場合
      • Hatena Blogは知らん
        • <div id="設定したいID"></div>とかで無理やりはできる
  • vimでのmarkdown環境は以下の様な感じ
NeoBundle 'godlygeek/tabular'
NeoBundle 'joker1007/vim-markdown-quote-syntax'  
NeoBundle 'rcmdnk/vim-markdown'  
NeoBundle 'iwataka/vim-markdown-ex'  
NeoBundle 'kazuph/previm', 'feature/add-plantuml-plugin'  
NeoBundle 'tyru/open-browser.vim'

markdownで内部リンクを貼る方法

  • 結論から言うと、[リンク名](#アンカー名)の様な感じになる
  • アンカー名の箇所は、#, ##, ###, ... で記述した項目タイトルに限定されるっぽい
  • アンカー名に、括弧とか、HTMLのID属性として記述すると不都合のあるような文字列の場合は、該当箇所が全部-に変換される。
  • つまり、## (1) Header1の場合は、[リンク名1](#-1-header1)となるようである
    • 但し、日本語は、変換できないらしく、日本語部分が全部無視されるみたい

「IDがわかんねーよ」という場合の対処法

  • 以下の方法で、IDに何が設定されているか確認できる
    1. Previewする
    2. 該当箇所を選択する
    3. 右クリックで、View Selection Sourceを選択
    4. 該当箇所のみのHTMLが表示されるので、IDを確認する

LinuxでRemoteDesktop

LinuxでRemoteDesktop

  • 前提として、サーバとクライアントの両方ともLinux(Basix3.0)

  • LinuxでRemoteDesktopを行う場合に、インストールするものは以下の通り

    • サーバ側
sudo apt-get install xrdp  
  • クライアント側
sudo apt-get install remmina  

環境設定

  • 以下の設定を確認する
    • サーバ側は、xrdpが起動していることを確認する
# active (running)になっていればOK  
service xrdp status  
# 接続時のIPアドを確認しておく  
ifconfig

メモ

  • WindowsのRemoteDesktopからも、これで繋がるはず
  • 繋がらない場合は、FirewallとかAntiVirusソフトを疑うこと

参考

Educational DP Contest / DP まとめコンテストの「B - Frog 2」をPythonで

概要

  • 久しぶりに、プロコンをやろうと思って、https://atcoder.jp/contests/dpPythonでやってみた。
  • 二問目に挑戦してみたが、TLEで全然通らない。
  • 謎のnumpyを使わない縛りで挑戦していたが、これ以上は無理だと判断したので、供養目的で、ここに載せておく。

コード

def test3():
    import sys
    N, K = list(map(int, sys.stdin.readline().split()))
    h = list(map(int, sys.stdin.readline().split()))
    from itertools import tee
    its = list(tee(range(1, K+1), N))
    INF = 10**9
    dp = [INF] * N
    dp[0] = 0
    myabs = abs
    for i, hi in enumerate(h[1:], 1):
        value = INF
        for k in its[i]:
            key = i - k
            dpval = dp[key]
            if dpval >= INF:
                break
            tmpv = myabs(hi - h[key]) + dpval
            if tmpv < value:
                value = tmpv
        if value != INF:
            dp[i] = value
    print(dp[N-1])

test3()
  • 頑張ったポイントは以下
    • teeで予めループ用のiteratorを作っておく
    • sys.stdin.readline()の方が、input()より速いらしい
    • INFはギリギリの値(10**8だと通らない)
    • 関数はローカル変数に紐付けしておく(myabs)
    • minとか使わないで、if文
    • Nでループしないで、h配列でループ
    • 可能な限り、同じ計算を2回以上しないようにした
    • 配列へんアクセスを最低限にした(set/getともに)
  • ちなみにこれだけ頑張ると、1_03は何回かに1回は通る様になった。1_11はムリぽ。

感想

  • 此のコードの改変に1日費やしたから、他の問題が結局やれなかった…
  • pythonで挑戦する場合は、numpy使わないとどうにもならないみたい。
  • 正直な所、1問目からわからず、地力の低さを改めて感じた。
  • 次問からは、諦めてnumpyを使うことにします。

stoiが使えない

概要

 C++のstringモジュールに、stringからintへの変換関数(stoi())があるのだが、なんでかわからんが使えないので調べた。

前提

 DxLibをLinuxでビルドするとか言う、若干特殊な環境である。

調査

  • std::stoi()は、C++11以降で利用可能との事なので、g++とgccを4.8以降にしてみた。
    • とりあえず、普通にビルドする場合には大丈夫だったが、DxLib用のビルドをするとダメだった。
    • (2018-11-09追記) よく考えたら、MinGWを使ってたからg++更新しても意味なかったのでは?
# 使ってた奴↓
$ i686-w64-mingw32-g++
  • ここを見ると、「特定の条件下でガードされる場合があるので、以下のdefineを切ってみて」とか言っているのでやってみたがダメだった。
#define _GLIBCXX_USE_C99 1
  • 上記リンクのもうちょっと下に、ビルド時のオプションを調整してみては?的な事が書かれていたので、やってみたらOKだった。
-std=c++11 

まとめ

 とりあえず、ビルド時にc++11であることをオプションを使って分からせるといいらしい。
 他にもc++11で大丈夫なはずのvector<vector<string>>とかでエラーが出てたから、c++11以前の状態でビルドしてたっぽい。

gnumericでCSV保存

概要

 Excelの簡易版でLinuxで使えるgnumericというアプリケーションがあるのだが、CSVの作成方法がそんなに簡単じゃなかったので、やり方を残しておく

やり方

  1. 上のバーから「データ」を選択
  2. 「Export Data」で子メニューの表示
  3. 「Export as CVS File...」を選択

参考

openssh-serverが入っているのにsshでログインできない

概要

 新しくBasix4.0(OS)をインストールしたので、sshログイン関連を設定して遠隔ログインしようとしたができなかったので、原因を調査した。

現象

 sshコマンドでログインしようとすると、以下のメッセージが出て終了してしまう。

Connection closed by 192.168.11.10 port 22

調査1

 とりあえず、以下の点を調査した。

  1. サーバ(Basix4.0のPC)にopenssh-serverが入っているか?
  2. /etc/ssh/sshd_configの設定は?
  3. Firewallでport 22が拒否されてないか?

 結果は以下の通り

  1. 入ってる
  2. とりあえず、以下の様に設定して、サービスを再起動してみたがダメ

    Port 22
    PermitRootLogin no
    PasswordAuthentication yes

  3. そもそもFirewallがOffだった

調査2

 ということで、原因がわからなかったので、sudo service ssh statusでsshのサービスの状態を見てみると、以下のファイルの読み込みに失敗していた。

 上記ファイルは、/etc/sshにあるらしいのだが、何故か無かった。次のリンク先のアドバイスで、一回消して作りなおせとあったので、以下のコマンドで作り直しだけやってみると、無事sshができるようになった。

sudo dpkg-reconfigure openssh-server

 

結論

 公開鍵情報が無かったのが問題だったらしい。
 普通はopenssh-serverのインストール時に作られるはずだが、作られていなかった。何故かは不明。

guakeの起動時にコマンドを実行するオプションが効かない件

概要

  • guakeの起動時にbyobu-screenを実行させたい。
  • 以下のコマンドを叩くと、VTEの引数がおかしい的なエラーが出る
guake -e byobu-screen

調査

 本家のissueに当該内容の記述があったので、以下のファイルの外部コマンドを渡す箇所を修正してみた。

  • ファイル : /usr/lib/python3.6/site-packages/guake/guake_app.py
#terminal.feed_child(command, len(command))
terminal.feed_child(command)

 修正して実行してみると、「0番目のアイテムは文字列ではなく、数字を渡してください」とか言ってきた。しょうがないのでVTEのAPIを見に行ったが、何も解決しなかったので諦めろん

どうしようか?

 コマンドの実行は無理っぽいので、別アプローチを模索していたところ、guakeの設定をよく見てみると、Shellなる項目があった。中を見るとDefault Interpreterという項目があり、ここに設定したコマンドが、起動時に実行されるらしい。なので、ここにbyobu-screenを設定できればよいはず。
 項目の増やし方がわからなかったが、この質問の回答よると/etc/shellsの記述を表示しているだけらしい。追記して再度Default Interpreterのリストを見てみると、追加されていた。

結論

  • /etc/shells に /usr/bin/byobu-screen を追加する
  • guakeの設定のShellで、Default Interpreterにbyobu-screenを設定する