棒呵呵

流氓不害怕,就怕流氓有文化…向有文化的流氓奋斗中…


  • 首页

  • 分类

  • 归档

  • 标签

RubyOnRails常用网站

发表于 2018-05-15 | | 阅读次数

Rails overview:

guides.rubyonrails.org

rubyonrails.org

weblog.rubyonrails.org

Creator of Rails: David Heinemeier Hansson

david.heinemeierhansson.com

Ruby meetups:

ruby.meetup.com

Code repository:

github.com

Devise gem code repository:

github.com/plataformatec/devise

Gems for ruby and ruby on rails:

rubygems.org

Bootstrap gem code repository:

github.com/twbs/bootstrap-sass

项目总结

发表于 2018-05-05 | | 阅读次数

这篇博客,因为刚好工作了快一个月,那么在工作中用到了哪些知识体系和框架,这里做一个小小的总结,,并且在接下来的工作中,能够认识到自己哪方面的不足,使得自己更加的注重这方面的技术积累。

首先,我的这个项目是关于做介助士的参加考试,报名,评分,发证等等一系列的整体项目,那么在这个项目中,有着非常繁琐的仕様説明等等,但是呢,这里我要总结的是这个项目使用的技术和一些平常没有注意到点。

cares用到的技术框架

归纳图

解释

其实看一个rails的项目主要用了那些技术,其实在gemfile里面就介绍的很清楚了,那么拿到一个新的项目的时候,主要看gemfile里面的gem,对于一个项目有个大概的印象再去细究里面所有的技术,看一下我们这个项目整体用用到了那些gem:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
source 'https://rubygems.org'
gem 'rails', '~> 5.0.0'
gem 'mysql2'
gem 'paranoia'
gem 'devise'
gem 'active_hash'
gem 'bootstrap-sass'
gem 'jquery-rails'
gem 'kaminari'
gem 'bootstrap-datepicker-rails'
gem 'font-awesome-rails'
gem 'settingslogic'
gem 'draper'
gem 'carrierwave'
gem 'rubyzip'
gem 'ken_all'
gem 'dalli'
gem 'pdflib', '9.1.0', path: 'vendor/gems/pdflib-9.1.0'
gem 'gon'
gem 'holiday_japan'
gem 'delayed_job'
gem 'delayed_job_active_record'
gem 'daemons'
gem 'curses'
gem 'migration_comments'
gem 'baby_squeel'
# Use unicorn as the app server
gem 'unicorn'
# For scheduled jobs
gem 'whenever', require: false
# generate seed
gem 'factory_girl_rails'
# use asset:precompile
gem 'sass-rails'
gem 'coffee-rails'
gem 'uglifier'
gem 'therubyracer', platforms: :ruby
group :production do
gem 'newrelic_rpm'
end
group :development do
gem 'better_errors'
gem 'binding_of_caller'
gem 'rack-mini-profiler'
gem 'annotate'
gem 'letter_opener'
gem 'colorize_unpermitted_parameters'
gem 'capistrano', require: false
gem 'capistrano-unicorn', require: false
gem 'capistrano-rails', require: false
gem 'capistrano-rbenv', require: false
gem 'capistrano-bundler', require: false
gem 'capistrano-maintenance', require: false
end
group :development, :test do
gem 'spring'
gem 'rspec'
gem 'rspec-rails'
gem 'rspec-collection_matchers'
gem 'database_cleaner'
gem 'guard-rspec'
gem 'pry'
gem 'pry-doc'
gem 'pry-rails'
gem 'pry-byebug'
gem 'hirb'
gem 'hirb-unicode'
gem 'awesome_print'
gem 'rubocop', require: false
gem 'guard-rubocop', require: false
gem 'parallel_tests'
gem 'rails-controller-testing'
end
group :test do
gem 'simplecov', require: false
gem 'simplecov-rcov', require: false
gem 'rspec_junit_formatter'
gem 'rubocop-checkstyle_formatter', require: false
end

