Owl Carousel 2でナビゲーションのドットが表示されないバグ
I used “Owl Carousel 2”, but owl-dots disabled.
I added style to my css file.
.owl-dots { text-align: center; bottom: 5px; width: 100%; -webkit-backface-visibility: hidden; -moz-backface-visibility: hidden; -ms-backface-visibility: hidden; backface-visibility: hidden; } .owl-dot { border-radius: 50px; height: 10px; width: 10px; display: inline-block; background: rgba(127,127,127, 0.5); margin-left: 5px; margin-right: 5px; } .owl-dot.active { background-color: #ea5514; } .owl-dots { text-align: center; }
Slimテンプレートを使った時にckeditorのエラーが出る問題
現象
テンプレートをerbからslimに変えてrails sしなおしたらエラーが出た。
ActionView::Template::Error (Unknown line indicator ckeditor/plugins/preview/preview, Line 11, Column 0 } ^ ): 2: html 3: head 4: = render 'shared/meta_tags' 5: = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true 6: = javascript_include_tag 'application', 'data-turbolinks-track' => true 7: = csrf_meta_tags 8: body
解決策
gemのバージョンを3.1.1に固定する。
gem 'slim-rails', '3.1.1'
Railsのturbolinksでjavascriptが発火しない問題の解決策
$(document).on 'turbolinks:load', ->
をつける
$(document).on 'turbolinks:load', -> $('#hogehoge').click -> alert "clicked hogehoge"
page:loadを使う
ready = -> $('#hogehoge').click -> alert "clicked hogehoge" $(document).ready(ready) $(document).on('page:load', ready)
jqueryの'ready'とTurbolinksの'page:load'の両方カバーできる。
非Turbolinks遷移時は'ready'で発火、Turbolinks遷移時は'page:load'で発火の両方をカバーするという意味。
Turbolinksをサポートしていないブラウザでも'ready'が発火するので安心。 jquery-turbolinksというgemを使うと'ready'triggerにpage:loadを追加してくれる。
webエンジニアがクラウドワークスを1ヶ月使ってみた感想
クラドワークスをつかったきっかけ
フリーランスになったのでとりあえずクラウドワークスで案件を探した。 4月中旬に初めて案件受けて、4月末までに5案件受けた。
実際どれくらい稼げるのか
クラウドワークスは稼げるのか否かは結構いろんなブログとか記事になってるけど、運と実力と案件次第だと思う。
実力という点でいえば、クラウドワークスで安定して案件受けるなら、クラウドワークスウケする言語や知見を持ってないと厳しいのかなと思う。 運という点では収入は案件ありきだから、コンスタンスに数十万の案件がとれる保証がない。
実績なしのアカウントで2週間で5案件、累計40万の契約がとれた。 で月間ランキングが20前半、週間ランキングがランキング1桁台。
どっかの記事になってた、20万円以上稼いでいるのは111人というのはほとんどエンジニアなのかなと思う。
大変なこと
- 案件の詳細について話す(チャット)する時に相手のITリテラシーが分からないから、どこまで専門用語を使っていいのかが分からない。
- 納品の最後に星5つで評価されるが理不尽な評価をされることがある。
サーバー構築からwebフロントまでできるから、クラウドソーシングレベルなら技術的に不安な点はないし。 そもそもできなさそうなのは受けないし。
クラウドワークスはいいのか悪いのか
クラウドワークスへの批判・擁護記事があるけど、そもそもブロガー( or ライター)から見たクラウドワークスとエンジニアからみたクラウドワークスは見え方が違う(はず)。 受けるカテゴリーも単価も納品までの時間も違うし。
開発案件でがっつり稼ぐなら、10〜15万の案件を数件、隙間に数万を挟むのが一番いいと思う。 案件次第であたり外れがあるから一概には言えないけど、クラウドワークス使わないで適正価格で案件受けれるなら幸せだよねっていうレベル。
wordpressで410を返す方法
サーバーの.htaccessで設定してもうまく動かなかったのでメモ
RewriteEngine on 〜略〜 RewriteRule ^/tag/.*?[G]
と書いたがcssが適用されないようなページになるだけだった。
プラグイン
このプラグインを使う
導入
wpの管理画面にログインして、〜〜略〜〜
新規追加できたら「有効化」すると左カラムに"410 for WordPress"のタブができるので選択。
「Manually add URLs」のテキストエリアにhttps://…..と指定すればオーケー
httpステータスコードチェックツール
ここでちゃんとステータスが返ってくるかチェックした。
ってやったけど410が帰ってこない
ドキュメント読むと404のページにしか410を設定できない(らしい?)
410はあきらめて404にを返すようにした
function.phpに書いた.
あとでコードかく
参考サイト
Railsで画像アップロードで使うGemのメモ
完全にメモ
Carrierwave
Github : carrierwaveuploader/carrierwave
rmagick
dropzonejs-rails
Dropborn.js : dropborn.js
Github : ncuesta/dropzonejs-rails
jQuery-File-Upload
jquery-fileupload-rails
jQuery-File-UploadのGem
Github : tors/jquery-fileupload-rails
gem install するときrmagickでこける
$ sudo yum -y install ImageMagick $ sudo yum -y install ImageMagick-devel
fogを使うとbundle installでエラーがでた
Fetching ovirt-engine-sdk 4.2.4 Installing ovirt-engine-sdk 4.2.4 with native extensions Gem::Ext::BuildError: ERROR: Failed to build gem native extension. current directory: /home/centos/app_name/vendor/bundle/ruby/2.4.0/gems/ovirt-engine-sdk-4.2.4/ext/ovirtsdk4c /home/centos/.rbenv/versions/2.4.0/bin/ruby -r ./siteconf20180924-32416-iap465.rb extconf.rb checking for xml2-config... no *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. Provided configuration options: --with-opt-dir --without-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=/home/centos/.rbenv/versions/2.4.0/bin/$(RUBY_BASE_NAME) --with-libxml2-config --without-libxml2-config --with-pkg-config --without-pkg-config extconf.rb:29:in `<main>': The "libxml2" package isn't available. (RuntimeError) To see why this extension failed to compile, please check the mkmf.log which can be found here: /home/centos/app_name/vendor/bundle/ruby/2.4.0/extensions/x86_64-linux/2.4.0-static/ovirt-engine-sdk-4.2.4/mkmf.log extconf failed, exit code 1 Gem files will remain installed in /home/centos/app_name/vendor/bundle/ruby/2.4.0/gems/ovirt-engine-sdk-4.2.4 for inspection. Results logged to /home/centos/app_name/vendor/bundle/ruby/2.4.0/extensions/x86_64-linux/2.4.0-static/ovirt-engine-sdk-4.2.4/gem_make.out An error occurred while installing ovirt-engine-sdk (4.2.4), and Bundler cannot continue. Make sure that `gem install ovirt-engine-sdk -v '4.2.4' --source 'https://rubygems.org/'` succeeds before bundling. In Gemfile: fog was resolved to 2.0.0, which depends on fog-ovirt was resolved to 1.1.2, which depends on ovirt-engine-sdk
gem を fog
からfog-aws
に変えて
config.fog_provider = 'fog-aws'
を追加。
CarrierWave.configure do |config| config.fog_provider = 'fog-aws' config.fog_credentials = { (略) } end
大学生のUseragent教えます。
大学の授業に関するサイトのUser agentをまとめたのではてぶにメモとして残しておきます。
講義のサイトと言っても対したものではないですが、出席確認も兼ねているので学業への意識とか学年とかの偏りはなく平均的な値が取れていると思います。(無作為抽出に近い)
大学の偏りは仕方ないです。。。(大学関係なくみんなに使ってもらえるサービス作りたいですね)
サイトの内容
- テキストボックス×2
- ラジオボタン×1
- セレクトボックス×1
- 400字以上の文字制限があるテキストエリア×1
Ruby(Rail)で監視にnewRelic入れてます。自分のGMOのVPSサーバーにデプロイしています。
集計方法
ほんとはelasticsearchに流してリファラとかゴミ除去したかったんですけど、サーバーのスペック低すぎて動かなかったので諦めました。
結局EC2に構築する時間もなく授業が終わってしまった...
googleアナリティクスで計測した4回の授業分の数値です。
提出タイミング
日ごとのセッションです。きれいですね。1つ目の頂点が授業日、2つ目の頂点が締切日です。
デバイス
カテゴリ | セッション |
---|---|
mobile | 2582 |
desktop | 957 |
tablet | 4 |
モバイル上位10機種
デバイス | セッション |
---|---|
Apple iPhone | 2135 |
Sony SOV32 Xperia Z5 | 44 |
Sony SO-01H Xperia Z5 | 43 |
(not set) | 32 |
Sony SO-01G Xperia Z3 | 23 |
Sony SO-03G Xperia Z2 SO-03F for DoCoMo | 22 |
Asus Z00ED Zenfone 2 Laser | 20 |
Microsoft Xbox One | 20 |
Samsung SC-05G Galaxy S6 | 19 |
Sony SO-02G Xperia Z3 Compact | 19 |
OS
os | セッション |
---|---|
iOS | 2139 |
windows | 744 |
Android | 425 |
Macintosh | 235 |
ブラウザ
ブラウザ | セッション |
---|---|
safari | 1980 |
chrome | 864 |
Edge | 281 |
safari(in-app) | 170 |
IE | 147 |
Android Webview | 55 |
Firefox | 23 |
Android Browser | 17 |
opera | 6 |
まとめ
iphone多いですね笑
個人的に400字はスマホよりパソコンで打ってる人が多いと思ってたのですが圧倒的にスマホからの提出が多いです。 使用ブラウザはiphoneユーザーが多いからかsafariが多いですね
もっとツールとして使用される大学の生徒用サイトはさらにスマホからの利用が多そうです。
大学のシステムはスマホにも対応してないし、見にくいしクソ。どうにかしてくれ素晴らしい
(注)リファラアクセス等ゴミ除去してないから完全に正確ではないです。
新しいmacbookpro(非タッチバー)買ったらちゃんと15回分集計するつもりです。買ってください
クリスマスにBoostrapのformタグに苦しめられた話
の24日目の記事です。リア充してたら1日遅れました
昨日は男2人で渋谷の焼肉に行きました🍖🍖🍖
BoostrapはCSSを書かなくても最低限のデザインができるのでとても便利です。
が、フォームに<form>
というタグを使うとsubmitされない現象が起きました。
Railsで投稿フォームを以下のように作りました。(わかりやすいようにいらないタグは消しました。)
<form> <%= form_for @post, :url => {:action => :create} do |f| %> <%= f.text_field :title , class: 'form-control', placeholder: 'タイトル' %> <%= f.text_area :content , class: 'form-control' %> <%= f.submit "投稿" %> <% end %> </form>
ただのテキストボックスとテキストエリアとsubmitボタンしかないめっちゃシンプルなerbです。
controllerも書くまでもない普通のcontrollerです。 がこれでsubmitしてもviewは変わらずURLのところが
http://localhost:3000/admin/post/new?utf8=%E2%9C%93&authenticity_token=XXXXX&post%5Btitle%5D=XXXXX&post%5Bcontent%5D=XXXXX&commit=%E6%8A%95%E7%A8%BF
となるだけでcontrollerのcreateメソッドにも入っていませんでした。
原因が<form>
タグを使っていたことでした。
なんでこんな仕様なのかは(まだドキュメント読んでないので)分かりません、、、
誰か知ってたら教えてください。
postできないのはRailsでなんかミスってると思ってずっと悩んでた。
仮説検定ではサンプル数を決めてからやらないとダメですよ!!!!!
大学の授業で気づいたことがあった。ある授業でクラウド会計の認知度が増加していると言っていたグループがあった。 引用先のデータはこのサイトのページ中段の認知度の表である。 www.m2ri.jp
この数値(認知度のパーセンテージ)をみて増加している => クラウド会計の認知度は増加していると判断している。 たしかに認知度のパーセンテージだけ見れば認知度は増加している。
が、あまり認知度は増加していないかなと思う。
簡単に表すとこのようになる。
年 | 知っている | 知らない | 計 | 知っている人の割合 |
---|---|---|---|---|
2015 | 12,705 | 9,420 | 22,125 | 57.4% |
2016 | 12,328 | 7,785 | 20,113 | 61.3% |
一応カイ二乗で見てみると
> prop.test(c(12705,12328),c(22125,20113)) 2-sample test for equality of proportions with continuity correction data: c(12705, 12328) out of c(22125, 20113) X-squared = 65.199, df = 1, p-value = 6.769e-16 alternative hypothesis: two.sided 95 percent confidence interval: -0.04811520 -0.02928403 sample estimates: prop 1 prop 2 0.5742373 0.6129369
この時の帰無仮説は認知度は変わらない、対立仮説は認知度が変わった(増加した)となる。
p値は限りなく0に近いし、パッと見、有意差があるように見える。 しかし、サンプル数が多すぎていわゆる「第一種の過誤」を起こしている。
過誤をせずに仮説検定をするには必要なサンプル数を見積もってから行う必要がある。 今回の例ではどのくらい割合が増加すれば認知度が増加したと判断できるかが難しいが、 (かなり少なめに見積もって)5%くらい上がれば少し認知度が上がったと判断できる(と思う)。
> power.prop.test(p1 = 0.57,p2 = 0.62,sig.level = 0.05,power = 0.8,alternative = "one.sided") Two-sample comparison of proportions power calculation n = 1190.827 p1 = 0.57 p2 = 0.62 sig.level = 0.05 power = 0.8 alternative = one.sided
すると適切なサンプル数は1191であると判断できる。
今回のデータを単純に適切なサンプル数に圧縮するとこのようになる。
> n = 0.05; prop.test(c(n*12705,n*12328),c(n*22125,n*20113)) 2-sample test for equality of proportions with continuity correction data: c(n * 12705, n * 12328) out of c(n * 22125, n * 20113) X-squared = 3.1096, df = 1, p-value = 0.07783 alternative hypothesis: two.sided 95 percent confidence interval: -0.08154433 0.00414509 sample estimates: prop 1 prop 2 0.5742373 0.6129369
2015年と2016年ではあまり差がないようという結果になる。
まとめ
ちゃんとサンプル数を見積もってから検定をしよう!!! おかしなところがあったらコメントかtwitter(@fuji_and_tora)まで
Elastic Stack 5.0がリリースされたのでログの可視化をしようとしたらできなかった話
この間elastic stack 5.0系が出たので使ってみようと頑張ったログです。 技術系のアウトプットは基本的にQiitaにするけど収集できなかったのではてぶに投稿、、、
使うもの
https://www.elastic.co/jp/products
週に500ユーザーくらいのwebサーバーだからBeatいらない気もするけどせっかくなので構成に入れてみた。
したかった構成
共通の環境構築
java
sudo yum update -y sudo yum remove -y java-1.7.0-openjdk sudo yum install -y java-1.8.0-openjdk-devel sudo yum install -y java-1.8.0-openjdk-debuginfo --enablerepo=*debug*
yum
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch sudo vi /etc/yum.repos.d/elastic.repo
[elasticsearch-5.x] name=Elasticsearch repository for 5.x packages baseurl=https://artifacts.elastic.co/packages/5.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md
ELKサーバーの構築
Elasticsearch
sudo yum install -y elasticsearch
Kibana
sudo yum install -y kibana sudo vi /etc/kibana/kibana.yml
#server.host: "localhost" を server.host: "XXX.XXX.XXX" に書き換え
起動
sudo service elasticsearch start sudo service kibana start
elasticsearchの起動確認コマンド
$ curl 'localhost:9200' { "name" : "qLGo9hB", "cluster_name" : "elasticsearch", "cluster_uuid" : "XETXNZ0kQTWiw_dFNZWMhg", "version" : { "number" : "5.0.0", "build_hash" : "253032b", "build_date" : "2016-10-26T04:37:51.531Z", "build_snapshot" : false, "lucene_version" : "6.2.0" }, "tagline" : "You Know, for Search" }
Elasticsearch起動エラー
サーバーのメモリが少なすぎてElasticsearch起動時にエラーが出た
Starting elasticsearch: OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000006d0660000, 4019847168, 0) failed; error='Cannot allocate memory' (errno=12) # # There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (mmap) failed to map 4019847168 bytes for committing reserved memory. # An error report file with more information is saved as: # /tmp/hs_err_pid21456.log [FAILED]
5.0ではES_HEAP_SIZEをelasticsearch.ymlに書けない
sudo vi /etc/elasticsearch/jvm.options
サーバーのスペックに合わせて設定
-Xms1000m -Xmx1000m
Kibanaにアクセス
http://XXX.XXX.XXX.XX:5601にアクセスするとKibanaの画面がでる
Logstash
sudo yum install -y logstash sudo vi /etc/logstash/conf.d/logstash.conf
動かしてないから雰囲気で
input{ beats{ host => "YYY.YYY.YYY.YY" port => 5044 } } output{ elasticsearch{ hosts => ["localhost:9200"] index => "accesslog-%{+YYYYMM}" } }
起動
sudo initctl start logstash
webサーバー(Railsアプリケーション)
filebeatsでELKサーバーにログを流す
sudo yum install -y filebeat sudo vi /etc/filebeat/filebeat.yml
動かしてないから雰囲気で
filebeat.prospectors: - input_type: log paths: - /var/log/nginx/access.log output.logstash: hosts: ["http://XXX.XXX.XXX.XX:5044"] index: filebeat
起動
sudo /etc/init.d/filebeat start
できなかった理由とかまとめ的な
- そもそもfilebeatから直で別サーバーのlogstashに流せない(?)
- [logfile -> filebeat -> logstash] -> [logstash -> elasticsearch -> kibana]が正しい構成(?)
- サーバーのスペック問題 => AWSのEC2インスタンスを作る
- logstashとbeatの書き方がわからん => 試しに実行するとESが止まっちゃう
- sslでじゃないとforwardできないみたいな情報を見た気がする
free -tmコマンドでメモリ使用量をみるとこんな感じ Logstash elasticsearch kibana起動しただけでの使用量
AWS EC2で構築しなおします。
参考サイト
仮説検定の判断をp値でする危険性
仮説検定とは
「母集団に差がない」とする帰無仮説とそれの逆である「母集団に差がある」という対立仮説をもとに検定を行うことである。
- 帰無仮説(H0)…比較対象に差がない(A=B)
- 対立仮説(H1)…比較対象に差がある(A≠B)
p値とは
検定の結果が偶然か偶然じゃないかを決定する値 => 「まぐれ」な確率 「棄却域の確率」とか「有意水準」という。
検定
検定統計量(求めたp値) < 有意水準 => 帰無仮説(H0)を棄却 = 対立仮説(H1)を採用 => 有意差があるよ!
有意水準を0.05とした時に、「p < 0.05」だった場合は、「5%以下の確率で偶然って判定されるよ(まぐれは5%以下だよ)」= 「95%の確率で偶然じゃなよ」ということである。
有意水準は一般的に0.01 , 0.05 , 0.1が使われる。
データ数が増えるとp値が0に近づき、どんなデータも有意になってしまうのでは?
そこで疑問に思った。データ数が増えるとp値が0に近づき、どんなデータも有意になってしまうのでは? 母集団のサンプル数が増え、p値が0に近づくということは p < 0.05 が成り立ち、どんな検定でも帰無仮説が棄却されて有意差があると判断できてしまうのではないかと思った。 そこで身近な例をもとに検証する。
(例)広告のABテストの母平均の差の検定
- 帰無仮説...AとBに差がない
- 対立仮説...AとBに差がある
有意水準5%で検定する。(5%というのも様々な議論があるが一旦放置)
インプレション数 | クリック数 | クリック率 | |
---|---|---|---|
広告A | 99 | 49 | 49% |
広告B | 102 | 50 | 49% |
> prop.test(c( 49 , 50 ),c( 99 , 102 )) 2-sample test for equality of proportions with continuity correction data: c(49, 50) out of c(99, 102) X-squared = 1.1651e-30, df = 1, p-value = 1 alternative hypothesis: two.sided 95 percent confidence interval: -0.1382439 0.1477508 sample estimates: prop 1 prop 2 0.4949495 0.4901961
p > 0.05なので差がないといえる。
データ数を1000倍に増やしてみる。
インプレション数 | クリック数 | クリック率 | |
---|---|---|---|
広告A | 99000 | 49000 | 49% |
広告B | 102000 | 50000 | 49% |
> n = 1000; prop.test(c( n*49 , n*50 ),c( n*99 , n*102 )) 2-sample test for equality of proportions with continuity correction data: c(n * 49, n * 50) out of c(n * 99, n * 102) X-squared = 4.5226, df = 1, p-value = 0.03345 alternative hypothesis: two.sided 95 percent confidence interval: 0.0003718071 0.0091350259 sample estimates: prop 1 prop 2 0.4949495 0.4901961
p < 0.05なので帰無仮説が棄却されて差があると判断される。
サンプル数が多くなるとp値が限りなく0に近くなり有意(p < 0.05)になってしまい、採用する仮説が異なって( = 結果が逆になる)しまう。
まとめ
- データ数でいくらでも操作できるのでp値だけで判断できない
- サンプル数が多いときに仮説検定をすること自体間違っている
アメリカ統計学会も勧告を出している AMERICAN STATISTICAL ASSOCIATION RELEASES STATEMENT ON STATISTICAL SIGNIFICANCE AND P-VALUES
- P-values can indicate how incompatible the data are with a specified statistical model.
- P-values do not measure the probability that the studied hypothesis is true, or the probability that the data were produced by random chance alone.
- Scientific conclusions and business or policy decisions should not be based only on whether a p-value passes a specific threshold.
- Proper inference requires full reporting and transparency.
- A p-value, or statistical significance, does not measure the size of an effect or the importance of a result.
- By itself, a p-value does not provide a good measure of evidence regarding a model or hypothesis.