2016年12月27日 星期二

[Startup] 如何設立一間有限公司?

  相信各位在創業的過程中一定會遇到設立公司的這道關卡。隨便上網搜尋一下,代辦費用最少也要兩千多元,創業維艱,任何的一筆開銷都要斤斤計較。因此,有無必要產生這筆開銷,就讓我們繼續看下去⋯⋯

設立公司到底難不難?答案是:一點也不!

在此為各位整理設立所需的步驟、資料、時間及費用,看完之後你會發現完完全全沒必要花錢請人代辦!當然,一秒鐘幾十萬上下的人不在此限!XD

STEP I 公司名稱及營業項目查詢

  台灣目前有將近七十萬間的公司行號,你所期待的公司名稱是否與這些已成立的公司行號重複,來這裡查就對惹!除了公司名稱外,你所設立的公司營業哪些項目也需要預查。究竟有哪些營業項目呢?這裡會告訴你答案!

花費時間:想查多久就多久!XD

STEP II 正式申請公司預查

  一旦你發現所期待的公司名稱尚未與目前將近七十萬間的公司行號重複,這時候就要透過正式的流程來保留你預計的公司名稱。

公司名稱及所營事業登預查核定書



花費時間:約 1~3 個工作天,費用:150 元+信用卡或銀行手續費(網路申辦)

STEP III 刻公司大小章

  確定可保留的公司名稱後,接著就要刻公司大小章啦!所謂的公司大小章是⋯⋯公司章(大章,例如:某某有限公司)以及負責人章(小章,例如:某某某)。這一對印鑑相當重要必須妥善保管,後續公司的設立與大小事務都要靠這兩顆印章呢!

花費時間:約 1~2 個小時,費用:250 元(各家收費標準不同,記得要向老闆殺價唷!)

STEP IV 開設公司籌備戶

  每一間公司都必須有自己的戶頭(廢話!),初期是讓股東們將公司的股款匯入至公司帳戶。當股款全數匯入至公司籌備戶的下一個工作日,必須前往籌備戶所在銀行申請「餘額證明」以利後續會計師進行「資本額簽核」的工作!

準備物品:公司大小章、公司名稱及所營事業登預查核定書
花費時間:約 2 個工作天,費用:50 元(申請餘額證明的手續費)

STEP V 會計師資本額簽核

  各位設立公司後不可或缺的好夥伴——會計師,在這個時後出場拉!資本額代表一間公司成立的時候多有錢!(逃~)當然這部分不是公司說的算,是需要會計師簽核政府才會買單的。目前台灣成立公司已無資本額限制,但是在商場走跳多多少少還是會看看這間公司有幾兩重!

準備物品:公司籌備戶餘額證明正本
     銀行存摺封面、印鑑頁、內頁含存款餘額影本
     公司名稱及所營事業登預查核定書
     負責人身分證影本

花費時間:約 3 個工作天,費用:可以多問問幾間會計師事務所!XD

STEP IV 設立公司

  由於本公司設立於台北市,因此設立公司必須前往台北市商業處進行登記!(當然,網路登記也行,不過需要比較長的處理時間)不得不推薦在台北市設立公司的好處:市政府相當貼心的把所有的流程以及必備文件都幫你整理在這裡

花費時間:約 1~2 小時(現場排隊花比較久的時間!囧),費用:1000 元



最後,恭喜各位完成有限公司的設立,晉升老闆一族囉!(菸⋯⋯)

2016年6月30日 星期四

[HTML 5] 如何在網頁中顯示 PDF 型式的檔案?

最近開發專案的過程中,需要將 PDF 型式的檔案顯示於網頁之中。經過一連串的搜尋,發現一個相當簡單的解決方法:利用 Embeddable Google Document Viewer

在要顯示 PDF 型式檔案的 HTML 頁面加入這麼一段程式碼

<iframe src="http://docs.google.com/gview?url=http://YOUR REFERENCE SITE/YOUR PDF FILE NAME.pdf&embedded=true" style="width:100%; height:100%" frameborder="0"></iframe>

Done and it's easy :D

2016年5月30日 星期一

