2018年5月25日 星期五

常見問題推薦解法 NoMethodError: undefined method '[]' for nil:NilClass


解決常見的
NoMethodError: undefined method '[]' for nil:NilClass


Ruby 2.3.0 之後才能用

    params = { user: { address: { street: '123 Fake Street', town: 'Faketon', postcode: '12345' } } }
   
    street = params[:user] && params[:user][:address] && params[:user][:address][:street]
   
    street = params.dig(:user, :address, :street)

    street = user&.address&.street


Ruby 2.3 以前

安裝 gem 'ruby_dig'

另一種常見的情況
h = {}
h[:a][:b][:c] = "abc" # NoMethodError: undefined method '[]' for nil:NilClass 

h = Hash.new{ |h,k| h[k] = Hash.new(&h.default_proc) }
h[:a][:b][:d][:c] = "abc" # { :a => { :b => { :c => "abc" } } }





新的分頁 gem


控制分頁系統的 gem 

pagy
https://github.com/ddnexus/pagy

看起來很厲害的 樣子 XD

2018年2月9日 星期五

capistrano 後 可以寫入 git 資訊


config/deploy.rb

namespace :deploy do
  after :finishing, :git_ionfo do
    on roles(:all) do
      version = %x(git log -1 --pretty='format:%H')
      execute "echo '#{version.strip}' > #{release_path}/.git_version"

      tag = %x(git describe --tags --always --long --dirty)
      execute "echo '#{tag.strip}' > #{release_path}/.git_tag"

      branch = %x(git rev-parse --abbrev-ref HEAD)
      execute "echo '#{branch.strip}' > #{release_path}/.git_branch"
    end
  end 
end




2016年6月23日 星期四

ActiveRecord 後可用 select, sort_by, group_by

語句複雜很多table互相牽動時,sql的部分可以簡單化


Ex:

user = [
{ name: "C", is_admin: true, department: 20 },
{ name: "A", is_admin: true, department: 20 },
{ name: "B", is_admin: true, department: 25 },
{ name: "E", is_admin: true, department: 25 },
{ name: "D", is_admin: true, department: 25 },
{ name: "F", is_admin: false, department: 25 },
]

user = User.alluser.select! { |u| u[:is_admin] }
user_hash = user.group_by { |u| u[:department] }
user_hash.each { |k, v| v.sort_by! { |x| x[:name] } }

user_hash =
{20=>
[{:name=>"A", :is_admin=>true, :department=>20},
{:name=>"C", :is_admin=>true, :department=>20}],
25=>
[{:name=>"B", :is_admin=>true, :department=>25},
{:name=>"D", :is_admin=>true, :department=>25},
{:name=>"E", :is_admin=>true, :department=>25}]}



2016年4月22日 星期五

each_with_object 好用的地方

each_with_object 好用的地方

Ex:(多維展開)

{原本}
def org_users(users)
  temp = {}
  users.each do |user|
    temp[user.group] ||= {}
    temp[user.group][user.id] = user
  end
  temp
end

{改良}
users.each_with_object(Hash.new{ |h,k| h[k] = {} }) { |obj, hash| hash[obj.group][obj.id] = obj }



Ex:(類型計算)

x = ["tiger", "tiger", "cat", "tiger", "dog", "cat"]
x.each_with_object(Hash.new(0)) { |obj, counts| counts[obj] += 1 }


2016年4月14日 星期四

『*』的用法


「*」的用法 

把 array 展開成豆號分隔的 參數


Ex1:
numbers = [1, 2, 3]
numbers_with_zero_and_100 = [0, *numbers, 100] # => [0, 1, 2, 3, 100]

 Ex2:

def get_year_month
  year_month ||= params[:year_month] || Date.today.strftime("%Y-%m")
  year_month.split(/-|\/|_/).map { |i| i.to_i }
end
Date.new(*(get_year_month)) # =>  Fri, 01 Apr 2016

2015年10月29日 星期四

麻婆豆腐

材料:
  • 絞肉 600~800克
  • 豆腐 1盒
  • 青蔥
  • 蒜泥或碎蒜

調味:
  • 辣豆瓣醬 2~3匙
  • 醬油 1匙
  • 米酒 1匙
  • 花椒粉 1/2匙
  • 辣椒粉 1/4匙
  • 麻油 1/4匙(用香油也可)
  • 辣椒油(選配)
  • 五香粉 少許(選配)
  • 黑胡椒 少許(選配)
  • 太白粉 少許(選配:最後勾芡用)

