読者です 読者をやめる 読者になる 読者になる

SanshouSichimiYa

備忘録の為のブログ

markdownをpandocを使ってHTMLに変換する

markdownpandocを使ってHTMLに変換しましたので備忘録です。

pandocをインストール

$ brew install pandoc

CSSを指定してHTMLに変換する

使うCSS

GithubなHTMLへ変換する為のCSSが公開されていますので、これを使います。

https://gist.github.com/andyferra/2554919

Defaultのディレクトリに配置する

Defaultディレクトリを確認します。

$ pandoc --version
pandoc 1.17.2
Compiled with texmath 0.8.6.4, highlighting-kate 0.6.2.1.
Syntax highlighting is supported for the following languages:
    abc, actionscript, ada, agda, apache, asn1, asp, awk, bash, bibtex, boo, c,
    changelog, clojure, cmake, coffee, coldfusion, commonlisp, cpp, cs, css,
    curry, d, diff, djangotemplate, dockerfile, dot, doxygen, doxygenlua, dtd,
    eiffel, elixir, email, erlang, fasm, fortran, fsharp, gcc, glsl,
    gnuassembler, go, hamlet, haskell, haxe, html, idris, ini, isocpp, java,
    javadoc, javascript, json, jsp, julia, kotlin, latex, lex, lilypond,
    literatecurry, literatehaskell, llvm, lua, m4, makefile, mandoc, markdown,
    mathematica, matlab, maxima, mediawiki, metafont, mips, modelines, modula2,
    modula3, monobasic, nasm, noweb, objectivec, objectivecpp, ocaml, octave,
    opencl, pascal, perl, php, pike, postscript, prolog, pure, python, r,
    relaxng, relaxngcompact, rest, rhtml, roff, ruby, rust, scala, scheme, sci,
    sed, sgml, sql, sqlmysql, sqlpostgresql, tcl, tcsh, texinfo, verilog, vhdl,
    xml, xorg, xslt, xul, yacc, yaml, zsh
Default user data directory: /Users/hirokiyoshino/.pandoc
Copyright (C) 2006-2016 John MacFarlane
Web:  http://pandoc.org
This is free software; see the source for copying conditions.
There is no warranty, not even for merchantability or fitness
for a particular purpose.

Default user data directory: /Users/hirokiyoshino/.pandocとのことなので、このディレクトリを作成

$ mkdir ~/.pandoc

この中に、cssをいれます。

変換

$ pandoc -s input.md -c ~/.pandoc/github.css -o output.html

うまくいきました。


以下のサイトを参考にさせてもらいました。

[Document workflow] Pandoc: markdown を github 風 html に変換する

Railsで動的にサイトマップを出力する Heroku対応

はじめに

サイトマップを設置するIssueを行いましたので備忘録として残しておきます。

Railsでsitemap作成と検索するとsitemap_generatorがまずヒットするのですが、今回はdynamic_sitemapsを利用しま…せんでした。

Herokuで動いていた為に、動的にサイトマップを出力する形にしました。

作業内容をざっくり

routeに追記

get 'sitemap' => 'main#sitemap'

controllerに追加

@routes = Route.select(:id, :created_at)

viewとhelperを追加

sitemap.xml.builder

xml.instruct!
xml.urlset(xmlns: 'http://www.sitemaps.org/schemas/sitemap/0.9') do
  sitemap(xml, root_url, lastmod: Time.current, changefreq: 'always', priority: 1.0)
  sitemap(xml, routes_url, lastmod: Time.current, changefreq: 'daily', priority: 0.8)
  
 @routes.each do |route|
    sitemap(xml, route_url(route.id), lastmod: route.created_at)
  end
end

sitemap_helper.rb

module SitemapHelper
  def sitemap(xml, path, lastmod: nil, changefreq: nil, priority: nil)
    xml.url do
      xml.loc(path)
      xml.lastmod(lastmod.xmlschema) if lastmod.present?
      xml.changefreq(changefreq) if changefreq.present?
      xml.priority(priority) if priority.present?
    end
  end
end

Rakeの基本演習

Rakeの基本演習を行いました。 C言語などの要素があり、今まで全然触れてこなかった部分だったので、あまりに基本的なことですが備忘録としてまとめておきます。

開始してから詰まるまで

RubyによるビルドツールRakeの覚え書き

ここでRakeの基本を学ぼうと走り出しましたが単純なRakefileのところで転びました。

