Quantcast
Channel: C++博客-所有随笔
Viewing all 7880 articles
Browse latest View live

原型模式,简化多次创建相同的内容

$
0
0
原型模式的定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
UML图:


C++代码:
//filename: prototype.h
//author: Qinglong.mark.He
#include <iostream>
#include <string>

class Prototype
{
protected:
    std::string name;
public:
    Prototype(){}
    virtual ~Prototype(){}
    
    virtual Prototype *clone(){return nullptr;}
    virtual void set(char *n){}
    virtual void show(){}
};

class PrototypeA: public Prototype
{
public:
    PrototypeA(){
        name = "PrototypeA";
    }
    
    PrototypeA(const PrototypeA &r){
        name = r.name;
    }
    ~PrototypeA(){
    }
    PrototypeA *clone(){
        return new PrototypeA(*this);
    }
    void show(){
        std::cout<<"PrototypeA name: "<<name<<std::endl;
    }
};


class PrototypeB: public Prototype
{
public:
    PrototypeB(){
        name = "PrototypeB";
    }
    
    PrototypeB(const PrototypeB &r){
        name = r.name;
    }
    ~PrototypeB(){
    }
    PrototypeB *clone(){
        return new PrototypeB(*this);
    }
    void show(){
        std::cout<<"PrototypeB name: "<<name<<std::endl;
    }
};

测试用例:
#include "prototype.h"

int main(){
    auto r1 = new PrototypeA;
    auto r2 = new PrototypeB;
    auto r3 = r1->clone();
    auto r4 = r2->clone();

    r1->show();
    r2->show();
    delete r1;
    delete r2;

    r3->show();
    r4->show();
    delete r3;
    delete r4;
    
    return 0;
}


何清龙 2014-01-17 16:53 发表评论

装饰模式,动态地往一个类中添加新的行为

$
0
0
非原创,照搬维基百科的。
wiki的介绍:就功能而言,修饰模式相比生成
子类更为灵活,这样可以给某个对象而不是整个类添加一些功能。
UML图:




原理是:增加一个修饰类包裹原来的类,包裹的方式一般是通过在将原来的对象作为修饰类的构造函数的参数。装饰类实现新的功能,但是,在不需要用到新功能的地方,它可以直接调用原来的类中的方法。修饰类必须和原来的类有相同的接口。

修饰模式是类继承的另外一种选择。类继承在编译时候增加行为,而装饰模式是在运行时增加行为。

直接看代码更直观些:
测试用例:

#include "decorator.h"

int main( void ) {
 
   Widget* aWidget = new BorderDecorator(
                        new BorderDecorator(
                           new ScrollDecorator(
                              new TextField( 80, 24 ))));
   aWidget->draw();
   delete aWidget;
}


头文件与实现://filename: decorator.h

//author: Qinglong.mark.He

#include <iostream>

using namespace std;
 
/* Component (interface) */
class Widget {
 
public
  virtual void draw() = 0; 
  virtual ~Widget() {}
};  
 
/* ConcreteComponent */
class TextField : public Widget {
 
private:                  
   int width, height;
 
public:
   TextField( int w, int h ){ 
      width  = w;
      height = h; 
   }
 
   void draw() { 
      cout << "TextField: " << width << ", " << height << '\n'; 
   }
};
 
/* Decorator (interface) */                                           
class Decorator : public Widget {
 
private:
   Widget* wid;       // reference to Widget
 
public:
   Decorator( Widget* w )  { 
     wid = w; 
   }
 
   void draw() { 
     wid->draw(); 
   }
 
   ~Decorator() {
     delete wid;
   }
};
 
/* ConcreteDecoratorA */
class BorderDecorator : public Decorator { 
 
public:
   BorderDecorator( Widget* w ) : Decorator( w ) { }
   void draw() {
      Decorator::draw();    
      cout << "   BorderDecorator" << '\n'; 
   }  
};
 
/* ConcreteDecoratorB */
class ScrollDecorator : public Decorator { 
public:
   ScrollDecorator( Widget* w ) : Decorator( w ) { }
   void draw() {
      Decorator::draw(); 
      cout << "   ScrollDecorator" << '\n';
   }  
};
 


何清龙 2014-01-17 17:07 发表评论

GC的三种方式,读ruby之父写的《编程语言的过去、现在和未来》笔记

$
0
0
术语解释:
1.垃圾
所谓垃圾(Garbage),就是需要回收的对象。作为编写程序的人,是可以判断“这个变量已经不需要了”的,但是计算机做不到。因此,如果程序直接或间接的引用一个对象,那么这个对象就被视为“存活”;反之,已经引用不到的对象被视为“死亡”。将这些“死亡”的对象找出来,然后作为垃圾进行回收,这就是GC的本质。
2.根
所谓根(Root),就是判断对象是否可被引用的起始点,至于哪里才是根,不同的语言和编译器都有不同的规定,但基本是将变量和运行栈空间作为根。

主要的GC算法包括:标记清除方式、复制收集方式、引用计数方式。

1.标记清除(Mark and Sweep)是最早开发出的GC算法(1960年)。它的原理非常简单,首先从根开始将可能被引用的对象用递归的方式进行标记,然后将没有标记到的对象作为垃圾进行回收。
初始状态,一个对象可以对其他的对象进行引用。
标记阶段,对象内部有一个Flag标示自己是不是被标记,被标记的对象我们把它涂黑。被标记的对象被视为“存活”对象。标记是从对象树的根部开始的。
清除阶段,在进行垃圾回收时,将从根部开始,将所有对象按顺序扫描一遍,将没有被标记的对象进行回收。
标记清除算法的处理时间,是和存活对象与对象总数的综合相关的。
作为标记清除的变形,还有一种叫做标记压缩(Mark and Compact)的算法,他不是将标记的对象清楚,而是将他们不断压缩。

标记清除算法有一个缺点,就是在分配了大量的对象,并且其中只有一小部分存活的情况下,所消耗的时间会大大超过必要的值,这是因为在清除阶段还需要对大量死亡对象进行扫描。
2.复制收集(Copy and Collection)
复制收集算法试图克服标记算法的缺陷。在这种算法中,会将从根开始被引用的对象复制到另外的空间中,然后,再将复制的对象所能够引用的对象用递归的方式不断复制下去。
将所有没有死亡的对象复制到新的空间中,然后将旧的空间废弃掉,就可以将死亡对象所占用的空间一口气全部释放出来,而没有必要再次扫描每个对象。下次GC的时候,现在的新空间也就变成了将来的旧空间。
根据我的个人经验,Java的GC采用了标记清除和复制收集方式。object-c的GC使用另一种GC:

3.引用计数方式
引用计数(Reference Count)方式是GC算法中最简单也是最容易实现的一种,它和标记清楚方式差不多是在同一时间内发明出来的。
它的基本原理是,在每个对象中保存该对象的引用计数,当引用发生增减时对引用计数进行更新。
引用计数的增减,一般发生在变量赋值、对象内容更新、函数结束(局部变量不再被引用)等时间点。当一个对象的额引用计数变为0时,则说明它将来不会再被引用,因此可以释放对应的内存空间。
1       1         1
A---->B----->D
   \      |       /|
     \    |     /  | 
       \  2  /    | 1
          C      E
假设上图中所有对象中都保存着自己被多个其他对象进行引用的数量(引用计数),每个对象右上角的数字就是引用计数。
当对象的引用发生变化时,引用计数也跟着变化。我们让对象B到对象D的引用失效,于是对象D的引用计数变为0, 于是对象D到C的引用计数为0。由于对象D的引用计数变为0,因此由对象D到对象C和E的引用计数也相应减少。结果,对象E的引用计数也变为0,于是对象E也被释放掉了。

1       1   失效  0
A---->B_____>D
 \       |         /|
   \     |       /  |
     \   |1   /    |0
         C          E
引用计数变为0 的对象被释放,“存活”对象则保留了下来。
1        1
A----->B
   \      |
     \    |
       \  1
          C

实现容易是引用计数算法最大的优点。标记清楚和复制收集这些GC机制在实现上都有一定难度;而引用计数方式的话,凡是有些年头的C++程序员(包括我在内),应该都曾经实现过类似的机制,可以说这种算法是相当具有普遍性的。
除此之外,当对象不在被引用的瞬间就会被释放,这也是一个优点。其他的GC机制中,要预测一个对象合适会呗释放是很困难的,而在引用计数方式中则是立即被释放的。而且,由于释放操作是针对每个对象级别执行的,因此和其他算法相比,由于GC而产生的中断时间(Pause time)就比较短,这也是一个优点。
引用计数方式的缺点:
 引用计数最大的缺点,就是无法释放循环引用的对象。
                1
                A
              ^  \
             /      \
         1/          ‘/1
          B-------->C
上图中,A、B、C三个对象没有被其他对象引用,而是相互循环引用,因此他们的引用计数永远不会为0,结果这些对象就永远不会被释放。
引用计数的第二个缺点,就是必须在引用发生增减时对引用计数做出正确的增减,而如果漏掉了某个增减的话,就会引发很难找到原因的内存错误。引用计数忘记了增加的话,会对不恰当的对象进行释放;而引用计数忘记了减少的话,对象会一直残留在内存中,从而导致内存泄露。如果语言编译器本身对引用计数进行管理的话还好,否则,如果是手动管理引用计数的话,那将成为孕育BUG的温床。
最后一个缺点就是,引用计数并不适合并行处理。为了在多线程环境下避免多个线程同时操作引用计数,引用计数的操作必须采用独占的方式来进行,如果引用计数操作频繁发生,每次都要使用加锁等并发控制机制的话,其开销也是不可小觑的。


GC的基本算法,大体上都逃不出上述三种方式以及他们的衍生品。现在,通过对这三种方式进行融合,出现了一些更高级的方式。最有代表的是:分代回收、增量回收和并行回收。

1.分代回收(Generational GC)
由于GC和程序处理的本质是无关的,因此它消耗的时间越短越好。分代回收的目的,正是为了在程序运行期间,将GC所消耗的时间尽量缩短。
分代回收的基本思路,是利用了一般性程序所具备的性质,即大部分对象都会在短时间内成为垃圾,而经过了一定时间依然存活的对象往往用于偶较长的寿命。如果寿命长的对象跟容易存活下来,寿命短的对象则会被很快的废弃,那么到底怎样做才能让GC变得更加高效呢?如果对分配不久,诞生时间较短的“年轻”对象进行重点扫描,应该就可以更有效的回收大部分垃圾。
在分代回收中,对象按照生成的时间进行分代,刚刚生成不久的年轻对象划为新生代(Young generation),而存活了较长时间的对象则划为老生代(Old generation).根据具体实现方式的不同,可能会划分更多的代。那么根据程序的一般性质(即大部分对象都会在短时间内成为垃圾,而经过了一定时间依然存活的对象往往拥有较长的寿命),那么只要仅仅扫描新生代对象,就可以回收大部分废弃对象中的一部分。
这种方式称为小回收(Minor GC),参考Java的垃圾回收机制:http://www.blogjava.net/ldwblog/archive/2013/07/24/401919.html
小回收:首先从根开始一次常规扫描,找到“存活”对象。这个步骤常采用标记清楚或者是复制收集算法都可以,不过大多数分代回收都采用了复制收集算法。在扫描过程中,如果遇到属于老生代的对象,则不对该对象继续进行递归扫描。这样一来,需要扫描的对象就大幅减少。
然后,将第一次扫描完后残余下来的对象划分到老生代。具体来说,如果是用复制收集算法,只要将复制目标空间设置为老生代就可以了;而标记清除算法,则大多采用在对象上设置某种标志的方式。

对来自老生代的引用进行记录:
按照前面的方式,从老生代对象对新生代的引用怎么办呢?如果指扫描新生代区域的话,那么从老生代对新生代的引用就不会被检测到。如果一个年轻的对象只有来自老生代的引用,就会被误认为已经“死亡”了。因此,在分代回收中,会对对象的更新进行监视,将从老生代对新生代的引用,记录在一个叫做记录集(remembered set)的表中。在执行小回收的过程中,这个记录集也作为一个根来对象。
未来让分代回收正确工作,必须使记录集的内容报纸更新。为此,在老生代到新生代的引用产生的瞬间,就必须对该引用进行记录,而负责执行这个操作的子程序,需要被嵌入到所有设计对象更新操作的地方。
这个负责记录引用的子程序是这样工作的:设有两个对象A和B,当对A的内容进行改写并加入对B的引用,如果A属于老生代对象,并且B属于新生代对象,则将该引用添加到记录集中。
这种检查程序需要对所有涉及修改对象内容的地方进行保护,因此被成为写屏障(Writes barrier).写屏障不仅用于分代回收,同时也用在很多其他的GC算法中。
在运行过程中,老生代对象也会死亡。为了避免老生代区域中的“死亡”对象拜拜占用内存空间,偶尔需要对包括老生代区域在内的全部区域进行一次少秒回收。想这样以全部区域为对象的GC操作被成为完全回收(Full GC)或者大回收(Major GC)。
分代回收的性能会被程序行为、分代数量、大回收触发条件等因素大幅左右。

2.增量回收
在对实时性要求很高的程序中,比起缩短GC的平均中断时间,往往更重视缩短GC的最大中断时间。例如,在机器人的姿势控制程序中,如果因为GC而让控制程序中断了0.1秒,机器人可能就摔倒了。或者车辆控制程序因为GC而延迟相应的花,后果也是不堪设想的。
在这些对实时性要求很高的程序中,必须能够对GC所产生的中断做出预测。例如可以将最多中断10毫秒作为附加条件。

在一般的GC算法中,GC产生的中断时间与对象的数量和状态有关。因此,为了维持程序的实时性,不等到GC全部完成,而是将GC操作细分成多个部分逐一执行。这种方式被成为增量回收(Incremental GC)。
在增量回收中GC过程是渐进的,再回首过程中程序本身会继续运行,对象之间的引用关旭也可能发生变化。如果已经完成扫描和标记的对象被修改,对新的对象产生了引用,这个新的对象就不会被标记,明明是存“存活”的对象却被回收掉了。
为了避免这样的问题,和分代回收一样也采用了写屏障。当已经被标记的对象的引用关系发生变化时,通过写屏障会将新被引用的对象作为扫描的起始点记录下来。
由于增量回收的过程是分布渐进式的,可以将中断时间控制在一定长队之内。另一方面由于终端操作需要消耗一定的时间,GC所消耗的总时间就会相应的增加。

3.并行回收
最近的计算机中,一块芯片上搭载多个CPU核心的多核处理器已经逐渐普及。例如core i7就拥有6核12线程。
在这样的环境中,就需要通过利用多线程来充分发挥CPU的性能。并行回收正是通过最大限度利用CPU的处理能力来进行GC操作的一种方式。
并行回收的基本原理是,在原有的程序运行的同事进行GC操作,这一点和增量回收是相似的。不过,相对于在一个CPU上进行GC任务分割的增量回收来说,并行回收可以利用多CPU的性能,尽可能让这些GC任务并行进行。
由于软件运行和GC操作是同事进行的,因此就会遇到和增量回收同样的问题。为了解决这个问题,并行回收也需要用写屏障来对当前状态信息保持更新。不过,让GC操作完全并行,而一点不影响原有程序运行,是做不到的。因此在GC操作的某些特定阶段,还是需要中断原有程序的运行。

GC大一统理论:美国IBM公司沃森研究中心的David F.Bacon等人认为,任何一种GC算法,都是跟中回收和引用计数回收两种思路的组合。例如,用于改善分代回收和增量回收等跟踪回收算法的新屏障机制,从对引用状态变化进行记录这个角度来看,就是吸收了引用计数回收的思路。 

何清龙 2014-01-17 20:17 发表评论

Quotes to live by

$
0
0
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. - (Martin Golding)

There are two ways to write error-free programs; only the third one works. - (Alan J. Perlis) 

A good programmer is someone who always looks both ways before crossing a one-way street. - (Doug Linder)

It should be noted that no ethically -trained software engineer would ever consent to write a DestroyBaghdad procedure. Basic professional ethics would instead require him to write a DestroyCity procedure, to which Baghdad could be given as a parameter.  ― Nathaniel S. Borenstein

You've baked a really lovely cake, but then you've used dog sh*t for frosting. ― Steve Jobs

http://www.codeproject.com/Messages/4739776/Quotes-to-live-by.aspx


brent 2014-01-17 20:43 发表评论

Aquapolis.v1.0.Spanish-RAiN\

$
0
0
 110\