[Facebook, HTML5] 分享至 FB 功能設定

原以為開發分享至 FB 會是相當繁瑣的一件事情,經過 google,沒想到竟是如此簡單!

STEP 1 設定分享內容文字

利用 The Open Graph protocol 設定分享的資訊。

<head>
    <!-- 分享至 FB 的標題 -->
    <metadata property="og:title" content="YOUR_TITLE" />
    <!-- 分享至 FB 的內容敘述 -->
    <metadata property="og:description" content="YOUR_DESCRIPTION" />
    <!-- 分享至 FB 的內容連結 -->
    <metadata property="og:url" content="YOUR_URL" />
    <!-- 分享至 FB 的圖片 -->
    <metadata property="og:image" content="YOUR_IMAGE_URL" />
    <metadata property="og:type" conetnet="website" />
</head>


STEP 2 加入分享至 FB 的連結

<a href="javascript: void(window.open('http://www.facebook.com/share.php?u='.concat(encodeURIComponent('YOUR_URL'))''))">分享至 FB</a>

設定完成,接著就分享內容至 FB 吧!XD

2016年5月26日 星期四

[Django, MySQL] MySQL 中文亂碼問題

為了廣大華人市場,製作中文網站勢在必行!不過卻經常遇到 MySQL 儲存中文資料遇到亂碼的問題,經過一番研究,在此紀錄完整的解決方案。

MySQL 遇到中文亂碼最主要的原因是 CHARACTER SET 不支援中文顯示!

解決這個問題的最佳方案為

設定 CHARACTER SET 為 UTF8,因為 UTF8 支援所有字符!

首先進到 MySQL,查看默認的編碼格式

mysql > show variables like "%char%";

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

我們可以發現,character_set_database 與 character_set_server 皆為 latin1 編碼。

透過下面指令,修改這兩個的預設編碼

mysql > set character_set_database = "utf8";
mysql > set character_set_server = "utf8";

修改後再次檢查編碼

mysql > show variables like "%char%";

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

全數編碼皆改為 UTF8。

到這裡如果已解決中文亂碼的問題,恭喜你!只不過,筆者如果重啟 Apache,會發現character_set_server 預設的編碼又變成 latin1。這時候只好從根本下手,修改 my.cnf 內的設定。

$ sudo vi /etc/mysql/my.cnf

1. 在 [client] 段落裡加入:

default-character-set=utf8

2. 在 [mysqld] 段落裡加入:

character-set-server=utf8
init-connect="SET NAMES utf8"
collation-server=utf8_unicode_ci

3. 在 [mysql] 段落裡加入:

default-character-set=utf8

存檔後重啟 MySQL: $ sudo service mysql restart

這樣就從根本解決 MySQL 中文顯示亂碼的問題囉~




當然,在建立 database 的時候別忘了將編碼設定為 UTF8 唷!XD

mysql > create database YOUR_DB default character set utf8;

2016年4月17日 星期日

[Django] 利用 Gmail 發送 email

由於專案上的功能,必須透過 Django 發送 email 給予前端使用者。不打算自行架設郵件伺服器的前提下,利用 Gmail 進行發送成為解決方案的首選!以下將介紹如何利用 Django + Gmail 發送郵件:

首先,對 Django settings 加入以下設定:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'YOUR GMAIL ACCOUNT'
EMAIL_HOST_PASSWORD = 'YOUR GMAIL PASSWORD'
EMAIL_USE_TLS = 'True'
EMAIL_POST = '587'


接著,就可以透過以下兩種不同程式寫法進行郵件的發送。

方法一:透過 send_mail() 發送

from django.core.mail import send_mail

send_mail('Subject here', 'Here is the message.', 'from@example.com', ['to@example.com'], fail_silently=False)


方法二:透過 EmailMessage 類別發送

from django.core.mail import EmailMessage

email = EmailMessage('Hello', 'Body goes here.', 'from@example', ['to@example.com', 'to2@example.com'], ['bcc@example.com'])

email.send()


就是這麼簡單即可透過 Django 發送 email 惹!

2016年3月31日 星期四

[Python] datetime.time 物件進行時間相加的問題筆記

