2015年11月23日 星期一

在 Android Studio 加入 assets 資料夾

在 Android Studio 加入 assets 資料夾

在 Android Stdudio 中開心的專案,預設是沒有 assets 這個資料夾的,想要就要自己來。

首先將專案目錄那邊切換到 Project 檢視模式,然後在 app/src/main 目錄下按右鍵 New > Directory,名稱打上 assets,完成!

假設 assets 目錄下有個 OOO 資料夾,裡面有個 QQQ.txt,想要讀取的話就是 …

getAssets().open(getString(OOO/QQQ.txt))

會以 InputStream 回傳

Reference
Where to place Assets folder in Android Studio

Written with StackEdit.

Git 操作常見問題集

Git 操作常見問題集
  • 我加入了遠端的 repo,想要更新他的 branch 清單

    git remote update <remote name> --prune

  • 我現在有一個本地 branch 我想要拉一個遠端的 branch 下來合併

    切換到要合併的 branch
    git checkout <local branch name>
    然後拉下來
    git pull <remote name> <remote branch name>
    然後你就會看到很多 conflict XDDDDDDDDD

  • 想把現在的 branch 推上去 remote

    git push <remote name> <local branch name>

  • 已經修改了某些檔案,突然想切換 branch(或者原本忘了切換)但又不想 commit

    這是發生在我身上的真實案例,我想開發一個新功能,結果忘了先把 branch 切到 new_feature_xxx,在 master 下就直接開始寫 code 了,這真的很慘。這時候就需要 stash !它可以將目前的修改暫存起來,讓目前的 git 是上一次 commit 的狀態。

    暫存當前狀態
    git stash
    切換到別的 branch
    git checkout <local branch name>
    把剛剛修改的東西較叫回來
    git stash pop

  • 替 branch 改名

    git branch -m <old name> <new name>

Reference:
How to update remote branch list on local machine?

Written with StackEdit.

2015年11月16日 星期一

透過 Javascript 存取 cookie 的方法 (用 rails 的話超簡單!)

透過 Javascript 存取 cookie 的方法 (用 rails 的話超簡單!)

今天我是一個 rails 的使用者,請教 google 大神到底要怎麼在 javascript 存取 cookie,goo 了很久,一堆人都說阿就 $.cookie('name'),看起來是 jQuery 的東西,我也在 rails 中裝了 jQuery 但就是顯示 $.cookie is not a function

後來才發現,幹原來是要另外裝 jquery-cookie 才能用。然後這個 project 還搬家變成 js-cookie 了,看名字應該是擺脫 jQuery 的束縛了。

如果是 rails 的話直接用 gem 裝 jquery-cookie-railsjs_cookie_rails 就可以了。用後者的話基本上就是在 Gemfile 加上

gem 'js_cookie_rails'

然後 bundle install 再去 app/assets/javascripts/application.js 裡面加上

//= require js.cookie

就可以開始用他的指令去存取 cookie 了,下面簡單的介紹基本的,要注意的是生命期限預設單位是天。

// 設定 cookie
Cookies.set('name', 'value');

// 設定 cookie 生命期限 7 天
Cookies.set('name', 'value', { expires: 7 });

// 設定 cookie 生命期限 30 秒
var date = new Date();
date.setTime( date.getTime() + ( 30 * 1000 ));
$.cookie( "hoge", "30 seconds", { expires: date });

// 取得 cookie,若無此 cookie 會回傳 null
Cookies.get('name');

// 刪除 cookie
Cookies.remove('name');

Reference
jquery.cookie.jsの使い方とCOOKIEの寿命(保存期間)を秒・分・時間で指定する方法

Written with StackEdit.

2015年11月15日 星期日

在 chrome 中檢視各網站 cookie 的方法

在 chrome 中檢視各網站 cookie 的方法

只要在網址的地方輸入下面這行即可

chrome://settings/cookies

Reference:
How to View Cookies

Written with StackEdit.

2015年11月14日 星期六

Android Studio 編譯錯誤 unmappable character for encoding MS950

Android Studio 編譯錯誤 unmappable character for encoding MS950

前陣子開始跳槽,把一些 project 從 Eclipse 改到 Android Studio 去做遇到了編碼的問題,明明就都用 UTF-8,Android Studio 的 File Encodings 中 IDE Encoding、Project Encoding、Default encoding for properties files 也是設定 UTF-8 但還是出現錯誤訊息。

Gradle: error: unmappable character for encoding MS950

沒辦法,實在是不會 gradle。上網爬了一下後找到答案,在該 module 的 build.gradle 中加入下面這一段就妥當了。

tasks.withType(JavaCompile) {
     options.encoding = "UTF-8"
} 

Reference:
Android开发常见问题

Written with StackEdit.

C# 將 console 的內容轉至 textbox

C# 將 console 的內容轉至 textbox

平常寫程式總會做一些狀態的輸出,例如現在完成了什麼、某個數值是多少(總不可能永遠都用偵錯模式看嘛),若沒用一些專門處理 log 的 library 大概就是用 Console.write 最簡單了。

當寫好的程式被用在視窗程式裡,要看到這些 console 可以用 kernel32 的 AllocConsole,但我今天就是想要顯示在 form 的 textbox 裡!

這個 Console 其實是可以設定 out 去哪裡的,呼叫 Console.SetOut(TextWriter),然後只要自己寫好一個繼承自 TextWriter 的東西就可以丟給他了,至於要 out 去哪裡就是看 TextWriter 的 Write 和 WriteLine 怎麼寫了。