AI.Roboform.Enterprise.v7.0.4.0.BETA.READ.NFO-TE\
Ancient.Rome.v1.0.Cracked-F4CG\
Applied.Flow.Technology.ChemPak.Add-in.for.Excel.v2010.01.28.Cracked-EAT\
Applied.Flow.Technology.ChemPak.Viewer.v2.0.2010.01.28.Cracked-EAT\
Aquapolis.v1.0.Spanish-RAiN\
AutoDalle.v5.0.1.Multilingual.Regged-DJiNN\
Awakening.The.Dreamless.Castle.v1.0.Strategy.Guide-HERiTAGE\
EduIQ.Advanced.eLearning.Builder.v3.6.15 
Egglomania.v1.0.8.WinAll.Cracked.GAME-CRD\
El.Mundo.05.02.2010.Spanish.Retail.Ebook-PDFWriters\
El.Mundo.06.02.2010.Spanish.Retail.Ebook-PDFWriters\
El.Mundo.10.02.2010.Spanish.Retail.Ebook-PDFWriters\
El.Pais.05.Febrero.2010.Spanish.Retail.eBook-FMR\
El.Pais.English.Edition.February.05.2010.Retail.eBook-FMR\
El.Pais.EP3.05.Febrero.2010.Spanish.Retail.eBook-FMR\
Geneious.Pro.v4.8.4.Incl.Keygen.and.Patch-iNViSiBLE\
Geneious.Pro.v4.8.4.x64.Incl.Keygen.and.Patch-iNViSiBLE\
Grand.Theft.Auto.Chinatown.Wars.v1.0.1.iPhone.iPod.Touch-iPWNPDA\
Guess.Who.s.not.around.v6.5-HI\
Guillaume.Campagna.Mtl.Mobile.v1.4.iPhone.iPod.Touch-Lz0PDA\
Hastasoft.MeinAusgabenbuch.v1.22.German.incl.Keygen.WinAll-LAXiTY\
Hastasoft.TimOnize.Enterprise.v6.27.German.incl.Keygen.WinAll-LAXiTY\
Hi_World_REVIVAL_PROPERED-CLS\
Hifi.Choice.Magazine.March.2010.Retail.Ebook-ATTiCA\
Home.Theater.Magazine.March.2010.Retail.Ebook-ATTiCA\
Hyperspaces.v1.0.5.MacOSX.Incl.Keymaker 
Invoice.v3.0.9.MacOSX.Incl.Keymaker 
Jetico.BestCrypt.Volume.Encryption.v2.14.03.WinAll.Incl.Keyfilemaker.and.Patch-CRD\
Johannes.Wallroth.Multi-Timer.Ultimate.v2.43.Incl.Keygen 
KIDASA.Software.Milestones.Professional.2008.v2010.01.20.Cracked-EAT\
Latshaw.Systems.Karma.v2010.1.28.0 
Le.Monde.05.Fevrier.2010.French.Retail.eBook-FMR\
Le.Monde.des.Livres.05.Fevrier.2010.French.Retail.eBook-FMR\
Legenden.des.wilden.Westens.Der.goldene.Berg.v1.0.0.11.German-HERiTAGE\
MacPaw.MacHider.v1.5.0.MacOSX.Incl.Keymaker 
Magic.Maze.v1.0.Cracked-F4CG\
Mannheimer.Morgen.2010.02.08.German.RETAiL.COMPLETE.eBOOk-NEWSPAPER\
Max.and.the.Magic.Marker.RIP-Unleashed\
MemoCARD.v4.4.24.German.WinAll-LAXiTY\
Molegro.Virtual.Docker.v4.0.2.Incl.Keygen-iNViSiBLE\
Molegro.Virtual.Docker.v4.0.2.Linux.Incl.Keygen-iNViSiBLE\
Molegro.Virtual.Docker.v4.0.2.Linux.x64.Incl.Keygen-iNViSiBLE\
Molegro.Virtual.Docker.v4.0.2.MacOSX.Intel.Incl.Keygen-iNViSiBLE\
Molegro.Virtual.Docker.v4.0.2.MacOSX.PPC.Incl.Keygen-iNViSiBLE\
Natalie.Brooks.3.German-ALiAS\
Neoretix.Tube.Hunter.Ultra.v4.2.2875.0-ACME\
NETGATE.Registry.Cleaner.v1.0.305.WinAll.Incl.Keygen-CRD\
Nico.Cuppen.Digital.Postman.Pro.v2.14.Cracked-DJiNN\
Nico.Cuppen.Mail.Attachment.Remover.v1.07.Cracked-DJiNN\
Nico.Cuppen.Network.traffic.monitor.v2.01.Cracked-DJiNN\
Nico.Cuppen.Nico.s.Backup.v2.0.Cracked-DJiNN\
Nico.Cuppen.Nico.s.Commander.v5.63.Cracked-DJiNN\
Nico.Cuppen.Nico.s.Mailer.v1.14.Cracked-DJiNN\
Nico.Cuppen.Photocopier.Pro.v3.10.Cracked-DJiNN\
Nico.Cuppen.Scan2PDF.v2.03.Cracked-DJiNN\
Nico.Cuppen.Scanned.Document.Distributor.v1.11.Cracked-DJiNN\
Nightfall.Mysteries.Curse.of.the.Opera.v1.0.0.0-TE\
Nikos.Bozinis.xplorer2.Pro.v1.8.0.1.Multilingual.Incl.Keymaker-ZWT\
Nikos.Bozinis.xplorer2.Pro.v1.8.0.1.Multilingual.x64.Incl.Keymaker-ZWT\
Numerati.v1.0.7.WinAll.Cracked.GAME-CRD\
Odin.Screen.Capture.v2.2.WinALL.Cracked-YPOGEiOS\
Oggisoft.BackupList.v2010.1.134.German.WinALL.Incl.Keygen-BLiZZARD\
Oggisoft.Benzinkosten.v2010.1.91.German.WinALL.Incl.Keygen-BLiZZARD\
Oggisoft.Energiekosten.v2010.1.87.German.WinALL.Incl.Keygen-BLiZZARD\
Oggisoft.Notizen-Manager.v2010.1.332.German.WinALL.Incl.Keygen-BLiZZARD\
Oggisoft.Passwort-Generator.v2010.1.101.German.WinALL.Incl.Keygen-BLiZZARD\
OO.DiskImage.Professional.Edition.v5.0.127.German.Incl.Keymaker-ZWT\
OO.DiskImage.Professional.Edition.v5.0.127.German.x64.Incl.Keymaker-ZWT\
OO.DiskImage.Professional.Edition.v5.0.127.Incl.Keymaker-ZWT\
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■
*****************************************************************
好得行业软件网提供各个行业专业软件,所有软件均为完整版本,模块齐全,详细请咨询
TEL:13978229035               QQ:508925688 
Email: ywcwsoft@sohu.com     ywcwsoft@sina.com      ywcwsoft@126.com
好得行业软件网 www.haodesoft.com
点击咨询:http://haodesoft.53kf.com
请使用Ctrl+F 键来查询您所需软件,找到后联系我们QQ或是邮件,我们会第一时间为您回复
■□■□■□■□本廣告長期有效■□■□■□■□■□■□■□■□■□■□■□■□
OO.DiskImage.Professional.Edition.v5.0.127.x64.Incl.Keymaker-ZWT\
OO.DiskImage.Server.Edition.v5.0.127.German.Incl.Keymaker-ZWT\
OO.DiskImage.Server.Edition.v5.0.127.German.x64.Incl.Keymaker.REPACK-ZWT\
OO.DiskImage.Server.Edition.v5.0.127.German.x64.Incl.Keymaker-ZWT\
OO.DiskImage.Server.Edition.v5.0.127.Incl.Keymaker-ZWT\
OO.DiskImage.Server.Edition.v5.0.127.x64.Incl.Keymaker-ZWT\
OO.DiskImage.Workstation.Edition.v5.0.127.German.Incl.Keymaker-ZWT\
OO.DiskImage.Workstation.Edition.v5.0.127.German.x64.Incl.Keymaker.REPACK-ZWT\
OO.DiskImage.Workstation.Edition.v5.0.127.German.x64.Incl.Keymaker-ZWT\
OO.DiskImage.Workstation.Edition.v5.0.127.Incl.Keymaker-ZWT\
OO.DiskImage.Workstation.Edition.v5.0.127.x64.Incl.Keymaker-ZWT\
OO.Software.Enterprise.Management.Console.v3.2.35.Incl.Keygen-MESMERiZE\
OPTIsend.Print.v2.7.26.Incl.Keymaker 
Oxford.Press.-.The.Idea.of.the.Library.in.the.Ancient.World.Edition.2010.Retail.Ebook-ATTiCA\
PackRat.v1.7.7.MacOSX.Incl.Keymaker 
Pac-Man.Championship.Edition.v1.0.3.iPhone.iPod.Touch-iPWNPDA\
Pearl.Mountain.Soft.Picture.Collage.Maker.Pro.v2.1.7.2713.WinAll.Incl.Keygen-CRD\
PGWare.Game.Boost.v1.2.8.2010.Incl.Keymaker.And.Patch-ROGUE\
PGWare.Game.Gain.v2.2.8.2010.Incl.Keymaker.And.Patch-ROGUE\
PGWare.PC.Medik.v6.2.8.2010.Incl.KeyMaker.And.Patch-ROGUE\
PHP.Designer.v7.1.0.31.WinAll.Incl.Keygen-CRD\
PodWorks.v2.9.6.MacOSX.Incl.Keymaker 
Pointwise.v16.02R4.WIN32 
Random.Factor.Mahjong.v1.2.9.WinAll.Cracked.GAME-CRD\
RC.Cars.Magazine.April.2010.Retail.Ebook-ATTiCA\
Readersplanet.-.Perry.Rhodan.2529.Der.Weg.des.Vatrox.Edition.Januar.2010.German.Retail.Ebook-ATTiCA\
Reisekostenabrechnung.v3.4.12.1167.German.WinAll-LAXiTY\
Routledge.-.Black.Masculinity.and.Sexual.Politics.Edition.2009.Retail.Ebook-ATTiCA\
Routledge.-.Class.in.Education.Edition.2009.Retail.Ebook-ATTiCA\
S.K.Software.MyLanViewer.v3.5.1.Cracked-ARN\
Scooter.Software.Beyond.Compare.v3.1.10.11626.Linux.Incl.Keymaker.and.Patch-ZWT\
Screeny.v3.0.8.SE.Bilingual-PH\
Softgroup.Components.NET.Forms.Resize.v4.0.3675.Incl.Keygen 
Softwarenetz.Addresses.2.v2.15.Multilingual.Cracked-EAT\
Softwarenetz.Calendar.2.v2.17.Multilingual.Cracked-EAT\
Softwarenetz.Cash.Book.v2.27.Multilingual.Cracked-EAT\
Softwarenetz.Receipt.v2.04.Multilingual.Cracked-EAT\
Softwarenetz.Time.Registration.v1.08.Multilingual.Cracked-EAT\
Springer.-.Electromagnetic.Field.Theory.for.Engineers.and.Physicists.Edition.2010.Retail.Ebook-ATTiCA\
Stack.n.Splash.v1.2.5.WinAll.Cracked.GAME-CRD\
Steve.Foxover.Software.Read.To.Me.v1.3.Incl.Keygen-NGEN\
STOIK.PanoramaMaker.v2.1.0.1761.Incl.KeyMaker-DVT\
Tagtraum.Industries.BeaTunes.v2.1.3.Incl.Keygen.MACOSX 
Tagtraum.Industries.BeaTunes.v2.1.3.Incl.Keygen 
Temp.v1-TESTING\
The.Australian.2010.02.10.Retail.Ebook-PDFWriters\


应用软件 2014-01-18 09:51 发表评论

HTTP错误分析

$
0
0
    switch( dwRetcode )
    {
    case 100:
        m_StrError = TEXT("客户方错误-继续 [Continue]");
        break;
        //
    case 101:
        m_StrError = TEXT("客户方错误-交换协议 [witching Protocols]");
        break;
        //
    case 204:
        m_StrError = TEXT("网页内容为空 [No Content]");
        break;
        //------------------------------------------------------------
    case 400:
        m_StrError = TEXT("错误请求 [Bad Request]");
        break;
        //
    case 401:
        m_StrError = TEXT("网页需要验证信息 [Unauthorized]");
        break;
        //
    case 402:
        m_StrError = TEXT("网页需要付费 [Payment Required]");
        break;
        //
    case 403:
        m_StrError = TEXT("禁止访问 [Forbidden]");
        break;
        //
    case 404://
        m_StrError = TEXT("没有找到网页 [Not Found]");
        break;
        //
    case 405:
        m_StrError = TEXT("不允许Http访问该文件 [Method Not Allowed]");
        break;
        //
    case 406:
        m_StrError = TEXT("该文件不允许访问 [Not Acceptable]");
        break;
        //
    case 407:
        m_StrError = TEXT("该文件需要代理认证 [Proxy Authentication Required]");
        break;
        //
    case 408:
        m_StrError = TEXT("对该文件请求超时 [Request Time-out]");
        break;
        //
    case 409:
        m_StrError = TEXT("对该文件访问冲突 [Conflict]");
        break;
        //
    case 410:
        m_StrError = TEXT("对该文件访问失败 [Gone]");
        break;
        //
    case 411:
        m_StrError = TEXT("该文件需要长度信息 [Length Required]");
        break;
        //
    case 412:
        m_StrError = TEXT("请求条件失败 [Precondition Failed]");
        break;
        //
    case 413:
        m_StrError = TEXT("请求文件实体太大 [Request Entity Too Large]");
        break;
        //
    case 414:
        m_StrError = TEXT("请求的URI太长 [Request-URI Too Large]");
        break;
        //
    case 415:
        m_StrError = TEXT("不支持媒体类型 [Unsupported Media Type]");
        break;
        //
    case 416:
        m_StrError = TEXT("队列请求失败 [Requested range not satisfiable]");
        break;
        //
    case 417:
        m_StrError = TEXT("预期失败 [Expectation Failed]");
        break;
        //--------------------------------------------------------------
    case 500:
        m_StrError = TEXT("服务器内部错误 [Internal Server Error]");
        break;
        //
    case 501:
        m_StrError = TEXT("未实现请求 [Not Implemented]");
        break;
        //
    case 502:
        m_StrError = TEXT("网关失败 [Bad Gateway]");
        break;
        //
    case 503:
        m_StrError = TEXT("没有找到服务器 [Service Unavailable]");
        break;
        //
    case 504:
        m_StrError = TEXT("网关超时 [Gateway Time-out]");
        break;
        //
    case 505:
        m_StrError = TEXT("服务器不支持系统使用的HTTP版本 [HTTP Version not supported]");
        break;
        //
    }


bukebushuo 2014-01-18 11:29 发表评论

自建log4cxx.sln

$
0
0

log4cxx的下载包是0.10版本的,代码较旧,有些错误,应该从主干下载最新的代码.

0.10的下载包中有projects目录,内有VC6的工程文件; 还有site目录,内有vc构建的帮助文档vstudio.html.

VC构建步骤如下:

unzip apr-1.2.11-win32-src.zip
rename apr-1.2.11 apr
unzip apr-util-1.2.10-win32-src.zip
rename apr-util-1.2.10 apr-util
cd apache-log4cxx-0.10.0
configure.bat
configure-aprutil.bat


VC2010的Express版升级VC6的工程文件失败,可以自行创建log4cxx.sln.

apr的工程文件也是VC6的, 但有个Makefile.win可以用.

下载 log4cxx_trunk, apr-1.5, apr-util-1.5, apr-icon v_1.x, 解压,重命名, 放在同一个目录下,如

log4xx/trunk

log4cxx/apr

log4cxx/apr-util

log4xx/apr-iconv

log4cxx没有用到apr-iconv, 但apr-util的构建须同时构建apr-iconv.

运行configure.bat, configure-aprutil.bat.  其中是文件复制和配置更改, 可打开bat查看.

打开VC-Dos窗口,进入log4cxx/apr-util. 执行:

nmake -f Makefile.win

如果还需要Debug版本, 可再运行

nmake -f Makefile.win ARCH="Win32 Debug"

apr-util构建会同时构建apr. 生成的静态库位于 libD, libR.


VC新建一个Dll工程log4cxx, 添加文件log4cxx\trunk\src\main\cpp\*.cpp.

参考 log4cxx.dsp 设置一些参数:


# ADD BASE CPP /c /nologo /EHsc  /O2  /D "NDEBUG" /MD /D "_USRDLL" /D "DLL_EXPORTS" /D "LOG4CXX" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /D "WIN32"  # ADD CPP /I "..\src\main\include" /I "..\..\apr\include" /I "..\..\apr-util\include" /c /nologo /EHsc  /O2  /D "NDEBUG" /MD /D "_USRDLL" /D "DLL_EXPORTS" /D "LOG4CXX" /D "APR_DECLARE_STATIC" /D "APU_DECLARE_STATIC" /D "WIN32"  # ADD LINK32 ADVAPI32.LIB WS2_32.LIB MSWSOCK.LIB SHELL32.LIB ODBC32.LIB /NOLOGO /DLL /SUBSYSTEM:CONSOLE /INCREMENTAL:NO  


其中包括:

宏定义:"DLL_EXPORTS", "LOG4CXX", "APR_DECLARE_STATIC", "APU_DECLARE_STATIC"

apr的include, lib目录.

库: WS2_32.LIB MSWSOCK.LIB apr-1.lib aprutil-1.lib





金庆 2014-01-18 16:26 发表评论

C++ 运算符优先级列表

$
0
0
     摘要: 介绍     运算符是告诉编译程序执行特定算术或逻辑操作的符号。C语言的运算范围很宽,把除了控制语句和输入输出以外的几乎所有的基本操作都作为运算符处理。主要分为三大类:算术运算符、 关系运算符与逻辑运算符。除此之外,还有一些用于完成特殊任务的运算符。 运算符的优先级与结合性     优先级:C语言中,运算...  阅读全文

杨粼波 2014-01-18 21:46 发表评论

跟vczh看实例学编译原理——零:序言

$
0
0

在《如何设计一门语言》里面,我讲了一些语言方面的东西,还有痛快的喷了一些XX粉什么的。不过单纯讲这个也是很无聊的,所以我开了这个《跟vczh看实例学编译原理》系列,意在科普一些编译原理的知识,尽量让大家可以在创造语言之后,自己写一个原型。在这里我拿我创造的一门很有趣的语言 https://github.com/vczh/tinymoe/ 作为实例。

 

商业编译器对功能和质量的要求都是很高的,里面大量的东西其实都跟编译原理没关系。一个典型的编译原理的原型有什么特征呢?

  1. 性能低
  2. 错误信息难看
  3. 没有检查所有情况就生成代码
  4. 优化做得烂
  5. 几乎没有编译选项

 

等等。Tinymoe就满足了上面的5种情况,因为我的目标也只是想做一个原型,向大家介绍编译原理的基础知识。当然,我对语法的设计还是尽量靠近工业质量的,只是实现没有花太多心思。

 

为什么我要用Tinymoe来作为实例呢?因为Tinymoe是少有的一种用起来简单,而且库可以有多复杂写多复杂的语言,就跟C++一样。C++11额标准库在一起用简直是愉快啊,Tinymoe的代码也是这么写的。但是这并不妨碍你可以在写C++库的时候发挥你的想象力。Tinymoe也是一样的。为什么呢,我来举个例子。

 

Hello, world!

Tinymoe的hello world程序是很简单的:

 

module hello world

using standard library

 

sentence print (message)

    redirect to "printf"

end

 

phrase main

    print "Hello, world!"

end

 

module指的是模块的名字,普通的程序也是一个模块。using指的是你要引用的模块——standard library就是Tinymoe的STL了——当然这个程序并没有用到任何standard library的东西。说到这里大家可能意识到了,Tinymoe的名字可以是不定长的token组成的!没错,后面大家会慢慢意识到这种做法有多么的强大。

 

后面是print函数和main函数。Tinymoe是严格区分语句和表达式的,只有sentence和block开头的函数才能作为语句,而且同时只有phrase开头的函数才能作为表达式。所以下面的程序是不合法的:

 

phrase main

    (print "Hello, world!") + 1

end

 

原因就是,print是sentence,不能作为表达式使用,因此他不能被+1。

 

Tinymoe的函数参数都被写在括号里面,一个参数需要一个括号。到了这里大家可能会觉得很奇怪,不过很快就会有解答了。为什么要这么做,下一个例子就会告诉我们。

 

print函数用的redirect to是Tinymoe声明FFI(Foreign Function Interface)的方法,也就是说,当你运行了print,他就会去host里面找一个叫做printf的函数来运行。不过大家不要误会,Tinymoe并没有被设计成可以直接调用C函数,所以这个名字其实是随便写的,只要host提供了一个叫做printf的函数完成printf该做的事情就行了。main函数就不用解释了,很直白。

1加到100等于5050

这个例子可以在Tinymoe的主页(https://github.com/vczh/tinymoe/)上面看到:

 

module hello world

using standard library

 

sentence print (message)

redirect to "printf"

end

 

phrase sum from (start) to (end)

set the result to 0

repeat with the current number from start to end

add the current number to the result

end

end

 

phrase main

print "1+ ... +100 = " & sum from 1 to 100

end

 

为什么名字可以是多个token?为什么每一个参数都要一个括号?看加粗的部分就知道了!正是因为Tinymoe想让每一行代码都可以被念出来,所以才这么设计的。当然,大家肯定都知道怎么算start + (start+1) + … + (end-1) + end了,所以应该很容易就可以看懂这个函数里面的代码具体是什么意思。

 

在这里可以稍微多做一下解释。the result是一个预定义的变量,代表函数的返回值。只要你往the result里面写东西,只要函数一结束,他就变成函数的返回值了。Tinymoe的括号没有什么特殊意思,就是改变优先级,所以那一句循环则可以通过添加括号的方法写成这样:

 

repeat with (the current number) from (start) to (end)

 

大家可能会想,repeat with是不是关键字?当然不是!repeat with是standard library里面定义的一个block函数。大家知道block函数的意思了吧,就是这个函数可以带一个block。block有一些特性可以让你写出类似try-catch那样的几个block连在一起的大block,特别适合写库。

 

到了这里大家心中可能会有疑问,循环为什么可以做成库呢?还有更加令人震惊的是,break和continue也不是关键字,是sentence!因为repeat with是有代码的:

 

category

    start REPEAT

    closable

block (sentence deal with (item)) repeat with (argument item) from (lower bound) to (upper bound)

    set the current number to lower bound

    repeat while the current number <= upper bound

        deal with the current number

        add 1 to the current number

    end

end

 

前面的category是用来定义一些block的顺序和包围结构什么的。repeat with是属于REPEAT的,而break和continue声明了自己只能直接或者间接方在REPEAT里面,因此如果你在一个没有循环的地方调用break或者continue,编译器就会报错了。这是一个花边功能,用来防止手误的。

 

大家可能会注意到一个新东西:(argument item)。argument的意思指的是,后面的item是block里面的代码的一个参数,对于repeat with函数本身他不是一个参数。这就通过一个很自然的方法给block添加参数了。如果你用ruby的话就得写成这个悲催的样子:

 

repeat_with(1, 10) do |item|

    xxxx

end

 

而用C++写起来就更悲催了:

 

repeat_with(1, 10, [](int item)

{

    xxxx

});

 

block的第一个参数sentence deal with (item)就是一个引用了block中间的代码的委托。所以你会看到代码里面会调用它。

 

好了,那repeat while总是关键字了吧——不是!后面大家还会知道,就连

 

if xxx

    yyy

else if zzz

    www

else if aaa

    bbb

else

    ccc

end

 

也只是你调用了if、else if和else的一系列函数然后让他们串起来而已。

 

那Tinymoe到底提供了什么基础设施呢?其实只有select-case和递归。用这两个东西,加上内置的数组,就图灵完备了。图灵完备就是这么容易啊。

 

多重分派(Multiple Dispatch)

讲到这里,我不得不说,Tinymoe也可以写类,也可以继承,不过他跟传统的语言不一样的,类是没有构造函数、析构函数和其他成员函数的。Tinymoe所有的函数都是全局函数,但是你可以使用多重分派来"挑选"类型。这就需要第三个例子了(也可以在主页上找到):

 

module geometry

using standard library

 

phrase square root of (number)

    redirect to "Sqrt"

end

 

sentence print (message)

    redirect to "Print"

end

 

type rectangle

    width

    height

end

 

type triangle

    a

    b

    c

end

 

type circle

    radius

end

 

phrase area of (shape)

    raise "This is not a shape."

end

 

phrase area of (shape : rectangle)

    set the result to field width of shape * field height of shape

end

 

phrase area of (shape : triangle)

    set a to field a of shape

    set b to field b of shape

    set c to field c of shape

    set p to (a + b + c) / 2

    set the result to square root of (p * (p - a) * (p - b) * (p - c))

end

 

phrase area of (shape : circle)

    set r to field radius of shape

    set the result to r * r * 3.14

end

 

phrase (a) and (b) are the same shape

    set the result to false

end

 

phrase (a : rectangle) and (b : rectangle) are the same shape

    set the result to true

end

 

phrase (a : triangle) and (b : triangle) are the same shape

    set the result to true

end

 

phrase (a : circle) and (b : circle) are the same shape

    set the result to true

end

 

phrase main

    set shape one to new triangle of (2, 3, 4)

    set shape two to new rectangle of (1, 2)

    if shape one and shape two are the same shape

        print "This world is mad!"

    else

        print "Triangle and rectangle are not the same shape!"

    end

end

 

这个例子稍微长了一点点,不过大家可以很清楚的看到我是如何定义一个类型、创建他们和访问成员变量的。area of函数可以计算一个平面几何图形的面积,而且会根据你传给他的不同的几何图形而使用不同的公式。当所有的类型判断都失败的时候,就会掉进那个没有任何类型声明的函数,从而引发一场。嗯,其实try/catch/finally/raise都是函数来的——Tinymoe对控制流的控制就是如此强大,啊哈哈哈哈。就连return都可以自己做,所以Tinymoe也不提供预定义的return。

 

那phrase (a) and (b) are the same shape怎么办呢?没问题,Tinymoe可以同时指定多个参数的类型。而且Tinymoe的实现具有跟C++虚函数一样的性质——无论你有多少个参数标记了类型,我都可以O(n)跳转到一个你需要的函数。这里的n指的是标记了类型的参数的个数,而不是函数实例的个数,所以跟C++的情况是一样的——因为this只能有一个,所以就是O(1)。至于Tinymoe到底是怎么实现的,只需要看《如何设计一门语言》第五篇(http://www.cppblog.com/vczh/archive/2013/05/25/200580.html)就有答案了。

Continuation Passing Style

为什么Tinymoe的控制流都可以自己做呢?因为Tinymoe的函数都是写成了CPS这种风格的。其实CPS大家都很熟悉,当你用jquery做动画,用node.js做IO的时候,那些嵌套的一个一个的lambda表达式,就有点CPS的味道。不过在这里我们并没有看到嵌套的lambda,这是因为Tinymoe提供的语法,让Tinymoe的编译器可以把同一个层次的代码,转成嵌套的lambda那样的代码。这个过程就叫CPS变换。Tinymoe虽然用了很多函数式编程的手段,但是他并不是一门函数是语言,只是一门普通的过程式语言。但是这跟C语言不一样,因为它连C#的yield return都可以写成函数!这个例子就更长了,大家可以到Tinymoe的主页上看。我这里只贴一小段代码:

 

module enumerable

using standard library

 

symbol yielding return

symbol yielding break

 

type enumerable collection

    body

end

 

type collection enumerator

    current yielding result

    body

    continuation

end

 

略(这里实现了跟enumerable相关的函数,包括yield return)

 

block (sentence deal with (item)) repeat with (argument item) in (items : enumerable collection)

    set enumerator to new enumerator from items

    repeat

        move enumerator to the next

        deal with current value of enumerator

    end

end

 

sentence print (message)

    redirect to "Print"

end

 

phrase main

    create enumerable to numbers

        repeat with i from 1 to 10

            print "Enumerating " & i

            yield return i

        end

    end

 

    repeat with number in numbers

        if number >= 5

            break

        end

        print "Printing " & number

    end

end

 

什么叫模拟C#的yield return呢?就是连惰性计算也一起模拟!在main函数的第一部分,我创建了一个enumerable(iterator),包含1到10十个数字,而且每产生一个数字还会打印出一句话。但是接下来我在循环里面只取前5个,打印前4个,因此执行结果就是

当!

 

CPS风格的函数的威力在于,每一个函数都可以控制他如何执行函数结束之后写在后面的代码。也就是说,你可以根据你的需要,干脆选择保护现场,然后以后再回复。是不是听起来很像lua的coroutine呢?在Tinymoe,coroutine也可以自己做!

 

虽然函数最后被转换成了CPS风格的ast,而且测试用的生成C#代码的确也是原封不动的输出了出来,所以运行这个程序耗费了大量的函数调用。但这并不意味着Tinymoe的虚拟机也要这么做。大家要记住,一个语言也好,类库也好,给你的接口的概念,跟实现的概念,有可能完全不同。yield return写出来的确要花费点心思,所以《序言》我也不讲这么多了,后续的文章会详细介绍这方面的知识,当然了,还会告诉你怎么实现的。

 

尾声

这里我挑选了四个例子来展示Tinymoe最重要的一些概念。一门语言,要应用用起来简单,库写起来可以发挥想象力,才是有前途的。yield return例子里面的main函数一样,用的时候多清爽,清爽到让你完全忘记yield return实现的时候里面的各种麻烦的细节。

 

所以为什么我要挑选Tinymoe作为实例来科普编译原理呢?有两个原因。第一个原因是,想要实现Tinymoe,需要大量的知识。所以既然这个系列想让大家能够看完实现一个Tinymoe的低质量原型,当然会讲很多知识的。第二个原因是,我想通过这个例子向大家将一个道理,就是库和应用 、编译器和语法、实现和接口,完全可以做到隔离复杂,只留给最终用户简单的部分。你看到的复杂的接口,并不意味着他的实现是臃肿的。你看到的简单的接口,也不意味着他的实现就很简洁

 

Tinymoe目前已经可以输出C#代码来执行了。后面我还会给Tinymoe加上静态分析和类型推导。对于这类语言做静态分析和类型推导又很多麻烦,我现在还没有完全搞明白。譬如说这种可以自己控制continuation的函数要怎么编译成状态机才能避免掉大量的函数调用,就不是一个容易的问题。所以在系列一边做的时候,我还会一边研究这个事情。如果到时候系列把编译部分写完的同时,这些问题我也搞明白的话,那我就会让这个系列扩展到包含静态分析和类型推导,继续往下讲。



陈梓瀚(vczh) 2014-01-19 01:21 发表评论

OpenCascade Tcl vs. ACIS Scheme

$
0
0

OpenCascade Tcl vs. ACIS Scheme

eryar@163.com

摘要Abstract:本文通过OpenCascade的Tcl/Tk和ACIS的Scheme的对比来说明脚本语言在程序中的重要作用。及通过在Tcl中实现自定义的命令来理解Draw Test Harness的实现,在此基础上更有利于对OpenCascade的理解,其中Draw Test Harness一些命令的实现可以做为程序实现的参考。

关键字Key Words:OpenCascade, Tcl/Tk, ACIS, Scheme, Test

一、引言 Introduction

解释型的语言为程序开发提供了快速原型方法,由于是解释型的程序开发语言,所以用它编写的程序不需要编译和链接就可以在解释器中直接运行,用这种方式可以快速验证一些想法,用来测试程序等。

解释型的脚本开发语言有很多,流行的有Python、Tcl/Tk、Perl、Lua、LISP、Javascript等等。在应用程序中嵌入这些脚本语言,方便程序的扩展,用户可以根据需要对程序进行定制。像应力分析软件Abaqus中就使用了Python对其进行二次开发;绘图软件AutoCAD中可使用AutoLISP对其进行二次开发;造船软件KCS Tribon中也使用了Python;AVEVA Marine/Plant中使用了PML;许多游戏程序中使用了Lua等等。程序有了脚本这个二次开发的强有力工具,软件开发者只需要关注核心领域,其它各种客户化的需求,可以通过这些脚本来实现,既能满足用户花样繁多的需求,也可确保程序质量。

ACIS对Scheme的扩展为Scheme解释器提供了调用ACIS内部函数和访问ACIS内部数据的功能,其中,每个Scheme函数都调用相应的ACIS C++函数。开发者可以利用Scheme来熟悉ACIS的基本功能、测试某些思想或者产生应用程序原型。Scheme语言的初学者可以通过它来熟悉和掌握ACIS的Scheme程序开发方法。

OpenCascade中使用Tcl/Tk来实现的Draw Test Harness提供了交互创建、显示和修改形状的功能。可以编写Tcl的脚本来自定义Draw或者实现程序的自动化测试。

本文通过OpenCascade的Tcl/Tk和ACIS的Scheme的对比来说明脚本在程序中的重要作用。及通过在Tcl中实现自定义的命令来理解Draw Test Harness的实现,在此基础上更有利于对OpenCascade的理解,其中一些命令的实现代码可以做为程序实现的参考。

二、ACIS Scheme

ACIS中的Scheme接口是一些函数的集合,基于Scheme的应用程序可以通过这些函数调用ACIS的API、类的公共成员函数及访问ACIS的数据。ACIS系统中含有一个Scheme解释器,Scheme应用程序就在这个解释器上运行,所以该解释器负责Scheme应用程序与ACIS系统之间的通信。ACIS中的Scheme解释器是按Elk版的Scheme语言规则设计的,它被用来解释Scheme命令并调用相关的C++代码。

wps_clip_image-23561

Figure 2.1 Scheme and ACIS

Scheme的多功能性来自解释器语言的可扩展能力。应用程序开发者可以快速地将Scheme语言用于自己的开发任务,他们可以用C++扩展Scheme,然后就可以利用这些扩展写可解释执行的Scheme过程。开发者也可以构造特殊的Scheme数据类型和相应的操作方法,Scheme应用程序和C++函数可以使用这些自定义的Scheme数据类型。

wps_clip_image-2462

Figure 2.2 ACIS Scheme pipeline

与C++相比Scheme是一种快速程序设计语言。尽管C++语言有很多优点,但是也不得承认它的复杂性,例如要用C++开发ACIS应用程序,需要包含所需的组件头文件并在程序中初始化这些组件,除此之外还要进行复杂的程序调试,所以使用C++开发应用程序的速度就受到较大影响。与其相反,Scheme可以进行交互式程序开发,一段程序或一个命令的执行结果会及时反映出来,正是这种机制使我们可以利用Scheme语言进行快速的程序开发。虽然Scheme不能替代C++成为主要的软件开发工具,但是在开发一个软件系统之前可以利用它进行算法的测试。

Scheme语言与C++语言相比有三个特点:没有指针、不需要头文件及可进行交互式程序设计,程序员可以在解释器中立即执行这些程序,从这个特点来看Scheme更像Basic和Prolog等程序设计语言。

在ACIS中使用Scheme来生成一个立方体的命令如下所示:

acis>(solid:block(position -10-10-10) (position 101010)) 
# [entity 
1 0

上述命令生成一个正方体,总共调用两个ACIS Scheme过程position和solid:block,#[entity 1 0]是该正方体的默认名称。

wps_clip_image-7598

Figure 2.3 The block made by ACIS Scheme

三、OpenCascade Tcl

Tcl是一种用于控制和扩展应用程序的动态语言,也称为脚本语言。它的名字代表“工具命令语言”Tool Command Language。Tcl提供的通用编程能力可以满足大多数应用程序的需要。而且Tcl既是可嵌入的(embeded),也是可扩展的(extensible)。它的解释器是一个C函数库,可以很容易地整合到应用程序中;而任何一个应用程序都可以通过增加命令来扩展Tcl内核的功能。Tcl最有用的一个扩展就是Tk,这是一个用于开发图形用户界面(Graphical User Interface, GUI)应用程序的工具集。Tk扩展了Tcl内核的功能,增加了构建用户界面的命令,使您可以使用Tcl脚本来构建图形用户界面,而不必写C代码。

Tcl/Tk一起为应用程序开发者和使用者提供了很多好处。首先是快速开发。很多有意思的程序完全可以用Tcl脚本编写。这使您可以在比C/C++或Java更高的层次上进行开发,Tk隐藏了C或Java程序员必须关心的很多细节。与低级工具相比,使用Tcl/Tk所需要学习的知识更少,需要编写的代码更少。通过几个小时的学习,Tcl/Tk新手用户就可以创建有意思的用户界面,很多开发人员从其他工具集转而使用Tcl/Tk工具集后,应用程序开发所需的代码数量和开发时间都减少了90%。

Tcl/Tk适于快速开发的另一个原因在于Tcl是解释型语言。使用Tcl应用程序时,可以在运行中生成和使用新的脚本,而无需重新编译和重启程序。这使您可以迅速尝试新的想法,迅速修正程序中的错误。因为Tcl是解释型语言,它的运行速度比C程序慢。但是通过内部优化,与编译语言相比的大部分性能差距都可以消除。例如,您可以运行有数百条Tcl命令的脚本,鼠标的每一次移动都不会有能感知的延迟。在一些特别的场合,当性能成为重要问题时,可以把Tcl脚本中影响性能的部分替换为C代码。

Tcl的第二个好处是在于它是跨平台的语言,它的大多数扩展包括Tk也是如此。这意味着在一个平台(如Linux)上开发的程序,在大多数情况下可以不加改动地在另一个平台上运行,如在Macintosh或Windows上运行。

Tcl还是第一种拥有原生Unicode支持的动态语言。因此,Tcl可以处理这个世界上几乎所有的书面语言。Tcl无需扩展就可以处理Unicode支持的所有文本。

使用Tcl的另一个显著优点在于它和它的大多数扩展都是免费的开源软件。Tcl和Tk遵循BSD授权,允许所有人免费下载、查看、修改及再发布。

Tcl是一种绝妙的“胶合语言”,可以让应用程序很容易地拥有强大的脚本语言功能。例如,要为一个已经存在的应用程序添加脚本能力,只需要实现几条新的Tcl命令,用来为应用程序提供相应的基本功能。然后再把您的新命令和Tcl库链接起来生成全功能的脚本语言,该语言就包含了Tcl提供的命令(称为Tcl内核)和您编写的那些命令。

Tcl还为用户提供了方便。一旦学习了Tcl/Tk,就能为任何Tcl/Tk应用程序编写脚本,只需要学习该应用程序特有的少数几条命令即可。这使得更多的用户有能力对应用程序进行个性化改造和强化。

在Tcl中实现自定义命令很方便,只需要按Tcl的格式定义一个命令函数。基于对象的命令函数的声明如下:

typedef int (Tcl_ObjCmdProc) _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, int objc, struct Tcl_Obj * CONST * objv)); 

