Thursday, August 30, 2007

SystemVerilog Data Types

This tutorial describes the new data types that Systemverilog introduces. Most of these are synthesisable, and should make RTL descriptions easier to write and understand.

Integer and Real Types

SystemVerilog introduces several new data types. Many of these will be familiar to C programmers. The idea is that algorithms modelled in C can more easiliy be converted to SystemVerilog if the two languages have the same data types.
Verilog’s variable types are four-state: each bit is 0,1,X or Z. SystemVerilog introduces new two-state data types, where each bit is 0 or 1 only. You would use these when you do not need X and Z values, for example in test benches and as for-loop variables. Using two-state variables in RTL models may enable simulators to be more efficient. Used appropriately, they should not affect the synthesis results.
Type Description Example
bit user-defined size bit [3:0] a_nibble;
byte 8 bits, signed byte a, b;
shortint 16 bits, signed shortint c, d;
int 32 bits, signed int i,j;
longint 64 bits, signed longint lword;
Two-state integer types
Note that, unlike in C, SystemVerilog specifies the number of bits for the fixed-width types.
Type Description Example
reg user-defined size reg [7:0] a_byte;
logic identical to reg in every way logic [7:0] a_byte;
integer 32 bits, signed integer i, j, k;
Four-state integer types
logic is a better name than reg, so is preferred. As we shall see, you can use logic where in the past you have may have used reg or where you may have used wire.
Type Description Example
time 64-bit unsigned time now;
shortreal like float in C shortreal f;
real like double in C double g;
realtime identical to real realtime now;
Non-integer types

Arrays

In Verilog-1995, you could define scalar and vector nets and variables. You could also define memory arrays, which are one-dimensional arrays of a variable type. Verilog-2001 allowed multi-dimensioned arrays of both nets and variables, and removed some of the restrictions on memory array usage.
SystemVerilog takes this a stage further and refines the concept of arrays and permits more operations on arrays.
In SystemVerilog, arrays may have either packed or unpacked dimensions, or both. Consider this example:
reg [3:0][7:0] register [0:9];
The packed dimensions are [3:0] and [7:0]. The unpacked dimension is [0:9]. (You can have as many packed and unpacked dimensions as you like.)
Packed dimensions:
  • are guaranteed to be laid out contiguously in memory
  • can be copied on to any other packed object
  • can be sliced ("part-selects")
  • are restricted to the "bit" types (bit, logic, int etc.), some of which (e.g. int) have a fixed size.

By contrast, unpacked dimensions can be arranged in memory in any way that the simulator chooses. You can reliably copy an array on to another array of the same type. For arrays with different types, you must use a cast, and there are rules for how an unpacked type is cast to a packed type. Unpacked arrays can be any type, such as arrays of reals.
SystemVerilog permits a number of operations on complete unpacked arrays and slices of unpacked arrays. For these, the arrays or slices involved must have the same type and the same shape – i.e. exactly the same number and lengths of unpacked dimensions. The packed dimensions may be different, as long as the array or slice elements have the same number of bits.
The permitted operations are:
  • Reading and writing the whole array
  • Reading and writing array slices
  • Reading and writing array elements
  • Equality relations on arrays, slices and elements

SystemVerilog also includes dynamic arrays (the number of elements may change during simulation) and associative arrays (which have a non-contiguous range).
To support all these array types, SystemVerilog includes a number of array querying functions and methods. For example, you could use $dimensions to find the number dimensions of an array variable.

Typedef

SystemVerilog’s data type system allows you to define quite complex types. To make this kind of code clear, the typedef facility was introduced. Typedef allows users to create their own names for type definitions that they will use frequently in their code. Typedefs can be very convenient when building up complicated array definitions.
typedef reg [7:0] octet;
octet b;
is the same as
reg [7:0] b;
and
typedef octet [3:0]
quadOctet;
quadOctet qBytes [1:10];
is the same as
reg [3:0][7:0] qBytes [1:10];

Enum

