2011年8月30日 星期二

[轉載]Android模擬器RAM修改方法


轉載自:

http://www.android123.com.cn/moniqi/806.html


Android模拟器RAM修改方法 - 尤其是3.0

作者: Android开发网原创 时间: 2011-03-06

Android模拟器启动速度慢是众所周知的,运行也很缓慢如何加速你的Android Emulator呢? 今天Android123给大家支招了,修改Android模拟器RAM大小,运行流畅度加倍,尤其是3.0 honeycomb这种吃RAM的平板没有真机使用emulator简直是煎熬,官方默认才给分配256MB运行内存,远比Xoom这样的1GB RAM的真机要少很多。

1. 我们以Windows平台的SDK为例,这里Android开发网的模拟器配置路径为 C:\Documents and Settings\android\.android\avd\android3.avd ,大家注意这个路径中蓝色的android是我的Windows用户名,而红色的android3.avd则是我蜂巢模拟器的名称,我在创建AVD时输入的是android3,具体的大家可以看下图,congfig.ini就是这个模拟器的配置文件:

android模拟器 内存

我们用记事本打开这个ini文件,当然我们可以看到Unix/Binary的换行符,这里Android123建议你使用UltraEdit或Notepad++打开,这里仅作为演示我们大家说下这个文件的结构吧,

hw.lcd.density=160 ; 是屏幕的密度
sdcard.size=64M ;这句代表分配SD卡的大小,我这里仅给了64M
skin.name=WXGA ;分辨率
skin.path=platforms\android-11\skins\WXGA ;模拟器皮肤
hw.keyboard.lid=no ;是否有物理键盘
vm.heapSize=48 ; 虚拟机默认堆大小
hw.ramSize=256 ; 模拟器的RAM运行内存大小,可以看到这里只有可怜的256MB
image.sysdir.1=platforms\android-11\images\ ; 模拟器的映像文件路径
这里大家主要是修改hw.ramSize这句,将后面的256换为更大的,当然要根据你PC电脑的物理内存来修改了,否则会严重映像你电脑的性能,如果你电脑的内存是2GB或以上,推荐和摩托Xoom平台的RAM设置的一样大小,hw.ramSize=后面写1024,保存即可,如图

android emulator ram

2011年8月19日 星期五

[轉載]Android 對話框(Dialog)大全

Activities提供了一種方便管理的創建、保存、回复的對話框機制,例如

來源:

http://android.tgbus.com/Android/tutorial/201104/348008.shtml

Activities提供了一種方便管理的創建、保存、回复的對話框機制,例如onCreateDialog(int),onPrepareDialog(int,Dialog),showDialog(int),dismissDialog(int)等方法,如果使用這些方法的話,Activity將通過getOwnerActivity()方法返回該Activity管理的對話框(dialog).   onCreateDialog(int):當你使用這個回調函數時,Android系統會有效的設置這個Activity為每個對話框的所有者,從而自動管理每個對話框的狀態並挂靠到Activity上。這樣,每個對話框繼承這個Activity的特定屬性。比如,當一個對話框打開時,菜單鍵顯示為這個Activity定義的選項菜單,音量鍵修改Activity使用的音頻流。  showDialog(int):當你想要顯示一個對話框時,調用showDialog(intid)方法並傳遞一個唯一標識這個對話框的整數。當對話框第一次被請求時,Android從你的Activity中調用onCreateDialog(intid),你應該在這裡初始化這個對話框Dialog。這個回調方法被傳以和showDialog(intid)相同的ID。當你創建這個對話框後,在Activity的最後返回這個對象。  onPrepareDialog(int,Dialog):在對話框被顯示之前,Android還調用了可選的回調函數onPrepareDialog(intid,Dialog).如果你想在每一次對話框被打開時改變它的任何屬性,你可以定義這個方法。這個方法在每次打開對話框時被調用,而onCreateDialog(int)僅在對話框第一次打開時被調用。如果你不定義onPrepareDialog(),那麼這個對話框將保持和上次打開時一樣。這個方法也被傳遞以對話框的ID,和在onCreateDialog()中創建的對話框對象。  dismissDialog(int):當你準備關閉對話框時,你可以通過對這個對話框調用dismiss()來消除它。如果需要,你還可以從這個Activity中調用dismissDialog(intid)方法,這實際上將為你對這個對話框調用dismiss()方法。如果你想使用onCreateDialog(intid)方法來管理你對話框的狀態(就如同在前面的章節討論的那樣),然後每次你的對話框消除的時候,這個對話框對象的狀態將由該Activity保留。如果你決定不再需要這個對像或者清除該狀態是重要的,那麼你應該調用removeDialog(intid)。這將刪除任何內部對象引用而且如果這個對話框正在顯示,它將被消除。  下面是幾種對話框的效果


  

  

  

  

  


  圖一:

  圖二:

  圖三:

  圖四:

  圖五:

  圖六:

  圖七:

  圖1效果:該效果是當按返回按鈕時彈出一個提示,來確保無誤操作,採用常見的對話框樣式。


  代碼:
  創建對話框方法dialog()     protected void dialog() { AlertDialog.Builder builder = new Builder(Main.this); builder.setMessage("確認退出嗎?"); builder.setTitle("提示"); builder .setPositiveButton("確認", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); Main.this.finish(); } }); builder.setNegativeButton("取消" , new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.create().show();}
  