为了能在Tcl中调用一个命令函数,必须先调用Tcl_CreateObjCommand注册它,格式如下所示:

EXTERN Tcl_Command Tcl_CreateObjCommand (Tcl_Interp * interp,  CONST char * cmdName, Tcl_ObjCmdProc * proc, ClientData clientData,  Tcl_CmdDeleteProc * deleteProc); 

这就是把Tcl中的字符串与实现它的C函数关联起来“魔术”。更详细内容请参考:《Create New Commands in Tcl》。下面主要来分析一下Draw Test Harness代码实现:

首先在Draw_PInterp.hxx中将Tcl_Interp定义为*Draw_PInterp,并在类Draw_Interpretor中对Tcl解释器进行了简单封装,在Init时创建一个新的Tcl_Interp,并可管理自定义的命令;

然后,在Draw_Main中来加载Tcl的解析器。程序代码如下所示:

 

// Declarations of macros DRAW_MAIN to be used in executables instead of explicit main/WinMain
#ifndef WNT
// main()
#define DRAW_MAIN int main (Standard_Integer argc, char* argv[])\
{
return _main_ (argc, argv, Draw_InitAppli);}
#else
// WinMain() and main()
#define DRAW_MAIN Standard_Integer PASCAL WinMain (HINSTANCE hInstance, HINSTANCE hPrevinstance, LPSTR lpCmdLine, Standard_Integer nCmdShow)\
{
return _WinMain_ (hInstance, hPrevinstance, lpCmdLine, nCmdShow, Draw_InitAppli);}\
\
int main (int argc, char* argv[], char* envp[])\
{
return _main_ (argc, argv, envp, Draw_InitAppli);}  
#endif

自定义了main函数,实现如下所示:

 

//=======================================================================
//function : _main_
//purpose  : 
//=======================================================================
Standard_Integer _main_ (int argc, char* argv[], char* envp[], const FDraw_InitAppli fDraw_InitAppli)
{
  Draw_IsConsoleSubsystem 
= Standard_True;
  
//return _WinMain_(::GetModuleHandle(NULL), NULL, GetCommandLine(), SW_SHOW, fDraw_InitAppli);
  theDraw_InitAppli = fDraw_InitAppli;
  
//ParseCommandLine(GetCommandLine());

  
// MKV 01.02.05
#if ((TCL_MAJOR_VERSION > 8) || ((TCL_MAJOR_VERSION == 8) && (TCL_MINOR_VERSION >= 4)))
  Tcl_FindExecutable(argv[
0]);
#endif

  Draw_Appli(::GetModuleHandle(NULL), NULL, GetCommandLine(), SW_SHOW, fDraw_InitAppli);
  
return 0;

}

Draw Test Harness中自定义的命令是通过类Draw_Commands来添加的,程序如下所示:

void Draw::Commands(Draw_Interpretor& theCommands)
{
  Draw::BasicCommands(theCommands);
  Draw::VariableCommands(theCommands);
  Draw::GraphicCommands(theCommands);
  Draw::PloadCommands(theCommands);
  Draw::UnitCommands(theCommands);
}

分别对应的定义文件为:

l Draw_BasicCommands.cxx:基本命令;

l Draw_VariableCommands.cxx:变量命令;

l Draw_GraphicCommands.cxx:图形命令;

l Draw_PloadCommands.cxx:加载命令;

l Draw_UnitCommands.cxx:单位命令;

如可以打开Draw_BasicCommands可以看到OpenCascade定义了哪些基本命令,我发现一个查看OpenCascade编译时的配置信息的命令dversion:

wps_clip_image-25219

运行结果如下图所示:

wps_clip_image-19115

Figure 3.1 dversion command in Draw Test Harness

由上图可知编译OpenCascade时的相关配置信息,如版本号、使用了哪些第三方库、编译器类型及版本、系统类型x86/AMD64、操作系统等等。

wps_clip_image-298

Figure 3.2 The OS OpenCascade supported

由上图可知OpenCascade可识别的操作系统涵盖发当今主流的操作系统,如Windows、Mac OS、Android、Linux等。

最后以一个实现光线追踪的脚本来演示一下使用脚本的灵活性,Tcl脚本如下所示:

 

# Script reproducing creation of bottle model as described in OCCT Tutorial
pload MODELING VISUALIZATION
puts 
"Writing \"eryar@163.com\""
box body 
0 0 0 130 20 8
# define text Courier Consolas
text2brep text2d eryar@
163.com Times-Roman 18 bold composite=0
#text2brep text2d eryar@
163.com Consolas 18 bold composite=0
#text2brep text2d eryar@
163.com Courier 18 bold composite=0
prism text text2d 
0 0 2
ttranslate text 
4 5 6

# cut operation
bcut bodytext body text
ttranslate text 
0 20 0

puts 
"Showing result"
# display result
vdisplay bodytext
vdisplay text
vzfit
vfit
vsetdispmode 
1
# set ray tracing
if { [regexp {HAVE_OPENCL} [dversion]] } {
    puts 
"Trying raytrace mode"
    
if { ! [catch {vraytrace 1}] } {
        vtextureenv on 
1
        vfit
    }
}

脚本实现了在一个box上cut掉文本后的光线跟踪效果,如下图所示:

wps_clip_image-6133

Figure 3.3 Ray Tracing Rendering by Tcl

理解了Tcl的作用之后,我认为OpenCascade提供的最快速的的开发方式应该就是全部使用Tcl/Tk来开发程序。利用OpenCascade已经定义好的命令,包括操作ApplicationFramework的自定义命令。在此基础上,使用Tk来实现GUI及用户交互操作,这样开发程序事办功倍,而且还可提供用户二次开发功能,即使用Tcl/Tk来对程序进行二次开发,扩展能力强。

四、结论 Conclusion

造型程序中引入脚本语言的共同优点有:脚本语言是解释执行,不需要编译链接,可以即时验证一些想法。还可使用脚本来执行自动化测试,保证算法质量。便于扩展,提供用户二次开发的工具。

与ACIS的Scheme相比,OpenCascade的Tcl/Tk有着明显的优势。其中最明显的就是源代码开放,可以通过查看源程序,来完全理解脚本的实现。而这在ACIS中是不可能的。

理解如何在Tcl实现自定义的命令后,可以查看OpenCascade在Draw Test Harness中相关程序的实现方法,对学习一些造型算法的使用还是很有帮助的。

五、后记 Postscript

在曹金凤《Python语言在Abaqus中的应用》的序言一中看到这样一段话:“我还想顺便谈一个体会:同50年前有限元方法出现的时代相比,现在有了大量有效的计算力学软件。既然已经有了大家公认的很优秀的分析平台,研究者不应再奋力去开发具有竞争力的新软件了,而应当把精力花在基于这些平台进行二次开发上面了。从科学技术共同体的角度去思考,这应当是如今计算力学软件研发的最佳策略。”——隋允康于北京工业大学。

对于这段话的大部分内容是赞同的,即站在巨人的肩上才能看得更远。但纵观当今力学分析的CAE软件优秀的大都是国外产品,如ANSYS、Abaqus、COADE.CAESAR、MSC/PATRAN、ADINA等等,而国内同类产品鲜有耳闻。原因可能是CAE软件的开发涉及的知识很多,需要计算机图形学、软件工程、力学、数学等等多学科知识的结合,所以开发具有自主知识产权的CAE软件也是国家科技实力的一个表现。若只是在外国人的平台上二次开发,总是会受制于人。也许有些狭隘,如今世界已然是个地球村,科学无国界。

六、参考资料 References

1. Tcl and the Tk Toolkit

2. Practical Programming in Tcl and Tk

3. Tcl/Tk A Developer’s Guide

4. http://sourceforge.net/projects/tcl/

5. http://www.tcl.tk/

6. 詹海生等, 基于ACIS的几何造型技术与系统开发, 清华大学出版社, 2002

7. 曹金凤, 王旭春, 孔亮. Python语言在Abaqus中的应用. 机械工业出版社, 2011

致谢:
    感谢王婷让我接触到ABAQUS这个软件。



eryar 2014-01-19 12:57 发表评论

VC2010工程依赖不再自动链接

$
0
0

发现 VC2010 Express  设置了 Project Dependencies 之后并没有自动链接.

而在VC2008中工程依赖不仅影响构建顺序,也会自动链接依赖项.

具体说明见: 

http://blogs.msdn.com/b/vcblog/archive/2010/02/16/project-settings-changes-with-vs2010.aspx


现在应该使用 References 来设置依赖并自动链接.