SystemVerilog also introduces enumerated types, for example
enum { circle, ellipse, freeform } c;
Enumerations allow you to define a data type whose values have names. Such data types are appropriate and useful for representing state values, opcodes and other such non-numeric or symbolic data.
Typedef is commonly used together with enum, like this:
typedef enum { circle, ellipse, freeform } ClosedCurve;
ClosedCurve c;
The named values of an enumeration type act like constants. The default type is int. You can copy them to and from variables of the enumeration type, compare them with one another and so on. Enumerations are strongly typed. You can’t copy a numeric value into a variable of enumeration type, unless you use a type-cast:
c = 2;               // ERROR
c = ClosedCurve'(2); // Casting – okay
However, when you use an enumeration in an expression, the value you are working with is the literal’s integer equivalent; so, for example, it’s okay to compare an enumeration variable with an integer; and it’s okay to use an enumeration value in an integer expression.

Stuct and Union

Finally, SystemVerilog introduces struct and union data types, similar to those in C.
struct {
int x, y;
} p;
Struct members are selected using the .name syntax:
p.x = 1;
Structure literals and expressions may be formed using braces.
p = {1,2};
It is often useful to declare a new structure type using typedef and then declare variables using the new type. Note also that structs may be packed.
typedef struct packed {
int x, y;
} Point;
Point p;
Unions are useful where the same hardware resources (like a register) can store values of different types (e.g. integer, floating point, …)

Puzzle - The Spy

This one I heard a while back and saw that a version of it also appears in Peter Winkler’s excellent book Mathematical Puzzles - A Connoisseur’s Collection. Here is the version that appears in the book:

A spy in an enemy country wants to transmit information back to his home country.
The spy wants to utilize the enemy country’s daily morning radio transmission of 15-bits (which is also received in his home country). The spy is able to infiltrate the radio station 5 minutes before transmission time, analyze the transmission that is about to go on air, and can either leave as it is, or flip a single bit somewhere in the transmission (a flip of more than one bit would make the original transmission too corrupt).

how much information can the spy transmit to his operators?

remember:

  • The transmission is most likely a different set of 15-bits each day but can also repeat the last day’s transmission. Best, assume it is random
  • The spy is allowed to change a maximum of 1 bit in any position
  • The spy has agreed on an algorithm/strategy with his operators before he was sent to the enemy country
  • No other information or communication is available. the communication is strictly one way
  • The spy sees for the first time the intended daily transmission 5 minutes before it goes on the air, he does not hold a list of all future transmissions
  • The information on the other end should be extracted in a deterministic way

I believe this one is too tough for an interview question - it took me well over an hour to come up with a solution (well, that actually doesn’t say much…). Anyways, this is definitely one of my favorite puzzles.



This puzzle created some interest, but apart from one non-complete solution which demonstrates the principle only, I didn’t receive any other feedback. Here is my own solution, which is different than the one given in the Winkler book. Naturally, I believe my solution is easier to understand, but please get the Winkler book, it is really that good and you could decide for yourself.

Now for the reason you are reading this post… the solution… oh, if you don’t remember the puzzle, please take a few moments to re-read it and understand what it is all about.

I will (try to) prove that 16 different symbols can be transmitted by flipping a single bit of the 15 which are transmitted daily.
First, for convenience reasons we define the 15-bit transmission as a 14-0 vector.
We will now define four parity functions P0,P1,P2,P3, as follows:

spy_solution1.png

Why these specific functions will be clear in a moment.
Let’s try to view them in a more graphical way by marking above each bit in the vector (with the symbols P0..P3) iff this bit affects the calculation of the respective “P-function”. For example, bit 11 is included in the formula for P0 and P3 therefore we mark the column above it with P0 and P3.
So far so good, but a closer look (diagram below) on the distribution of the “P-functions” reveals why and how they were constructed.

spy_solution2.png

The “P-functions” were constructed in such a way that we have 1 bit which affects only the calculation of P0, one bit which affects only P0 and P1, one which affects only P0 and P2 and so on… Try to observe the columns above each of the bits in the vector - they span all the possible combinations!

From here the end is very close.
The operators on the receiving side have to calculate the P0..P3 functions and assemble them into a 4-bit “word”.
All the spy has to do, is calculate the actual “P-functions” given by today’s random transmission and get a 4-bit “word”. The spy compares this to the 4-bit “word” she wants to transmit and discovers the difference - or in other words: the bits which need to be flipped in order to arrive from the actual “P-functions” to the desired “P-functions”. She then looks up in the diagram above and flips exactly that bit which corresponds to exactly the “P-functions” that she needs to flip. A single bit flip will also toggle the corresponding “P-function/s”.