最近在開發 Python 的時候,遇上一件相當惱人的事情,那就是‧‧‧

該如何對 datetime.time 物件進行時間相加的動作?


曾經嘗試過:

>>> datetime.time(1, 2, 3) + 1
TypeError: unsupported operand type(s) for +: 'datetime.time' and 'int'.

>>> datetime.time(1, 2, 3) + datetime.timedelta(0, 1)
TypeError: unsupported operand type(s) for +: 'datetime.time' and 'datetime.timedelta'

>>> datetime.time(1, 2, 3) + datetime.time(0, 0, 1)
TypeError: unsupported operand type(s) for +: 'datetime.time' and 'datetime.time'

正當困惑之時,經由谷歌大神指點,發現可以這麼做‧‧‧

1. 先把 datetime.time 轉為 datetime.datetime

>>> import datetime
>>> dt = datetime.datetime.combine(datetime.date.today(), datetime.time(1, 2, 3))

2. 再運用 datetime.timedelta 進行時間相加

>>> dt += datetime.timedelta(0, 1)

3. 最後,取得 datetime 物件中 time 的部分,即為所求。

>>> print dt.time()
01:02:04

2016年3月23日 星期三

[Python] os.path.join(path, *paths) 的問題筆記

今天在撰寫 Python os.path.join(path, *paths) 時遇到一個奇怪的問題:

不管如何 JOIN,所顯示的結果永遠是後面的路徑!


讓我們用下列程式碼做說明:

>>> import os
>>> a = 'path/to/a'
>>> b = '/path/to/b'
>>> print os.path.join(a, b)
/path/to/b


經過一段時間的實驗與偵錯,發現問題出在於 b = '/path/to/b'

原來,os.path.join(a, b) 的 b 不可接受 '/path/to/b' 的這種形式!

以下為實驗結果:

(1) 成功
>>> import os
>>> a = '/path/to/a'
>>> b = 'path/to/b'
>>> os.path.join(a, b)
/path/to/a/path/to/b


(2) 成功
>>> import os
>>> a = 'path/to/a/'
>>> b = 'path/to/b'
>>> os.path.join(a, b)
path/to/a/path/to/b


(3) 成功
>>> import os
>>> a = 'path/to/a'
>>> b = 'path/to/b/'
>>> os.path.join(a, b)
path/to/a/path/to/b/

2016年2月22日 星期一

[Mac, OS X 10.11, Django] 在 OS X 10.11 上安裝 Django 1.8 (How to install Django 1.8 on the OS X 10.11)

  先前曾經介紹如何在 Server 端安裝 Django。不過,身為一位行動開發者,並非永遠身處在擁有網路的環境裡。因此,在 Client 端準備開發環境,並進行不同解決方案的實驗是相當重要的一環。

  筆者所使用的電腦為 Macbook Pro,因此今天要向大家介紹如何在 Mac 上安裝 Django

STEP 1
  Django 是 Python 的 web framework 之一。因此在安裝 Django 之前,必須先安裝 Python。只不過在 OS X 10.11 已內建 Python 2.7,所以我們不需要進行任何的下載與安裝。

STEP 2
  由於在開發的過程中,可能需要安裝許多的套件。也經常發生套件版本更動後,造成原先可運作的內容出現錯誤。因此,在 Client 端我們將安裝虛擬環境 (virtualenv) 來避免類似問題以及協助進行不同解決方案的實驗。
  虛擬環境 (Virtualenv) 是創造虛擬 Python 環境的工具。它可以幫你做到:
1. 在沒有權限的情況在安裝新套件
2. 不同專案可以使用不同版本的相同套件
3. 套件版本升級時不會影響其他專案

  安裝的方式相當簡單:$ easy_install virtualenv

STEP 3
  在安裝完 virtualenv 後,我們將建立並啟動虛擬環境。

建立虛擬環境:
$ virtualenv 【指定虛擬環境的名稱】

啟動虛擬環境:
$ cd 【指定虛擬環境的名稱】
$ source bin/activate

若啟動成功,將看到 (【指定虛擬環境的名稱】) ... $

