随笔 - 8, 文章 - 0, 评论 - 17, 引用 - 0
数据加载中……

2009年4月2日

iPhone手机开发平台入门介绍和教程

1. iPhone手机介绍
首先需要了解和破解iPhone手机,下面一个帖子介绍很详细:
iPhone最权威 [入门] [破解] [扫盲] [资源] [修砖] 总汇帖
http://www.weiphone.com/thread-41690-1-1.html

iPhone手机手册的中文翻译
http://down.tgbus.com/soft/16820.shtml


2. Unix常见命令
iPhone手机的操作系统是Mac OS X,内核是unix,所以可以iPhone手机上运行unix命令。
http://www.weiphone.com/thread-15894-1-1.html

3. Windows平台上iPhone开发环境搭建
见笔者的文章《Windows平台上iPhone基于cygwin开发环境的搭建方法》,文件链接:
http://canco.javaeye.com/admin/blogs/199106

4. Toolchain和iPhone SDK
Toolchain与官方iPhone SDK的比较请见文章:
《比较官方iPhone SDK和开源工具链》,文章链接:http://www.cocoachina.com/index.php/archives/cocoachina_149.html
iPhone SDK介绍和分析
见西西河的AllenKids先生的2篇文章:
iPhoneSDK观察 - 舞姿飘忽,苹果的探戈
http://www.20ju.com/content/V19377.htm
iPhone SDK 观察二:舞台宽广,才能跳得欢畅
http://www.cnbeta.com/articles/55055.htm

iPhone SDK, Toolchain, Windows Mobile, SymbianOS S60的比较
http://www.rsslite.com/post/1889.html



iPhone用户界面指导原则
http://www.20ju.com/content/V22381.htm

5. iPhone开发语言:Objective-C
iPhone原生程序开发语言主要是用Objective-C语言,如果你熟悉C/C++语言,则能很快掌握Objective-C。Objective-C语言主要要理解可变参数,Categories, Posing, Protocols等特性。
Objective-C初學者指南(繁体)
http://www.otierney.net/objective-c.html.zh-tw.big5Objective-C语法快速参考
http://www.cocoachina.com/index.php/archives/cocoachina_122.html
Learn Objective-C
http://cocoadevcentral.com/d/learn_objectivec/

The Objective-C 2.0 Programming Language
http://developer.apple.com/iphone/(注:需要注册为apple会员才可以下载)

6. iPhone开发书籍、文章和源代码
由iPhone开发和破解领路人Jonathan Zdziarski著作,最最重要、最值得推荐和唯一的开发书籍《iPhone Open Application Development》,可通过google下载电子版。


Creating an iPhone Application
iPhone OS Overview
iPhone OS Programming Guide
iPhone Human Interface Guidelines
Cocoa Fundamentals Guide
http://developer.apple.com/iphone/(注:需要注册为apple会员才可以下载)


Lucas Newman 的18页iPhone开发PDF教学
http://lucasnewman.com/phonedev.pdf

學習怎樣在 iPhone/iPod Touch 上開發自制遊戲全記錄
http://www.weiphone.com/thread-81192-1-2.html

CocoaChina整理的开源iPhone程序不完全列表
http://www.cocoachina.com/index.php/archives/cocoachina_143.html

几个源码例子
http://lucasnewman.com/phonedemos.zip



7. iPhone论坛和网站
平果开发中文站-最好的中文iPhone开发网站!
http://www.cocoachina.com/

苹果官方的开发网站:
http://developer.apple.com/iphone/

Weiphone
http://www.weiphone.com/index.php

苹果fans成立的网站:
http://apple4.us/

posted @ 2009-04-02 22:55 YG 阅读(901) | 评论 (1)编辑 收藏

2008年12月31日

The Standard C Library

     摘要: The Standard C Library --------------经典的基础 C的标志库函数是学习和使用C语言的基础,是编写经典C程序的基础,是学习其他计算机知识的基础.C标志库中一共包含了15个头文件: <assert.h> <ctype.h> <stdio.h> <stdlib.h> <string.h> <li...  阅读全文

posted @ 2008-12-31 13:38 YG 阅读(703) | 评论 (0)编辑 收藏

ACE在linux下的安装

本文详细描述了在Linux操作系统上安装和配置“自适应通信环境(ACE)”的过程和注意事项。zCkLinux联盟

文中的描述基于RedHat Linux 9操作系统和ACE 5.4版zCkLinux联盟

准备工作:zCkLinux联盟

1.确保你的Linux操作系统的开发环境(gcc、make……)是完整且可用的。zCkLinux联盟