Since the above wording may sound a big vague, here is a table with some examples:

spy_solution3.png

I have to say this again, This is really one of the most beautiful and elegant puzzles I came across. It is definitely going into “the notebook”…

Wednesday, August 29, 2007

简单做(ZTD)习惯培养5:信任的系统

  • 好习惯:简易信任的系统—— 建立简单的列表,并每日查看

许多GTD的使用者都习惯研究工具,创造复杂的实施系统,频繁更换使用的工具和系统,但这些都没有再帮你把事情搞定。ZTD是关于行动的系统,而非工具。所以ZTD希望你尽可能的使用简单的工具。记住,你真正需要的仅仅是一些列表而已。

GTD需要你将自己的任务(下一步行动)放到一系列的情境清单中,比如@工作、@电话、@家里、@差事、@等待, 等等。基本来说,你需要问自己:“基于我所在的场合以及我现有的工具,我现在能完成什么?”然后去完成这个任务。GTD通过将你的列表按情境划分从而简化了这一过程,你只需要去考虑自己现在所处的情境就好,不用去想其他的情境。GTD中还有其他一些清单,比如说“将来/某时”(Someday/Maybe清单:现在不能完成但以后可能会做的事)和“等待列表”。

收集的习惯已经再前面讨论过了,但现在的问题是:该用什么工具来记录你的列表。以下是我的推荐的一些简单、有效的GTD工具:

  • Simple GTD:这是我的最爱,也是我正在使用的工具。我使用它便是因为的简单和易用。Simple GTD没有很多功能,但提供的都能满足你的需求,去尝试一下吧。
  • Moleskine:这也是我的最爱。事实上,任何能装进口袋的笔记本都非常不错,简单的笔记本对实施GTD来说完美极了。但Moleskine真的很特别, 它很漂亮也很易用。所以我强烈推荐它
  • Hipster PDA:Hipster PDA不是电子产品,它由一叠卡片和一个夹子组成。你可以找到它的模板然后打印出来,也可自己动手做。其方便之处在于卡片用完之后,你可以随时更换卡片。请参考《向您介绍Hipster PDA》和《组织你的Hiptster PDA》
  • Tadalist:可能是这里面最简单的工具了,Tadalist就是一个简单的列表工具。界面不错,可以建立无数多的清单,打印它们,非常简单。
  • Todoist:另一款非常简单的任务清单管理工具。它有一些额外的功能,但也不是很复杂。我不太喜欢它的界面,也许你会觉得它不错的。
  • Thinkingrock:一款非常实用的GTD桌面软件。完全按照GTD的思想,简单易用,可以在各个平台上使用。请参考《ThinkingRock:最好的GTD软件》和《ThinkingRock:最好的GTD软件2》

一旦你选好工具,就马上开始记录,并且要记得要简单。

这个习惯的另一部分——每天查看你的列表,也是很重要的部分(比你用什么工具重要得多)。你需要把它培养成一种习惯,这大概会需要三十天。一旦你养成每日检查列表的习惯后,你的生活将更有条理,也更有效率。

简单做(ZTD)习惯培养4——执行

  • 好习惯:一心一意,每次只执行一件事

执行,作为一切时间管理的核心,同样是ZTD中非常重要的一部分。如果你不执行计划的行动,那其他的所有管理习惯也就是无意义的,你准备的工具、管理系统、计划列表、任务清单等等也就是白费了。所以执行是所以习惯中最最重要的!