まずRakefileを作ります。

CC = "gcc"

task :default => "hello"

file "hello" => ["hello.o", "message.o"] do
  sh "#{CC} -o hello hello.o message.o"
end

file "hello.o" => "hello.c" do
  sh "#{CC} -c hello.c"
end

file "message.o" => "message.c" do
  sh "#{CC} -c message.c"
end

これをrakeすれば動くよという話ですが。

$ rake
rake aborted!
Don't know how to build task 'hello.c'

Tasks: TOP => default => hello => hello.o
(See full trace by running task with --trace)

hello.cがおかしい?

file "hello.o" => "hello.c" do
  sh "#{CC} -c hello.c"
end

hello.cを生成して再度実行

$ rake
gcc -c hello.c
rake aborted!
Don't know how to build task 'message.c'

Tasks: TOP => default => hello => message.o
(See full trace by running task with --trace)

message.cを生成して再度実行

$ rake
gcc -c message.c
gcc -o hello hello.o message.o
Undefined symbols for architecture x86_64:
  "_main", referenced from:
     implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
rake aborted!
Command failed with status (1): [gcc -o hello hello.o message.o...]
/Users/hirokiyoshino/Desktop/practice-ruby/Rakefile:6:in `block in <top (required)>'
Tasks: TOP => default => hello
(See full trace by running task with --trace)

...これは…...gccがわかってないので調べます。

GCC

GNUコンパイラコレクション

当初はCコンパイラとして開発し、GCCGNU C Compiler を意味していた。しかし、もともと多言語を想定して設計しており、 GNU C Compiler と呼ばれていたときでも多くの言語に対応していた。現在でも GNU C Compiler の意味で「GCC」と呼ぶことも多い。ちなみに GNU C Compiler の実行ファイルの名称もgccである。なお、GNU C++コンパイラをG++、GNU JavaコンパイラGCJGNU AdaコンパイラをGNATと呼ぶ。

コンパイラ

コンパイラ

人間が理解しやすい言語や数式で記述されたプログラムを、機械語に(あるいは、元のプログラムよりも低いレベルのコードに)変換するプログラムのこと。

ファイルやコマンドについて

必要な部分のみ出力の種類を制御するオプションより抜粋引用します。

コンパイル処理には、 4つの段階が含まれます。 それは、 前処理、 狭義のコンパイル処理、 アセンブル処理、 リンク処理であり、 常にこの順序で実行されます。 最初の3つの段階は、 個々のソース・ファイルに対して適用され、 オブジェクト・ファイルを生成することによって終了します。 リンク処理では、 すべてのオブジェクト・ファイル (新たにコンパイルされたオブジェクト・ファイルと入力として指定されたオブジェクト・ファイル) を結合して、 1つの実行可能ファイルを生成します。

hello.cなどのfile.c

前処理が実行されなければならないCのソース・コードとのこと。

-c

ソース・ファイルのコンパイル、 または、 アセンブルを行いますが、 リンクは行いません。 リンク処理段階は実行されません。 最終的な出力形態は、 個々のソース・ファイルに対応するオブジェクト・ファイルとなります。 デフォルトでは、 ソース・ファイルに対応するオブジェクト・ファイルの名前は、 ソース・ファイル名の接尾語.c'、.i'、 .s'等を.o'に置き換えることによって作られます。 接尾語が認識されない入力ファイルは、 コンパイルアセンブルも必要とされないので、 無視されます。

例えばgcc -c hello.cが処理されるとファイル名がhello.oに置き換えられたものが作られる。

-o file

fileによって指定されるファイルを出力先とします。 これは、 生成される出力の種類に関係なく適用されます。 出力が、 実行可能ファイル、 オブジェクト・ファイル、 アセンブラ・ファイル、 前処理済みのCコードのいずれであっても、 無関係に適用されます。 出力ファイルは1つしか指定できないので、 複数の入力ファイルをコンパイルする際に-o'を使うのは、 出力として実行可能ファイルを生成しようとしている場合を除けば、 意味のないことです。-o'が指定されないと、 デフォルトでは、 実行可能ファイルはa.out'に、source.suffix'に対応するオブジェクト・ファイルはsource.o'に、source.suffix'に対応するアセンブラ・ファイルは`source.s'に、 また、 すべての前処理済みのCのソースは標準出力に、 それぞれ出力されます。