在onKeyDown(int keyCode, KeyEvent event)方法中調用此方法

public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
dialog();
}
return false;
}

  圖2效果:改變了對話框的圖表,添加了三個按鈕

Dialog dialog = new AlertDialog.Builder(this).setIcon(
android.R.drawable.btn_star).setTitle("喜好調查").setMessage(
"你喜 ​​歡李連杰的電影嗎?").setPositiveButton("很喜歡",
new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(Main.this, "我很喜歡他的電影。",
Toast.LENGTH_LONG).show ();
}
}).setNegativeButton("不喜歡", new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(Main.this, "我不喜歡他的電影。", Toast.LENGTH_LONG)
.show();
}
}).setNeutralButton("一般", new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto- generated method stub
Toast.makeText(Main.this, "談不上喜歡不喜歡。", Toast.LENGTH_LONG)
.show();
}
}).create(); dialog.show();
  
  

  圖3效果:信息內容是一個簡單的View類型

new AlertDialog.Builder(this).setTitle("請輸入").setIcon(
android.R.drawable.ic_dialog_info).setView(
new EditText(this)).setPositiveButton("確定", null)
.setNegativeButton("取消" , null).show();

  圖4效果:信息內容是一組單選框

new AlertDialog.Builder(this).setTitle("複選框").setMultiChoiceItems(
new String[] { "Item1", "Item2" }, null, null)
.setPositiveButton("確定", null)
.setNegativeButton("取消", null).show();

  圖5效果:信息內容是一組多選框