ZTD着重于在不分心的情境下,一次只执行一件事。千万不要多线工作,也不要让你的工作突然中断。这里是一些建议,希望你能够真正地执行行动并且完成它们:

  1. 重大事件(Big Rocks):选择一个任务(最好是每日最重要的任务之一),做出决定:是一次全部完成、还是现在抽出一段时间(30分钟)去做它。更详细请参考《放置大石头的艺术:让你的效率翻倍》。
  2. 选择好环境:在你开始工作前,消去所有使你分心的事。关闭Email、关上手机、拔掉网线等等,把办公桌上堆积的混乱的东西写清理干净。
  3. 记录时间:设置一个计时器(像CoolTimer等等),或者尽可能的集中于你的任务不要松懈,不让自己变得心烦意乱的。
  4. 避免干扰:如果你在执行时被干扰了,马上把这些新到的信息或者任务记录到你的笔记本或收集箱中,然后继续原来的任务。重申一遍,千万不要尝试多线工作。
  5. 快速调整状态:如果你必需去检查你的Email或者执行其他的任务,那停下来,深呼吸,重新使自己的思绪集中,调整到正确的状态再继续任务。
  6. 不可避免的中断:无论如何,有时总会碰到一些我们无法避免和拖延的事情而中断现在的任务。当遇到这个情况时,把现在的任务进度记录下来,把所用的资料也都整理放到一旁。当你弄完那些无法避免的任务后,简单地把所有的资料重新拿出来,然后再看看记录的任务进度,又可以马上开始原来的任务了。
  7. 享受休息:深呼吸,舒展一下身子,在工作时也要享受好的休息。身体可是革命的本钱,千万不要亏待了哦~
  8. Ahhh:当你完成任务后,表扬你自己!奖励你自己上一会儿网,看一会儿电视——但是不要太长了(10分钟),然后继续你的下一步行动。千万不要让你被奖励冲昏了头脑,忘记了下面的任务。

简单做(ZTD)习惯培养3——计划

  • 好习惯:设定每天,每周的最重要的事(MIT)

每周,列下你需要完成的重大事件,把他们排进日程表。每天,列出1-3个最重要的事(MITs)。记住一定要保证你有很好的完成这些最重要的事。

这是ZTD中最简单也是最重要的一个习惯。它为你的每一天和每一周都设定了目标,因为与其去盲目的去完成那长长的任务清单,你总是在完成那些最重要 最有用的事情!当然,你还是要去完成其余的事情的。但是完成最重要的任务,会使你知道自己总在做真正想做的事——那些当你回顾的时候,会感到自豪的事,而 不会操劳一天后却发现自己一无所成。 以下是一些如何运用这个好习惯的小技巧:

  1. 重大事件(Big Rocks):在每周开始的时候(星期天 或星期一),坐下来看看你的任务清单。想想这周你最想要完成什么?刚开始的时候尽量将数目限制在4-6件,待到熟练了且你觉得自己能完成更多的时候,再添 加多的任务。不要忘了要确保这些重大事件中包含至少一项与你年度目标有关的任务。更详细请参考《放置大石头的艺术:让你的效率翻倍》。
  2. 安排日程:将本周重大事件放在你的周程计划中。每天放置只一个或两个,否则你会忙不过来。并且分出1-2小时的时间去完成它们,尽量把时间安排得越早越好。放置好这些重大事件后,你就可以计划其它的不是那么重要的事情了。
  3. 最重要的任务:每天早上,马上决定今日最重要的任务。这和你的重大事件很相似,每日选择1-3个最重要的任务,而这其中可能包括一个你已经安排了的重大事件和其它几个最重要的任务。同样的,尽量将它们安排在尽可能早的时段。如果安排的太晚,你常常会被其他的任务干扰,而导致任务失败。
  4. 完成它们:前面说的这些无非就是为了搞定这些最重要的任务。每天早上做的第一件事就是完成第一件最重要的任务,远离干扰,把所有精力都放在任务上直到完成它为止。做完之后可以简单的奖赏自己。然后去完成第二件最重要的任务!
  5. 回顾:如果你完成了最重要的任务,那一定感觉这一天特别棒。所以要记得回顾你所完成的,顺便表扬自己一下

简单做(ZTD)习惯培养2——处理

更简单,更具行动力的终极高效系统:Zen To Done(简易做) 翻译系列,赶快到褪墨上阅读吧~

  • 好习惯:快速地对信息作出决定,从而避免收件箱堆积

收件箱中的原料(stuff)的堆积是造成耽搁的重要原因。只有及时处理信息,对原料及时做出决定和归纳成类,你才能避免原料的堆积。我建议每天至少处理一次你的收件箱,若有需要你可能要更频繁地整理。

第一,限制你的收件箱。你需要查看的信息和资料都会在收件箱中。如果有很多的收件箱,便需要更多的时间去管理好它们。所以尽量减少你的收件箱数量,刚好满足你的需求即可。

