Rails5 beta1が出たので試してみようと思い、インストール時に一箇所ハマりかけたので記録として残しておきます。
環境
ruby 2.2.4
bundler 1.11.2
Rails 5.0.0.beta1
あとは
% gem install rails --pre
でインストールを実行。この際にgemのエラーでインストールエラーになる。
ハマり方
ログ見れなくなっちゃったので忘れましたが eventmachine
が openssl.h
を読めませんよ的なエラー。
解決方法
eventmachine
インストール時にコケるのでオプションつけてインストール
% gem install eventmachine -- --with-cppflags=-I/usr/local/opt/openssl/include
eventmachineのissueにもあがってました
これで再度Railsのインストールを実行
% gem install rails --pre
これで無事にインストールできました。
お久しぶりです。Goエンジニアやってたと思ったら今ではAndroidエンジニアやってる今日このごろです。
Android2系でこんな感じのエラーに遭遇してしまい、メソッド数を減らさなくてはいけないため対処した内容をメモっておきます。
どうもgradleで com.google.android.gms:play-services
を読み込んでいると、ほとんど使ってない余計なものがたくさんあるようで、なんと 18513
もメソッドがあるようです。
dependencies {
compile 'com.google.android.gms:play-services:6.5.+'
}
なので、これを
dependencies {
compile 'com.google.android.gms:play-services-base:6.5.87'
compile 'com.google.android.gms:play-services-identity:6.5.87'
}
こんな感じに必要なものだけをcompileするようにします。これでメソッド数がかなり減らせるのと、ビルド時間もかなり短縮できます。
さらに詳しくはこちらをみてみてください。
仕事でGoでAPI開発やってるのですが、JSON書き出しのところメモっておきます。
基本的なJSONの書き出し方
structでオブジェクトを定義してjson化します。
package main
import (
"encoding/json"
"fmt"
)
type Object struct {
Name string `json:"name"`
Value string `json:"value"`
Memo string `json:"memo"`
}
func main() {
o := Object{Name: "unko", Value: "ばりゅー", Memo: "めもめもー"}
response, _ := json.Marshal(o)
fmt.Println(string(response))
}
こんな感じのコードだと
{
"name":"unko",
"value":"ばりゅー",
"memo":"めもめもー"
}
こんな感じのJSONとして書き出されます。とてもシンプルです。
書き出したくないプロパティがある場合
structの中で書き出したくないパラメータがあります。 この場合はアノテーションを使って -
を与えます。
package main
import (
"encoding/json"
"fmt"
)
type Object struct {
Name string `json:"name"`
Value string `json:"value"`
Memo string `json:"-"`
}
func main() {
o := Object{Name: "unko", Value: "ばりゅー", Memo: "ここは表示されないよー"}
response, _ := json.Marshal(o)
fmt.Println(string(response))
}
で、こんな感じにo.Memoは表示されなくなります。
{
"name":"unko",
"value":"ばりゅー"
}
GoはJSONの扱いがとても簡単なのでした。
ひろぽっぽれすがやっとモバイルフレンドリーになりました。
何が悪かったかっていうと、画像がスマフォで見た時にどうやらはみ出しまくるサイズになっていたようで。
サクッと
.article {
img {
max-width: 100%;
}
}
にしてやりましたよ。
ドヤァ
夏暑いです。
Hello, world. funnythingzです。めんどくさすぎてブログを放置していました。明日から本気出す。
プルリクにLGTMするときに美人時計を表示したいなと思ったのでなんとなくbijintというgemをつくってみました。けっこう適当です。
Chromeエクステンションとかまではつくるのがめんどくさかったのでとりあえずコマンドベースで美人時計の画像パスのマークダウンとか生成してくれます。あまり難しいことはしていません。
bijintをインストールする
$ gem install bijint
とっても簡単インストールです。
使い方
一番シンプルなコマンドです。今の時間の画像パスを生成します。
$ bijint
http://www.bijint.com/assets/pict/tokyo/pc/0039.jpg
ランダムな時間の画像パスを生成します。
$ bijint random
http://www.bijint.com/assets/pict/tokyo/pc/1530.jpg
今の時間の画像パスをマークダウン形式で生成してくれます。
$ bijint md
[](http://www.bijint.com/assets/pict/tokyo/pc/0043.jpg)
ランダムな時間のマークダウン形式の画像パスを生成してくれます。
$ bijint md_random
[](http://www.bijint.com/assets/pict/tokyo/pc/1407.jpg)
pbcopy
と組み合わせて使うとクリップボードにコピーしてくれるので貼り付けも簡単です。
$ bijint | pbcopy
それでは良き美人時計ライフを!
こんにちは、funnythingzです。GoでTruncateがありそうでなかったのでつくってみました。超シンプルです。
github.com/funnythingz/sunnyday
使い方は超簡単です。
まず go get
します。
% go get github.com/funnythingz/sunnyday
importして sunnyday.Truncate
をこんな感じで呼び出します。
package main
import(
"fmt"
"github.com/funnythingz/sunnyday"
)
func main() {
fmt.Println(sunnyday.Truncate("うんこっこたのしいお!", 5))
}
うんこっこ…
超シンプルです。簡単です。
...
をカスタムするには第3引数にカスタム用のstringを渡すだけです。
fmt.Println(sunnyday.Truncate("うんこっこたのしいお!", 5, "...more"))
うんこっこ...more
超カンタンです。難しいことはなにひとつありません。
こんな感じであると地味に便利なTruncateです。ぜひ使ってみてください。
HTMLのパースをするならgoquery!goquery便利すぎて泣いた。 jQueryっぽく使えて良いです。
まずはgoqueryを入れましょう。
% go get github.com/PuerkitoBio/goquery
HTMLをパースする
それではパースしてみましょう。 HTMLのパースのやり方はいくつかあります。
URLから直接パースする
doc, _ := goquery.NewDocument("http://yahoo.co.jp")
文字列をパースする
html := `<h1 class="heading">見出し</h1>`
r := strings.NewReader(html)
doc, _ := goquery.NewDocumentFromReader(r)
パースしたHTMLから要素を取り出す
goqueryでパースしたHTMLから要素を取り出してみましょう
doc.Find(".heading").Text() //=> 見出し
こんな感じでとっても簡単です。
goqueryのひと通りの操作のテストを書く
goqueryのテストをざっくり書いてみるとこうなります。
package main
import (
"github.com/PuerkitoBio/goquery"
"strings"
"testing"
)
func TestParseHtml(t *testing.T) {
html := `
<section>
<h1 class="heading">うんこっこ</h1>
<p class="lead">なんかにおうってばよ</p>
</section>
`
r := strings.NewReader(html)
doc, _ := goquery.NewDocumentFromReader(r)
docHeading := doc.Find(".heading").Text()
heading := "うんこっこ"
if docHeading != heading {
t.Errorf("got %v want %v", docHeading, heading)
}
docLead := doc.Find(".lead").Text()
lead := "なんかにおうってばよ"
if docLead != lead {
t.Errorf("got %v want %v", docLead, lead)
}
}
goのテスト実行コマンドで実行してみましょう。
% go test -v
=== RUN TestParseHtml
--- PASS: TestParseHtml (0.00s)
PASS
ok
こんな感じで動けばテスト完了です。 今回のテストコードはGitHubにもあげました。
テスト、だいじだよ、テスト。
go get でインストールしたパッケージたちを一気にアップグレードする。
% cd $GOPATH
% go clean -i ./...
% go install ...
これでいけた!
ここ数年ブログを書くのが億劫すぎていたのでまさかの1日2連続エントリーです。2015年はブログもちゃんと書くぞ!
GolangでBlackfridayを使ってMarkdownをHTMLに変換する
上記記事でも軽くふれたのですが、sanitizerのmicrocosm-cc/bluemondayも便利なので(名前が鬱になるけど)使ってみました。
html
hoge.html
<h1>hoge</h1>
<p>hogehoge</p>
<script>alert(1);</script>
<style>body {font-size: 100px;}</style>
<footer>© funnythingz</footer>
Go
demo.go
package main
import (
"fmt"
"github.com/microcosm-cc/bluemonday"
"io/ioutil"
)
func check(e error) {
if e != nil {
panic(e)
}
}
func main() {
html, err := ioutil.ReadFile("hoge.html")
check(err)
p := bluemonday.UGCPolicy()
fmt.Println(p.Sanitize(string([]byte(html))))
}
出力結果
% go run demo.go
で実行すると
<h1>hoge</h1>
<p>hogehoge</p>
© funnythingz
となってhtml_safeな感じで出力されます。ちなみにbluemondayのポリシーで許可されているタグは下記になります。
article, aside, figure, section, summary, h1~h6, hgroup, br, div, hr, p, span, wbr, abbr, acronym, cite, code, dfn, em, figcaption, mark, s, samp, strong, sub, sup, var, b, i, pre, small, strike, tt, u, rp, rt, ruby
詳細はbluemondayのコードをみてみてください。
こんな感じでblackfridayとbluemondayを組み合わせて使うといろいろできそうですね!
Rails大好きfunnythingzです。TypeScriptよりもRails書いてます。
Railsに慣れすぎてしまうと他のことができなくなってやばいと思い2015年はGolangに力を入れていこうと思っています。Go界隈の流れの早さについていけていません。
それはさておきGoでMarkdownをHTMLにしたいなと思いGitHubをいろいろ探していたらrussross/blackfridayというものを見つけました。名前が中二感ハンパなくてカッコイイです。sanitizerのmicrocosm-cc/bluemondayというものもあります。名前カッコイイわー。
とりあえず使い方は簡単なのでコード書いておきます。
markdown
hoge.md
# hoge
hogehoge
- hoge
- hoge
## hoge
Go
demo.go
package main
import (
"fmt"
"github.com/russross/blackfriday"
"io/ioutil"
)
func check(e error) {
if e != nil {
panic(e)
}
}
func main() {
md, err := ioutil.ReadFile("hoge.md")
check(err)
output := blackfriday.MarkdownCommon([]byte(md))
fmt.Println(string(output))
}
出力結果
% go run demo.go
で実行すると
<h1>hoge</h1>
<p>hogehoge</p>
<ul>
<li>hoge</li>
<li>hoge</li>
</ul>
<h2>hoge</h2>
となります。簡単!