例えばgcc -o hello hello.o message.oが処理されると実行可能ファイルのhelloが作られる。

もう一度やってみる

hello.cmessage.cを空ファイルじゃなくてちゃんと動くものを入れる。

Failed to start nginx.service: Unit nginx.service is masked.

単純なことなので先に解決方法

$ sudo systemctl unmask nginx
$ sudo systemctl start nginx

発生

nginxを起動しようとするとできない。

Failed to start nginx.service: Unit nginx.service is masked.

状況確認

$ sudo systemctl status nginx

f:id:sanshou-shichimi:20160901105051p:plain

Loaded: masked (/dev/null)とある。

mask?

maskとは。

「Systemd」を理解する ーシステム管理編ー

Systemdではmaskという操作を実行できる。mask操作を行う事で、サービスの起動自体不可能になる。systemctl(1)では、これはdisableの強化版だとの説明されている。

もうすこしググる

start nginx on boot with systemd

systemctl mask, systemctl unmask: disallows (allows) all and any attempts to start the unit in question (either manually or as a dependency of any other unit, including the dependencies of the default boot target). Note that marking for autostart in systemd is implemented by adding an artificial dependency from the default boot target to the unit in question, so "mask" also disallows autostarting.

unmask -> start

$ sudo systemctl unmask nginx
$ sudo systemctl status nginx

f:id:sanshou-shichimi:20160901105957p:plain

$ sudo systemctl start nginx
$ sudo systemctl status nginx

f:id:sanshou-shichimi:20160901110028p:plain

Debian8へNginxのインストール

Debian8にNginxを入れましたのでその備忘録です。

参照はこのあたり

公開鍵をダウンロードして追加する

$ curl -O http://nginx.org/keys/nginx_signing.key
$ sudo apt-key add nginx_signing.key

sources.listへダウンロード元を追記する

source.listとは?

/etc/apt/sources.listを編集しよう。

Debianの場合完全にフリーなソフトウェアだけでLinuxを作ろうという目標の為、デフォルトの状態ではダウンロード出来るパッケージに制限があります。/etc/apt/sources.listを書き変えることでより多くの様々なソフトウェアが使えるようになります。

/etc/apt/sources.listへ以下を追記します。

deb http://nginx.org/packages/debian/ jessie nginx
deb-src http://nginx.org/packages/debian/ jessie nginx

※jessieの部分はDebiandistributionのcodenameなので適時変更してください。

追記を反映させて最新版をインストールします

$ sudo apt-get update
$ sudo apt-get install nginx

起動して接続テスト

起動します。

$ sudo systemctl start nginx
$ sudo systemctl status nginx

ブラウザでhttp://<serveraddress or hostname>/>にアクセスしてみて"Welcome to nginx!"と表示されればOKです。

※今回、自分の環境では必要ないのでファイアーウォールの設定は省いています。必要に応じて設定してください。

ファイアーウォール設定

このあたりを見るのがいいのかと思います。

以上です。

MacVim-Kaoriyaの日本語入力(IM)自動オン/オフの方法

MacVimを使う場合はMacVim-Kaoriyaを使うと思うんですが、僕はひとつの理由から使っていませんでした。

使っていなかった理由

入力モードから抜ける場合に自動的に日本語入力(IM)がオフになってしまう。 その為、サーバー上で使うvimIDE(Rubymineなど)でのvimモードとの動作の違いが発生してしまい困った…。となっていました。

オン/オフの方法

すいませんオン/オフの方法はReadmeに書いてありました。

さっき気がつきました…。

自動的に日本語入力(IM)をオンにする機能を有効にするには set noimdisableactivate 設定し、自動的に日本語入力(IM)をオン/オフにする機能すべてを禁止するには set imdisable を設定してください。

上記の通り、.gvimrcに以下を追記

" 日本語入力(IM)オフ
set imdisable

以上です。 ちゃんとReadmeを読みます。

怖話をひと通り使ってのこと

怖話とは?

怖い話投稿サイト 怖話

別世界の扉を開く鍵が怖話にあります。そっと、扉をあけてのぞいてみませんか。あなたの知らない不思議な光景が目の前に広がるでしょう。怖いけれど魅力的な恐怖への扉。この扉の向こう側で待っています。第六感を研ぎ澄まし、怖い世界を堪能しましょう。

怖い話を投稿してみんなで怖がって第六感を使って楽しむサービスです。