列出所有你收集信息的途径,评估每一条途径带来的价值,合并某些收件箱或者删除那些无用的收件箱。若 认定某条途径没有价值,就抛弃它一周,然后再考虑是否确实要删除它。对于其他的一些途径,想想能够将它们合并成一个收件箱。比方说:家中 有好几个地方被你用来存放收到的信息?那改用一个收件箱来收集所有的邮件、工作记录、学校笔记、电话表、电脑输出文件、时间表等等。你有四个email邮 箱?尝试让它们都转发到一个邮箱中。总之,越少越好,尽量将收件箱数量控制在4~7左右。

第二,管理你的收件箱。长期 阅读 我博客的读者应该会觉得挺耳熟的,但是我还是要反复地强调:不要让你的收件箱溢出。留着大量未完成的原料未处理,绝对会让你感到巨大的压力。所以,赶快成为自己收件箱的管理大师!

每天检查并且处理你的收件箱。有一些收件箱,你可能需要检查几次(我每小时检查一次email),但是不要频繁的检查。这只会浪费你的时间,降低你的工作 效率 。但是也不能一天之内一次也不检查,否者你的原料又会堆积起来,记住堆积是你最大的敌人。

  1. 从上往下处理信息,马上做出决定。从收件箱中的第一项开始,立刻做出决定,不要跳过、拖后或延迟做出决定。
  2. 删除。如果你不需要这条信息,就删掉它(总是保持这个为优先选择)。
  3. 委派他人。你是做这件事的合适人选吗?如果不是,交给最适合的人。
  4. 立刻完成。如何这件事需要的时间少于两分钟,那立即完成它,而不要放到 任务清单 中。
  5. 等下在做的任务。如果这件事需要的时间多过两分钟,马上把它列入任务清单中,并且等下马上完成它。
  6. 制作档案。你需要额外的参考文件来完成某件事情,那赶快为它制作一个档案。
  7. 无论如何,不要让收件箱里有剩余的项目。删除或者制作档案,处理每一个项目直到收件箱为空。注意,如果你的收件箱中有上百的项目,那最好把它们放入另一个文件箱中等下处理(专门搁出几个小时去处理它们),接着再继续处理新进入收件箱中的信息。
  8. 重复这些步骤,保持你的收件箱为空。如果你有限制自己的收件箱数量,实现这一点并不难。保持收件箱为空会让你觉得棒极了,庆祝一下?!记住,不要一整天都在处理收件箱,最好形成习惯总是在固定的时刻去处理它们。

简单做(ZTD)习惯培养1——收集

更简单,更具行动力的终极高效系统:Zen To Done(简易做) 翻译系列,赶快到褪墨上阅读吧~

这个习惯与 GTD 的完全一样:把所有在脑海里浮现的信息( 任务 , 想法, 项目 等等)记录到随身携带的小本子上(或者任何适合你的工具)。因为只有把信息从脑海里拿出来记在纸上,你才不会忘记它们。

ZTD只需要一个小巧、便携、易用的工具来记录信息——最好是一本小笔记本或者一小叠卡片,因为它们比PDA或者笔记本电脑更易于携带和方便使用(可以随意选择其他的工具)。每当你回到家或者办公室时,就立刻把信息从笔记本中清空,存入 任务清单 中(一个简单的任务清单就可以了)。

对于这个习惯,我更推荐大家使用纸质的工具而不非电子产品,比方说:非常流行的Moleskine笔记本和Hipster PDA。 如果觉得使用PDA或者Smartphone更适合你,那当然也可以。我推荐纸质工具的原因是因为它们速度快。使用电子产品,你先要开机,然后进入合适的 程序,最后添加条目才能开始输入。若使用纸笔,你只需要拿出来写就行了。总之什么工具更适合你,就采用什么工具。我只是认为工具越简单易用, 你就越有可能去使用它。

全面收集的关键在于你必需在忘记事情之前赶紧把信息写下来, 并且尽快地把这些信息从笔记本中清除、存入任务清单中。千万不要拖延上面几步,否则信息会积累得越来越多,最后让你失去坚持下去的 动力 。记住要积极主动地规划你所收集的信息,不要让信息堆积堵塞你的动力。同样的,无论你在哪里(床上,商店,住院,等等),都要随身携带你的记录工具。最后再重申一遍,不管你用的是什么工具,它必须便于携带且能快速的记录信息。