2.在安装ACE的过程中,可能需要root权限,因此确保你拥有root帐户的密码。zCkLinux联盟

3.对于典型的Redhat9系统,autoconf程序的版本可能过低,你需要首先升级它。zCkLinux联盟

   升级的步骤如下:zCkLinux联盟

  1. 在控制台中输入 autoconf -V,查看你的autoconf程序的版本
  2. 如果低于2.57g,你需要到http://www.gnu.org/software/autoconf/去下载最新版本的autoconf程序,目前autoconf程序的版本是2.59
  3. 根据tarball中的安装说明,编译并安装升级autoconf程序

 

开始安装:zCkLinux联盟

经过上面的准备工作,现在你已经具备了安装ACE的条件。下面开始正式的安装工作。zCkLinux联盟

  1. 首先确定ACE的安装路径,并建立相应的目录。zCkLinux联盟

     

    这里,我们把ACE安装在/home/zhc/ace/的目录下,先执行zCkLinux联盟

    mkdir /home/zhc/ace

  2. 然后将获得的ACE源代码包解至该目录下。zCkLinux联盟

     

    tar zxvf ACE-5.4.tar.gz /home/zhc/ace

  3. 这时,在ace的目录下会建立一个名为ACE_wrappers的子目录,ACE所有的源代码、工具、和例子都在这个目录中。zCkLinux联盟

     

    先进入该目录,执行zCkLinux联盟

    cd /home/zhc/ace/ACE_wrapperszCkLinux联盟

    然后建立一个子目录,用于存放ACE编译后的目标文件zCkLinux联盟

    mkdir buildzCkLinux联盟

    cd build

  4. 接着,执行configure脚本,检查你的系统环境,配置并生成适合你的系统的Makefile文件。zCkLinux联盟

     

    在执行configure脚本时,可以加入许多配置选项,其详细说明可以参看ACE_wrappers目录下的ACE-INSTALL.html文件,zCkLinux联盟

    对于Redhat9系统来说,不必加任何参数,ACE就可以很好的工作了。zCkLinux联盟

    ../configure

  5. 在漫长的检查和配置之后,如果没有什么问题,你就可以开始编译了。zCkLinux联盟

     

    这一步很简单,执行zCkLinux联盟

    makezCkLinux联盟

    然后,泡一杯茶,静静的等待就行了。

  6. 如果编译顺利的通过(通常都会是这样的),那么恭喜你,你已经成功了一大半了,下面要做的仅仅是以些配置工作而已。zCkLinux联盟

     

    接下来的工作是安装,这一步是可选的,目的是把编译生成的ACE的库文件、头文件和手册页等安装到/usr/local的相应目录中去,为了今后使用的方便,我建议你还是进行这一步,执行zCkLinux联盟

    suzCkLinux联盟

    root's passwordzCkLinux联盟

    make install

  7. 安装之后,我们就可以进行最后的配置工作了。zCkLinux联盟

     

    首先设置环境变量ACE_ROOT,执行zCkLinux联盟

    setenv ACE_ROOT /home/zhc/ace/ACE_wrapperszCkLinux联盟

    注意其中的路径要根据你的实际情况而定zCkLinux联盟

    如果你不想每次都手工设定路径,可以编辑你的bash的配置文件,执行zCkLinux联盟

    cdzCkLinux联盟

    vi .bash_profilezCkLinux联盟

    在其中填加如下两行zCkLinux联盟

    ACE_ROOT=/home/work/research/ace/ACE_wrapperszCkLinux联盟

    export ACE_ROOT

  8. 然后,在$ACE_ROOT/ace目录中创建一个名为config.h的文件,在其中包含如下一行zCkLinux联盟

     

    #include "ace/config-linux.h"zCkLinux联盟

    或者,简单起见,你也可以直接建立一个指向config-linux.h的符号链接,执行zCkLinux联盟

    ln -s config-linux.h config.h

  9. 同样,在$ACE_ROOT/include/makeinclude目录中创建一个名为platform_macros.GNU的文件,在其中包含如下一行zCkLinux联盟

     

    include $(ACE_ROOT)/include/makeinclude/platform_linux.GNUzCkLinux联盟

    或者,简单起见,你也可以直接建立一个指向platform_linux.GNU的符号链接,执行zCkLinux联盟

    ln -s platform_linux.GNU platform_macros.GNU

  10. 最后一步,设置环境变量LD_LIBRARY_PATH,执行zCkLinux联盟

     

    setenv LD_LIBRARY_PATH $ACE_ROOT/ace:$ACE_ROOT/lib:zCkLinux联盟

    /usr/local/lib:$LD_LIBRARY_PATHzCkLinux联盟

    或者在~/.bash_profile文件中添加如下两行zCkLinux联盟

    LD_LIBRARY_PATH=$ACE_ROOT/ace:$ACE_ROOT/lib:zCkLinux联盟

    /usr/local/lib:$LD_LIBRARY_PATHzCkLinux联盟

    export LD_LIBRARY_PATH

 