那么,现在我们根据我们的示意图一点一点的看清楚每一个Gem使用了什么技术,并且是如何使用到我们的项目里面的。这里会一点一滴的去查,看以及做。

那么解释这些gem之前,争取针对于每一个gem做到以下几点,并且能够通过自己的话表述出来

  1. 这个gem是干什么的
  2. 这个gem如何使用

常用概念的总结:

  1. Gem: 相当于是Ruby封装起来的应用程序或者代码库,我觉得可以理解成python中的各种package

  2. Gemfile: 相当于这个应用程序中依赖了哪些第三方的包,会用bundle去根据配置的需求去寻找这些gem,这样来说有个非常方便的好处,就是在配置不同电脑的时候,使用相同版本的gem。就和vagrant中,使用相同的配置环境,进行开发一样。

  3. Rake: rake命令就相当于linux 中的make 命令,把源码编译成可执行的程序。
    在rails5之前,ruby on rails 大量使用了rake命令。最常用的两个命令:
    rake db:migrate(迁移数据库,更新数据模型)和rake test(运行自动化测试组件)。
    使用rake时确保使用的是Gemfile文件中指定的版本。
    rails5之前版本:bundle exec rake db:migrate

  4. Rakefile: Rake的执行命令的是由Rakefile来定义,相当于ruby版的makefile

  5. Bundler: 是rails框架里面安装gemfile指定的各种库的工具

  6. Rails API: 相当于开发一个接口,给web应用以外提供一个可以访问的接口。很多开发者使用rails构建后端,在Web应用中和其他原生应用之间共享。

  7. RVM: RVM是装各种版本ruby的,就是ruby的版本管理器。Ruby环境不仅仅是Ruby本身,还包括依赖的第三方Ruby的Gem,都是由RVM进行管理的。

  8. rbenv: 是rvm的另一种方法,都是管理ruby版本的。

Gem包详解

gem ‘mysql2’

参考主页:https://github.com/brianmario/mysql2

一句话来概括,就是连接mysql说使用的包

RSpec入门(一)

发表于 2018-04-30 | | 阅读次数

这篇博客是关于RSpec的入门知识的,因为最近工作需要,所以找到了一些适合新手的入门材料,为了学习和归纳,这里做个简单翻译,有需要的可以去看看原文,省略了一些不必要的东西,也加入了一些自己的看法。

参考地址:使えるRSpec入門・その1「RSpecの基本的な構文や便利な機能を理解する」

开始

RSpec很难吧,是不是特么的什么都不懂,关于这样的评论是经常能看到的。确实,因为RSpec独特的结构,以及有很多功能,[看起来很难]这样的情绪是很能理解的。

但是,不仅仅只是RSpec,不管什么样的框架也是一样的,习惯了之后,都能够很顺利的写的,实际上个人认为[RSpec是很方便的]。 (这是原作者这么认为的,我到现在也是经常一脸懵逼…)

这里总结的是,原作者认为最低限度的需要了解的RSpec的文章结构,已经经常被使用的功能做一个总结。

本文的文章结构和功能如下

  • describe / it / expect 的作用
  • describe的嵌套
  • context的使用方法
  • let / let!/ subject的使用方法
  • shared_examples的使用方法
  • shared_context的使用方法
  • pending 和 skip的使用区分

关于其他的当然还有后续,如果有需要请参考原文,比如说mock,CapybaraのDSL等等。

阅读适合的对象

  • RSpec读起来真的头痛的初心者
  • 已经使用过很多次了,但是RSpec还是不知道是啥的经验者
  • 有着Ruby关系的项目,需要写RSpec测试的人员,但是仍有困惑的从其他测试平台的经验者

Ruby和Rails的版本

  • RSpec 3.10
  • Ruby 2.1.3

这次的博文,没有用rails,纯Ruby的代码。

关于RSpec的安装环境和方法

这里原文当然也有粘贴方法,但是我这里就不详细讲了,需要的可以查询下其他资料。

第一步

理解describe/it/expect的作用

最简单的RSpec是这样的记述的:

1
2
3
4
5
describe '四则运算' do
it '1+1 是 2 的时候' do
expect(1+1).to eq 2
end
end

describe是test的分组的宣言,在这里‘是有关于四则运算的test’的声明。

it 是test中是以example为单位的作用。it do …end中,expecting(和预期一致的值比较)如果全部pass的话,那么这个example就是pass(通过了)。

1
expect(X).to eq Y

这样的记述,就是一个expecting,并且
expect(1+1).to eq 2这样的意义是[1+1的结果期待是2]的测试。

把should变成expect的理由

在RSpec的2.10以前,should是下面的方法的:

1
2
3
(1+2).should eq 3
#或者是
(1+2).should == 3

然后,现在不使用should,而是使用expect的理由是,should是黑魔法,如果使用的话会有发生问题的可能,如果有想看详细的理由的,请看:
参考地址:不用should的原因

复数的example

在describe中,可以写复数的example(it do …end):

1
2
3
4
5
6
7
8
descibe '四则运算' do
it '1+1要等于2' do
expect(1 + 1).to eq 2
end
it '10-1要等于9' do
expect(10 - 1).to eq 9
end
end

那么如果实现测试的话,会有一下的结果

1
2
3
4
5
2 examples, 0 failures, 2 passed
Finished in 0.002592 seconds
Process finished with exit code 0

复数的expecting

在一个example中,可以有很多的expecting:

1
2
3
4
5
6
7
8
describe '四則演算' do
it '全部都可以通过' do
expect(1 + 2).to eq 3
expect(10 - 1).to eq 9
expect(4 * 8).to eq 32
expect(40 / 5).to eq 8
end
end

但是,如果这么使用的话的,途中test失败的时候,那么之前的expect是通过了还是没有通过是不能够预想的(就是说,如果中间一个expect出错了,那么是前几个的错还是后几个的错事不知道的)。
所以,原则上[1个example上只有一个expect],这样的写的测试具有很好的保守性。

describe的嵌套

多少个describe都是可以写的,嵌套是可以的。
基本的作用就是[把test分组化],如下面的group可以这么写:

1
2
3
4
5
6
7
8
9
10
11
12
describe '四則演算' do
describe '加法' do
it '1 + 1 は 2 になること' do
expect(1 + 1).to eq 2
end
end
describe '减法' do
it '10 - 1 は 9 になること' do
expect(10 - 1).to eq 9
end
end
end

这样的话,能够让读代码的人很好的理解。

context和before会更加的便利

使用更有实践的例子来说明,让我们来看看context和before的使用方法

这是User类的声明,

当12岁及以下,是中文。
当age是13岁及以上,是英文。

1
2
3
4
5
6
7
8
9
10
11
12
13
class User
def initialize(name:, age:)
@name = name
@age = age
end
def greet
if @age <= 12
"我叫#{@name}。"
else
"My name is #{@name}。"
end
end
end

那么对应的RSpec就是:

1
2
3
4
5
6
7
8
9
10
11
12
describe User do
decribe '#greet' do
it '12岁及以下' do
user = User.new(name: '杰克', age:12)
expect(user.greet).to eq '我叫杰克'
end
it '13岁以上' do
user = User.new(name: 'Jack', age:13)
expect(user.greet).to eq 'My name is Jack'
end
end
end

在这里的时候,要注意describe可以接class,也可以接文字列:

1
2
describe User do
describe '#greet' do

describe中,instance method的一般的写法是’#methodname’

context的条件组