Tuesday, August 28, 2007

更简单,更具行动力的终极高效系统:Zen To Done(简易做)

更简单,更具行动力的终极高效系统:Zen To Done(简易做) 翻译系列,赶快到褪墨上阅读吧~

Getting Things Done作为目前最好的提高效率的系统之一,我也是其忠实粉丝。可是, GTD系统并不是绝对完美的。所以以此为基础,我建立了一套新的提高效率 (Productivity)的系统:Zen To Done(ZTD)。 [译者注:我们为ZTD起了一个中文名字:简易做。]

与GTD相比,ZTD 更崇尚简单,更注重行动,同时也保持了GTD系统中非常完美的收集信息和规划行动的方法。

如果GTD并不是完全适合你,那为什么不试一试ZTD?从更实际的角度, 改变和培养好习惯 ;更注重行动和建立更简单的系统结构 —— 赶快阅读Zen To Done。

  • 什么是ZTD(简易做)?

ZTD(简易做)致力于解决在实施GTD的过程中五个许多人都会遇到的问题。我应该首先指出的是,GTD 并没有本质上的缺陷因而并不需要本质上的调整。然而人人都有自己的独特之处,ZTD希望为不同个性的人们定做出适合他们的方案。

  • GTD中的问题和ZTD的解决方法?

1)GTD需要改变很多习惯。这 是很多人学习GTD最终失败的主要原因:GTD需要一次改变很多习惯. 如果有长期阅读Zen Habits,你就会知道“伤其十指,不如断其一指”的道理。与其一次改变很多习惯然后失败 ,不如将精力集中在改变一个习惯而最终成功.另外, 很多学习GTD的人都没有使用有效的方法来改变他们的习惯,从而导致失败。

ZTD解决办法:一次只改变一个习惯。你 不必一下子就接受整个系统:一次接受太多新习惯将使人不能将精力集中在改变习惯上。相反, 一次只改变一个习惯,使用那些已经被证明行之有效的方法(30天挑战, 承诺, 自我激励)等等[弥缝注: 最近将陆续翻译 这些话题,请关注褪墨Blog),最后一步一步地采纳整个系统。

2)GTD对于行动的过程没有足够重视。虽 然称作Getting Things Done,事实上GTD把很多时间都用在整理信息上了,存储信息到我们信赖的GTD系统中。《Getting Things Done》介绍了一种优秀的管理系统,它拥有实用的收集和处理信息的步骤方法,但是在完成实际任务的环节上却没有足够地深入探讨。

ZTD解决办法:注重行动。它将教你如何用简单,无压的途径完成你的任务。

3)GTD对于很多人缺少结构性。不具有严谨的结构是GTD的一个特点, 但是由此带来的GTD的即时决定, 反而让许多人产生困惑. 对于一些人, 他们在 生活 中需要有条理. 这样,GTD可能不能满足他们的要求. 毕竟不同的人有不同的管理方式。

ZTD的解决办法:培养两个习惯来加强组织性。第一个是加强 计划 的习惯,你只需要简单地计划好每天的三个MIT(最重要的事)和每周必需完成的事情(每周的大事)。第二个是要养成有规律的习惯。 你应该让自己每日和每周更有规律。就像ZTD所有的习惯一样,这些习惯都不是必需的。如果它们不适合你,那就不必采纳它们。但是对多数人来说,它们都会对GTD的很多部分贡献很多。

4) GTD 要做得太多。这样很可能导致压力太大而最终放弃。GTD 并不区分你的“收件箱”中所收到的任何东西,这也许是它的优点。然而问题出现在当我们把所有的事务都放在我们的 任务清单 上,我们要去做的是列表上所有事情,最终我们会因为超载而失败。这并不是GTD本身的问题,而是我们自己在实施GTD的过程中会出现的问题。但不管怎样,它应该被讨论。

ZTD的解决办法:加强简化. 删去尽可能多的无用任务, 这样就能把精力放在重要的事情上面并且努力做好它们。

5) GTD 对目标重视不足. GTD是一个自下而上,循序渐进的系统,尽管GTD谈到了更高的层面, 但它并没有进行深入的讨论——GTD能把你身边发生的事情都管理的很好,而对那些你真正应该做的要事重视缺乏。