在此獻上一段簡單的 code

public class ConsoleTextBoxWriter : TextWriter
{
    private TextBox textBox;

    public ConsoleTextBoxWriter(TextBox textBox)
    {
        Console.SetOut(this);
        this.textBox = textBox;
    }
    public override Encoding Encoding { get { return Encoding.UTF8; } }

    public override void Write(string value)
    {
        WriteImp(value);
    }

    public override void WriteLine(string value)
    {
        WriteImp(value + Environment.NewLine);
    }

    private void WriteImp(string value)
    {
        if (this.textBox.InvokeRequired)
            this.textBox.Invoke(new MethodInvoker(delegate()
            {
                textBox.AppendText(value);
            }));
        else
            textBox.AppendText(value);
    }
}

Written with StackEdit.

使用 Dockerfile 安裝 rails 心得

使用 Dockerfile 安裝 rails 心得

最近又再次來碰碰 rails,因為不會 linux 所以覺得光是安裝開發環境就很痛苦,用 vm 做一個開發環境的保存覺得太肥大了,所以來試試看紅很久的 docker

不管是 rails、linux 還是 docker 我都是菜鳥,光是要完成這份 dockerfile 就花了好幾天的時間,遇到的問題有很多

  • 以為 CMDRUN 是差不多的東西

    看官方的說明,以為 CMD 可以真的執行指令,結果只是在 container 運行後自動執行的指令

  • 用 root 跟用 user 路徑會不同

    一開始都直接用 root 去安裝設定東西,但這樣一來跟網路上教學文章所教的路徑就都不一樣了,沒辦法,我就不會 linux 只好建一個 user 來繼續

  • 在 docker 中用 rvm 安裝 ruby 2.2.3 會無法安裝 rails 4.2.0

    真的找不到原因,只好改用 rbenv 惹

  • 在 dockerfile 中一直無法使用 rbenv、gem 等程式,但是實際進入 container 就可以

    一直覺得是這些東西沒有被 include 的感覺,試了很久真的跟我想的一樣,每次的 RUN 貌似都是用不同的 bash 去執行,也就是說設定的變數並不會保留到下一次的 RUN,所以呢,每次的 RUN 都要把要用到的東西的 PATH 寫進去

以下就是我這次的 rails 環境,也不知道要用什麼 base 就用 ubuntu 了

# === Reference ===
# Rails install tutorial: https://gorails.com/setup/ubuntu/14.04

FROM ubuntu:14.04
MAINTAINER aiueoH

RUN useradd -m railsuser && \
    echo "railsuser ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers

USER railsuser

RUN sudo apt-get update && \
    sudo apt-get install -y \
    python-software-properties \
    software-properties-common

RUN sudo add-apt-repository ppa:chris-lea/node.js && \
    sudo apt-get update && \
    sudo apt-get install -y \
    git-core \
    curl \
    zlib1g-dev \
    build-essential \
    libssl-dev \
    libreadline-dev \
    libyaml-dev \
    libsqlite3-dev \
    sqlite3 \
    libxml2-dev \
    libxslt1-dev \
    libcurl4-openssl-dev \
    libffi-dev \
    nodejs

RUN cd && \
    git clone git://github.com/sstephenson/rbenv.git .rbenv && \
    echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc && \
    echo 'eval "$(rbenv init -)"' >> ~/.bashrc && \
    exec $SHELL

RUN git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build &&\
    echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc && \
    exec $SHELL

RUN git clone https://github.com/sstephenson/rbenv-gem-rehash.git ~/.rbenv/plugins/rbenv-gem-rehash

RUN export PATH="$HOME/.rbenv/bin:$PATH" && \
    rbenv install 2.2.3 && \
    rbenv global 2.2.3

RUN echo "gem: --no-ri --no-rdoc" > ~/.gemrc && \
    export PATH="$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH" && \
    gem install bundler && \
    gem install rails -v 4.2.0 && \
    rbenv rehash

# Dependency for ruby gem - CarrierWave
RUN sudo apt-get install -y libmagickwand-dev

USER root

拜託各位先進多多指出錯誤或不妥的地方,感謝!

Written with StackEdit.

asp.net 4.0 ReportViewer IE9 報表欄位寬度顯示問題

asp.net 4.0 ReportViewer IE9 報表欄位寬度顯示問題

在 ASP.NET4.0 使用 ReportViewer 在 IE9 瀏覽時,報表內的表格欄寬,不會依照設計時所設定的寬度顯示。

在檢視 ReportViewer 所產生的 iframe 內,發現有一 <td width="100%" height="0/">,在某些瀏覽器下,該 <td> 會占據大量版面,導致原有的報表表格受到擠壓。

解決方法很簡單,只要在網頁內加上少許 CSS,讓該 <td> 無效即可。如下。

<style type="text/css">
    td[id*='oReportCell'] {width:100%; !important;}
</style>

並在 ReportViewer 屬性加上 AsyncRendering="false" 使 iframe 套用外層的 CSS 屬性

<rsweb:ReportViewer ID="ReportViewer1" runat="server" Font-Names="Verdana"
    Font-Size="8pt" Height="0px" ProcessingMode="Remote" Width="100%" AsyncRendering="false">
</rsweb:ReportViewer>

本文參考
ReportViewer doesn’t take full width in Internet Explorer

Written with StackEdit.