new AlertDialog.Builder(this).setTitle("單選框").setIcon(
android.R.drawable.ic_dialog_info).setSingleChoiceItems(
new String[] { "Item1", "Item2" }, 0,
new DialogInterface.OnClickListener () {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).setNegativeButton("取消", null).show();

  圖6效果:信息內容是一組簡單列表項

new AlertDialog.Builder(this).setTitle("列錶框").setItems(
new String[] { "Item1", "Item2" }, null).setNegativeButton(
"確定", null).show();

  圖7效果:信息內容是一個自定義的佈局  1.佈局文件
  


http://schemas.android.com/apk/res/android "
android:layout_height="wrap_content" android:layout_width ="wrap_content"
android:background="#ffffffff" android:orientation="horizontal"
android:id="@+id/dialog">

android:layout_width="wrap_content"
android:id ="@+id/tvname" android:text="姓名:" />

android:layout_width="wrap_content" android:id="@+id/etname" android:minWidth=" 100dip"/>

  2.調用代碼  LayoutInflater inflater = getLayoutInflater(); View layout = inflater.inflate(R.layout.dialog, (ViewGroup) findViewById(R.id.dialog)); new AlertDialog.Builder(this).setTitle("自定義佈局").setView(layout) .setPositiveButton("確定", null) .setNegativeButton("取消", null).show();






2011年6月29日 星期三

什麼是除權除息?

【簡單說】:因應發放股票股利或現增而向下調整股價就是除權,因應發放現金股利而向下調整股價就是除息。

除權或除息的產生係因為投資人在除權或除息日之前與當天購買者,兩者買到的是同一家公司的股票,但是內含的權益不同,顯然相當不公平。因此,必須在除權或除息日當天向下調整股價,成為除權或除息參考價。

除息參考價

為使除息前(含現金股利)與除息後所買到的價格一致,公司在發放現金股利時,將股票的價格,按照現金股利,予以同等金額的下降,此為除息參考價。

除息日申報參考價 = 前一交易日收盤價 -現金股利金額

例如:A公司決定於8月7日除息,發放現金股利3元。8月6日收盤價為50元,那麼在8月7日的開盤參考價將為(50-3)元,為47元。

除權參考價的計算

當公司發放股票股利時,流通在外的股數增多,但發放股票前後,公司整體價值不變,但股數增多了,所以在除權後,每股價值就會下降,成為除權參考價。

除權參考價=前一交易日該股票收盤價/(1+配股率)

例如:B公司決定於7月15日發放股票股利五百股(即配股率為50%0。7月14日的收盤價為150元。那麼在7月15日除權當天的參考價將為(150/1+0.5)=100元

既除權又除息的參考價計算

現在很多公司在發放股利時,會採取配股加配息的方式。其參考價的計算方法為:

除權又除息參考價=(前一交易日該股票收盤價-現金股利金額)/(1+配股率)

2011年6月15日 星期三

期末考-android client server

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class tcpserver {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
byte[] data = new byte[1024];
int temp;
try {
ServerSocket server0 = new ServerSocket(3334);
Socket socket = server0.accept();
BufferedInputStream bin = new BufferedInputStream(socket.getInputStream());

while((temp = bin.read())!= -1){
System.out.print((char)temp);
}
bin.close();

server0.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
ServerSocket server1 = new ServerSocket(3335);
Socket socket = server1.accept();
BufferedInputStream bin = new BufferedInputStream(socket.getInputStream());

while((temp = bin.read())!= -1){
System.out.print((char)temp);
}
bin.close();

server1.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

===============================================================
以上這邊是Server的程式部分,基本上與上課的大同小異,重點在於要在建立起一個新的Port 讓Client能夠同時連線...所以直接把中間那段,再見port的程式複製之後貼在下面,把port改3335,Server的部分就完成了...
===============================================================
至於Client的部分,也是利用上課的範例,把資料夾名稱改掉,再把專案載入進來,這樣就有兩個client的專案,一樣把第二個專案連結port的地方改掉,再把要輸出的字也改掉,就完成了..

=========================
package tw.brad.tcpclient;

import java.io.BufferedOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

import android.app.Activity;
import android.os.Bundle;

public class tcpclient extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
byte[] buffer = "This is client1".getBytes();
try {
Socket socket = new Socket("10.0.2.2", 3334);
BufferedOutputStream bout =
new BufferedOutputStream(socket.getOutputStream());
bout.write(buffer);
bout.flush();
bout.close();
socket.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
==========================
以上為client1
==========================
package tw.brad.tcpclient;

import java.io.BufferedOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

import android.app.Activity;
import android.os.Bundle;

public class tcpclient extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
byte[] buffer = "\n This is client2".getBytes();
try {
Socket socket = new Socket("10.0.2.2", 3335);
BufferedOutputStream bout =
new BufferedOutputStream(socket.getOutputStream());
bout.write(buffer);
bout.flush();
bout.close();
socket.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
====================
以上為Client2
====================

2011年5月22日 星期日

[轉載] 8款開放原始碼的Android遊戲引擎

以下介紹的8款開源的Android遊戲引擎,OSChina 都已收錄。

很多初學Android遊戲開發的朋友,往往會顯得有些無所適從,他們常常不知道該從何處入手,每當遇到自己無法解決的難題時,又往往會一邊羨慕於iPhone下有諸如Cocos2d-iphone之類的免費遊戲引擎可供使用,一邊自暴自棄的抱怨Android平台遊戲開發難度太高,又連個像樣的遊戲引擎也沒有,甚至誤以為使用Java語言開發遊戲是一件費力不討好且沒有出路的事情。

事實上,這種想法完全是沒有必要且不符合實際的,作為能和蘋果iOS分庭抗禮的Android(各種意義上),當然也會有相當數量的遊戲引擎存在。僅僅因為我們處於這個狹小的天地間,與外界接觸不夠,所以對它們的存在茫然不知罷了。

下面我就羅列出八款常見的Android遊戲引擎,以供有需要者參考(收費,下載量過小,不公佈源碼,以及鄙人不知道(-_-)的引擎不在此列)。


1、Angle

Angle是一款專為Android平台設計的,敏捷且適合快速開發的2D遊戲引擎,基於OpenGL ES技術開發。 該引擎全部用Java代碼編寫,並且可以根據自己的需要替換裡面的實現,缺陷在於文檔不足,而且下載的代碼中僅僅包含有少量的示例教程。

最低運行環境要求不詳。


2、Rokon

rokon是一款Android 2D遊戲引擎,基於OpenGL ES技術開發,物理引擎為Box2D,因此能夠實現一些較為複雜的物理效果,該項目最新版本為2.0.3 (09/07/10)。 總體來說,此引擎最大的優點在於其開發文檔相當之完備,並且項目作者對反饋Bug的修正非常之神速,所以該框架的使用在目前也最為廣泛,有人乾脆將它稱為Cocos2d-iPhone引擎的Android版(業務邏輯和編碼風格上也確實很像)。 附帶一提,國內某個需要註冊會員才能下載的Android遊戲框架衍生於此框架,所以大家也不要刻板的認為收費便一定是好的,免費就一定不好。

最低運行環境要求為Android 1.5。


3、LGame

LGame是一款國人開發的Java遊戲引擎,有Android及PC(J2SE)兩個開發版本,目前最高版本同為0.2.6(31/07/10)。 其底層繪圖器LGrpaphics封裝有J2SE以及J2ME提供的全部Graphics API(PC版採用Graphics2D封裝,Android版採用Canvas模擬實現),所以能夠將J2SE或J2ME開發經驗直接套用其中,兩版本間主要代碼能夠相互移植。 Android版內置有Admob接口,可以不必配置XML直接硬編碼Admob廣告信息。

該引擎除了基本的音效、圖形、物理、精靈等常用組件以外,也內置有Ioc、xml、http等常用Java組件的封裝,代價是jar體積較為龐大,PC版已突破1.2MB,Android版有所簡化也在500KB左右。 此外,該引擎還內置有按照1:1實現的J2ME精靈類及相關組件,可以將絕大多數J2ME遊戲平移到Android或PC版中。 唯一遺憾的是,該項目作者是個極其懶惰的傢伙,開發文檔從去年說到今年依舊沒有提供,只有遊戲示例可供下載。

最低運行環境要求為Android 1.1。


4、AndEngine

andengine同樣是一款基於OpenGL ES技術的Android遊戲引擎,物理引擎同樣為Box2D(標配|||)。 該框架性能普通,文檔缺乏,但示例較為豐富。

下載地址(未直接提供jar下載,源碼可通過svn提取):http://code.google.com/p/andengine/

最低運行環境要求不詳。


5、libgdx

libgdx是一款基於OpenGL ES技術開發的Android遊戲引擎,支持Android平台下的2D遊戲開發,物理引擎採用Box2D實現。 單就性能角度來說,堪稱是一款非常強大的Android遊戲引擎,但缺陷在於精靈類等相關組件在使用上不夠簡化,而且文檔也較為匱乏。

最低運行環境要求不詳。


6、jPCT

jPCT是一款基於OpenGL技術開發的3D圖形引擎(PC環境為標準OpenGL,Android為OpenGL ES), 以Java語言為基礎的,擁有功能強大的Java 3D解決方案。 該引擎與LGame(此為2D遊戲引擎)相類似,目前擁有PC(J2SE)以及Android兩個開發版本。

jPCT的最大優勢之一,就在於它驚人的向下兼容性。 在PC環境中,jPCT甚至可以運行在JVM1.1環境之中,因為jPCT內部提供的圖形渲染接口完全符合所有的Java 1.1規範(就連已經消失的Microsoft VM乃至更古老的Netscape 4 VM也不例外)。

最低運行環境要求為Android 1.5。


7、Alien3d

Alien3d是一款體積非常之小的Android 3D遊戲引擎,基於OpenGL ES技術開發。 為了壓縮體積,它根據不同功能採用多jar方式發布(包括alien3d-engine.jar,alien3d- tiled.jar,alien3d-sprites.jar,alien3d-shapes.jar,alien3d- particles2d.jar,),事實上它的核心文件大約只有40KB,所有相關jar的總和也不足150KB。

最低運行環境要求為Android 1.5。


8、Catcake

Catcake是一款跨平台的Java 3D圖形引擎,目前支持PC(J2SE)及Android環境運行(已有iPhone版規劃)。 該引擎在易用性和運行性能上皆有出色的表現,支持常見的遊戲開發功能,諸如精靈動畫,音頻處理和視頻播放等。

最低運行環境要求為Android 1.6。



轉載自:http://waineko.blogspot.com/2010/09/8android.html

2011年5月11日 星期三

網路核心程式設計-Week11-Homework

1.在blog 說明 Class InetAddress 的用法,以程式舉例

此類別表示網際網路協議 (IP) 位址。IP 位址是 IP 使用的 32 位或 128 位無符號數字,

它是一種低層級協議,UDP 和 TCP 協議都是在它的基礎上建構的。

InetAddress 的實例包含 IP 位址,還可能包含相應的主機名(取決於它是否用主機名建構或者是否已執行反向主機名解析)。

import java.net.*;
class GetIP {
public static void main(String[] args)
{

try{
InetAddress IP_Address = InetAddress.getByName("www.kimo.com.tw");
System.out.println(IP_Address);
}catch (UnknownHostException e){
System.out.println("找不到 www.kimo.com.tw 位址");
}
}
}
編譯與執行

javac GetIP.java

java GetIP

資料參考:

1.http://www.138vipbbs.com/vipccb/ccb/topic_view.cgi?forum=7&article_id=0107051121211619&publishtime_id=0107051121211619&class=1&new_window=1


2.說明FTP client/server 程式與FTP通訊協定

==============================================================
//Ftp Client
import java.io.*;
import java.net.*;
public class Client13_4 {
int i;
static String iaddr;
static int port;
static String infilename;

public Client13_4() {
try{
Socket socket=new Socket(InetAddress.getByName(iaddr),port);
DataOutputStream outstream = new DataOutputStream(socket.getOutputStream());

FileInputStream fis = new FileInputStream(infilename);
while((i=fis.read()) !=-1)
outstream.writeInt(i);
outstream.writeInt(i);
System.out.println("Data sent to internet successfully!");
socket.close();
}
catch(IOException e){
System.out.println(e.getMessage());
}
}
public static void main(String args[]) {
if (args.length < 3){
System.out.println("USAGE: java Client13_4 [iaddr] [port] [infilename]");
System.exit(1);
}
iaddr = args[0];
port=Integer.parseInt(args[1]);
infilename = args[2];
Client13_4 ClientStart=new Client13_4();
}
}
==============================================================
//FTP server
import java.net.*;
import java.io.*;
public class Server13_4 {
int messagein;
static int port;
static String outfilename;
public Server13_4() {
try{
ServerSocket SS = new ServerSocket(port);
System.out.println("Server is created and waiting Client to connect...");
Socket socket = SS.accept();
System.out.println("Client IP = " +
socket.getInetAddress().getHostAddress());
DataInputStream instream = new DataInputStream(socket.getInputStream());
FileOutputStream fos = new FileOutputStream(outfilename);
while(messagein != -1){
messagein = instream.readInt();
fos.write(messagein);
}
System.out.println("Data written to File successfully!");
}
catch(IOException e){
System.out.println(e.getMessage());
}
}
public static void main(String args[]){
if(args.length < 2){
System.out.println("Usage: java Server13_4 [port] [outfilename]");
System.exit(1);
}
port=Integer.parseInt(args[0]);
outfilename = args[1];
Server13_4 ServerStart=new Server13_4();
}
}
==============================================================


檔案傳輸協定英文File Transfer Protocol,簡稱為FTP)是用於在網路上進行檔案傳輸的一套標準協議。它屬於網路傳輸協定應用層

FTP是一個8位元的用戶端-伺服器協定,能操作任何型別的檔案而不需要進一步處理,就像MIME或Unicode一樣。但是,FTP有著極高的延時,這意味著,從開始請求到第一次接收需求資料之間的時間,會非常長;並且不時的必須執行一些冗長的登陸行程。


3. 何為 url, 什麼是 Domain Name System

統一資源定位符(URL,英語 Uniform / Universal Resource Locator 的縮寫)也被稱為網頁位址,是網際網路上標準的資源的位址(Address)。它最初是由蒂姆·伯納斯-李發明用來作為全球資訊網的位址的。現在它已經被全球資訊網協會編製為網際網路標準RFC1738了。

網域名稱系統英語Domain Name System,縮寫DNS)是網際網路的一項核心服務,它作為可以將域名IP位址相互對映的一個分散式資料庫,能夠使人更方便的存取網際網路,而不用去記住能夠被機器直接讀取的IP數串。

DNS 使用TCPUDP53。


資料來源:維基百科

4. window 之 localhost 如何設定

建議修改C:\windows\system32\drivers\etc\hosts 檔案,加上自訂的伺服器名稱跟127.0.0.1的對應,這樣你在網址列輸入自訂的伺服器名稱時,它就會到127.0.0.1,也就是localhost,然後apache的虛擬伺服器就會接手處理。

利用這個方法,就可以在本地模擬多個網址。

舉例來說,hosts裡面有一條localhost1 127.0.0.1,然後虛擬伺服器設定裡面的ServerName有localhost1,打在瀏覽器網址列打http://localhost1,應該就可以連到你設定的虛擬伺服器。

2011年4月13日 星期三

網路核心程式設計-期中考



1.用Linux+Gcc跟The world say hello










2.Linux 編譯 gcc 執行 client / server










2011年3月30日 星期三

網路核心程式設計-Week6-雙winsock接收通訊



Dim state, check As Integer

Private Sub Command1_Click()
If Winsock1.state = 0 Then
Winsock1.Bind Winsock1.LocalPort, Winsock1.LocalIP

Label3.Caption = Winsock1.state
End If
End Sub

Private Sub Command2_Click()
If Winsock1.state = 1 Then
Winsock1.Listen
Label3.Caption = Winsock1.state
End If
End Sub

Private Sub Command3_Click()
If Winsock1.state = 2 Then
check = 1
End If
End Sub

Private Sub Command4_Click()
Winsock2.SendData Text2.Text

End Sub

Private Sub Form_Load()
Label1.Caption = Winsock1.LocalIP
Winsock1.LocalPort = 7777
Label2.Caption = Winsock1.LocalPort
Label3.Caption = Winsock1.state

End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
MsgBox "有人來找"
check = 0
Wait 5
If check = 1 Then
Winsock2.Accept requestID
Label4.Caption = Winsock2.state
Winsock2.SendData ("yes")
MsgBox "我會連線"
End If
End Sub
Private Sub Wait(iSec As Long)
Dim iTimer As Long
iTimer = Timer
Do Until Timer - iTimer >= iSec
If check = 1 Then
iSec = 0
End If
DoEvents
Loop
End Sub

Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
Dim getdata As String
Winsock2.getdata getdata
List1.AddItem getdata
End Sub

2011年3月16日 星期三

網路核心程式設計-Week4-Udp網路猜拳





Dim x As Integer
Option Explicit

Private Sub cmdConnect_Click()
With udpPeerA
.RemoteHost = txtHostName.Text
If chkMain.Value Then
.RemotePort = 1001 '連線的連接埠號。
.Bind 1002 '連結到本機的連接埠。
Else
.RemotePort = 1002
.Bind 1001
End If
End With
End Sub

Private Sub cmdSend_Click()
txtSend.Text = x
udpPeerA.SendData txtSend.Text
Select Case x
Case 1
If txtOutput.Text = 1 Then
Text1.Text = "平手"
ElseIf txtOutput.Text = 2 Then
Text1.Text = "你輸了"
ElseIf txtOutput.Text = 3 Then
Text1.Text = "你贏了"
End If
Case 2
If txtOutput.Text = 2 Then
Text1.Text = "平手"
ElseIf txtOutput.Text = 3 Then
Text1.Text = "你輸了"
ElseIf txtOutput.Text = 1 Then
Text1.Text = "你贏了"
End If
Case 3
If txtOutput.Text = 3 Then
Text1.Text = "平手"
ElseIf txtOutput.Text = 1 Then
Text1.Text = "你輸了"
ElseIf txtOutput.Text = 2 Then
Text1.Text = "你贏了"
End If
End Select
DoEvents
End Sub

Private Sub Command1_Click()
Randomize Timer
x = Int(Rnd() * 3 + 1)
End Sub

Private Sub udpPeerA_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
udpPeerA.GetData strData
txtOutput.Text = strData
End Sub


2011年3月9日 星期三

轉-認識每股盈餘 EPS

每股盈餘(EPS:Earnings Per Share)

名詞定義:
一家公司某一段時間的獲利(可分為稅前、稅後及常續性)除以流通在外發行股數,通常以元顯示,一般常用的是每股稅後盈餘。

計算公式:
(年度盈餘 - 特別股股利) ÷ 流通在外發行股數(通常用加權平均)

使用方式:

通常每股盈餘愈高,代表相對於原始投入資本而言,公司的獲利性愈高,EPS通常用來比較公司本身的獲利變化趨勢,但由於會受到無償配股、現金增資及公司債轉換等造成股本變化的因素影響,每股盈餘很少單獨使用,大都是用來和股價相除,成為常用的評價指標-本益比(PER)

而EPS又可分為過去的每股盈餘(Trailing EPS)及預估每股盈餘(Forecasting EPS),各位以本益比或EPS來衡量股價是否值得買進時,需特別留意你所用的EPS究竟是過去的每股盈餘還是預估每股盈餘,因為股價永遠是反應未來,單純就過去的獲利來衡量未來股價的變化,這是很危險的

過去的每股盈餘(建議觀察8~10年的表現)並非全然無用,因為透過公司歷年來的EPS波動程度,可以瞭解該公司的獲利是否會受到景氣循環嚴重影響,若是EPS歷年來呈現高低起伏有正有負的狀態,極可能就是景氣循環股,這種公司最好是在景氣不佳一段時間後較適合買進,景氣大好一段時間後適合賣出,例如...水泥、塑化、鋼鐵、營建、航運、DRAMTFT LCD(面板股)等,都屬於標準的景氣循環股。

過去的每股盈餘若是呈現穩定的狹幅波動,又或是穩定的上升趨勢,則該公司的獲利,受到景氣影響的情況較低,這種公司多數被價值投資者所喜愛,當大盤市況不佳,股價有被嚴重低估的情況時,就值得風險規避型投資人來留意!

透過EPS計算出來的本益比(PER或P/E)通常會與股價淨值比(PBR或P/B)一起用來衡量股價是否值得買進,換句話說,這是目前市場最常用來衡量股票貴不貴、值不值的二個工具了。


備  註:

美國著名反向投資專家大衛‧卓曼(David Dreman)曾在1993年10月11日的富比士雜誌(Forbes Magazine)中指出,以1973年至1990年,統計美國分析師對股票季盈餘的67,375次預估中,平均預估錯誤率達40%,而預估錯誤超過10%的比例達三分之二,這個訊息表達了單純利用預估資料作投資決策的風險性。

在此建議同學們試圖衡量預估EPS未來可實現的機率時,必須同步觀察公司每月營收變化、產銷組合變化、業外損益變化、過去五年EPS變動狀況。舉例來說,A公司縱使去年EPS高達10元,但是前年EPS僅2元,這表示該公司獲利波動幅度很大,今年的EPS就不容易估計了,而且去年EPS雖然高達10元,其參考性也不高。

上述為市場中最常用的簡單每股盈餘,由於目前企業籌資方式靈活,且籌資區域也從台灣擴大到海外,因此較為謹慎的投資人應該考量可轉換證券對於簡單每股盈餘的稀釋效應。

充分稀釋每股盈餘 (Fully Diluted Earnings Per Share) 是指在複雜資本結構下,基於穩健原則,考量最大可能的稀釋結果,引以計算出來的普通股每股盈餘。它和基本每股盈餘最大的差異,是在它也納入具有稀釋作用的「非約當普通股」,只要是有稀釋作用的可轉換證券,像是國內可轉換公司債、海外可轉換公司債、員工股票選擇權等,都會包含於計算充分稀釋每股盈餘的分母項。因為可轉換證券持有人一旦要求公司履約,企業的流通在外普通股數會增加。

每股盈餘屬於帳面上的獲利,實際上公司當年度所增加的現金流入不會等同於獲利金額,尤其是誠信度不佳的公司,經常透過帳面美化的方式欺瞞投資人,因此千萬不可因為每股盈餘的高低,就決定了買賣股票的行為!

建議觀察每股盈餘EPS的同時,也同時觀察該公司的現金流量表,尤其是自由現金流量(FCF),很多帳面上獲利的公司,最後成為地雷的原因就在於帳面上有賺錢,但是....現金沒有流入公司!