ZTD的解决办法:确定最重要的事。正如上面所说的,ZTD让你找出本周,本日最需要完成的大事. ZTD需要每周回顾自己的任务, 并且在一个长时期内保持这个习惯。虽然GTD也包括这方面的内容, 但ZTD将进一步拓展这个习惯。最后,GTD是一套杰出的系统,而且非常好用。 但ZTD希望解决了人们在实施GTD的时候出现的一些问题进而使之更好的适用于现实生活。

Monday, August 27, 2007

为什么“一天一苹果,医生远离我”

我们都知道这句谚语“一天一苹果,医生远离我”,你知道为什么吃苹果这么有益吗?吃其他的水果不是也能对身体有好处吗?其实,苹果对身体健康的帮助可不止一般哦:

  1. 苹果含有丰富的维生素C,而维生素C可以帮助你强化免疫系统;
  2. 预防心脏病,因为苹果中所含的黄酮类物质有抗氧化的功效,可以对预防心脏病的产生积极的作用;
  3. 苹果是低卡路里(热量)。每个苹果的热量介于70-100卡路里之间,其热量仅相当于甜食的1/4。而且吃苹果可以遏制想吃甜食的欲望;
  4. 预防癌症,因为苹果对结肠癌、前列腺癌和乳腺癌等都起着预防作用;
  5. 苹果中的多酚能帮助降低胆固醇,从而预防胆结石;
  6. 预防蛀牙的形成。苹果的汁液能将口中80%的细菌消灭,所以每天一个苹果,就可以跟牙医拜拜了~
  7. 预防脑部疾病。苹果中所含的栎精可以预防老年痴呆症以及帕金森氏综合征;
  8. 使肺变得更健康。英国诺丁汉大学的一份研究报告表明:每周食用超过5个苹果,能减少包括哮喘在内的呼吸道疾病的发生。
  9. 苹果的味道非常鲜美!所以要多吃苹果,身体好好。

Thursday, August 23, 2007

有史以来最简单的Symbian证书生成器-软件签名-2合1

由于信安易签名的不公开性,我们无法得知用它申请的证书的权限到底有多大!从而也导致很多人用它签名后手机仍然无法使用的问题!这个问题在NOKIA N73升级 V4 版本后尤为突出,用信安易签名的软件都不能使用!而用最老的方法到https://www.symbiansigned.com/
注册一个使用帐号,申请证书,然后用DOS签名工具signsis签名后的软件则完全使用正常!而且信安易签名专家正式版v1.0 要求注册, 需要验证email和注册码,这点很烦! 最近不知道怎么搞的,又不能申请新的帐号!

今 天找到这个“Symbian证书生成器-软件签名-2合1(免输验证码版) V1.1.5 (20070627)”,用了下,觉得不错,而且最重要的就是它是完全使用的以前老的方法申请证书以及签名,只是把它后台化了一些,这样签名的软件是最好 的!非常感谢软件作者“醉开心”,兄弟辛苦了!推荐大家使用!

制作证书再也不用麻烦啦,点一个按钮自动生成证书, 还可以直接签名的哦 !
1,证书制作功能:填入手机串号,点击开始制作按钮,稍候1分钟左右,证书即可生成,点击下载证书按钮可下载保存到本地计算机.
2,签名功能:选定证书文件\需要签名的软件\签名后输出路径,点击执行签名,稍候5秒左右即可签名成功.
使用时请选择"我没有塞班网站的账号"
uploads/200706/1098.jpg

uploads/200706/10998.jpg


由于https://www.symbiansigned.com网站改版加了图片字母输入验证,2007年6月29日01时00分紧急更新为Symbian证书制作软件签名2合1(开心智能版) V1.2.0(20070629)!由于网站的改版,所以在使用中会要求输入2次验证码,请大家注意!

正 常情况下,本软件是能完成所有功能的.本软件支持XP,2000,其他操作系统未测试.如果在XP和2000下,出现一些错误,绝大多数原因是由于证书服 务器无响应造成的.看软件上方的提示栏"进展"中的消息就明白了.等在合适的时候再申请就是了.一般是凌晨和早上申请证书的速度很快.
Click Here To Download