今回はこのサービスをひと通りつかっての感想や気がついた点、改善点などを報告します。

確認環境

投稿

投稿をしてみました。あまり怖くない話ですが…。

夜の洗濯物

気がついた点・改善点 / 対応策

1: 怖い話の進む・戻るが使いにくかった

f:id:sanshou-shichimi:20160822205831j:plain

現象

左手でiPhoneを持って親指で画面をタップして読み進めようと思いましたが、左側がすべて「戻る」という動作でしたので「進む」には少し親指を伸ばして押す必要がありました。

その為、読んでいると戻っていたことが何度もあり不便に感じました。

指の長さにもよると思いますが…。

対応策

現在は左側が「戻る」、右側が「進む」ですが、上半分が「戻る」、下半分が「進む」という操作に切り替えられるオプションがあったら便利だなと思いました。


2: アプリのログイン状態が維持されない

f:id:sanshou-shichimi:20160822210856j:plain

現象

Twitterログインを使用しているのですが、怖話アプリを完全に終了(アプリ一覧を出して上にスワイプ、iPhone再起動など)させると、再度アプリを起動させた時にTwitterの認証が再度必要になってしまって不便に感じました。

対応策

これは仕様の問題なのかわからないのですが、もし可能であればログイン状態はできるかぎり維持できればと思いました。


3: 文章を表示させるにダブルタップすると、コピー/全選択/辞書の表示がでてしまう

f:id:sanshou-shichimi:20160822221321j:plain

現象

文章を一気に表示させるには画面をダブルタップする必要があると思うのですが、その度にこのコピー/全選択/辞書の表示が出てしまってちらちら気になってしまいました。

対応策

構造的な問題なのか、どういう対応策があるのか想像できません…。


4: [投稿] BGM/効果音を選択する際にサンプルの再生が被る

f:id:sanshou-shichimi:20160822211911j:plain

現象

怖い話の投稿で、BGMや効果音を挿入する際にサンプルの再生中に違うサンプルを再生すると、前のサンプルは再生されたまま違うサンプルも再生されてしまう。

音が被ってしまい、どういう曲かひとつひとつ終了を待つ必要がありました。

対応策

サンプルの再生中に他のサンプルが再生されば場合、再生中のサンプルはストップするようにできればと思います。


5:[投稿] 画像が読み込まれず、normalとなってしまうことがある

f:id:sanshou-shichimi:20160822214102j:plain

現象

怖い話をいくつか読んでいた時に、画像が読み込まれずにnormalと表示がでてしまうことが頻発していた。

これは自分の投稿でも発生していました。

対応策

自分の投稿で発生してましたので、画像の表示場所を変更したり、BGMを変更したりして試してみました。

BGMを設定すると画像がうまく読み込まれず、BGMを設定しないと画像がうまく読み込まれました。

BGMの読み込まれ方になにか要因がある気がしますので、このあたりの読み込み時の改善ができればと思います。


6: [投稿] プレビュー画面からそのまま公開したい

現象

怖い話を投稿する際に、編集画面に内容を入力後、下書保存してプレビューを押してプレビューを確認して、内容を調整することを何度もします。

その際に、よしこれでいい!ってなった時、そのまま公開はできずに編集画面に戻ってから公開をする必要があり不便に感じました。

対応策

利用規約に同意して公開を、プレビュー画面にもつければいいなと思いました。


7: [投稿] 編集画面でカスタマイズメニューが消えてしまうことがあった

f:id:sanshou-shichimi:20160822215453j:plain

現象

iPhoneから怖い話を投稿しようと文章を編集しようとキーボードを表示させると、BGMをいれるなどのカスタマイズメニューが上に押し出されて完了を押してキーボードを引っ込ませないと見えなくなってしまう。

対応策

どういう対応策があるのか想像できていません…。

CSSの問題なのでしょうか??

感想

怖い話は好きなので結構読みます。

特に「リゾートバイト」の話は好きでいままで何回も読んでたのですが、怖話のサウンドノベル調で読むのはちょっと雰囲気がですぎてしまって読み進めるのがツラかったです。

なんていうか、目の画像は反則だと思いました。リングのトラウマが蘇ります。

しかもその目の画像の上の文章を読まなければならなくて、かまいたちの夜で死体の画像の上に表示された文章を読んでた時のツラさを思い出してました。

コワイ。