但是VC2010Express存在一个错误,BuildAll同时构建Debug,Release版时,链接的都是依赖项的Debug/*.lib.

在Debug配置下,打开工程属性,命令行中显示链接Debug/*.lib, 在该属性对话框上选Configuration: Release, 命令行中仍为链接 Debug/*.lib.

当Configuration Manager对话框中切换配置时,命令行才会相应切换.

所以不能Build All, 只能分别构建Debug, Release.



金庆 2014-01-19 13:15 发表评论

做事与做人

$
0
0
     摘要: 很早就听说了过这样一句话"大公司做人,小公司做事", 一直没有太留意,工作多年之后,现在突然对这句话的深有体会。  阅读全文

Richard Wei 2014-01-19 23:04 发表评论

AuctionX2.v1.1.0.102-EMBER

$
0
0
1st.JavaScript.Editor.Professional.Edition.v5.1-EMBER\
3D.Super.Brick.Breaker.v1.2.2.iPhone.iPod.Touch.Cracked-COREPDA\
A.Crazy.West.Gunman.v1.0.iPhone.iPod.Touch-COREPDA\
Abandoned.v1.11.iPhone.iPod.Touch.Cracked-COREPDA\
Accelrys.Materials.Studio.v5.0.WiN32-oDDiTy\
Accessory.Software.Picture.Organizer.v5.2-BEAN\
AI.War.Fleet.Command.v3.0.0.0.RIP-Unleashed\
Air.Music.Jump.v1.0.iPhone.iPod.Touch.Cracked-COREPDA\
Alchemy.Mindworks.Animation.Workshop.v2.0a27.Incl.Keygen-Lz0\
AllWebMenus.Pro.v5.2.808.Cracked-MESMERiZE\
Aptech.GAUSS.v10.0.0.1276.Cracked-EAT\
Ashampoo.Photo.Commander.6.v6.60.incl.Keygen.WinAll-LAXiTY\
Asia.News.Magazine.2010.01.15.Retail.Ebook-PDFWriters\
Atomix.Virtual.DJ.Pro.v6.0.6.Cracked.READ.NFO-EAT\
AuctionX2.v1.1.0.102-EMBER\
Audio.Convert.Toolbox.v4.1.Regged-CRD\
Audio.Record.Edit.Toolbox.Pro.v11.8.5.Regged-CRD\
Avernum.6.v1.0.2.MacOSX.Incl.Keymaker-CORE\
BildCommanderv2.v10.01.German.WinAll-LAXiTY\
Bionic.Heart-FAS\
BMS.Snap.Schedule.2010.v3.0.1.0-Lz0\
Bub.and.Bob.X.v1.1.1.MacOSX.Incl.Keymaker-CORE\
Ceetron.GLview.Inova.v8.3.11.Incl.Keymaker-NULL\
Ceetron.GLview.Inova.v8.3.11.x64.Incl.Keymaker-NULL\
ChemDoodle.v2.0.5.Linux-iNViSiBLE\
ChemDoodle.v2.0.5.MacOSX-iNViSiBLE\
ChemDoodle.v2.0.5-iNViSiBLE\
Code.Lobster.PHP.Edition.v3.3.2.Incl.Keymaker-EMBRACE\
Collection.Studio.v3.56.Multilingual.WinAll.Incl.Keygen-CRD\
Collectors.Choice-Jaeger.und.Sammler.v1.6.3.727.Bilanguage.WinAll-LAXiTY\
Crazy.Snowboard.v2.5.iPhone.iPod.Touch.Cracked-COREPDA\
CyberLink.PowerDVD.Ultra.v9.0.2320.Multilingual.Incl.Keymaker-CORE\
DoubleTake.v2.2.3.MacOSX.Incl.Keymaker-CORE\
DtSearch.Desktop.v7.64.7861-BEAN\
DtSearch.Engine.v7.64.7861-BEAN\
Easy.MP3.Downloader.v3.3.5.6.Cracked-ErES\
Echoes.of.the.Past.Royal.House.of.Stone.v1.0.1.5954.RIP-EMBER\
Eclipse.Orchestrator.Pro.v3.1.2.Cracked-REDT\
FairStars.Recorder.v3.32.WinAll-LAXiTY\
File.Juicer.v4.19.MacOSX.Incl.Keymaker-CORE\
FloSpace.FloPrompter.Pro.v3.1.0.1-Lz0\
FoED.Getting.StartED.With.Windows.7.Nov.2009.eBook-ELOHiM\
FretPet.X.v1.2.4.MacOSX.Incl.Keymaker-CORE\
FRSLinkCheck.v2.4.0-ACME\
Goodsol.Solitaire.101.v2.0.MacOSX.Incl.Keymaker-CORE\
Hamrick.VueScan.Pro.v8.6.02.Multilingual.Cracked-EAT\
Helium.Music.Manager.v7.0.0.7856.Network.Edition.Multilingual.WinAll.Incl.Keygen-CRD\
Home.Plan.Pro.v5.2.19.3-BEAN\
Hyena.v8.0C.Cracked-ErES\
ITubeX.Ultimate.v6.0.MacOSX.Incl.Keymaker-CORE\
Kaemsoft.Screeny.v2.8.7.German.WinAll-LAXiTY\
Kerio.MailServer.v6.7.3.7919.Linux.Cracked-CRD\
Landwirtschafts.Simulator.Gold.GERMAN-ALiAS\
MaBaSoft.World.Clock.Deluxe.v4.6.8.MacOSX.Incl.Keymaker-CORE\
Malwarebytes.Anti.Malware.v1.44.Multilingual.Incl.Keymaker-CORE\
MovCaptioner.v3.6.MacOSX.Incl.Keymaker-CORE\
NetSarang.XManager.Enterprise.v3.0.0213.Incl.Keymaker-ACME\
Nitro.PDF.Professional.v6.0.2.6.Incl.Keymaker-EMBRACE\
Office.Password.Recovery.Magic.v6.1.1.129-BEAN\
Oggisoft.Notizen-Manager.v2010.1.330.German.WinALL.Incl.Keygen-BLiZZARD\
OnOne.FocalPoint.v2.MACOSX.incl.Keymaker-REDT\
OnOne.Genuine.Fractals.v6.0.Professional.incl.Keymaker-REDT\
OnOne.Genuine.Fractals.v6.0.Professional.MACOSX.incl.Keymaker-REDT\
OnOne.Photo.Essentials.v3.0.incl.Keymaker-REDT\
OnOne.PhotoTools.v2.5.Professional.incl.Keymaker-REDT\
OnOne.PhotoTools.v2.5.Professional.MACOSX.incl.Keymaker-REDT\
OnOne.PhotoTune.v3.0.incl.Keymaker-REDT\
OnOne.PhotoTune.v3.0.MACOSX.incl.Keymaker-REDT\
Otaku.Software.DeskSpace.v1.5.7.1.Retail-TCi\
OverSite.v3.1.6.Incl.Keymaker-CORE\
OverSite.v3.1.6.MacOSX.Incl.Keymaker-CORE\
Penny.Dreadfuls.Sweeney.Todd.Collectors.Edition.v10.01.12.134-TE\
PopStar.v1.7.iPhone.iPod.Touch-COREPDA\
Premier.System.X3.Build.742.Incl.Keygen.Multilanguage-rG\
Program4Pc_DJ_Audio_Editor_v2.4-DIGERATI\
Program4Pc_DJ_Music_Mixer_v4.8-DIGERATI\
Program4Pc_PC_Icon_Editor_v3.5-DIGERATI\
Program4Pc_PC_Icon_Extractor_v4.2-DIGERATI\
QSR.NVivo.v8.0.335.SP4.Incl.Keymaker-EMBRACE\
Rocket.Concentrate.v1.1.3.MacOSX.Incl.Keymaker-CORE\
Routledge.Intelligence.Cooperation.And.The.War.On.Terror.Nov.2009.eBook-ELOHiM\
Routledge.Organizational.Behavior.Aug.2009.eBook-ELOHiM\
Routledge.The.Caucasus.An.Introduction.Nov.2009.eBook-ELOHiM\
ScreenSteps.Pro.v2.7.1.8.Incl.Keymaker-CORE\
ScreenSteps.Pro.v2.7.1.8.MacOSX.Incl.Keymaker-CORE\
Shaman.Odyssey.v1.0.Cracked-F4CG\
STOIK.Imagic.v5.0.4.1664.Incl.KeyMaker-DVT\
Super.Diary.v2.4.Incl.Keygen-CRD\
Super.Flexible.File.Synchronizer.v4.86.MacOSX.Incl.Keymaker-CORE\
SWF.Decompiler.Magic.v5.2.1.1999.Regged-CRD\
ViJournal.v2.3.1.MacOSX.Incl.Keymaker-CORE\
Wizard.Land.v1.0.0.0-TE\
Wouldja.WouldjaDraw.v1.3.MacOSX.Incl.Keymaker-CORE\
PortSight.Secure.Access.v4.1.5048.Enterprise.Edition.WinAll.Incl.Keygen-CRD\
ProfiCAD.v5.6.3-SHOCK\
Quittungsdrucker.Pro.v4.4.0.German.WinAll-LAXiTY\
S.K.Software.MyLanViewer.v3.5.0.Cracked.WORKiNG-ARN\
Schoolhouse.Technologies.Math.Resource.Studio.v4.4.2.1-Lz0\
Sea.Apple.Software.Web.Calendar.Pad.v2010.1.9.Incl.Keymaker-ARN\
Slideshow-Diashow.XL.v10.1.2.Multilanguage.WinAll-LAXiTY\
South.River.Cornerstone.MFT.Server.v8.00.1036.Win2k3XPVistaWin7.Cracked-BLiZZARD\
South.River.DMZedge.Server.v3.10.516.Enterprise.Edition.Win2k3Vista2k8.Cracked-BLiZZARD\
South.River.Titan.FTP.Server.v8.00.1036.Enterprise.Edition.Win2k3XPVistaWin7.Cracked-BLiZZARD\
Sprill.The.Mystery.of.the.Bermuda.Triangle.v1.0.0.6.Polish-RAiN\
StreamingStar.FLV.Recorder.v4.0.0.769.WinAll.Incl.Keygen-CRD\
SVI.Huygens.Suite.v3.5.0p5.Incl.Keygen-TFT\
SVI.Huygens.Suite.v3.5.0p5.Linux.64bit.Incl.Keygen-TFT\
SVI.Huygens.Suite.v3.5.0p5.Linux.Incl.Keygen-TFT\
SVI.Huygens.Suite.v3.5.0p5.MacOSX.Incl.Keygen-TFT\
SVI.Huygens.Suite.v3.5.0p5.Win64.Incl.Keygen-TFT\
Traction.Software.Batch.and.Print.Pro.v3.06.Incl.Keygen.v3.06-Lz0\
Readersplanet.-.Perry.Rhodan.2530.Der.Oxtorner.und.die.Mehandor.Edition.Februar.2010.German.Retail.Ebook-ATTiCA\
Reference.Tracker.v1.6.MacOSX.Incl.Keymaker 
Repairsoft.Error.Repair.Professional.v4.1.4.Incl.Keygen 
Ringer.v1.1.1.MacOSX.Incl.Keymaker 
RiRo.La.Paloma.v10.01.0153.GERMAN.WinAll.Incl.Keyfilemaker-CRD\
Scooter.Software.Beyond.Compare.v3.1.10.11626.Incl.Keymaker.and.Patch-ZWT\
Softube.Trident.A-Range.VST.RTAS.v1.0.2-AiR\
Softube.Tube.Delay.VST.RTAS.v1.0.5.FIXED-AiR\
Sonne.DVD.Burner.v4.1.0.2036.WinALL.Regged-YPOGEiOS\
SoundToys.Native.Effects.VST.RTAS.v3.1.2-AiR\
Sueddeutsche.Zeitung.Deutschland.10.Februar.2010.German.Retail.Ebook-ATTiCA\
Tatort.Museum.2.v1.0.German-DELiGHT\
Tracker.Software.PDF-XChange.Viewer.Pro.v2.046.Multilingual.Cracked-EAT\
Trick.or.Travel.v1.0.Cracked-F4CG\
TrustPort.WebFilter.v5.4.0.2139.WinAll.Cracked-CRD\
Un4seen.Developments.Bass.dotNet.v2.4.6.2.Incl.Keygen 
Undiscovered.World.The.Incan.Sun.v1.0.German-DELiGHT\
USeesoft.Total.Video.Converter.v1.5.1.2.Cracked-F4CG\
VanDyke.ClientPack.v6.5.1.x64-TBE\
VanDyke.ClientPack.v6.5.1-TBE\
VariCAD.2010.v2.0.Incl.Keygen-MESMERiZE\
WinMend.Data.Recovery.v1.3.5.Incl.Keygen 
Wrox.Silverlight.3.Programmers.Reference.Aug.2009.eBook-BBL\
XChat.v2.8.7f.Cracked-NGEN\
The.Path.v1.10-ORANGiNA\
Tonec.Inc.Internet.Download.Manager.v5.18.8.Incl.Keygen.and.Patch 
Viscosity.v1.0.9.MacOSX.Incl.Keymaker 
What.sen.d.this.time.v1.6-CRAPME\
Whatisend1.v3.97.WinAll.Regged-CRAP\
Wii.Transfer.v2.7.1.MacOSX.Incl.Keymaker 
Wiley.-.SAS.Essentials.A.Guide.to.Mastering.SAS.for.Research.Edition.2009.Retail.Ebook-ATTiCA\
Wing.FTP.Server.v3.3.5.Corporate.Edition.WinAll.Cracked-CRD\
Wisegal.v1.0.0.8.German-HERiTAGE\
Womble.MPEG.Video.Wizard.DVD.v5.0.0.104.Multilanguage.WinALL.Regged-BLiZZARD\
YL.Computing.WinUtilities.v9.41.Professional.Edition.WinAll.Incl.Keygen-CRD\
 112\
Accelrys Discovery Studio v2.5 for Windows-ISO 1DVD\
CMG Suite v2008.12.20 1CD(油气储存建模)\             2300
Landmark.OpenWorks.V2003.12\                                2400
Petrel.v2009.1-ISO 1CD(勘探开发一体化油藏综合描述软件)\
SolidCast v7.2.2 Full Multilanguage 1CD(完全解密多语言版、含繁体中文,铸件凝固解析模拟软件)\
Vector.NTI.Advance.v10.3\
Vector.NTI.Advance.v11\
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■
*****************************************************************
好得行业软件网提供各个行业专业软件,所有软件均为完整版本,模块齐全,详细请咨询
TEL:13978229035               QQ:508925688 
Email: ywcwsoft@sohu.com     ywcwsoft@sina.com      ywcwsoft@126.com
好得行业软件网 www.haodesoft.com
点击咨询:http://haodesoft.53kf.com
请使用Ctrl+F 键来查询您所需软件,找到后联系我们QQ或是邮件,我们会第一时间为您回复
■□■□■□■□本廣告長期有效■□■□■□■□■□■□■□■□■□■□■□■□
 113\
COPRA RF 2005完整培训使用教程说明.rar
DNV------QC080000中文版.rar
MecSoft.VisualMILL.Pro.v6.0.5.14.for.VisualCAM.rar
Pipenet 1.21管网流体分析软件.rar
阀门设计手册.rar
Apollo_Photonics_Solutions_Suite_v2.2\
AVL BOOST v5.1.1 Windows-ISO 1CD\
AVL.BOOST, EXCITE Power Unit, EXCITE Workspace.Suite.v5.1-ISO\
Bitplane Imaris v6.3.1 1cd (三维细胞结构生物显微影像分析处理软件)\
DNV------QC080000中文版\
Fluent v6.3.26 for Linux 1CD\
Landmark.OpenWorks 中文培训手册\
Mentor.Graphics.Calibre.v2009.1.46.Linux\
Petrel中文实用操作手册\
Pipenet 1.21管网流体分析软件\
Piranesi 6.0 2010版 (强大建筑彩绘软件)\
Silvaco AMS 2008.09 中文版本\
Terra Vista 3.0 (先进的3D地型形成系统)\
Type3.Type.Edit.v4.6(雕刻软件,商业多语言版本,包含简体中文)\
VisualCAM_1_0\
 114\
上海宇龙数控仿真手册.rar
上海宇龙数控加工仿真软件3.7.rar
AddNewFriends.MySpace.FriendBlasterPro.v10.8.5.WinAll.Cracked 
Address.Organizer.Deluxe.v3.3.WinALL.Incl.Patcher 
All.Sound.Recorder.Vista.v1.12.WinALL.Regged 
Annies.Millions.v1.0.0.9-HERiTAGE\
Anti.Tracks.v7.1.6.1.Cracked-F4CG\
Apress.Visual.C.Sharp.2010.Recipes.A.Problem.Solution.Approach.Mar.2010.eBook-BBL\
Art.Antiques.Organizer.Deluxe.v3.3.WinALL.Incl.Patcher 
Art.Mahjong.2-ALiAS\
Ashampoo.Magical.Defrag.3.v3.0.2.91.Incl.Keygen.and.Patch 
Auto.Organizer.Deluxe.v3.3.WinALL.Incl.Patcher 
AVS.Video.Editor.v4.2.1.179.Cracked-F4CG\
Bergstraesser.Anzeiger.2010.03.20.German.RETAiL.COMPLETE.eBOOk-NEWSPAPER\
Berliner.Morgenpost.2010.03.19.German.RETAiL.eBOOk-NEWSPAPER\
Berliner.Morgenpost.2010.03.20.German.RETAiL.eBOOk-NEWSPAPER\
BNN.2010.03.20.German.RETAiL.COMPLETE.eBOOk-NEWSPAPER\
Boat.Organizer.Deluxe.v3.3.WinALL.Incl.Patcher 
Boat.Sales.Organizer.Deluxe.v3.3.WinALL.Incl.Patcher 
Book.Organizer.Deluxe.v3.3.WinALL.Incl.Patcher 
Bug.Tracker.Deluxe.v3.3.WinALL.Incl.Patcher 
Business.Expense.Organizer.Deluxe.v3.3.WinALL.Incl.Patcher 
Calendar.Organizer.Deluxe.v3.3.WinALL.Incl.Patcher 
Car.Organizer.Deluxe.v3.3.WinALL.Incl.Patcher 
Car.Sales.Catalog.Deluxe.v3.3.WinALL.Incl.Patcher 
Car.Sales.Organizer.Deluxe.v3.3.WinALL.Incl.Patcher 
Catalog.Organizer.Deluxe.v3.3.WinALL.Incl.Patcher 
Clone2Go.DVD.Ripper.v1.8.6.Incl.KeyMaker-DVT\
Delcam DentCAD 8112 SP2\
DElcam DentMill 5070\
EIBA ETS3 3.0e KNXEIB 工程分析\
GardenGraphics.DynaSCAPE.Professional.v3.02\
McAfee.IntruShield.Sensor.Software.M4050.v6.0.1.15-DVT\
McAfee.IntruShield.Sensor.Software.M6050.v6.0.1.15-DVT\
McAfee.IntruShield.Sensor.Software.M8000.v6.0.1.15-DVT\
McAfee.IntruShield.Sensor.Software.N450.v6.0.3.4-DVT\
McAfee.PortalShield.v2.1.SP1-DVT\
McAfee.VirusScan.Enterprise.v8.7i.Patch.3.Only-CzW\
Microsoft.Forefront.Identity.Manager.2010.Language.Pack-DVT\
Monsieur.N81.French.eBook-eMAG\
Movie.Label.2011.v6.0.1.1232-iNViSiBLE\
NextReports.Designer.v3.0.Linux-iNViSiBLE\
NextReports.Designer.v3.0-iNViSiBLE\
Onze.Mondial.N254.French.eBook-eMAG\
Oriental.Dreams.v1.0.Cracked-F4CG\
PATHTRACE.EDGECAM.V12.5\
Plongee.Magazine.N27.French.eBook-eMAG\
 115\
20.Minuten.Bern.2010.03.10.German.Retail.eBook-eMAG\
24.Heures.2010.03.09.French.Retail.eBook-eMAG\
24.Heures.2010.03.10.French.Retail.eBook-eMAG\
Actual.Window.Manager.v6.0.Incl.Keymaker.FIXED-BLiZZARD\
Aignesberger.Software.Website.Watcher.2010.Business.Edition.v10.Cracked-CzW\
ALikeT.Software.Registry.Winner.v5.7.3.10.Multilingual.WinAll.Incl.Keygen.and.Patch 
Allallsoft.Microsoft.VirtualEarth.Hybrid.Downloader.v6.26.Incl.Keygen 
Allallsoft.Microsoft.VirtualEarth.Map.Downloader.v6.26.Incl.Keygen 
Allallsoft.Microsoft.VirtualEarth.Satellite.Downloader.v6.26.Incl.Keygen 
Art.Actuel.N67.French.eBook-eMAG\
Ashampoo.Photo.Commander.v8.00.Incl.Keygen.and.Patch 
AuctionSleuth.v3.0.6-TE\
AVS.Video.Converter.v6.4.1.416.Cracked-F4CG\
Bergstraesser.Anzeiger.2010.03.10.German.RETAiL.COMPLETE.eBOOk-NEWSPAPER\
Berliner.Morgenpost.2010.03.10.German.RETAiL.eBOOk-NEWSPAPER\
Berliner.Morgenpost.2010.03.11.German.RETAiL.eBOOk-NEWSPAPER\
BNN.2010.03.09.German.RETAiL.COMPLETE.eBOOk-NEWSPAPER\
BNN.2010.03.10.German.RETAiL.COMPLETE.eBOOk-NEWSPAPER\
Bogdan.Ureche.SQLite.Expert.Professional.v2.3.57 
BreezeTree.Software.FlowBreeze.v2.4.25-ARN\
CamPaper.v2.78-ARN\
CapSnapper.v2.0-DOA\
Carl.Hanser.Verlag.-.Praxishandbuch.BPMN.German.Retail.Ebook-VOLUMEN\
Caster_Chapter_Two-VACE\
CDMenuPro.v6.40.01.Business.Edition.BILINGUAL.WinAll.Incl.Keygen 
Choosy.v1.0.2.MacOSX.Incl.Keymaker-CORE\
CRC.Press.-.Algorithms.and.Theory.of.Computation.Handbook.Volume.I.Second.Edition.2009.Retail.Ebook 
CRC.Press.-.Algorithms.and.Theory.of.Computation.Handbook.Volume.II.Second.Edition.2009.Retail.Ebook 
CRC.Press.-.Content.Preparation.Guidelines.for.the.Web.and.Information.Appliances.Edition.2009.Retail.Ebook 
CRC.Press.-.Electrochemistry.of.Porous.Materials.Edition.2009.Retail.Ebook 
CRC.Press.-.Handbook.of.Enterprise.Integration.Edition.2009.Retail.Ebook 
CRC.Press.-.Organic.Electronics.Materials.Processing.Devices.and.Applications.Edition.2009.Retail.Ebook 
CRC.Press.-.Proton.Exchange.Membrane.Fuel.Cells.Edition.2009.Retail.Ebook 
CRC.Press.-.The.Executive.MBA.for.Engineers.and.Scientists.Edition.2009.Retail.Ebook 
CRC.Press.-.Ubiquitous.Multimedia.Computing.Edition.2009.Retail.Ebook 
Dark.Parables.Curse.of.Briar.Rose.v1.0.Collectors.Edition.Cracked-F4CG\
DawnArk.WebCam.Recorder.v4.0.15.0131.WinALL.Incl.Patcher 
Der.Tagesspiegel.10.03.2010.German.Retail.Ebook-PDFWriters\
Die.Zeit.2010.11.German.RETAiL.eBOOk-NEWSPAPER\
Droppix.Recorder.v2.9.1-DOA\
DtSearch.Desktop.v7.64.7876 
DtSearch.Engine.v7.64.7876 
EarMaster.School.v5.0.0.623W.Incl.Keygen-BEAN\
Easy.Macro.Recorder.v3.81.WinALL.Incl.Keygen-BRD\
El.Mundo.10.03.2010.Spanish.Retail.Ebook-PDFWriters\
Entwickler.Press.-.PHP.Endlich.objektorientiert.German.Retail.Ebook-VOLUMEN\
EximiousSoft.GIF.Creator.v5.76.WinALL-BRD\
Fantastic.Farm.v1.03.Spanish-RAiN\
Grands.Reportages.N339.French.eBook-eMAG\
Gtopala.System.Info.For.Windows.v2010.03.10.Incl.Keygen-ArCADE\
Hamburger.Abendblatt.2010.03.10.German.RETAiL.eBOOk-NEWSPAPER\
Hamburger.Abendblatt.2010.03.11.German.RETAiL.eBOOk-NEWSPAPER\
HomePlanSoft.Easy.Mail.Plus.v2.2.28.9-ARN\
Illustrate.dBpoweramp.Music.Converter.Reference.v13.4-ArCADE\
InfoRapid.KnowledgeMap.v2010c-DOA\
IOpus.iMacros.v6.90.Incl.Keygen-TFT\
IVS.3D.Fledermaus.Professional.v7.1.0a.481 
JIRA.Client.Pro.v2.1.2.Linux-iNViSiBLE\
JIRA.Client.Pro.v2.1.2.MacOSX-iNViSiBLE\
JIRA.Client.Pro.v2.1.2-iNViSiBLE\
Kathimerini.10.March.2010.Retail.Ebook 
KC.Softwares.AudioGrail.v6.17.2.166.Multilingual.Incl.Keymaker-ARN\
Kogan.Page.-.Creativity.in.Public.Relations.4.Edition.2010.Retail.Ebook 
Kogan.Page.-.Shopper.Marketing.Edition.2010.Retail.Ebook 
Langmeier.L-Backup.Server.v6.0.74-DOA\


应用软件 2014-01-20 10:08 发表评论

CentOS 6下安装nodejs 0.9.0

$
0
0

确保安装了python,大部分安装失败都是由于python版本过低导致。安装之前,升级python版本,升级步骤 http://www.tomtalk.net/wiki/Python

[root@SNDA-192-168-15-161 ~]# python -V
Python 2.7.3
开始安装:

1).下载nodejs到本地并解压缩
[root@SNDA-192-168-15-161 node]# wget http://nodejs.org/dist/v0.9.0/node-v0.9.0.tar.gz
[root@SNDA-192-168-15-161 node]# tar zxvf node-v0.9.0.tar.gz
2).进入到该目录编译和安装
[root@SNDA-192-168-15-161 node-v0.9.0]# cd node-v0.9.0
[root@SNDA-192-168-15-161  node-v0.9.0]# ./configure --prefix=/usr/local/node/0.9.0
这里安装在了/usr/local/node/0.9.0目录下
[root@SNDA-192-168-15-161 node-v0.9.0]# make
[root@SNDA-192-168-15-161 node-v0.9.0]# make install
3).配置NODE_HOME
[root@SNDA-192-168-15-161 node-v0.9.0]# vi /etc/profile
在export PATH USER 。。。一行的上面添加如下内容,并将NODE_HOME/bin设置到系统path中
#set for nodejs
export NODE_HOME=/usr/local/node/0.9.0
export PATH=$NODE_HOME/bin:$PATH
保存退出后执行如下命令,使刚才的配置生效
[root@SNDA-192-168-15-161 node-v0.9.0]# source /etc/profile

执行node -h命令验证设置成功

[root@SNDA-192-168-15-161 ~]# node -h
Usage: node [options] [ -e script | script.js ] [arguments]
       node debug script.js [arguments]

Options:
  -v, --version        print node's version
  -e, --eval script    evaluate script
  -p, --print          print result of --eval
  -i, --interactive    always enter the REPL even if stdin
                       does not appear to be a terminal
  --no-deprecation     silence deprecation warnings
  --trace-deprecation  show stack traces on deprecations
  --v8-options         print v8 command line options
  --max-stack-size=val set max v8 stack size (bytes)

Environment variables:
NODE_PATH              ':'-separated list of directories
                       prefixed to the module search path.
NODE_MODULE_CONTEXTS   Set to 1 to load modules in their own
                       global contexts.
NODE_DISABLE_COLORS    Set to 1 to disable colors in the REPL

Documentation can be found at http://nodejs.org/
至此安装设置完毕。

运行一个简单的node应用程序 + socket.io,首先需要安装socket.io模块

[root@SNDA-192-168-15-161 ~]# npm install socket.io

[root@SNDA-192-168-15-161 ~]# vi app.js

var http=require('http');
var io =require('socket.io');
var server = http.createServer(function(req,res){

    res.writeHead(200,{'Content-Type':'text/plain'});
    res.end('Hello world');
});

server.listen(process.argv[2]);

var socket = io.listen(server);
socket.on('connection',function(client){
    console.log('client has connected');
    client.on('message',function(){ });
});
 

[root@SNDA-192-168-15-161 ~]# nodejs ./app.js 8001 &

[root@SNDA-192-168-15-161 ~]# nodejs ./app.js 8002 &

[root@SNDA-192-168-15-161 ~]# nodejs ./app.js 8003 &

[root@SNDA-192-168-15-161 ~]# nodejs ./app.js 8004 &

更详细的参照socket.io的官网的例子。

websocket与node.js的完美结合

http://wanshuiqianshan.iteye.com/blog/1618498



小果子 2014-01-20 10:11 发表评论

Float Number Comparison

$
0
0
reference link --- [Comparison : http://floating-point-gui.de/errors/comparison/] 

under the Creative Commons Attribution License (BY)

Comparison

Due to rounding errors, most floating-point numbers end up being slightly imprecise. As long as this imprecision stays small, it can usually be ignored. However, it also means that numbers expected to be equal (e.g. when calculating the same result through different correct methods) often differ slightly, and a simple equality test fails. For example:

	float a = 0.15 + 0.15 	float b = 0.1 + 0.2 	if(a == b) // can be false! 	if(a >= b) // can also be false! 

Don’t use absolute error margins

The solution is to check not whether the numbers are exactly the same, but whether their difference is very small. The error margin that the difference is compared to is often called epsilon. The most simple form:

	if( Math.abs(a-b) < 0.00001) // wrong - don't do this 

This is a bad way to do it because a fixed epsilon chosen because it “looks small” could actually be way too large when the numbers being compared are very small as well. The comparison would return “true” for numbers that are quite different. And when the numbers are very large, the epsilon could end up being smaller than the smallest rounding error, so that the comparison always returns “false”. Therefore, it is necessary to see whether the relative error is smaller than epsilon:

	if( Math.abs((a-b)/b) < 0.00001 ) // still not right! 

Look out for edge cases

There are some important special cases where this will fail:

  • When both a and b are zero. 0.0/0.0 is “not a number”, which causes an exception on some platforms, or returns false for all comparisons.
  • When only b is zero, the division yields “infinity”, which may also cause an exception, or is greater than epsilon even when a is smaller.
  • It returns false when both a and b are very small but on opposite sides of zero, even when they’re the smallest possible non-zero numbers.

Also, the result is not commutative (nearlyEquals(a,b) is not always the same as nearlyEquals(b,a)). To fix these problems, the code has to get a lot more complex, so we really need to put it into a function of its own:

	public static boolean nearlyEqual(float a, float b, float epsilon) { 		final float absA = Math.abs(a); 		final float absB = Math.abs(b); 		final float diff = Math.abs(a - b);  		if (a == b) { // shortcut, handles infinities 			return true; 		} else if (a == 0 || b == 0 || diff < Float.MIN_NORMAL) { 			// a or b is zero or both are extremely close to it 			// relative error is less meaningful here 			return diff < (epsilon * Float.MIN_NORMAL); 		} else { // use relative error 			return diff / (absA + absB) < epsilon; 		} 	} 

This method passes tests for many important special cases, but as you can see, it uses some quite non-obvious logic. In particular, it has to use a completely different definition of error margin when a or b is zero, because the classical definition of relative error becomes meaningless in those cases.

There are some cases where the method above still produces unexpected results (in particular, it’s much stricter when one value is nearly zero than when it is exactly zero), and some of the tests it was developed to pass probably specify behaviour that is not appropriate for some applications. Before using it, make sure it’s appropriate for your application!

Comparing floating-point values as integers

There is an alternative to heaping conceptual complexity onto such an apparently simple task: instead of comparing aand b as real numbers, we can think about them as discrete steps and define the error margin as the maximum number of possible floating-point values between the two values.

This is conceptually very clear and easy and has the advantage of implicitly scaling the relative error margin with the magnitude of the values. Technically, it’s a bit more complex, but not as much as you might think, because IEEE 754 floats are designed to maintain their order when their bit patterns are interpreted as integers.

However, this method does require the programming language to support conversion between floating-point values and integer bit patterns. Read the Comparing floating-point numbers paper for more details.







pamilty 2014-01-20 11:47 发表评论

log4j.xml示例

$
0
0
<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">  
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">  

  
<appender name="ROLLING" class="org.apache.log4j.RollingFileAppender">  
      
<layout class="org.apache.log4j.PatternLayout">  
          
<param name="ConversionPattern" value="%d %5p %c %x - %m%n" />  
      
</layout>  
      
<param name="File" value="example.log" />
      
<param name="MaxFileSize" value="50MB" />
      
<param name="MaxBackupIndex" value="9" />
  
</appender>
      
  
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">  
      
<layout class="org.apache.log4j.PatternLayout">  
          
<param name="ConversionPattern" value="%d %5p %c %x - %m%n" />  
      
</layout>  
      
<param name="Threshold" value="info" />
  
</appender>

  
<appender name="ASYNC" class="org.apache.log4j.AsyncAppender">  
      
<param name="BufferSize" value="10000" />  
      
<param name="Blocking" value="false" />
      
<appender-ref ref="ROLLING" />  
      
<appender-ref ref="CONSOLE" />
  
</appender>  
       
  
<root>  
      
<level value="info" />  
      
<appender-ref ref="ASYNC" />  
  
</root>  
      
  
<logger name="MyName">  
      
<level value="debug"/>  
  
</logger>  
      
</log4j:configuration> 


金庆 2014-01-20 11:48 发表评论

2014年,将是C++0x11全面普及的一年。

$
0
0
我主要接触的C++编译器是VC和GCC,GCC从4.8.0开始,全面支持C++0x11。
现在Cygwin最新版已经是gcc4.8.2了,集成MinGW的TDM的GCC也是4.8.1,国内常见的linux系统:RHEL,其中7 beta已经是带有GCC 4.8.2了,相信正式版不远了(CentOS7也不远了)。
windows下面的VC2013,已经能够支持大部分C++0x11了。
C++Primer(第6版)也出来了,C++0x11相关的书也出来了。
手机应用框架:Cocos2dx 3.0beta,是重新写的cocos2d,其中使用了大量的C++0x11的概念,很多Objective C的兼容都却除了。
2014年,将是C++0x11全面普及的一年。
其它还有非主流C++Builder也支持很多C++0x11了(注:大量的C++Builder/Delphi版本更新,以防盗本为主,不是以新功能更新为主)

冬瓜 2014-01-20 13:40 发表评论

OSX 笔记

$
0
0
*. 在vbox中安装10.7的方法:
首先使用OS_X_Lion.iso.torrent下载操作系统的iso文件。
直接使用OS_X_Lion.iso安装,安装完之后使用HJMac.iso进行启动。在win7 64bit上通过,但是在linux上没有通过。
*. 升级,可以把10.7升级为10.7.4,方法是去苹果官方 http://support.apple.com/downloads 网站下载:
MacOSXUpdCombo10.7.4.dmg
然后直接安装就行。
*. 安装开发工具,去苹果官方网站 https://developer.apple.com/xcode 下载:
xcode_4.3.3_for_lion.dmg
直接安装就行。一定要先升级,然后才能安装这个开发版本。安装完之后把安装包里的Xcode文件复制到Applications目录,这样方便启动。
*. 安装xcode后没有命令行工具,解决方法:
打开XCode,然后在 Xcode->Preferences --> Downloads 里安装 Command Line Tools
*. 安装到真实机器
使用和安装到虚拟机同样的方法,在 P5Q PRO TURBO 主板, Q6600 CPU,GTX2400 显卡上安装成功,但是在联想V470笔记本上安装失败。
*. 重复注册问题的解决:
只注册一个就可以了,然后重启,
在启动时按e,然后在boot:提示那里输入 -s 回车,然后会启动到命令行,输入下面的命令
/sbin/fsck -fy
/sbin/mount -uw /
passwd root
touch /var/db/.AppleSetupDone
reboot
不过最好的解决办法是在注册时不要选中用密码登录,直接就可以了。
*. 在命令行查看mac os版本:
sw_vers
*. 启动时进入单用户模式,在启动时选中mac磁盘,然后按'e'键,在boot提示符下输入 -s 回车启动就会进入命令提示符的mac系统。
*. 启用root账户,在命令行输入以下命令:
$"/System/Library/CoreServices/Directory Utility.app/Contents/MacOS/Directory Utility"
然后点击Edit->Enable Root User菜单,输入root帐号的密码,就启用了root账户,然后就可以在命令行使用
$su - root
换成root身份,进行系统的配置修改。
*. 关于mac os分辨率问题:
方法一:临时方法,只对当次启动有效,即在启动倒计时的时候,回车,等待输入参数是输入如下文本:
“Graphics Mode"="1280x800x32@60"
以上含义:设置分辨率为1280x800,色数32位,刷新率60Hz
方法二:永久生效
修改文件:  /Library/Preferences/Systemconfiguration/com.apple.Boot.plist
在文件中加入如下内容:
<key>Graphics Mode<key>
<string>1280x800x32@60<string>
操作方法:将文件拉到桌面,编辑好后啦回相应目录,输入用户密码后即可替换文件。
这个方法不管用,可能是因为用了其他的启动工具。
方法三: 在vbox上的特殊性:
在命令行执行下面的命令:
$VBoxManage setextradata "Mac OS X" CustomVideoMode1 1920x1200x32
其中,Mac OS X 是虚拟机名称
然后在系统启动时仍然要输入:
“Graphics Mode"="1920x1200x32@60"
在这个方法里,如果没有前面VBoxManage的那个命令,就算是在启动时设置了高清分辨率,在虚拟机全屏时还是不能达到高清分辨率。
*. 用U盘启动MAC OS X
由于 需要用HJMac.iso启动 Mac OS X,如果刻录成光盘,很不方便,可以把这个iso文件放在U盘里进行启动,方法是使用multibootisos工具。在使用这个工具时要注意:选中 Ultimate Boot CD (Diagnostice Tools)
实际上它就是基于 grub 的。可以让grub从任意的一个iso文件启动,并且可以事后加入iso文件。一个u盘如果已经被制作过了,后边选中这个U盘就不会再有这个选项了。
实际上这个方法可以把任意多的iso文件放入U盘进行启动。这也是使用U盘进行启动最简便的方法,这样可以完全告别光盘。
*. 让所有窗口都能全屏幕
&. 下载 SIMBL 并且安装,它的作用是让你可以以插件这种形式修改 Mac 系统和应用程序;
&. 下载 Maximizer,解压然后将得到的 Maximizer.bundle 文件放到 ~/Library/Application Support/SIMBL/Plugins 目录中;
&. 重新启动正在运行的程序(或者干脆重启电脑得了),因为插件需要在你启动程序的时候加载。
在soft下MacOS里有相应的文件,叫做 所有程序增加全屏按钮.dmg
*. emacs
从http://emacsformacosx.com可以下载 Mac OS X 版本的emacs,但是现在这个版本没有全屏功能,要到24.3才加入全凭功能,现在暂时用一个经过修改的老版本,它支持 ns-toggle-fullscreen命令,可以全屏。
*. 单独安装 gcc
*. 登陆windows系统
http://www.microsoft.com/zh-cn/download/details.aspx?id=18140
从这个里下载windows远程桌面客户端
*. 要在MacOSX上编译和安装X11程序,需要安装 http://xquartz.macosforge.org/landing
*. 添加离线词典
1. 下载DictUnifier。
链接:http://code.google.com/p/mac-dictionary-kit/downloads/list
2. 下载StarDict格式字典:(本人下载的是后面标注为“推荐”的,和一些实用的比如“五笔86版”相当不错,还有选择文件大小比较大的,这样的词库一般比较全)
简体中文链接:http://abloz.com/huzheng/stardict-dic/zh_CN/
下载首页链接:http://abloz.com/huzheng/stardict-dic/
3. 运行DictUnifier.app,将下载的*.tar.bz2格式的StarDict字典包直接拖到DictUnifier窗口里面进行转换并添加到系统词库。
4. 打开字典程序,进入到偏好设置,调整词典顺序,禁用不需要的词典。OK搞定。
*. 运行不是从app store来的程序
首先进入System Preferences把Security & Privacy改成Anywhere,然后运行程序一次,为了安全,最好再把Security & Privacy改成默认的。
*. 安装多媒体软件
XLD 网址: http://www.macupdate.com/app/mac/23430/x-lossless-decoder
*. 安装图像处理软件
gimp 网址: http://gimp.lisanet.de/Website/Download.html
*. 安装自由软件,主要是GNU的软件
http://www.macports.org
这个软件相当于fedora里的yum的mac版本。用它就可以安装所有GNU软件和库
安装在/opt/local/bin里面
可以在/etc/profile里加入
export PATH=/opt/local/bin:$PATH
export PATH=/opt/local/sbin:$PATH
最后就可以通过port命令进行安装程序了:
port search <程序名称>
下面安装一些最常用的开源库
port install libpng libjpeg-turbo
*. 制作 app 的图标文件
$iconutil -c icns "icon.iconset" icon.iconset是一个文件夹,文件夹里面放以下文件,命名如下,@2x.png是双倍大小的 icon_16x16.png icon_16x16@2x.png icon_32x32.png icon_32x32@2x.png icon_128x128.png icon_128x128@2x.png icon_256x256.png icon_256x256@2x.png icon_512x512.png icon_512x512@2x.png
实际上icon.iconset文件夹里只要有一个 icon_512x512.png 文件就可以了。
*. 编译freetype库
$make
$cp objs/.libs/libfreetype.a libfreetype-x86_64.a
$./configure --prefix=/Users/apple/local/iphone --host=arm-apple-darwin --enable-static=yes --enable-shared=no CC=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/llvm-gcc-4.2 CFLAGS="-arch armv7 -pipe -mdynamic-no-pic -std=c99 -Wno-trigraphs -fpascal-strings -O2 -Wreturn-type -Wunused-variable -fmessage-length=0 -fvisibility=hidden -miphoneos-version-min=4.0 -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/usr/include/libxml2 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk" CPP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/llvm-cpp-4.2 AR=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ar LDFLAGS="-arch armv7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk -miphoneos-version-min=4.0"
$make
$cp objs/.libs/libfreetype.a libfreetype-armv7.a
$./configure --prefix=/Users/apple/local/iphone --host=arm-apple-darwin --enable-static=yes --enable-shared=no CC=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/llvm-gcc-4.2 CFLAGS="-arch i386 -pipe -mdynamic-no-pic -std=c99 -Wno-trigraphs -fpascal-strings -O2 -Wreturn-type -Wunused-variable -fmessage-length=0 -fvisibility=hidden -miphoneos-version-min=4.0 -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk/usr/include/libxml2 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk" CPP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/llvm-cpp-4.2 AR=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/ar LDFLAGS="-arch i386 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk -miphoneos-version-min=4.0"
$make
$cp objs/.libs/libfreetype.a libfreetype-ios-i386.a
$./configure CC=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/llvm-gcc-4.2 CFLAGS="-arch i386"
$make
$cp objs/.libs/libfreetype.a libfreetype-i386.a
最后用lipo命令打包成一个静态库文件,这样就可以通吃所有平台了
$lipo -create -output libfreetype.a libfreetype-armv7.a libfreetype-x86_64.a libfreetype-i386.a
$lipo -info libfreetype.a
Architectures in the fat file: libfreetype.a are: armv7 x86_64 i386
注意:不能把 libfreetype-ios-i386.a 和 libfreetype-i386.a 打到一个包里。
mobile interactive
*. apple 新政策,没有编译成PIE的程序不能通过审核
使用
$otool -hv <可执行文件名>
如果 flags 中有 PIE ,那么说明可执行程序是PIE的,否则不是。
可以在原文件的编译参数中加上 -mdynamic-no-pic ,取消PIE特性。
如果被链接的静态库中有一个不具有PIE特性,那么链接出来的最终可执行程序就没有PIE特性。
*. xcode 编译出来的IOS模拟器程序在
/Users/apple/Library/Application Support/iPhone Simulator/6.1/Applications
目录
*. 安装photoshop 使用破解方法
1.首先断开你的网络连接;
2.从官方 http://www.adobe.com/cn 安装Adobe Photoshop CC for Mac
3.打开Adobe Photoshop CC的安装目录,进入到应用的Frameworks目录中;
Frameworks目录为:/Applications/Adobe Photoshop CC/Adobe Photoshop CC.app/Contents/Frameworks/
4.打开Adobe Photoshop CC破解工具,将其中的amtlib.framewrok目录复制覆盖到上一步打开Photoshop CC的Framework目录中;
5.运行破解工具中的Smart Adobe CC Blocker v1.0.app软件,防止Adobe的正版验证;
6.打开网络,启动Adobe Photoshop CC,破解成功!
*. 查看硬盘信息
diskutil info /Volumes/data
*. 挂载linux分区
分别下载
OSXFUSE https://github.com/osxfuse/osxfuse/downloads
fuse-ext2 http://sourceforge.net/projects/fuse-ext2/files
的.dmg二进制包并安装。注意:安装OSXFUSE时,一定要勾选MacFUSE Compatibility Layer。安装完成后重启,就可以自动挂载ext2/ext3文件系统了。当然,也可以使用mount命令挂载,mount -t fuse-ext2 <device> <mountpoint>
默认情况下,fuse-ext2进行只读挂载,可以修改
/System/Library/Filesystems/fuse-ext2.fs/fuse-ext2.util
文件进行读写挂载。
修改Mount函数(第200行前后),为OPTIONS变量增加rw+标志。
function Mount ()
{
    LogDebug "[Mount] Entering function Mount..."
    # Setting both defer_auth and defer_permissions. The option was renamed
    # starting with MacFUSE 1.0.0, and there seems to be no backward
    # compatibility on the options.
    OPTIONS="auto_xattr,defer_permissions,rw+"
    # The local option is only enabled on Leopard. It causes strange
    ...
}
*. 读写NTFS
下载
ntfs-3g  http://www.tuxera.com/community/ntfs-3g-download
在config之前先用port安装:
port install pkgconfig
如果前面编译源代码的形式安装不了,用这个安装包:
http://sourceforge.net/projects/catacombae/files/NTFS-3G%20for%20Mac%20OS%20X/2010.10.2/ntfs-3g-2010.10.2-macosx.dmg/download?use_mirror=hivelocity&r=&use_mirror=hivelocity
*. 在finder中隐藏/显示 隐藏文件:
defaults write com.apple.finder AppleShowAllFiles -bool <false/true>
使设置马上生效:
KillAll Finder
*. 播放 flac ape 文件
http://www.videolan.org
不要用MPlayerX,不知道什么原因,这个播放器播放出来有破音
*. 播放视频文件 mkv avi rm rmvb
http://www.pps.tv
虽然是一个网络播放器,但是播放本地文件也不错
*. flac ape 分割工具
/opt/local/bin/port install shntool
*. finder 快捷键
Command+Shift+G  弹出路径输入框
*. ram disk
创建一个1.25G的内存磁盘
diskutil erasevolume HFS+ "ram_disk" `hdiutil attach -nomount ram://2621440`
*. 用一个启动时自动运行的脚本来自动创建ram disk
打开 AppleScriptEditor 把下面的脚本复制进去:
do shell script "
if ! test -e /Volumes/\"Ramdisk\" ; then
diskutil erasevolume HFS+ \"RamDisk\" `hdiutil attach -nomount ram://2621440`
fi
"
以Application格式保存到/Applications目录
打开 System Preferences -> Users & Groups -> Login Items 然后加入刚才的那个程序
*. 将MacOS 的缓存文件夹放在RamDisk中
用root身份删除 /Users/<user>/Library/Caches
然后回到自己的用户执行下面的命令
ln -s /Volumes/RamDisk/ ~/Library/Caches
*. 释放非活动内存,增加可用内存,运行命令
$ purge


何清龙 2014-01-20 16:51 发表评论

Key Principles of Customize Pipe Support Program

$
0
0

Key Principles of Customize Pipe Support Program

eryar@163.com

Abstract: The article show one customize pipe support method in AVEVA Marine/Plant. Follow the method you can create a pipe support modeling program to meet your company’s specific need.

Key Words: AVEVA Marine, AVEVA Plant, PDMS, Pipe Support, PML

I have already used AVEVA Marine for years. It is convenience and efficiency. But only the MDS module does not meet our design standard. There are so many pipe support models in the database, in order to meet the plant and marine pipe support design requirement. When creating a support model, you must wait for a while for the program to find the needed support, it's so boring. So I decided to develop a support program by myself.

To do such a program, you must know the knowledge below:

l The Design Element Hierarchy

l Event-Driven Graphics Utilities

l How to create component and specification in paragon module

l PML (the AVEVA Programmable Macro Language)

l General Commands for Creating the Model

1. The Design Element Hierarchy

wps_clip_image-7211

Figure 1.1 The Equipment and Piping hierarchy

The hierarchy is very important concept in AVEVA productions. It restricts that which element can hold what elements.

To know all data model and its attributes in AVEVA software, you can see the "Data Model Reference Manual" for reference.

2. Event-Driven Graphics Utilities

Event-Driven graphical interaction allows cursor picks in 3D views to be used intelligently as part of some overall rather than just being used for navigation or element identification purposes.

Once you have selected an option which puts you into event-driven graphics mode, such as measuring distances between calculated positions, you can carry out unrelated actions using non-graphical forms and menus without interrupting the logical sequent picking actions.

When you are in event-driven graphics mode, a Positioning Control form lets you control how your pointer picks are translated into the coordinates of required positions (which need not be at the actual cursor position).

Click in the 3D View and then press the Esc key to leave event-driven graphics mode.

Note: EDG functions are not available within Model Editor mode.

When use the Distance Measure from the toolbar, a Positioning Control will display automatically.

wps_clip_image-12408

Figure 2.1 Distance Measure on the Utilities toolbar

wps_clip_image-15449

Figure 2.2 Positioning Control

In PML, the object EDGPACKET is used for this facility. You can reference to : componentcreation.pmlfrm for detail. I will list the simplest code to demonstrate the utility.

To use your own PML program, you can put the following code in a text file named pickdemo.pmlfrm, and put it to the PMLLIB path, my PMLLIB  path is set to :

D:\AVEVA\Marine\OH12.0.SP6\PMLLIB\AddIns. 

Then in the Design module's command window input the command:

PML REHASH ALL 
SHOW 
!!pickdemo


List 1 : The simplest PML code for Event-Driven Graphics pick

wps_clip_image-12811

When the command : Show !!pickdemo applied, the pick demo form will show like follow:

wps_clip_image-27112

Figure 2.3 Pick Demo Form

When you push the button and pick a flange model, the information will display in the Command Window like follow figure:

wps_clip_image-2216

Figure 2.4 Position in the Command window

3. Create Component and Specification

Like the pipe model in Design Module which its components are all from paragon database, we will save our support model in paragon database too. This is also MDS does.

You can save the pipe clamp data:

wps_clip_image-26064

Figure 3.1 Pipe clamp model in paragon

wps_clip_image-15570

Figure 3.2 Pipe clamp model in paragon

After doing this, you add specifications for support component like pipe component, so you can use the support via the specification.

For more information about Catalogues and Specifications please see: Catalogues and Specifications Reference Manual.

4. PML

You can learn more from the manual: Software Customisation Guide.

The manual describes how to use PML, the AVEVA Programmable Macro Language. You should use it together with the Software Customisation Reference Manual. 

You do not have to be a professional programmer to start to learn PML, 

although you may find the manual difficult to follow unless you have 

some understanding of programming concepts such as if statements and 

do loops. If you have no programming experience, you should consider 

attending a PML Training Course. For details, contact your local support office, whose address is given on the AVEVA website. 

5. General Commands for Creating the Model

You can use the command: NEW to create new element. The command also can be used in PML.

wps_clip_image-23627

Figure 4.1 Use new command to create element

Then assign the spref and position attribute and others to the element, the spref attribute set for component's shape and position attribute set for the component's position.

wps_clip_image-148

Figure 4.2 Attributes of the component

You can use PML command:

SPREF /Your_Support_Specification 

/Your_Support_Specification is created in the paragon module.

The result is in the below picture:

wps_clip_image-31499

Figure 4.3 Support model in Design module

So if you understand the 5 key principles you can build your support models by your own program, this will be wonderful. When the pipe supports models are build, then can generate pipe support sketches and material automatically.

Enjoy!

If you find any mistakes or have any suggestions, feel free to contact with me: eryar@163.com.

 



eryar 2014-01-20 18:13 发表评论

Micro.Hebdo.N621.French.eBook-eMAG

$
0
0
Mannheimer.Morgen.2010.03.09.German.RETAiL.COMPLETE.eBOOk-NEWSPAPER\
Mannheimer.Morgen.2010.03.10.German.RETAiL.COMPLETE.eBOOk-NEWSPAPER\
Marca.2010.03.08.Spanish.Retail.eBook-eMAG\
Marca.2010.03.09.Spanish.Retail.eBook-eMAG\
Marca.2010.03.10.Spanish.Retail.eBook-eMAG\
MathMagic.Pro.Edition.For.Adobe.InDesign.v4.91.7.Incl.Keymaker 
MathMagic.Pro.Edition.For.Adobe.InDesign.v6.92.MacOSX.Incl.Keymaker 
MathMagic.Pro.Edition.For.QuarkXpress.v4.91.7.Incl.Keymaker 
MathMagic.Pro.Edition.For.QuarkXpress.v6.92.MacOSX.Incl.Keymaker 
McAfee.ePolicy.Orchestrator.v4.5.Patch.1.WORKING-DVT\
Micro.Hebdo.N621.French.eBook-eMAG\
MicrovideoSoft.Video.Converter.Professional.v8.2.3.212-ARN\
MS.SQL.Server.Paradox.Import.Export.And.Convert.v7.0.WinALL.Incl.Patcher 
MyMenuDate.v3.2.0.MacOSX.Incl.Keymaker-CORE\
MySQL.Extract.Email.Addresses.v7.0.WinALL.Incl.Patcher 
NovaBACKUP.Professional.v11.0.18-DOA\
OOE.Nachrichten.2010.03.09.German.RETAiL.eBOOk-NEWSPAPER\
OOE.Nachrichten.2010.03.10.German.RETAiL.eBOOk-NEWSPAPER\
Operation.Wolfsburg.RiP-ORANGiNA\
Operation_Wolfsburg_PROPER-BACKLASH\
ParetoLogic.Inc.RegCure.v3.0 
Pearl.Mountain.Picture.Collage.Maker.Pro.v2.2.0.2767.Incl.Keygen 
Picsou.Magazine.N458.French.eBook-eMAG\
Pixarra.TwistedBrush.Pro.Studio.v16.18.WinALL.Incl.Keygen-BRD\
Pointstone.System.Cleaner.v5.8.6.280.WinALL.Cracked-BRD\
Pointstone.Total.Privacy.v5.8.6.460.WinALL.Cracked.READ.NFO-BRD\
Power.Retouche.Retouching.Suite.v7.6.2.retail.for.Adobe.Photoshop-FOSI\
Schwetzinger.Zeitung.Hockenheimer.Tageszeitung.2010.03.09.German.RETAiL.COMPLETE.eBOOk-NEWSPAPER\
Schwetzinger.Zeitung.Hockenheimer.Tageszeitung.2010.03.10.German.RETAiL.COMPLETE.eBOOk-NEWSPAPER\
Sea.Apple.Software.Web.Calendar.Pad.2010.3.9.Incl.Keymaker-ARN\
SmartGit.Enterprise.v1.0.4.Incl.Keygen-iNViSiBLE\
SmartGit.Enterprise.v1.0.4.Linux.Incl.Keygen-iNViSiBLE\
SmartGit.Enterprise.v1.0.4.MacOSX.Incl.Keygen-iNViSiBLE\
SmartSound.SonicFire.Pro.v5.5.2.Scoring.Network.Edition.for.MacOSX-BEAN\
SmartSound.SonicFire.Pro.v5.5.2.Scoring.Network.Edition.for.Windows.Incl.Keygen-BEAN\
Sonne.Flash.Decompiler.v5.2.1.2215-ARN\
Sonne.Video.Converter.v11.0.0.2010-ARN\
Sounds4Fun.v1.0.3.MacOSX.Incl.Keymaker-CORE\
SplashID.Desktop.for.Android.v4.6.0.Incl.Keymaker-ACME\
SplashID.Desktop.for.BlackBerry.v5.0.3.Incl.Keymaker-ACME\
SplashID.Desktop.v5.2.0.Incl.Keymaker-ACME\
Suedhessen.Morgen.2010.03.09.German.RETAiL.COMPLETE.eBOOk-NEWSPAPER\
Suedhessen.Morgen.2010.03.10.German.RETAiL.COMPLETE.eBOOk-NEWSPAPER\
Syncro.SVN.Client.v5.1.Incl.Keygen.and.Patch-iNViSiBLE\
Syncro.SVN.Client.v5.1.Linux.Incl.Keygen.and.Patch-iNViSiBLE\
Syncro.SVN.Client.v5.1.Linux.x64.Incl.Keygen.and.Patch-iNViSiBLE\
Syncro.SVN.Client.v5.1.MacOSX.Incl.Keygen.and.Patch-iNViSiBLE\
The.Cleaner.2011.v7.0.0.3120.Multilingual.Incl.Keymaker-CORE\
The.Herald.March.10.2010.Retail.Ebook 
The.Hollywood.Reporter.March.10.2010.Retail.Ebook 
The.Independent.March.10.2010.Retail.Ebook 
Toy.Story.Mania-ALiAS\
Tribune.De.Geneve.2010.03.09.French.Retail.eBook-eMAG\
TypeIt4Me.v4.2.1.MacOSX.Incl.Keymaker-CORE\
Visma.SPCS.Forening.v5.01.SWEDISH-TFT\
Visma.SPCS.Skatt.v2010.01.SWEDISH-TFT\
Vocable.Allemand.N583.French.eBook-eMAG\
Vocable.Anglais.N590.French.eBook-eMAG\
Vocable.Espagnol.N576.French.eBook-eMAG\
VSO.Software.ConvertXtoDVD.4.v4.0.10.324-TE\
Warranty.Hero.v1.5.0.MacOSX.Incl.Keymaker-CORE\
Wiley.Publishing.-.Sugar.CRM.For.Dummies.Retail.Ebook-VOLUMEN\
Wondershare.Registry.Optimizer.v5.3.3.Incl.Keygen.and.Patch 
Yamicsoft.Windows.7.Manager.v1.2.0.Incl.Keymaker-CORE\
Yamicsoft.Windows.7.Manager.v1.2.0.x64.Incl.Keymaker-CORE\
Zeit.Magazin.Leben.2010.11.German.RETAiL.eBOOk-NEWSPAPER\
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■
*****************************************************************
好得行业软件网提供各个行业专业软件,所有软件均为完整版本,模块齐全,详细请咨询
TEL:13978229035               QQ:508925688 
Email: ywcwsoft@sohu.com     ywcwsoft@sina.com      ywcwsoft@126.com
好得行业软件网 www.haodesoft.com
点击咨询:http://haodesoft.53kf.com
请使用Ctrl+F 键来查询您所需软件,找到后联系我们QQ或是邮件,我们会第一时间为您回复
■□■□■□■□本廣告長期有效■□■□■□■□■□■□■□■□■□■□■□■□
 116\
Alchemy.Mindworks.Animation.Workshop.v2.0a28.Incl.Keygen 
Allallsoft.Google.Hybrid.Maps.Downloader.v6.97.Incl.Keygen 
Allallsoft.Google.Maps.Downloader.v6.19-BEAN\
Allallsoft.Google.Maps.Terrain.Downloader.v6.19-BEAN\
Allallsoft.Google.Satellite.Maps.Downloader.v6.57-BEAN\
Automatically.Run.Or.Close.Programs.At.Certain.Times.v7.0.WinALL.Incl.Patcher 
Bergstraesser.Anzeiger.2010.03.11.German.RETAiL.COMPLETE.eBOOk-NEWSPAPER\
Berliner.Morgenpost.2010.03.12.German.RETAiL.eBOOk-NEWSPAPER\
BNN.2010.03.11.German.RETAiL.COMPLETE.eBOOk-NEWSPAPER\
Cheetah.DVD.Burner.v2.48-BEAN\
Cockos.REAPER.v3.35.x64-DOA\
Cockos.REAPER.v3.35-DOA\
CompanionLink.Professional.v3.0.3092.Multilingual.Incl.Keymaker-ACME\
CoolwareMax.WebcamMax.v7.1.2.6.Incl.Keygen.and.Patch 
CRC.Press.-.Carbons.for.Electrochemical.Energy.Storage.and.Conversion.Systems.Edition.2009.Retail.Ebook 
CRC.Press.-.Gold.Science.and.Applications.Edition.2009.Retail.Ebook 
CRC.Press.-.Implementing.Quality.in.Laboratory.Polices.and.Processes.Edition.2009.Retail.Ebook 
CRC.Press.-.Introduction.to.Texture.Analysis.Macrotexture.Microtexture.and.Orientation.Second.Edition.2009.Retail.Ebook 
CRC.Press.-.Pharmacy.Informatics.Edition.2009.Retail.Ebook 
Cyber-Wing.RIP-Unleashed\
Dark.Salvation-ALiAS\
Dekart.SIM.Manager.v2.8.Incl.Keygen-MESMERiZE\
Dolphin.Integration.Smash.v5.14.1p1 
Dolphin.Integration.SoC.GDS.v6.5.1 
Droppix.Label.Maker.v2.9.8.0.Cracked-F4CG\
Filemaker.Pro.v11.0.1.96.Cracked-REDT\
Flv.Ripper.v1.71.Regged-DJiNN\
Gilisoft.Secure.Disc.Creator.v1.1.Incl.KeyMaker.and.Patch-DVT\
Hamburger.Abendblatt.2010.03.12.German.RETAiL.eBOOk-NEWSPAPER\
IGI.Global.-.Intelligent.Techniques.for.Warehousing.and.Mining.Sensor.Network.Data.Edition.2010.Retail.Ebook 
Il.Corriere.Della.Sera.03.12.10.iTALiAN.eBook-DiVER\
Il.Fatto.Quotidiano.03.12.10.iTALiAN.eBook-DiVER\
Il.Secolo.XIX.03.12.10.iTALiAN.eBook-DiVER\
ISecSoft.Anti-Trojan.Elite.v4.8.8.MULTILINGUAL.WinAll.Cracked 
Its.all.about.masks.v1.0-TE\
Johannes.Wallroth.Sharp.World.Clock.v4.55.Incl.Keygen 
Kristanix.Mahjong.Epic.v1.45.MACOSX.GAME 
Kristanix.Solitaire.Epic.v1.23.MACOSX.GAME 
La.Gazzetta.Dello.Sport.03.12.10.iTALiAN.eBook-DiVER\
La.Repubblica.03.12.10.iTALiAN.eBook-DiVER\
La.Stampa.03.12.10.iTALiAN.eBook-DiVER\
Le.Monde.12.Mars.2010.French.Retail.eBook-FMR\
LUXOLOGY_MODO_V401_SP4_MACOSX-XFORCE\
LUXOLOGY_MODO_V401_SP4_WIN32-XFORCE\
LUXOLOGY_MODO_V401_SP4_WIN64-XFORCE\
Mannheimer.Morgen.2010.03.11.German.RETAiL.COMPLETE.eBOOk-NEWSPAPER\
My.Notes.Keeper.v1.9.8.1183.WinALL.Incl.Keygen-BRD\
NewLore.Magazine.2010.VOL03.Chinese.PDF.eBook 
Nucleomatica.iNMR.v3.4.2.MacOSX-ROGUE\
OakDoc.PCL.to.PDF.Converter.v2.1.incl.Keygen.WinAll-LAXiTY\
OOE.Nachrichten.2010.03.11.German.RETAiL.eBOOk-NEWSPAPER\
PC.Error.Cleaner.v2.1.WinALL.Incl.Patcher 
PGWARE.GameBoost.v1.3.8.2010-DVT\
PGWARE.GameGain.v2.3.8.2010-DVT\
PGWARE.SuperRam.v6.3.8.2010-DVT\
Piranesi.2010.Pro.v6.0.0.3672-iNViSiBLE\
Postbox.v1.1.2.Cracked-REDT\
ProjectWizards.Merlin.v2.7.6.MacOSX-ROGUE\
Puremagnetik.Analog.Drums.for.Kontakt.3-DYNAMiCS\
Puremagnetik.Analog.Drums.for.Live.8-DYNAMiCS\
Puremagnetik.Analog.Drums.for.Logic.8-DYNAMiCS\
Puremagnetik.TrapKit.for.Kontakt.3-DYNAMiCS\
Puremagnetik.TrapKit.for.Live.8-DYNAMiCS\
Puremagnetik.TrapKit.for.Logic.8-DYNAMiCS\
Quickersoft.TitleBarClock.Pro.v6.5.2.WinAll.Regged 
RAR.Password.Recovery.Magic.v6.1.1.213.Regged-DJiNN\
RealHideIP.Real.Hide.IP.v3.5.7.2.Incl.Keymaker.And.Patch-ROGUE\
Robertson.Software.Solutions.Email.Monitor.v1.2.WinAll-LAXiTY\
Salfeld.Child.Control.2010.v10.329.0.0.WinALL.Incl.Keygen-BRD\
Schwetzinger.Zeitung.Hockenheimer.Tageszeitung.2010.03.11.German.RETAiL.COMPLETE.eBOOk-NEWSPAPER\
Snappy.Fax.Network.Server.v2.14.1.1.Incl.KeyMaker-DVT\
Snappy.Fax.v4.35.2.1.Incl.KeyMaker.and.Patch-DVT\
SoftFlyers.Speed.Video.Converter.v4.4.26-ARN\
SoftFlyers.Speed.Video.Splitter.v4.3.25-ARN\
SoftOnPc.Google.Satellite.Maps.Retriever.v6.57.Incl.Keygen 
SoftOnPc.Universal.Maps.Downloader.v5.95.Incl.Keygen 
Southern.People.Weekly.Magazine.2010.VOL01.Chinese.PDF.eBook 
Southern.People.Weekly.Magazine.2010.VOL02.Chinese.PDF.eBook 
Southern.People.Weekly.Magazine.2010.VOL03.Chinese.PDF.eBook 
Southern.People.Weekly.Magazine.2010.VOL04.Chinese.PDF.eBook 
STW.Master.2009.Maler.Edition.v5.1.909.11.German.WinALL.Incl.Keygen-BLiZZARD\
STW.Master.2009.v5.1.909.11.German.WinALL.Incl.Keygen-BLiZZARD\
Suedhessen.Morgen.2010.03.11.German.RETAiL.COMPLETE.eBOOk-NEWSPAPER\


应用软件 2014-01-21 14:13 发表评论
Viewing all 7880 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>