補充:若要關閉虛擬環境,則需鍵入 $ deactivate

STEP 4
  在啟動完虛擬環境後,我們將在此環境運用 pip 安裝 Django。
 (【指定虛擬環境的名稱】) ... $ pip install Django = 1.8.X (LTS 版本)

如此一來,將完成 Django 的安裝,並可在不同的虛擬環境中進行不同的實驗。

2016年2月3日 星期三

[Django] 在 Django 1.8.8 上設定 MySQL

前言:

        最近因為某些需求,必須建立一 Django 專案。此專案的資料庫,筆者選定 MySQL,因此本文將簡介如何在 Django 1.8.8 設定 MySQL。

步驟:(以 Ubuntu 14.04 為例)

        1. 安裝 MySQL(Django 1.8.8 支援 MySQL 5.5 以上的版本)
            $ sudo apt-get install mysql-server

        2. 為了讓 MySQL 可在 Django framework 運作,必須安裝 DB API driver
            $ sudo apt-get install python-mysqldb
            $ sudo pip install MySQL-python

        3. 接著,登入 MySQL 並在其中建立新的 Database
            $ mysql -u YOUR MYSQL ADMIN -p YOUR MYSQL ADMIN PASSWORD
         
            > CREATE DATABASE database_name;

        3. 接著,打開 Django 專案中的設定檔(settings.py)
            $ vi Path/to/your/Django/project/settings.py

        4. 開始修改 DATABASES
            DATABASES = {
          'default' : {
             'ENGINE' : 'django.db.backends.mysql',
             'NAME' : 'database_name',
             'USER' : 'YOUR MYSQL ADMIN',
             'PASSWORD' : 'YOUR MYSQL ADMIN PASSWORD',
             'HOST' : '', # Default is localhost or 127.0.0.1
             'PORT' : '', # Default is 3306
          }
      }


       5. 最後輸入 $ python manage.py migrate 就完成 MySQL 的設定囉!

2016年1月30日 星期六

[Ubuntu, Git] 在 Ubuntu 14.04 上安裝 Git server

前言:

        最近因為某些需求,必須在安裝 Git 伺服器。由於對 Ubuntu 較為熟悉,因此選擇在此 distribution 上安裝。

安裝前的準備:

        1. 一台已安裝好的 Ubuntu 伺服器(我選擇 Ubuntu 14.04 LTS)
        2. 在安裝 Ubuntu 的過程中選擇 ssh 或透過 apt-get 安裝

步驟:

        1. 安裝 Git
            $ sudo apt-get install git git-core

        2. 確認 Git 版本(Ubuntu 14.04 內建 1.9.1)
            $ git --version

        3. 在 server side 建立新專案
            $ cd Path/to/your/git
            $ sudo mkdir new_project.git
            $ cd new_project.git
            $ sudo git --bare init

        4. 如果要用 ssh 存取 Git server,則每一個要存取的人都必須要是這台 linux 的帳號。為了方便,我們將建立一個群組,將所有要存取 Git 的人加入。
            $ sudo groupadd git
            $ sudo user mod -a -G git [YOUR ACCOUNT]
            $ sudo chgrp -R git Path/to/your/git
            $ sudo chmod -R 777 Path/to/your/git

        5. 在 client side,我們可以 clone 一個 repository 下來
            $ git clone ssh://YOUR ACCOUNT@GIT SERVER IP:Path/to/your/git/new_project.git

            最後輸入密碼,就確定 Git server 安裝大功告成!

2014年6月10日 星期二

