Anemone gemをコードリーディングする(1)

これを読む

GitHub - chriskite/anemone: Anemone web-spider framework

anemone.gemspec

  s.require_path = "lib"

libを読むっぽい

lib/anemone/anemone.rb

require 'rubygems'
require 'anemone/core'

anemone/core ってのを読んでるっぽい

エントリーポイント

def Anemone.crawl(urls, options = {}, &block)
  Core.crawl(urls, options, &block)
end

ここであらためてAnemoneの使い方をおさらい

require 'bundler/setup'
require 'anemone'

url = 'http://kytiken.hatenablog.com/'
Anemone.crawl(url) do |anemone|
  anemone.on_every_page do |page|
    if page.doc
      p page.url.to_s
      p page.doc.at('title').inner_html
    end
  end
end

今日はここまで

次は

Anemone.crawlanemone.on_every_page が動くようになるのかを見ていく

今日の作業ログ

これは作業ログです。

作業内容

今日はwebpack hot module replacementの設定をしました。

今作っているやつのpackage.jsonとwebpack.config.jsを触っていました。

package.json

{
  "name": "frontend",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "webpack-dev-server",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "actioncable": "^5.0.0",
    "babel-core": "^6.18.2",
    "babel-loader": "^6.2.7",
    "babel-preset-es2015": "^6.18.0",
    "babel-preset-react": "^6.16.0",
    "material-ui": "^0.16.5",
    "normalize.css": "^5.0.0",
    "react": "^15.3.2",
    "react-dom": "^15.3.2",
    "react-redux": "^4.4.5",
    "react-tap-event-plugin": "^2.0.1",
    "redux": "^3.6.0",
    "redux-thunk": "^2.1.0",
    "webpack": "^1.13.3",
    "webpack-dev-server": "^1.16.2",
    "webpack-init": "^0.1.2",
    "whatwg-fetch": "^2.0.1"
  }
}

webpack.config.js

var webpack = require('webpack');

module.exports = {
  entry: './app/index.js',
  output: {
    path: '/',
    filename: 'bundle.js',
    publicPath: '/'
  },
  module: {
    loaders: [
      { test: /\.js$/, exclude: /node_modules/, loader: "babel-loader" }
    ]
  },
  plugins: [
    new webpack.HotModuleReplacementPlugin(),
  ],
  devServer: {
    port: '4000',
    contentBase: './build',
    inline: true,
    hot: true
  }
}

ハマったところ

f:id:kytiken:20170209234714p:plain

Uncaught Error: [HMR] Hot Module Replacement is disabled. とか言われてブチギレていました

  plugins: [
    new webpack.HotModuleReplacementPlugin(),
  ],

を書いていなかったのが原因でした。

以上

scaffolds.scssを作らなくする方法

あなたはRuby on Railsでアプリケーションを作るときにscaffolds.scssが要らないフレンズなんだね

ご無沙汰しています。

最近「けものフレンズ」というアニメにハマっているちけんです。

今日は小ネタです。

忙しい人のために、先に結論を書く

config/initializerに下記のファイルを置く

gist.github.com

以下詳細

概要

Rails

bundle exec rails g scaffold Hoge fuga

としたときに app/assets/stylesheets/scaffolds.scss というファイルが作られます。

このファイルは、例えばバリデーションを入れたときの表示をこのようにクソダサにしてくれます。

f:id:kytiken:20170208214841p:plain

要らないので生成しなくしたい。

方法

config/initializersに以下のようなファイルを作ったら作られないです

gist.github.com

参考

Rails scaffold without the css file? - Stack Overflow

以上

javascriptで3*0.1が0.30000000000000004になる件について(小数点つきの計算)

タイトルに書いたとおりですが、 javascriptで3*0.1が0.30000000000000004という結果が返ってきます。

そんなバカなと思って調べたのですが、どうやら仕様とのこと。

blog.asial.co.jp

そうは言っても僕は3*0.1をしたら0.3が返って欲しい。

そこでMath.jsというライブラリを導入して解決しました。

方法

今回はwebpackからMath.jsをインストールして計算する方法のサンプルを書きます。

今回のサンプルコードはこちら

javascript 3*0.1=0.30000000000000004 · GitHub

npmでインストールします。 mathjs.org

npm install mathjs --save

index.jsに下記を追加

var math = require('mathjs');
math.config({
  number: 'BigNumber',
  precision: 64
});

math.js | an extensive math library for JavaScript and Node.js

そしてこうすると0.3が返ってきました

math.eval('3*0.1')

完成版はこちら

gist.github.com

以上