方法:
  1. 調味料先行拌好(都混在一起的意思,除了太白粉)
  2. 蒜泥+絞肉炒半熟,加入調味料
  3. 肉熟後加入切塊豆腐,青蔥
  4. 再燒個五分鐘

訣竅:
  • 肉不能太軟,稍微燒久一點就會硬
  • 豆腐進去後要減少攪拌,不然豆腐就碎光了

2015年8月6日 星期四

常用 Rails Gem 整理

for Rails 4 (last update date: 2015/8/6)

# ----------------------------
# Use System
# ----------------------------

# DB - 資料庫
gem 'mysql2'
gem 'pg'
gem 'activerecord-postgis-adapter'
gem 'redis'
gem 'redis-objects', :require => "redis/objects"

# ENV - 環境變數
gem 'settingslogic'

# assets
gem 'sass-rails', '~> 4.0.3'
gem "compass-rails"
gem "compass-susy-plugin"
gem "susy"
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.0.0'
gem 'therubyracer',  platforms: :ruby
gem 'jquery-rails'
gem 'turbolinks'
gem 'asset_sync'

# background jobs - 背景執行
gem 'sidekiq'
gem 'sinatra', '>= 1.3.0', :require => nil
gem 'sidekiq-limit_fetch'
gem 'whenever'

# aws
gem 'aws-sdk-v1'
gem 'aws-sdk'

# unicorn
gem 'unicorn'

# system mionitor
gem 'rollbar'
gem 'newrelic_rpm'


# ----------------------------
# Use ViewRendering
# ----------------------------

# html + form
gem 'jbuilder', '~> 2.0'
gem 'simple_form'
gem 'nested_form'
gem 'slim'
gem 'kaminari'
gem 'chosen-rails'

# file upload - 檔案上傳
gem 'carrierwave'
gem 'mini_magick'
gem 'fog'
gem 'carrierwave_backgrounder'

# front-end
gem 'jquery-ui-rails'
gem 'bootstrap-sass', '~> 2.3'

# editor - 圖文編輯器
gem 'redactor-rails'

# render view helper
gem 'rails_autolink'


# ----------------------------
# Use ActiveModel
# ----------------------------

# gem 'bcrypt', '~> 3.1.7'
# 資料排序
gem 'acts_as_list'

# soft delete
gem 'paranoia', "~> 2.0"

# Tagable - 標籤
gem 'acts-as-taggable-on'

# internal search - 內部搜尋
gem 'ransack'

# 狀態遷移控制
gem 'state_machine'


# ----------------------------
# Use Business logic
# ----------------------------

# devise - 會員登入
gem 'devise'
gem 'devise-async'

# shopping_cart 購物車
gem 'acts_as_shopping_cart', '~> 0.2.1'

# output data - 匯出excel
gem 'rubyzip', '~> 1.0.0'
gem 'axlsx_rails', '~> 0.3.0'

# SEO
gem 'crummy'
gem 'meta-tags', :require => 'meta_tags'
gem 'sitemap_generator'

# routes ues name
gem 'friendly_id', '~> 5.1.0'
# BARCODE img
gem 'barby'

# Email
gem 'mail'

# zip file
gem 'archive-zip'

# http transport
gem 'faraday'


# ----------------------------
# Use Development
# ----------------------------

group :development do
  # capistrano
  gem 'capistrano-rails'
  gem 'capistrano-rvm'
  gem 'capistrano-sidekiq'
  # unicorn
  gem 'capistrano3-unicorn'
  # slack
  gem 'slackistrano', require: false

  gem 'guard-annotate'
  gem 'annotate'
  gem 'awesome_print'
  gem 'xray-rails'
  gem 'pry'
  gem 'pry-rails'
  gem 'pry-remote'
  gem 'better_errors'
  gem 'binding_of_caller'
  gem 'guard'
  gem 'http_logger'
  gem 'spring'
  gem 'venus', git: "git@github.com:marsz/venus.git", branch: 'v1.0'
  gem 'rename'
end

group :development, :test do
  gem 'rspec'
  gem 'rspec-rails'
  gem 'factory_girl_rails'
end

group :test do
  gem 'webmock'
  gem 'test_after_commit'
end

group :doc do
  gem 'sdoc', '~> 0.4.0'
end

2015年7月12日 星期日

解決「打開檔案的應用程式」重複或是不存在的程式列表

1. 終端機輸入下面的指令

>> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks /LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system -domain user

2. 重新啓動 Finder