[C#] 利用 BackgroundWorker 實作 multi-thread

  最近筆者在開發 In-house 應用程式 (application) 時,需監聽某一個處理程序 (process) 是否結束。若將監聽的 while 迴圈寫在主程式,將導致主程式會 HANG 在那裡。經由與同事討論後,發現必須將監聽的程式碼另外執行於新的執行緒 (thread) 上,方可避免主程式 HANG 住的問題。

  一開始,筆者使用 Thread。此方法雖可將監聽的部分另起,但若此執行緒已運行完畢,並無法通知主程式「我」已經結束。經由 google,發現可利用 BackgroundWorker 類別解決上述問題。下面為實作面的紀錄:

首先,必須載入 (import)

System.ComponentModel;

接著,於主程式中宣告物件 (object)

BackgroundWorker bw = new BackgroundWorker();

對物件 bw 進行設定

bw.DoWork += new DoWorkEventHandler(DoWork);
bw.RunWorkerCompletedEventHandler += new RunWorkerCompletedEventHandler(RunWorkerCompleted);


實作 Event Handle 函式

DoWork(object sender, DoWorkEventArgs e)
{
    // 於背景啟動此執行緒時的工作
}

RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    // 當此執行緒運行完畢時的工作
}




  當然,解決方案不僅僅如此一種。只不過,這是我實際成功的方式,藉由部落格與各位分享!如有更佳的解決方案,歡迎提出討論。

參考資料:MSDN

2014年5月22日 星期四

[C#] 取得執行檔 (*.exe) 的圖標 (.ico) 【Get executable file's icon】

筆者最近最常開發的功能即為獲取執行檔的圖標,在此紀錄兩種不同的做法。

方法一:使用 SHGetFileInfo

using System.Runtime.InteropServices;

[DllImport("shell32.dll", CharSet=CharSet.Auto)]
public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbFileInfo, uint uFlags);

[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
public struct SHFILEINFO
{
    public IntPtr hIcon;
    public int iIcon;
    public uint dwAttributes;
    [MarshalAs(UnmanagedType.ByvalTStr, SizeConst = 260)]
    public string szDisplayName;
    [MarshalAs(UnmanagedType.ByvalTStr, SizeConst = 80)]
    public string szTypeName;
};

public const uint SHGFI_ICON = 0x100;
public const uint SHGFI_LARGEICON = 0x0; // Large icon
public const uint SHGFI_SMALLICON = 0x1; // Small icon

IntPtr hImgSmall;
IntPtr hImgLarge;
SHFILEINFO shinfo = new SHFILEINFO();

public System.Drawing.Icon GetExeFileIcon(string exeFilePath)
{
    // Use this to get small icon
    hImgSmall = SHGetFileInfo(exeFilePath, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), SHGFI_ICON |  SHGFI_SMALLICON);

    // Use this to get large icon
    hImgLarge = SHGetFileInfo(exeFilePath, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), SHGFI_ICON |  SHGFI_LARGEICON);

    System.Drawing.Icon myIcon = System.Drawing.Icon.FromHandle(shinfo.hIcon);

    return myIcon;
}


方法二:使用 Icon 類別 (System.Drawing)

using System.Drawing;

Icon myIcon = null;

public Icon GetExeFileIcon(string exeFilePath)
{
    myIcon = Icon.ExetractAssociatedIcon(exeFilePath);

    return myIcon;
}

2014年5月14日 星期三