```

关于学习

发表于 2018-04-29 | | 阅读次数

关于学习,在现代化有很多种不一样的心得,那么在罗胖的总结下,提出了一下的观点,我想做一个摘要,以便日后铭记

参考资料是:这一代人的学习!


阅读全文 »

Ruby和Rails的基本写法

发表于 2018-04-29 | | 阅读次数

这篇博客写的是关于Ruby和Rails的习惯用法和写法,是参考自这边文章,我觉得很有价值,做一个不标准的翻译,并且从中学习:

来自:https://qiita.com/jnchito/items/dedb3b889ab226933ccf!

阅读全文 »

职场新人

发表于 2017-11-27 | | 阅读次数

这是由日本作家写的《99%的新人没用心做好的50件事》的读书笔记,那么读这本书的起因,当然是为了以后在工作中能够更好,已经更加出色的完成工作,当然了,我首先认为,我的工作是分为三个阶段的。

第一阶段:适应期,更快,以及更好的了解公司现状,能够在现在的公司中,快速提高日语的沟通能力和编程能力,最重要的是,快速融入公司。那么在这个阶段,在本书中,我应该注意什么,才能够更有效的去做。

第二阶段:发展期,已经适应了第一阶段后,如何成为公司的核心,如何成为一个小组的管理者,能够在公司成为独当一面的人物,为了达到这个目的,这本书,是不是又有什么技巧和方法呢。

第三阶段:稳定期,如果顺利的话,5~6年成为了公司的核心了, 那么如何在这一阶段更近一步,成为一个管理者?或者成为更厉害的技术人员?如果是这样的话,如何打破现在的平衡,是自己更进一步?这该怎么做?

我刚刚假想出了,在我自己的职业生涯中,可能出现的3个阶段,那么针对于不同的阶段,通过阅读本书,希望能够找到我想要的答案,让我们开始读书吧!

开篇: 三个原则

这是作者开篇就提到的3个原则,那么对于这本书来说都是至关重要的。

1.接手的工作,一定要完成。

一个人如果被周围人评价为值得信赖,工作机会就会接踵而来。

所以,这一点,至关重要。

2.即使只有50分,也要赶紧提交(及时反馈,及时更正)

不要认为任务提交就万事大吉,新人要特别注意,因为这样能够得到很好的反馈。

3.没有无聊的工作

改变自己的想法, 所面对的工作将会变得完全不同。即使看起来十分单调的工作,也要认为这是锻炼和提升的机会。

OK,这里我先做一个总结,因为后面整本书的构造都是按照50件事情的叙述方式进行的,相当于50个小细节。那么我先整理下我看完这3个原则的想法。

1.接收的工作,一定要完成(心中想着不要放弃):这是肯定的,不管在哪一个阶段,都十分重要,但是,做起来,是真的很难。我想到了之前看的一本书,其实这条原则和原来的挺相似的,但是,想法确实不同。那本书上写的是:既然一开始决定的事情,那么到最后都不要放弃。而中间,最难的不是去实现,去做,而是自己的心理,因为,心理一直都在想,自己能不能实现,这么难,自己肯定做不好吧。我们应该放下心中所想,只要记着一条,不要放弃就好!

那么再结合这条,我相信,可以在每一个阶段,去做的更好。

2.只有50分,需要及时反馈:不仅是自己需要向上级及时反馈,那么在第二阶段,和第三阶段中,是否也能及时的过问下属的工作,让他们能够在更短的时间内做的更好呢?

3.没有无聊的工作:这是一个心态问题,我想着之前在排球队训练的日子,我想到,刚进排球队的时候,除了基本功训练,是捡了3个月的球的,这项工作,我当时并没有觉得枯燥,而是在想,只有做好手上的事,才能往上一步,因为,我们是一个团队,总有人需要做团队的底层。

实践篇:


这里写的都是很细节的事情,那么我会把每一点重要的写在这里,然后觉得自己重点欠缺的会特别说明。

1.无论发生什么事情都不能迟到:

这里:我觉得我是最欠缺的,想到东京实习的两个月,最大的问题,可能就是这个了, 以后在日本社会混,最基本的第一步,我想就是这点了:

上班不迟到!!

公司的角度来说:考察入职第一年的员工来说,重点在于:作为一个职场新人,能否做好一些最基本的工作!
因为你会让别人觉得,不能把这项工作交给这位新人,还是交给其他人吧!
会错很大的机会的.


2.一定在24小时内回复邮件。

重点在于:要简洁,把目的放在标题,或者开头!


3.明确工作要求。

关键:明白工作的需求是什么,
到底要做什么,什么时候截止。这么做自己在哪方面能得到提高。


4.在做单调工作的时候,思考

思考:如何把工作看起来更容易,如何提高效率


5.开会的时候应该学习:

时间的比例要学习好,主要的是,要明白每次开会的目的,以及事后的整理。


##时间上是(3准备:3会议:3整理),结束的时候,明确需要学习什么,准备什么,迅速把会议内容整理出来。


6.学会问问题。

关键:问别人问题前先去自己思考。

具体操作方法:

1.自己去查查资料,并进行分析,确定自己理解哪些部分,不明白哪些部分

2.把自己的想法写下来,然后向他人提问。

阅读全文 »

mac_lauchpad图标显示错误

发表于 2017-11-27 | | 阅读次数

问题描述:在mac系统中,图标显示错误,为一张白纸,几根笔的样子时,需要重新加载launchpad。

解决方法:

1
rm ~/Library/Application\ Support/Dock/*.db

回车后再输入:

1
killall Dock

就可以解决的了,但是,有些程序的默认打开方式被改变,需要重制

参考资料:

https://www.macx.cn/thread-2138735-1-1.html

神经网络and深度学习

发表于 2017-11-23 | | 阅读次数

这篇博文,是为了在写毕业论文中有个清晰的思路和这半年来对于学习深度学习的一个总结。

那么为了让自己更好的理解和消化这些知识,我会在每一个小节讲解前,先给自己提出几个问题,然后通过说明这些问题的时候,进行归纳和总结。

目的

1.想用自己的话总结出对神经网络和深度学习的理解

2.一个最基本的神经网络,从输入到输出的过程中涉及到的每一个知识点都要展开归纳

3.深层次的CNN结构和word2vec的训练过程

博文结构

1.神经网络和深度学习的概念

1>神经网络

问题1.什么是神经网络?如何解释给一个没入门的人?

问题2.神经网络里面有什么,基础结构是什么?

问题3.神经网络是如何被训练的?

问题4.神经网络的输出层是什么,如何设计的?


问题1:

神经网络是一种运算模型,由很多节点(或者神经元)相互连接而成,去计算或者预测等操作的模型结构。可以根据外界信息去自适应改变内部结构的模型。

比如说,你有一堆猫的照片,然后放到这个运算模型(神经网络)中,然后,通过一系列的运算,能够自适应的改变内部结构,使得下次再来一张猫的照片的时候,能够预测出,这就是一张猫,而不是狗。。。那么这种运算模型就是神经网络。


问题2:

这个问题,我们先了解下几个概念

1.感知机(perceptron)(和神经元之间的关系)

2.权重(weight)

3.偏置(bias)

4.激活函数(activation function)

1.首先什么是感知机

感知机就是输入是几个二进制,输出是一位单独的二进制。
那么通过权重(weight),偏置(bias)表示各个输入对输出的影响。
通过y(输出)和θ的比较,得到一个决策。

例子:
http://neuralnetworksanddeeplearning.com/chap1.html

比如y(输出)大于θ时,那么就是1,小于等于θ时就是0.
如果θ=3,那么需要满足天气好,交通方便,女朋友也去的条件才能满足。
即,降低θ的值意味着参加节日的意愿更强。

神经网络中,感知机指的是单层的神经网络,只能做一个简单的线性可分函数(比如,只区别0或1)。想要做复杂点的异或等的话,那么需要的是多重感知机(multiply perception)

这里强调一下感知机和神经元的关系。

神经元指的是判断的基础,比如说上图中,每一个圆圈就表示一个神经元

感知机指的是多个神经元(输入信号)和一个输出信号的结构。比如说上图的整体就是一个2个input的感知机

2.权重(weight):是决定每一个二进制(神经元)对于下一个神经元的影响程度

3.偏置(bias):因为在很多神经网络中,我们的分割区间不是在于原点附近的,那么我们就需要bias去上下的移动,所以我们需要bias的变量。

4.激活函数(activation function):
是提供网络的非线性建模能力。加入非线性因素的,因为线性模型的表达能力不够(y=ax+b)。【后面会单独对每一个激活函数进行归纳总结】


那么现在介绍一下,神经网络的结构。

神经网络分为3层结构:

上图可以看到,分为3层结构

(实际上,神经网络是将大量之前讲到的感知机进行组合,用不懂的方法连接并作用在不同的激活函数上)

输入层,隐藏层,输出层。

这是一个最基本的神经网络的结构了,其实不管是在CNN,RNN的学习中,它们主要变化的是隐藏层的,我们在学习它们的时候,要时时刻刻把握输入层是什么,输出层又是什么,中间的隐藏层再一点点的拨开,就能够比较好的理解它们。


问题3:

那么神经网络是如何被训练的,每一层又发生了什么,让我们来一点点的说明。

参考资料:

1.neural netwoks and deep learning

http://neuralnetworksanddeeplearning.com/

2.知乎:神经网络中的激活函数是什么

日语基础——助词详解

发表于 2017-08-14 | | 阅读次数

格助詞は、主に名詞について、その名詞と他の語との意味関係を示します。

1 が 

述語:(谓语) じゅつご
ふるさと:故郷 

➀ 述語に対する主語を表わします。

表示谓语修饰的主语,表示主语

(1)山田さんが本を読みました。

(2)空が青いです。

(3)田中さんが最初です。

日本語では、存在するもの、感情の向かう対象も「が」で表わします。また、希望する動作の対象、可能を表す文における動作対象なども「が」で表すことがあります。これらの「〜が」も主語であると考えられます。

(4)机の上に本があります。(「Nがあります/います」、「NにNがありmす/います」)

(5)コンピュータが欲しいです。(「Nが欲しいです。/Nがほしくありません」)

(6)ふるさとが懐かしいです。(「Nが好きです/Nがすきではありません/Nがきらいです。」)

(7)水{が/を}飲みたいです。(→「Vたいです/Vたくありません」、「Vたかったです/Vたくありませんでした」

(8)英語{が/を}話せます。(→「可能形」)

➁ 名詞を修飾する節の主語は「の」でマークすることがあります。

➂ 副助詞がつく場合には、「が」は現れません(「副助詞:の解説ⅩⅠ「副助詞全体について」)。また、話しことばでは、「が」なしで表現する場合があります。

(9) わたしは本を読みました。

(10)わたし、大学へ行きます。

2 を

➀ 他動詞の表わす動作の対象を表わすほか、移動の出発点や通過点・経路を表わします。

承接他动词时,修饰动作对象:

(1)山田さんが本を読みました。(動作の対象)(→「NをVます」、「NにNをVます」)

或者修饰出发点时:
(2)9時に家を出ます。(出発点)

tensorflow的学习心得(四)CNN in NLP代码详解

发表于 2017-08-02 | | 阅读次数

这篇文章是解析CNN在NLP中的最基础的应用,将会一点一点地解析每一个函数和变量的关系

1.整体结构的概念理解:

http://www.wildml.com/2015/11/understanding-convolutional-neural-networks-for-nlp/

2.具体函数实现的解析:

http://www.wildml.com/2015/12/implementing-a-cnn-for-text-classification-in-tensorflow/

本文将要介绍:

1. 如何构建CNN在NLP中的模型

2. 如何在训练这个模型

3. input中如何使用pre-trained word embedding

4. 二层CNN模型的尝试

1. 如何构建CNN在NLP中的模型

首先,我们先来看一下整篇代码的结构:

  1. 第一层是把embeds words转换层low-dimensional vectors(低纬向量)
  2. 第二层使用多个filter size去卷积我们第一层的所输出的vectors
  3. 第三层我们使用max-pooling后把所有的feature连接,得到一个long featurevector,这里我们加入dropout 的正规化(regularzation)
  4. 最后一层,我们使用softmax去识别我们的result。
阅读全文 »
123
haobangpig

haobangpig

言いたいことはなんとなくわかる...でも...

21 日志
1 分类
9 标签
GitHub 知乎
© 2016 - 2018 haobangpig