>> killall Finder
打開檔案的應用程式
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks /LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system -domain user - See more at: http://hlchang.com/?p=817#sthash.6ukWWLrE.dpuf
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks /LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system -domain user - See more at: http://hlchang.com/?p=817#sthash.6ukWWLrE.dpuf
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks /LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system -domain user - See more at: http://hlchang.com/?p=817#sthash.6ukWWLrE.dpuf
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks /LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system -domain user - See more at: http://hlchang.com/?p=817#sthash.6ukWWLrE.dpuf
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks /LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system -domain user - See more at: http://hlchang.com/?p=817#sthash.6ukWWLrE.dpuf
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks /LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system -domain user - See more at: http://hlchang.com/?p=817#sthash.6ukWWLrE.dpuf
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks /LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system -domain user - See more at: http://hlchang.com/?p=817#sthash.6ukWWLrE.dpuf

2015年7月8日 星期三

redis-server autostart for mac 10.10


參考來源:
https://gist.github.com/tonypujals/9631143


1. 使用 Homebrew 安裝 redis-server

>> brew install redis


2. 設定開幾自動啟動

>> ln -sfv /usr/local/opt/redis/*.plist ~/Library/LaunchAgents


3. 使用 launchctl 掛入 開幾自動啟動(load = start, unload = stop)

>> sudo launchctl load ~/Library/LaunchAgents/homebrew.mxcl.redis.plist 
>> sudo launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.redis.plist


PS. 有需要的話修改redis.conf 的位置 (homebrew.mxcl.redis.plist)



/usr/local/redis/redis.conf 
 
 

2015年6月23日 星期二

RSA to PEM

RSA 轉 PEM
>> openssl rsa -in ~/.ssh/id_rsa -outform pem > id_rsa.pem

2015年6月22日 星期一

把 VMware Tools 裝入 Ubuntu server 中

如何在把 VMware Tools 裝入 Ubuntu server 中

官方說明Installing VMware Tools in an Ubuntu virtual machine

筆記:
  1. Virtual Machine > Install VMware Tools
  2. sudo mkdir /mnt/cdrom
  3. sudo mount /dev/cdrom /mnt/cdrom
  4. cd /mnt/cdrom
  5. tar xzvf /mnt/cdrom/VMwareTools-x.x.x-xxxx.tar.gz -C /tmp/
  6. cd /tmp/vmware-tools-distrib/
  7. sudo ./vmware-install.pl -d

2015年4月23日 星期四

Mysql 在 Mac OS X 10.10 無法自動啟動

Mysql 在 Mac OS X 10.10 無法自動啟動


打開命令提示:

1. sudo vim /Library/LaunchDaemons/com.mysql.mysql.plist


2.按下「i」編輯


貼上

<!--?xml version="1.0" encoding="UTF-8"?-->
<plist version="1.0">
  <dict>
    <key>KeepAlive</key>
    <true />
    <key>Label</key>
    <string>com.mysql.mysqld</string>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/local/mysql/bin/mysqld_safe</string>
      <string>--user=mysql</string>
    </array>       
  </dict>
</plist>

按下「:wq」存檔關閉


3.修改權限

sudo chown root:wheel /Library/LaunchDaemons/com.mysql.mysql.plist
sudo chmod 644 /Library/LaunchDaemons/com.mysql.mysql.plist
sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysql.plist

2015年2月26日 星期四

Ruby: Array to Hash with Hash select Array

 Ruby Tips

由 x 原始資料透過 y 篩選後,輸出 hash 並帶有順序id


x = ["棒球", "壘球", "籃球", "足球"]
y = ["籃球", "棒球"]
Hash[x.map {|i| [x.index(i), i] }].select { |k, v| y.include?(v) }


return:
{0=>"棒球", 2=>"籃球"}

2014年10月16日 星期四

OS X 的 RamDisk 使用法 and 瀏覽器 cache 修改法

環境是 OS X 10.9.5 ~ 10.11.1

1. 啟動 應用程式 > 工具程式 > AppleScript編寫程式


2. 貼上以下內容
do shell script "
if ! test -e /Volumes/RamDisk ; then
diskutil erasevolume HFS+ RamDisk `hdiutil attach -nomount ram://$((4*1024*1024*2))`
mkdir -p /Volumes/RamDisk/Chrome
mkdir -p /Volumes/RamDisk/Safari
mkdir -p /Volumes/RamDisk/Firefox

mkdir -p /Volumes/RamDisk/Silkypix
fi
"


有需要的話可以做修改
4*1024*1024*2 >> 4就是使用4G ram


RamDsik 順道建立資料夾
mkdir -p /Volumes/RamDisk/Chrome

檔名建議可以用「RamDisk」
儲存 > 檔案格式 > 「應用程式」


3. 系統偏好設定 > 使用者與群組 > 「選擇自己」> 登入項目 > 底下「+」,把剛剛 的 RamDsik.app 加進來


4. 確認一下cache 的位置
Safari 跟 ,位置固定比較沒問題 

Firefox 比較不固定
開啟 終端機 > 輸入「ls ~/Library/Caches/Firefox/Profiles/96je3nd4.default/cache2」 
請參考 項目 7

Chrome 通常是 default
開啟 終端機 > 輸入「ls ~/Library/Caches/Google/Chrome/Default」

紅色的地方就是每個人都不太一樣

5. 確認一下 三個瀏覽器都關閉了 command + Q

6. 開啟 終端機 > 輸入 以下指令

rm -rf ~/Library/Caches/Google/Chrome/Default
ln -s /Volumes/RamDisk/Chrome ~/Library/Caches/Google/Chrome/Default


rm -rf ~/Library/Caches/com.apple.Safari
ln -s /Volumes/RamDisk/Safari ~/Library/Caches/com.apple.Safari


rm -rf ~/Library/Caches/Firefox/Profiles/96je3nd4.default/cache2
ln -s /Volumes/RamDisk/Firefox ~/Library/Caches/Firefox/Profiles/96je3nd4.default/cache2


rm -rf ~/Library/Application\ Support/ISL/SILKYPIX_GlobalCache

~/Library/Application\ Support/ISL/SILKYPIX_GlobalCache


7.Firefox 的 cache 指向常常失效 改用此方法(範例)

網址列輸入:about:config
新增一個字串:browser.cache.disk.parent_directory
值(Mac):/Volumes/RamDisk/FireFox 
值(Win):R:/FireFox 


8.Chrome 的 cache (for Win)

系統管理員身份開啟「命令提示字元」
你的帳號:User1
目標路徑:R:/Chrome

刪除原本的資料夾
rmdir /s "C:\Users\User1\AppData\Local\Google\Chrome\User Data\Default\Cache"

建立資料夾
mkdir "R:/Chrome"

建立連結
mklink /D "C:\Users\User1\AppData\Local\Google\Chrome\User Data\Default\Cache" "R:/Chrome"


備註:有些時候升級或是更新,sort link,第六步要重做!

2014年10月4日 星期六

mi2s 空間不足 修改法


 事前準備:
  1. 磁區分割基本知識,線刷基本知識
  2. 手機備份app+data備份(一定會全部消失,請先備份)
  3. 電腦一台(os windows 7 64bit)
  4. mi2s線刷程式(官網下載)
  5. 刷機任體版本(官網下載)
  6. 磁區分割程式(DiskGenius)

步驟:


1. fastboot mode
關機,進入線刷模式
[音量下鍵]+[電源鍵]



2. 手動刪除手機全部分割區

C:\Program Files (x86)\Xiaomi\MiPhone\ 
>> cd C:\Program Files (x86)\Xiaomi\MiPhone\Google\Android
>> fastboot erase aboot

拔線,拆電池,讓手機變磚頭



3. 刷機
正常線刷方式,等待......
刷完後,請勿拔除USB線


4. 分割區調整
開啓DiskGenius

刪除 25,26 分區

建立磁區分割(系統)
系統類型:Linux data partition
容量:10GB,對齊+ 512kb
磁區名稱:userdata
勾選:隱藏+無磁區代號

建立磁區分割(儲存區)
系統類型:Linux data partition
容量:(不更動,剩下全部),對齊+ 512kb
磁區名稱:storage
勾選:隱藏+無磁區代號

套用變更:確定
導引記錄:刪除

分割程式當機,正常現象


5. 初始化手機
拔線,讓手機重開機,跑初始化
新手機第一次登入步驟


6. 格式化內部儲存空間
>系統設定 >儲存空間 >內部儲存空間 >格式化


備註:
分割完後,OTA升級 依然可以保有分割的容量,卡刷未測試
使用 櫻大的 root 也正常

2014年6月16日 星期一

使用ipv6 部份網站會卡頓解決方案


使用ipv6 部份網站會卡頓

win系統,確認一下網卡的名稱「區域連線 3」類似這樣, 附屬應用程式>>命令提示字元 右鍵 已系統管理員身份執行
>> netsh interface ipv6 set subinterface "區域連線 3" mtu=xxxx

linux系統
>> sudo ifconfig eth0 mtu xxxx

xxxx 值為 1492