[C#] Get Windows shortcut's target path

筆者最近在開發 In-house Windows application 的其中一項功能

──抓取使用者電腦中已安裝的應用程式的開發公司名稱 (Company Name)

遇到了一個問題:

「如果擷取的檔案為捷徑檔 (.lnk),那麼將無法獲得 Company Name;但是,如果擷取的檔案為執行檔 (.exe),將可獲得 Company Name」

經筆者觀察,執行檔的捷徑檔 (.lnk) 中的目標皆指向此捷徑檔相對應的執行檔路徑。因此,藉由抓取捷徑檔 (.lnk) 的目標並將之投入 FileVersionInfo 類別即可獲得此捷徑檔 (.lnk) 的 Company Name,請參考下圖:


範例程式碼如下:

首先,必須在 C# 專案中加入參考 (Reference) IWshRuntimeLibrary

using IWshRuntimeLibrary;

public string GetLNKTargetPath(string LNKFilePath)
{
    // Input LNKFilePath: Your LNK file's absolute path.
    WshShell shell = new WshShell();
    IWshSortcut shortcut =

        (IWshSortcut)shell.CreateShortcut(LNKFilePath);
    return shortcut.TargetPath; // Your LNK file's target path.
}

2014年5月7日 星期三

[C#] 新增、刪除、取得 Windows 系統登錄檔 (Registry)

  在 Windows programming 中,經常會利用系統登錄檔 (Registry) 儲存應用程式 (Application) 相關組態 (Configuration) 等資訊。以下文章將示範如何使用 C# 進行系統登錄檔 (Registry) 的新增、刪除和修改。

在 C# 中對系統登錄檔 (Registry) 操作必須先載入相關 namespace:

using Microsoft.Win32;

接下來將以 Current User 下的 SOFTWARE 為例,進行操作的講解。

新增
string registryPath = @"SOFTWARE"; //HKEY_CURRENT_USER\Software
//開啟 Software 子系統登錄檔
RegistryKey regKey = Registry.CurrentUser.OpenSubKey(registryPath);
regKey.SetValue(registryName, registryValue); //建立 Name/Value
regKey.close();


刪除
string registryPath = @"SOFTWARE"; //HKEY_CURRENT_USER\Software
//開啟 Software 子系統登錄檔
RegistryKey regKey = Registry.CurrentUser.OpenSubKey(registryPath);
regKey.DeleteValue(registryName); //刪除 registryName
regKey.close();


取得
string registryPath = @"SOFTWARE"; //HKEY_CURRENT_USER\Software
//開啟 Software 子系統登錄檔
RegistryKey regKey = Registry.CurrentUser.OpenSubKey(registryPath);
regKey.GetValue(registryName); //取得 registryName
regKey.close();




參考資料:MSDN

2014年3月10日 星期一

[Ubuntu, Git, GitHub] 在 Ubuntu 12.04 上使用 GitHub

最近看了些新聞以及求才訊息,發現不少公司都將 GitHub 視為工程師加分的一個條件。

在公司內,專案開發使用的版本控制系統為 Subversion

趁著撰寫軟體驗證 (Proof Of Concept) 的時候,將自己的程式碼上傳至並學習 GitHub。

筆者大多數的程式碼皆在 Ubuntu 上進行開發,故下列文章內容將以 Ubuntu 12.04 作為範例。

首先,GitHub 仍然是以 Git 為基礎的,所以必須在 Ubuntu 12.04 上安裝 Git

sudo apt-get install git

接下來,必須對 Git 進行配置 (configure)

git config --global user.name "Your GitHub Username"
git config --global user.email "Your GitHub 註冊 Email"

如果,今天你已經有現存的 repository,請先複製 (clone) 下來

git clone https://github.com/Your GitHub Username/Your Repository Name.git

接著,可在您複製的資料夾內進行專案管理。

如果您新增了一份檔案,最終您必須將檔案新增至 repository。

git add Your New File

新增完畢,將檔案 commit 至 repository

git commit -m 'Your commit message'

最後,將您修改的檔案 push 回 GitHub

git remote add origin https://github.com/Your GitHub Username/Your Repository Name.git

git push origin master ( 輸入您的帳號與密碼 )

完成上述流程,一切就大功告成囉!

2014年1月27日 星期一

[Python, Socket] Error Code: 98 Message Address Already in Use

最近在開發一些 Proof of Concept 的程式,使用到 Python 的 socket。

Socket server / client 的開發上並未遇到太大的問題,倒是後續的使用上時常遇上

Bind failed. Error Code: 98 Message Address already in use 這問題。

經過 Google 大神的指示,小弟透過這裡紀錄解決方法,以便後續查找!

問題發生的主因,似乎是 socket server 在 listen 的 port 被占住了!導致系統回報錯誤。

首先使用

sudo netstat -ltnp | grep ':YOUR PORT NUMBER'

上述的指令會回覆:

tcp   0   0 0.0.0.0:YOUR PORT NUMBER   0.0.0.0:*   LISTEN   30381/python

由此回覆,我們發現 YOUR PORT NUMBER 正使用 process 30381 ( 表示使用中 )

這時候把這一個 process kill 掉就可以解決問題囉!

sudo kill -9 30381

2014年1月22日 星期三

[Android] 如何改變 application 啟動的第一個 Activity (How to change app's starting activity?)

先前在開發 Android 的時候,遇上了一個很囧的問題。

就是新開發的 activity ( 不是新創專案就有的那個 activity ),

希望將它視為 application 一啟動後就載入的第一個 activity。

當然,遇到問題的第一步就是‧‧‧詢問 Google 大神囉!

找到的詳解為:

在專案的 AndroidManifest.xml 檔案中,將您預想 launch 的那一個 activity 修正為

<activity android:name=".Your app's starting activity"
    android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />                 </intent-filter>
</activity>


參考資料:http://ppt.cc/OpKg

2013年10月17日 星期四

[Apache] 在 Ubuntu 12.04 中修改 Apache 的 (土阜) 號 (port number)

[Django] Installing Django with Apache & mod_wsgi 中曾經介紹一部分的 Apache 設定。基本上, Apache 原始使用 80 (土阜) 作為網站的入口。可是問題來了‧‧‧如果不想使用 80 port,而是想使用其他的 port number 來作為網站的入口,我該怎麼做呢?

答案是,!!!

首先,找到 /etc/apache2/port.conf 這個檔案,並修改這個檔案如下:

NameVirtualHost *: PORT NUMBER
Listen PORT NUMBER


接著,將 /etc/apache2/site-available/default 這個檔案中的 <VirtualHost *:80> 修改為:

<VirtualHost *: PORT NUMBER>

最後,重新啟動 Apache 就大功告成囉!

sudo service apache2 stop
sudo service apache2 start

想驗證設定成功與否,打開瀏覽器並鍵入 http://localhost:PORT NUMBER。如果出現網站的首頁即表示修改 (土阜) 號成功!

2013年10月5日 星期六

[Ubuntu] 在 Ubuntu 12.04 搭建 PXE 伺服器

下面是最近實驗的一些紀錄。

在 Ubuntu 12.04 上搭建 PXE 伺服器必須安裝下列 packages:

1. inetutils-inetd
2. tftpd-hpa
3. isc-dhcp-server

安裝完畢後,分別對 TFTP, DHCP, inetd 進行組態。

TFTP

1. 編輯 /etc/default/tftpd-hpa 檔案,在原始檔案內加入:

RUN_DAEMON="yes"
OPTIONS="-l -s /var/lib/tftpboot"

2. 重啟 TFTP

/etc/init.d/tftpd-hpa restart

DHCP 

1. 編輯 /etc/dhcp/dhcpd.conf,在原始檔案內加入: 

1-1. 如果原始環境已存在 DHCP 伺服器,請在原始設定中加入【以下為範例】

subnet 192.168.1.0 netmask 255.255.255.0 {
    < 原有的設定 >
    filename "pxelinux.0";
    next server < PXE 伺服器 >;
}

1-2. 如果原始環境未存在 DHCP 伺服器,請參照下列範例進行設定。

subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.3 192.168.1.255;
    filename "pxelinux.0";
}

inetd 

1. 編輯 /etc/inetd.conf,在原始檔案末端加入:

tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot 

完成上述 packages 以及設定後,這台伺服器將擁有 PXE 的功能。

2013年6月5日 星期三

[Ubuntu] 在 Ubuntu 12.04 上設定無線網路

  由於實驗上的需求,必須使環境內的伺服器擁有對外網路的功能。但是,實驗室內的網路皆為私有網路,沒有對外存取的功能,因此必須藉由無線網路獲得此項功能。

首先,將無線網卡與伺服器連接。

按照下述步驟即可完成「無線網路」設定:

STEP 1. 尋找無線網卡代號 iwconfig 〈以本次實驗機器為例:wlan0〉

STEP 2. 啟用無線網卡
sudo ifconfig wlan0 up

STEP 3. 尋找可用無線 AP 〈Access Point〉
sudo iwlist wlan0 scanning

藉由上述指令可找出附近可用的無線 AP,並記下它們的 ESSID

STEP 4. 連接無線 AP
sudo iwconfig wlan0 essid "AP_NAME"

STEP 5. 取得 IP
sudo dhclient wlan0

如果是不需輸入密碼的無線 AP,完成上述步驟即可上網。

如果需輸入密碼,請接續下列步驟:
sudo iwconfig wlan0 key ********