安装完成:zCkLinux联盟

经过上面的步骤,ACE已经安装到了您的系统上了,下面我们将编译并执行ACE的例程以验证我们的工作。zCkLinux联盟

这里我们以《C++网络编程,卷一》所带的例子为例。zCkLinux联盟

  1. 进入例程目录,执行zCkLinux联盟

     

    cd $(ACE_ROOT)/examples/C++NPv1

  2. 编译例子程序,执行zCkLinux联盟

     

    makezCkLinux联盟

    如果前面的安装和配置正确,很快就能够得到编译后的例子程序。

  3. 分别执行一个服务器程序(随便哪一个都行)和一个客户端程序(Logging_Client),如果程序运行正确,说明前面的安装和配置成功,下面你就可以开始你的ACE学习之旅了

 

补充

 

下载ace 5.6
在根目录下建立一个文件夹
mkdir /ace
把下载的ace包移过去,解压得到一个文件夹ACE_wrappers
然后进入这个文件夹,看看里面的readme就可以晓得,linux下如何编译和安装
网上很多人说要建立一个config.h的文件,那是好多年前的老皇历了,readme里面没有说要建立这么个玩意,那就不建立。
直接进入主题,编译:
cd  /ace/ACE_wrappers
mkdir build
cd build
../configure 我们使用默认的option
make
make install
过程很快,然后我们进入到/usr/local目录下,可以看到include里面有ace要用的头文件,lib里面有ace要用的库文件
linux的库文件 的搜索路径如下:
/usr/include
/usr/local/include
/usr/lib/gcc-lib/i386-linux/2.95.2/include
/usr/lib/gcc-lib/i386-linux/2.95.2/../../../../include/g -3
/usr/lib/gcc-lib/i386-linux/2.95.2/../../../../i386-linux/include
因此,我们不用设置ace的头文件了。
但是ace库文件不是linux的自带的默认的库文件,因此我们使用的时候要带上,而ace现在的库文件并不是系统的,先看一下默认的:
 默认的动态库搜索路径/lib和/usr/lib
我们把ace所在的库文件路径添加进去:
一:
在/etc/bashrc中加入:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
重启
二:
打开/etc/ld.so.conf
本来内容是如下:
include ld.so.conf.d/*.conf
我们添加ace路径后变成如下
include ld.so.conf.d/*.conf
/usr/local/lib
保存退出!
然后执行    ldconfig
就可以了。
下面我们弄一个简单的ace程序:
/////////////////////////hello.cpp
#include "ace/OS.h"
#include "ace/Log_Msg.h"
 
int main (int argc, char *argv[])
{
          ACE_DEBUG((LM_DEBUG,"Hello, ACE!\n"));
          ACE_OS::exit(1);
          return 0;
}

这么就不写makefile了,直接用g++编译就是了。
编译
g++ hello.cpp -o hello -lACE
运行:
./hello
结果:
[root@BTazuo ~]# ./hello
Hello, ACE!

 

posted @ 2008-12-31 13:37 YG 阅读(850) | 评论 (0)编辑 收藏

2008年12月30日

'TryEnterCriticalSection' 错误

  隔了一段时间后来重新编译原本还可以编译运行的程序,在DEBUG下还是正常,但是换成release后就出现了下载问题
'TryEnterCriticalSection' : is not a member of '`global namespace''


解决方法:
处理办法:在stdafx.h或程序开始处中增加如下宏定义,即可。
用于指明WINDOWS系统版本。

//for use TryEnterCriticalSection
#ifndef _WIN32_WINNT
# define _WIN32_WINNT 0x500
#endif

posted @ 2008-12-30 12:49 YG 阅读(1442) | 评论 (0)编辑 收藏

linux配置问题汇总

》 挂载新区步骤
      加了新硬盘后,用Mount挂载上去总是失败,原来要先格式化才能再挂载上去,方法如下:

1、mkfs.ext3 -b 1024 -i 1024 /dev/ram5  //用内存虚拟硬盘进行格式化,定义inode号与block size号一致,对小文件来说更优。整个系统所能存储的文件数较少。

2、mkfs.ext3 -b 1024 -i 4096 /dev/ram5  //改变block size,使4个block与1个inode相对应,这种好处是对大文件来说节省空间,节省inode数量,整个系统所能存储的文件数较多。

3、mkdir /mnt/mem5   //创建挂装目录

4、mount /dev/ram5 /mnt/mem5   将虚拟的分区挂载到mem5目录中

5、tune2fs -l /dev/ram5  //验证当前磁盘格式


Others
1、mkfs.ext2 -b 1024 -i 1024 /dev/ram6  //创建ext2格式分区

2、tune2fs -j /dev/ram5  //改变分区

3、tune2fs -l /dev/ram5 //验证

》删除无效硬盘悬挂区

vi /ect/fstab

》 显示乱码
修改/etc/sysconfig/i18n  文件
把里面的LANG="en_US"改成 GB2312就可以了

》网络配置
1)临时修改
#IP配置,包括子网掩码,看情况修改eth0和192.168.1.22

ifconfig   eth0   192.168.1.22   netmask   255.255.255.0   up

#网关修改   ,看情况修改192.168.1.2

route   add   default   gw   192.168.1.2

2)永久修改
 修改配置:/etc/sysconfig/network-scripts/ifcfg-eth0
  
  DEVICE=eth0
  NOBOOT=yes
  BOOTPROTO=static
  IPADDR=192.168.1.9
  NETMASK=255.255.255.0
  GATEWAY=192.168.1.1
2: DNS   /etc/resolv.conf
   支持三个
nameserver 192.168.1.1


》环境变量
1:当前目录
export LD_LIBRARY_PATH=$(pwd)

export PATH=/xxxxxx/:$PATH

2:找不到so库问题
error while loading shared libraries
在/etc/ld.so.conf加入所在库的路径,存档后执行「/sbin/ldconfig –v」。

"."代表当前路径

posted @ 2008-12-30 11:48 YG 阅读(205) | 评论 (0)编辑 收藏

2008年9月9日

[游戏开发]工厂模式

游戏编程是我业余的爱好,也可以提高对编程的兴趣,每当我有时间的时候就会编写游戏,基于图片的问题所以首选小游戏。这是我毕业后第二款小游戏,相比上一款充分的运用了面向对象的技术,让我享受与不断做类的完善,特别提出的是使用递归技术使得算法更加简洁确实是个很不错的技术,比如:游戏中的地图整行消除判断以及消除。

目前的设计情况如下:
(有写没必要的函数省略了,初次使用UML图)

此贴主要是想探讨类的设计,标题上写了工厂模式,这里只是简单的把UI创建放到另外一个地方罢了,严格来说应该不算是什么工厂,但是主要是代码
易读维护性高就可以了.开发环境:VS2005,WIN32、 C++、DX9


如果要增加其他按钮只要继承ImageUI,和实现基类的存虚拟函数就可以。基类的事件触发如下代码。

PUG_BTN_STAT CImageUI::OnEven(UINT msg, WPARAM wParam, LPARAM lParam)
{
    POINTS xy;
    xy 
= MAKEPOINTS(lParam);
    POINT xy2;
    xy2.x 
= xy.x;
    xy2.y 
= xy.y;

    
switch(msg)
    {      
    
case WM_MOUSEMOVE:
           {
            
if(PtInRect(&_displaySize,xy2))
            {
                OnPass();
                
return PASS;
            }
           }
           
break;
      
case WM_LBUTTONDOWN:
           {
            
if(PtInRect(&_displaySize,xy2))
            {
                OnClick();
                
return ONCLICK;
            }
           }
           
break;
      
case WM_LBUTTONUP:
          {
            
if(PtInRect(&_displaySize,xy2))
            {
                OnClickOut();
                
return ONCLICKOUT;
            }
          }
          
break;
    }

    OnPassOut();
    
return COMMAND;
}


游戏图片如下:




游戏下载:
/Files/YGFaith/elsfkGame.rar

posted @ 2008-09-09 23:37 YG 阅读(1615) | 评论 (0)编辑 收藏

2008年8月29日

观察者模式(Subject/Observer)

定义:对象间的一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 

功能:搜索数据库,当有需要公布的数据将其用各种方式发送出去。
 
观察者模式无疑能很好的做到上面的要求,无论要多少种方式,只要增加多个继承之ITransfer接口的派生类即可,有很好的维护性。

以下是实际的应用.



//接口
//ITransfer.h
#pragma once

class ITransfer
{
public:
    
virtual bool DoTransfer(...= 0;
}
;


//FetionTransfer.h
#pragma once
   #include "Transfer.h"
class CFetionTransfer:public ITransfer
{
public:
    CFetionTransfer();
    
~CFetionTransfer();
    
bool DoTransfer(...);
private:
    ......
}
;


//MailTransfer.h
#pragma once
   #include "Transfer.h"
class CMailTransfer: public ITransfer
{
public:
    CMailTransfer();
    
 ~CMailTransfer();
    
bool DoTransfer(...);
private:
....
}
;


//TransferPool.h
#pragma once

#include 
"Transfer.h"
#include 
<vector>
using namespace std;

class CTransferPool
{
private:
    vector
<ITransfer*> vo;
public:
    
virtual ~CTransferPool();

    
void Login(ITransfer* po);

    
void Logout(ITransfer* po);
   
//向各成员广播消息
    void Notify(...);
}
;

//TransferPool.cpp
#include "TransferPool.h"

CTransferPool::
~CTransferPool()
{
    vector
<ITransfer*>::iterator vi = vo.begin();
    
for (; vi != vo.end(); vi++)
    
{
                 if(*vi)
                    {
                        delete *vi;
                         *vi = NULL;
                    }

    }

}


void CTransferPool::Login(ITransfer* po)
{
    vo.push_back(po);
}


void CTransferPool::Logout(ITransfer* po)
{
    vector
<ITransfer*>::iterator vi = vo.begin();
    
for (; vi != vo.end(); vi++)
    
{
        
if (*vi == po)
            vo.erase(vi);
    }

}


void CTransferPool::Notify(...)
{
    vector
<ITransfer*>::iterator vi = vo.begin();
    
for (; vi != vo.end(); vi++)
    
{
        ITransfer 
*= *vi;
            
        (
*vi)->DoTransfer(...);
    }

}


void main
{
    CTransferPool
*m_pTranPool= new CTransferPool();
    
    CFetionTransfer 
*m_pFetionTran = new CFetionTransfer(...);
    CMailTransfer 
*m_pMailTran = new CMailTransfer(...);

    m_pTranPool
->Login(m_pFetionTran);
    m_pTranPool
->Login(m_pMailTran);
       
        
while(需要发送消息)
        
{
            m_pTranPool
->Notify();
        }


        
//释放
          if(m_pTranPool)
        
{
            delete m_pTranPool;
            m_pTranPool 
= NULL;
        }


}

posted @ 2008-08-29 15:49 YG 阅读(1743) | 评论 (5)编辑 收藏

2008年8月21日

求两个数中最大值,不用判断语句。

 

#include "iostream.h" 
#include 
"math.h" 

#define bits ( sizeof( int ) * 8 - 1 ) 
static int CheckFlag( int x, int y )  
{  
int s1 = x >> bits;  
int s2 = y >> bits;  
s1
=abs(s1); 
s2
=abs(s2); 
return ( s1 * 2 + s2 );  
}  
static int SameSign( int Flag, int x, int y ) 
{  
int t[2= { x, y }; 
long z = x - y; 
int s = z >> (bits+32);  
s
=abs(s); 
return t[s]; 
}  
static int DiffSign(int Flag,int x,int y) 比较 
{  
int t[2= { x, y };  
return t[Flag - 1]; 

static int (*FuncList[4])(int Flag,int x,int y)={SameSign, DiffSign, DiffSign, SameSign};  
static int Max( int x, int y )  
{  
int Flag = CheckFlag( x, y );  

return (*FuncList[Flag])(Flag,x,y);  

void main()  

int x,y,z; 
cout
<<"请输入整型x的值(-32768~32767):"
cin
>>x; 
cout
<<"请输入整型y的值(-32768~32767):"
cin
>>y; 
z
=Max(x,y); 
cout
<<"最大的数:"<<z<<endl; 
}  



#define bits ( sizeof( int ) * 8 - 1 ) //移动的位数
static int SameSign( int Flag, int x, int y ) //函数功能:x,y同号时的比较
static int DiffSign(int Flag,int x,int y) //函数功能:x,y异号时的比较
static int (*FuncList[4])(int Flag,int x,int y)={SameSign, DiffSign, DiffSign, SameSign}; //定义函数指针数组
static int Max( int x, int y ) //函数功能:求最大值

static int CheckFlag( int x, int y ) //函数功能:检测x,y的符号
/*
Flag 的值
+ +:0
- +;1
+ 1:2
- -:3
*/

posted @ 2008-08-21 14:20 YG 阅读(3138) | 评论 (11)编辑 收藏