统计代码行数

用终端到程序目录下输入下面的命令:


find ./ -name "*.m" -exec cat {} \; |wc -l


find ./ -name "*.h" -exec cat {} \; | wc -l


两个数相加就是

Filtering Fun with Predicates

原文:http://www.drobnik.com/touch/2010/03/filtering-fun-with-predicates/

Being present longer than iPhone OS exists on the Mac platform NSPredicate was only introduced to us iPhone developers in Version 3.0 of the SDK. They have multiple interesting uses, some of which I am going to explore in this article.

You will see how you can filter an array of dictionaries, learn that the same also works for your own custom classes. Then we’ll see how to replace convoluted IF trees with simple predicates. We’ll explore how to use predicates to filter entries of a table view and finally peek into the inner workings of predicates.

Being simple and powerful at the same time it took me 3 hours to write this article. I hope you don’t give up halfway through it, because I promise it will be a great addition to your skillset as iPhone developer.
One interesting use of predicates is to filter an array for entries where a specific key matches some criteria. In the following example I am adding four people to an array in the form of individual dictionaries. Then I’m filtering for all the entries that contain the letter o in lastName.

NSMutableArray *people = [NSMutableArray array];[people addObject:[NSDictionary dictionaryWithObjectsAndKeys:   @"Oliver", @"firstName",   @"Drobnik", @"lastName", nil]];[people addObject:[NSDictionary dictionaryWithObjectsAndKeys:   @"Steve", @"firstName",   @"Jobs", @"lastName", nil]];[people addObject:[NSDictionary dictionaryWithObjectsAndKeys:   @"Bill", @"firstName",   @"Gates", @"lastName", nil]];[people addObject:[NSDictionary dictionaryWithObjectsAndKeys:   @"Obiwan", @"firstName",   @"Kenobi", @"lastName", nil]];NSPredicate *predicate = [NSPredicate predicateWithFormat:@"lastName CONTAINS[cd] %@",@"o"];NSArray *filteredArray = [people filteredArrayUsingPredicate:predicate];NSLog(@"%@", filteredArray);

Note that the [cd] next to the operator like causes it to ignore case and diacritics. Case is obvious, o = O. Diacritics are “ancillary glyphs added to a letter”, e.g. ó which is adding an accent to a plain o. With the [d] option o == ò == ö.

In the sample I am creating a new filtered array, but NSMutableArray also has a method to do it in-place. filterUsingPredicate leaves only matching items in the array.

A variety of operators is possible when dealing with string properties:

  • BEGINSWITH
  • CONTAINS
  • ENDSWITH
  • LIKE – wildcard characters ? for single characters and * for multiple characters
  • MATCHES – ICU v3 style regular expression

Predicates can be very useful to avoid monstrous IF trees. You can chain multiple predicates with the logical operators AND, OR and NOT. To evaluate an expression on a specific object use the predicate’s evaluateWithObject method.

NSDictionary *person = 	[NSDictionary dictionaryWithObjectsAndKeys:   @"Steve", @"firstName",   @"Jobs", @"lastName", nil];NSPredicate *predicate = [NSPredicate predicateWithFormat:   @"firstName ENDSWITH %@ AND lastName BEGINSWITH[c] %@",   @"eve", @"j"];if ([predicate evaluateWithObject:person]){NSLog(@"Is YES, matches");}

Now in the above samples we’ve only been using NSDictionary to old our firstName and lastName properties. A quick experiment shows us if this is also working for our own custom classes. Let’s create a Person class for this purpose. This only has our two properties plus an overriding description to output useful information and a class method to quickly create a Person instance.

Person.h

@interface Person : NSObject {NSString *firstName;NSString *lastName;}@property (nonatomic, retain) NSString *firstName;@property (nonatomic, retain) NSString *lastName;+ (Person *)personWithFirstName:(NSString *)firstName lastName:(NSString *)lastName;@end

Person.m

#import "Person.h"@implementation Person@synthesize firstName, lastName;+ (Person *)personWithFirstName:(NSString *)firstName lastName:(NSString *)lastName{Person *person = [[[Person alloc] init] autorelease];person.firstName = firstName;person.lastName = lastName;return person;}- (NSString *)description{return [NSString stringWithFormat:@"<%@ '%@ %@'>",NSStringFromClass([self class]),firstName,lastName];}- (void) dealloc{[firstName release];[lastName release];[super dealloc];}@end

Now let’s see if we still get the same result if we do the same filtering of an array, this time with our own Person instances in it.

Person *person1 = [Person personWithFirstName:@"Oliver" lastName:@"Drobnik"];Person *person2 = [Person personWithFirstName:@"Steve" lastName:@"Jobs"];Person *person3 = [Person personWithFirstName:@"Bill" lastName:@"Gates"];Person *person4 = [Person personWithFirstName:@"Obiwan" lastName:@"Kenobi"];NSArray *people = [NSArray arrayWithObjects:person1, person2, person3, person4, nil];NSPredicate *predicate = [NSPredicate predicateWithFormat:@"firstName CONTAINS[cd] %@",@"i"];NSArray *filteredArray = [people filteredArrayUsingPredicate:predicate];NSLog(@"%@", filteredArray);

Yup! Still works! Now is that cool or what? One obvious use for predicates is to filter the data array in a table view controller to only match the contents of your search box.

To try this out we need to do the following:

  1. create a new navigation-based iPhone application, WITHOUT CoreData
  2. copy the Person header and implementation files to the new project
  3. replace the RootViewController header and implementation as shown below.

RootViewController.h

#import <UIKit/UIKit.h>@interface RootViewController : UITableViewController <UISearchDisplayDelegate, UISearchBarDelegate>{NSArray *people;NSArray *filteredPeople;UISearchDisplayController *searchDisplayController;}@property (nonatomic, retain) NSArray *people;@property (nonatomic, retain) NSArray *filteredPeople;@property (nonatomic, retain) UISearchDisplayController *searchDisplayController;@end

RootViewController.m

#import "RootViewController.h"#import "Person.h"@implementation RootViewController@synthesize people, filteredPeople;@synthesize searchDisplayController;- (void)dealloc{[searchDisplayController release];[people release];[filteredPeople release];    [super dealloc];}- (void)viewDidLoad{    [super viewDidLoad];self.title = @"Search People";Person *person1 = [Person personWithFirstName:@"Oliver" lastName:@"Drobnik"];Person *person2 = [Person personWithFirstName:@"Steve" lastName:@"Jobs"];Person *person3 = [Person personWithFirstName:@"Bill" lastName:@"Gates"];Person *person4 = [Person personWithFirstName:@"Obiwan" lastName:@"Kenobi"];people = [[NSArray alloc] initWithObjects:person1, person2, person3, person4, nil];// programmatically set up search barUISearchBar *mySearchBar = [[UISearchBar alloc] init];[mySearchBar setScopeButtonTitles:[NSArray arrayWithObjects:@"First",@"Last",nil]];mySearchBar.delegate = self;[mySearchBar setAutocapitalizationType:UITextAutocapitalizationTypeNone];[mySearchBar sizeToFit];self.tableView.tableHeaderView = mySearchBar;// programmatically set up search display controllersearchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:mySearchBar contentsController:self];[self setSearchDisplayController:searchDisplayController];[searchDisplayController setDelegate:self];[searchDisplayController setSearchResultsDataSource:self];[mySearchBar release];}#pragma mark Table view methods- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{if (tableView == self.searchDisplayController.searchResultsTableView){        return [self.filteredPeople count];    }else{        return [self.people count];    }}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{    static NSString *CellIdentifier = @"Cell";    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];    if (cell == nil) {        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];    }Person *person;if (tableView == self.searchDisplayController.searchResultsTableView){        person = [self.filteredPeople objectAtIndex:indexPath.row];    }else{        person = [self.people objectAtIndex:indexPath.row];    }cell.textLabel.text = [NSString stringWithFormat:@"%@ %@",   person.firstName, person.lastName];    return cell;}#pragma mark Content Filtering- (void)filterContentForSearchText:(NSString *)searchText scope:(NSString *)scope{NSPredicate *predicate;if ([scope isEqualToString:@"First"]){predicate = [NSPredicate predicateWithFormat: @"firstName CONTAINS[cd] %@", searchText];}else{predicate = [NSPredicate predicateWithFormat: @"lastName CONTAINS[cd] %@", searchText];}self.filteredPeople = [people filteredArrayUsingPredicate:predicate];}#pragma mark UISearchDisplayController Delegate Methods- (BOOL)searchDisplayController:(UISearchDisplayController *)controllershouldReloadTableForSearchString:(NSString *)searchString{    [self filterContentForSearchText:searchString scope: [[self.searchDisplayController.searchBar scopeButtonTitles]  objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]];    // Return YES to cause the search result table view to be reloaded.    return YES;}- (BOOL)searchDisplayController:(UISearchDisplayController *)controllershouldReloadTableForSearchScope:(NSInteger)searchOption{    [self filterContentForSearchText:[self.searchDisplayController.searchBar text] scope: [[self.searchDisplayController.searchBar scopeButtonTitles]  objectAtIndex:searchOption]];    // Return YES to cause the search result table view to be reloaded.    return YES;}@end

Adding the search display controller is responsible for most of the additional code in this example. Just getting the filtered people to match our search has become very simple due to NSPredicate as you can see in the filterContentForSearchText method. The two UISearchDisplayController Delegate methods are called whenever you type something in the search box or switch between the scope buttons. In this case I am showing how to switch between searching in first names and last names.

The table view for the search results is actually dynamically created when needed. As it’s using the same data source and delegate methods as the original table view we need to respond differently based on which table view the methods are being called for. This is the reason for the IF in each of these methods. If we are in the search results we take the filteredPeople array, otherwise we use the original people array.

NSPredicate was only introduced into the iPhone SDKs as of version 3.0, so my guess is that there might a few instances in your code where you could simplify the logic with replacing a big IF tree with a simple predicate. Down the road, they are the only method how you can filter data coming from a fetch in CoreData.

In this article I’ve only used the predicteWithFormat method to create them. That’s actually a tremendous shortcut, because internally predicates are themselves consisting of several parts, mostly NSExpression instances. So if you feel that your code has become way too easy to understand by using predicates you can also replace them with the original composition.

Using expressions the general approach is to define a left hand expression and a right hand expression and put these into an NSComparisonPredicate. I’m just showing this here so that you can appreciate the simplicity of the shortcut method presented earlier.

NSExpression *lhs = [NSExpression expressionForKeyPath:@"firstName"];NSExpression *rhs = [NSExpression expressionForConstantValue:@"i"];NSPredicate *predicate = [NSComparisonPredicate   predicateWithLeftExpression:lhs   rightExpression:rhs   modifier:NSDirectPredicateModifier   type:NSContainsPredicateOperatorType   options:NSCaseInsensitivePredicateOption | NSDiacriticInsensitivePredicateOption];// same as://NSPredicate *predicate = [NSPredicate predicateWithFormat:@"firstName CONTAINS[cd] %@", @"i"];

Component predicates are achieved the long way in a similar fashion by using NSCompoundPredicate, but there is no using going into these dark depths when the shortcut is so much more convenient.

Finally another hint without going into details: Predicate Templates. You can define any predicate with $Variables instead of an expression. Then when you need them you can use [template predicateWithSubstitutionVariables:] with a dictionary of values to substitute for the $Variables to prep a predicate ready for use.

how to use TouchXML

iphoen do not have NSXML* librarys, wo can instead with touchxml,TouchXML is a lightweight replacement for Cocoa’s NSXMLcluster of classes. It is based on the commonly available Open Source libxml2 library.

1. Getting the TouchXML Libraries

you can dowload  TouchXML library from TouchCode

2. add  TouchXML Libraries to your project

find the guid here TouchXMLHowTo

3. use  TouchXML in your project

import touchxml.h
#import “TouchXML.h”

use  CXMLDocument to parse xml

// grabRSSFeed function that takes a string (blogAddress) as a parameter and
// fills the global blogEntries with the entries
-(void) grabRSSFeed:(NSString *)blogAddress {

// Initialize the blogEntries MutableArray that we declared in the header
blogEntries = [[NSMutableArray alloc] init];

// Convert the supplied URL string into a usable URL object
NSURL *url = [NSURL URLWithString: blogAddress];

// Create a new rssParser object based on the TouchXML “CXMLDocument” class, this is the
// object that actually grabs and processes the RSS data
CXMLDocument *rssParser = [[[CXMLDocument alloc] initWithContentsOfURL:url options:0 error:nil] autorelease];

// Create a new Array object to be used with the looping of the results from the rssParser
NSArray *resultNodes = NULL;

// Set the resultNodes Array to contain an object for every instance of an node in our RSS feed
resultNodes = [rssParser nodesForXPath:@"//item" error:nil];

// Loop through the resultNodes to access each items actual data
for (CXMLElement *resultElement in resultNodes) {

// Create a temporary MutableDictionary to store the items fields in, which will eventually end up in blogEntries
NSMutableDictionary *blogItem = [[NSMutableDictionary alloc] init];

// Create a counter variable as type “int”
int counter;

// Loop through the children of the current node
for(counter = 0; counter < [resultElement childCount]; counter++) {

// Add each field to the blogItem Dictionary with the node name as key and node value as the value
[blogItem setObject:[[resultElement childAtIndex:counter] stringValue] forKey:[[resultElement childAtIndex:counter] name]];
}

// Add the blogItem to the global blogEntries Array so that the view can access it.
[blogEntries addObject:[blogItem copy]];
}
}

CXMLDocument

员工绩效考核规定

员工绩效考核规定
作者:不详  来源于:转载 ,  发布时间:2004-12-17
员工绩效考核规定

 

第一章 总则
第一条 员工绩效考核的目的是使上级能够及时对部下具有的担当职务的能力以及能力的发挥程度进行分析,作出正确的评价,进而做到人尽其才,客观合理地安置组织成员,调动员工工作积极性、提高工作绩效,为薪资调整、职务变更、岗位调动、培训等人事决策提供依据。
第二条 本规定中使用的专用术语定义如下:
(一)绩效考核:为了实现第一条规定的目的,以客观的事实为依据,对员工成绩、能力和努力程度进行有组织的观察、分析和评价。
(二)业绩考核:对员工分担的岗位职责情况、工作完成情况进行观察分析和评价。
(三)品德考核:对员工在工作中表现出来的工作态度和品性进行观察、分析和评价。
(四)能力考核:通过工作行为、观察、分析和评价员工具有的能力。
(五)学识考核:对员工完成本职工作所掌握的知识、技能及应用情况进行分析和评价。
(六)考核者:人事考核工作的执行人员。(被考核者的直接上级和隔级上级)
(七)被考核者:接受人事考核者。
(八)考核执行机构:负责人事考核有关事务的机构。(行政人事部、审计部、财务部)
第三条 为了使绩效考核能公正合理地进行,考核者必须牢记以下几点:
(一) 绩效考核是大家的事,既为你自己,也为你的部下,更为整个公司。
(二) 被考核者期望自己的工作能力 能得到承认,考核者必须根据日常业务工作中观察到的具体事实作出评价。
(三) 被考核者期望得到公正的待遇,考核者必须清除对考核者的好恶感、同情心等偏见,排除对上、对下的各种顾虑,在自己的信念基础上作出公正的评价。
(四) 不对考核期外、以及职务工作以处的事实和行为进行评价。
(五) 公司对考核者寄 以厚望并充分信赖,考核者应该依据自己得出的评价结论,对被考核者进行扬长补短的指导教育。
第四条 本制度适用于副总经理级(含)以下的所有员工。

第二章 绩效考核的分类:
第五条 绩效考核分季度绩效考核和年度绩效考核
第六条 季度绩效考核是对被考核者每季度内的绩效完成情况进行考核,考核的标准是被考核者的岗位描述、工作目标和工作计划。每季度绩效考核时间安排如下:
(一) 第一季度绩效考核:4月1日—10日;
(二) 第二季度绩效考核:7月1日—10日;
(三) 第三季度绩效考核:10月1日—10日;
(四) 第四季度绩效考核:1月1日—10日。
各部门的具体绩效考核的时间安排由劳动人事部负责通知和组织。

第七条 年度绩效考核是行政人事部根据被考核者在本年度内的奖惩记录情况给予评价,并统计、汇总各季度绩效考核的得分后,得出的被考核者本年度绩效考核的最终得分。


第二章 季度绩效考核的内容及实施

第八条 每个项目所包括的考核因素如下:
第九条 业绩:对高级管理人员的业绩考核包括目标达成季度绩效考核由被考核人、被 考核人直接上级和隔级上级及考核执行机构人员其同参与。其中被考核人直接上级对被考核人的季度考核与被考核人的定期述职同时进行,考核执行机构仅派员记录、员工季度绩效考核的详细过程见“员工绩效考核程序”。
第十条 季度绩效考核中,被考核人直接上级与隔级上级所占的评分比例为7:3,即季度绩效考核满分100分,直接上级评分点70分,隔级上级评分点30分。
第十一条 公司对不同级别的员工考核的侧重点不同,因此考核的评分标准也不同,考核必须依据被考核者的级别确定相应的评分标准,评分标准分高级管理人员、普通管理人员和普通员工三种评分标准。
(一)高级管理人员的考核项目包括业绩、能力、品性和学识四项,各项所占的百分比例分别为20%,35%,20%,25%,工作品质、工作方法和进度检查四个评价因素。每个因素的内容及评分标准如下:
1、目标达成度:是指所辖区域季度计划和预算的执行情况,若超过目标5分,达到目标4分;尚可3分;欠佳2分;落后1分。
2、工作品质:是指所辖区域的办公秩序是否良好,处理事务是否按规章制度、程序进行,要求归档的文件、表单、资料的管理是否完全、齐整、有序。若上乘5分;良好4分;尚可3分;欠佳2分;很差1分。
(二)能力:对高级管理人员的能力考核包括管理统率能力、企划创新能力、判断决断能力、洞察交际能力,培训鼓励能力、指导协调能力和应变表达能力七个评价因素,每个因素的内容及评分标准如下:
1、管理统率能力:是否具有把握部下性格、才干,培养下属的能力,进面组织全体人员统一行动的能力5分;稍强一些4分;尚可3分;欠佳2分;很差1分。
2、企划创新能力:是指把握问题所在,提出有效的切合实际的规划、方案的能力。若极强5分;稍差4分;尚可3分;欠佳2分;很差1分。
3、判断决断能力:是指立足全局把握关键、迅速而全面地做出判断的能力,若极佳5分;正确4分;尚可3分;欠佳2分;很差1分。
4、洞察交际能力:让对手了解本公司或本人意图,圆满妥善处理事务的能力。若运作自如5分;较好4分;尚可3分;欠佳2分;很差1分。
5、培训、激励能力;合格的管理者即是合格的培训者,同时能够调动下属的积极性,使下属主动地接受并完成任务的能力。若水平极佳5分;稍高一些4分;尚可3分;欠佳2分;较差1分。
(三)品性:对高级管理人员的品性考核包括人际关系、协作性、个人修养和受员工尊重度4个评价因素。每个因素的评分标准如下:
(四)学识:对高级管理人员的学识考核包括管理技能、专业知识、一般知识、行业知识和发展潜力五个评价因素,每个因素的内容及评分标准如下:
1、管理技能:包括管理的基本常识和管理技巧。若很丰富5分;丰富4分;普通3分
2、专业知识:指所从事本职工作应掌握的专业基本知识,国家颁布的相应法律、法规、政策等。若很丰富5分;丰富4分;普通3分;不足2分;太差1分。
3、一般知识:指一些常识性的基本知识,包括自然科学和社会科学的基础性的知识。若很丰富5分;丰富4分;普通3分;不足2分;太差1分。
4、行业知识:指公司从事的行业相关知识,无论是行政管理人员还是业务管理人员,均需要掌握一定的本行业的知识。若很丰富5分;丰富4分;普通3分;不足2分;太差1分。
5、发展潜力:极富潜力5分;有潜力4分;普通3分;不足2分;太差1分。
第十二条 上一条讲的高级管理人员(被考核者)包括各副总经理、总工程师、工会主席、公司各部室部长、主任,此外还包括各二级单位经理。
第十三条 普通管理人员的考核项目包括业绩、能力、品性和学识四项,每项所占的百分比例均为25%,每个项目所包括的考核因素如下:
(一)业绩:
1、目标达成度:是指所辖区域季度计划和预算的执行情况,若超过目标5分;达到目标4分;尚可3分;欠佳2分;很差1分。
2、工作品质:是指管辖区域的办公秩序是否良好,处理事务是否按规章制度、程序进行,要求归档的文件、表单、资料的管理是否完全,齐整、有序。若上乘5分,良好4分;尚可3分;欠佳2分;不得要领1分。
3、工作方法:是指为完成目标所采取的方式、方法是否科学、合理、合法和规范。若很得要领5分;得要领4分;尚可3分;欠佳2分;不得要领1分。
4、进度检查:是指所辖区域的政令下达、督办和复命是否及时有序地进行,各种检查体制的建立是否齐全,各种检查是否按规定执行,检查的结果是否都能得到及时处理。若追根究底5分;较好4分;尚可3分;欠佳,2分;很差,1分。
5、绩效增加率:是指管理人员领导责任的执行情况,下属绩效的进步情况。若很高5分;高4分;尚可3分;欠佳2分;很差1分。
(二)、能力:
对普通管理人员的能力考核包括领导能力,企划能力,应变能力、执行能力和判断力五个考评因素,每个因素的内容及评分标准如下:
1、领导能力:合理组织下属完成工作任务的能力 ,若领导得力5分;稍强4分;尚可3分;欠佳2分;很差1分。
2、企划能力:正确把握问题的客观有效计划方案的能力,若可行且富有创意5分;客观可行4分;尚可3分;欠佳2分;不愿用头脑1分。
3、应变能力:机敏灵活,处乱不惊,从容自若的能力,若机敏过人5分;机敏4分;尚可3分;欠佳2分,很差1分。
(三)品性:对普通管理人员的品性考核包括人际关系、协作性、个人修养、受员工尊重度和对公司态度五个评价因素,每个因素的评分标准如下:
1、人际关系:很受欢迎5分;受欢迎4分;尚可3分;欠佳2分;很差1分。
2、个人修养:很有修养5分;有修养4分;尚可3分;欠佳,2分;很差1分。
3、协作性:很好5分;好4分;尚可3分;欠佳2分;太差1分。
4、受员工尊重度:很受敬重5分;受敬重4分;尚可3分;欠佳2分;不受尊重1分。
5、对公司态度:相当忠诚5分;忠诚4分;尚可3分;欠佳2分;较差1分。
(四)学识:对普通管理人员的学识考核包括管理常识、专业知识、一般知识、进取心和发展潜力五个评价因素,每个因素的内容及评分标准如下:
1、管理常识:指管理的基础知识和一般技巧,若很丰富5分;丰富4分;普通3分;不足2分;太差1分,
2、专业知识:指管理的基础知识和一般技巧,若很丰富5分;丰富4分;普通3分;不足2分;太差1分。
3、一般知识;指一些常识性的基本知识,包括自然科学和社会科学的基础性的知识。若很丰富5分;丰富4分;普通3分;不足2分;太差1分。
第十四条 十一条所讲的普通管理人员是指公司各二级单位副经理、公司各部室副部长、副主任及以下管理人员。
第十五条 普通员工的考核项目分工作能力、品德和常识三项,所占的百分比分别为50%、35%、15%,每个项目所包括的考核因素如下:
(一)工作能力:对普通员工工作能力的考核包括工作质量、工作数量、工作效率、工作方法、出勤情况、工作勤惰、执行力、理解力、学习能力和判断力,共10个评价因素。每个因素的内容及评分标准如下:
1、工作质量:是指所承担的生产、工作、服务季度质量指标的完成情况。若超过5分;完成指标4分;尚可3分;勉强2分;太差1分。
2、工作数量:是指所承担的生产、工作、服务质量指标的完成情况。若超过5分;完成指标4分;尚可3分;勉强2分;太差1分。
3、工作效率:是指单位时间内完成的工作量。若很高5分;较高4分;尚可3分;较低:2分;太低:1分。
4、工作方法:是指为完成目标所采取的方式、方法是否科学、合理、合法和规范。若很得要领5分;得要领4分;尚可3分;欠佳2分;不得要领1分。
(二)品德:对普通员工品德的考核包括学习精神、工作态度、工作责任感、服务性、协作性、个人修养和集体荣誉感共7个评价因素。每个因素的内容和评分标准如下:
1、学习精神:是指学习政治、技术、专业知识、规章制度的兴趣和自觉程度。若很高5分;高4分;尚可3分;欠佳2分;很低1分。
2、工作态度:是指对完成目标所持有的态度。若很好5分;好4分;尚可3分;欠佳,2分;很差1分。
3、责任感:是指对完成目标的责任感。若很强,5分;强,4分;尚可3分;欠佳2分;太差1分。
(三)学识:对普通员工学识的考核包括专业知识、一般知识和学识应用本职工作程度共3个评价因素。每个因素的内容和评分标准如下:
1、专业知识:是指从事本职工作应掌握的专业基本知识,国家颁布的相应法律、法规、政策等。若很丰富,5分;丰富,4分;普遍,3分;不足,2分;太差,1分。
2、一般知识:是指一些常识性的基本知识,包括自然科学和社会科学的基础知识。若很丰富,5分;丰富,4分;普遍,3分;不足,2分;太差,1分。
3、学识应用度:是指专业知识和一般知识在工作中应用的深度、广度。若很好,5分;好,4分;尚可,3分;欠佳,2分;不好,1分。
第十六条 员工极度绩效考核的考核者为被考核者的直接上级和隔级上级,直接上级和隔级上级分给予与评分后,由劳动人事部负责算出员工季度绩效考核的总得分。
员工本季度绩晓考核得分=直接上级评分70%+隔级上级评分*30%
第十七条 员工季度绩效考核等级的划分
依据员工季度绩效考核的总得分,将员工的季度绩效考核分成A、B、C、D、E、F六等。具体等级划分标准如下:
A(超群级):90(含)——100分,相当出色,无可挑剔
B(优良级):80(含)——90分,出色,不负众望
C(较好级):70(含)——80分,满意,可以塑造
D(尚可级):60(含)——70分,称职,令人安心
E(稍差级):50(含)——60分,有问题,需要注意
F(很差级):50分以下,危险,不努力要被淘汰
第十八条 由劳动人事部负责按部门别统计填写“员工季度绩效考核汇总表”,一式三份,一份送达各部门负责人,一份转递财务部执行结果。一份留存,年终汇总后存档。
第十九条 依据季度绩效考核结果的不同等级,将员工的浮动工资增加或降低相应比例,从而达到奖优惩差、鞭策员工、激励员工更加努力工作的目的。具体标准如下:
(一)若季度绩效考核结果为A,则浮动工资上浮20%;
(二)若季度绩效考核结果为B,则浮动工资上浮10%;
(三)若季度绩效考核结果为C,则浮动工资上浮5%;
(四)若季度绩效考核结果为D,则浮动工资不变;
(五)若季度绩效考核结果为E,则浮动工资下浮10%;
(六)若季度绩效考核结果为F,浮动工资下浮30%
第二十条 第十九条上浮或下浮的浮动工资只维持1个季度,下一季度绩效考核结束后,按照新的等级征订评定浮动工资浮动比例。

第四章 年度绩效考核的内容和实施
第二十一条 年度绩效考核是建立在季度绩效考核基础上的。年度绩效考核的的评分包括四个季度的总得分和人力资源部奖惩记录的评分两部分,所占的分值分别为80分和20分。
第二十二条 劳动人事部将员工本年度内的所有奖惩记录汇总后给予评分,评分标准如下:
(一)本年度内若无任何奖惩记录,则得10分。
(二)奖励:嘉次一次加3分;记功一次加5分;记大功一次加9分。
(三)惩戒:警告一次减10分;记过一次减15分;记大过一次减20分。
(四)功过相抵:嘉奖一次抵警告一次;记功一次抵记过一次;记大功一次抵记大过一次。
即:劳动人事部评分(满分20分)=10+奖励分—惩戒分
第二十三条 年度绩效考核的总得分计算分工如下:
总得分=本年度内四个季度绩效考核得分之和×20%+劳动人事部奖惩评分
第二十四条 员工年度绩效考核等级的划分。
依据员工年度绩效考核的总得分,将员工的年度绩效考核分成A、B、C、D、E、F六等。具体等级划分标准如下:
A(超群级):90(含)—100分,相当出色,无可挑剔
B(优良级):80(含)—90分,出色,不负众望
C(较好级):70(含)—80分,满意,可以塑造
D(尚可级):60(含)—70分,称职,令人安心
E(稍差级):50(含)—60分,有问题,需要注意
F(很差级):50分以下,不称职,应被淘汰
第二十五条 依据员工年度绩效考核结果的不同等级,给予员工相应的惩,具体内容如下:
A(超群级):奖励1000元;
B(优良级):奖励500元;
C(较好级):奖励200元;
E(稍差级):罚款500元;
F(很差级):管理人员降职或撤职,员工给予辞退。

第五章 附则
第二十六条 本制度由劳动人事部制订并负责解释。
第二十七条 本制度报总经理审阅、职代会通过后施行,修改时亦同。
第二十八条 本制度自2000年1月1日起施行。

附:1、员工季度绩效考核程度图 表4—1
2、高级管理人员季度绩效考核表 表4—2
3、普通管理人员季度绩效考核表 表4—3
4、普通员工季度绩效考核表 表4—4
5、员工( )季度绩效考核结果汇总表 表4—5

最佳开源PHP在线代理程序Glype

最佳开源PHP在线代理程序Glype

最佳开源PHP在线代理程序Glype glype

Glype proxy script is a free-to-use, web-based proxy script written in PHP. Similar to a typical proxy server, a web-proxy script downloads requested web pages and files and forwards them back to the user. The service is provided by a web page itself, which allows instant access to the proxy without editing your browser connection settings.

Web proxies are commonly used for anonymous browsing and bypassing censorship restrictions. There is a huge market for these sites and glype proxy allows webmasters to quickly and easily set up their own proxy sites.

下载地址

在Mac OS X下架设和使用Xcode的SVN版本管理环境

Leopard已经内置了svn支持,所以需要做的就只是配置。可以用svnadmin –version查看。


(..更多内容)

how to reverse a nsstring

some time you want to recerse a nsstring for example:“你好”--->"好你" i Searched the api but have no result,the method above can solute it
NSString *content = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

int len = [content length];
// Auto released string

NSString * reversedStr = [[NSMutableString alloc] init];

// Probably woefully inefficient...
while (len > 0)
[reversedStr appendString:
[NSString stringWithFormat:@"%C", [content characterAtIndex:--len]]];
NSLog(reversedStr);

《iPhone应用程序开发指南》第一章 1.1(2)

版权所有:AisideChina 本博客将在今后陆续进行本书的连载,敬请关注! 更多内容请大家购买正版《iPhone应用程序开发指南(基础篇)》 免费iPhone SDK可以在苹果开发中心的中文网站上下载,下载地址:http://www.apple.com.cn/developer/iPhone/, 如图1-1。
图1-1  iPhone开发中心首页
在这里会提供最新的iPhone SDK下载,目前的最新版本是iPhone SDK 3.0。进行iPhone SDK下载前,需要先申请一个Apple ID,如图1-1中的   处的提示。 注册完毕后登录,点击主页的下载图标进行下载,如图1-2的   处所示。
图1-2  下载iPhone SDK
在这里下载的是免费的iPhone SDK。标准版或企业版的下载,可以通过连接到http://developer.apple.com/iphone/program/apply.html进 行注册与下载。 SDK的安装 iPhone SDK下载完毕后,安装的过程较为简单,只需要根据提示按步骤操作即可。 安装完成后,如图1-3所示,可以在/Developer/Applications中找到iPhone开发工具的图标:Xcode、Interface Builder以及Instruments等。
图1-3  iPhone开发工具图标
关于它们如何使用,将在下一章作详细介绍。为方便以后的开发,将这些图标拖放到桌面的Dock上,如图1-4。
图1-4  拖放Xcode到Dock上
到此为止,进行开发前所需要的准备工作便全部完成了。是不是感觉很轻松? 对于本书的宝贵意见,请您留在 http://www.aisidechina.com/forum/thread-1258-1-1.html 我们对您表示诚挚的感谢!!!


《iPhone应用程序开发指南》第一章 1.1(1)

原文地址:   http://www.aisidechina.com/blog/ 版权所有:AisideChina 本博客将在今后陆续进行本书的连载,敬请关注! 更多内容请大家购买正版《iPhone应用程序开发指南(基础篇)》 1.1          应该具备的条件 现在就来进行实际开发前必要的准备工作。不用担心,相信这些准备工作对你而言将是非常轻松的。

需要掌握的知识

编程基础 进行iPhone开发的主要语言是Objective-C语言。它是C语言的一个扩展集,在C语言的基础上添加了一些新的特性,其中最重要的一个方面是添加了面向对象的特性。在本书第二部分语言部分中将对Objective-C语言进行一定讲解。但在这之前,你应该已经具备了一定其它语言的开发经验。 熟悉Mac系统 对于iPhone的开发,需要在Mac系统下进行。虽然在下一章中会对iPhone开发工具进行一定讲解,但在这之前,关于Mac系统的一些基本操作,你最好有一定的了解。 (..更多内容)

《iPhone应用程序开发指南》目录

原文地址   http://www.aisidechina.com/blog/

《iPhone应用程序开发指南》目录

版权所有:AisideChina 本博客将在今后陆续进行本书的连载,敬请关注! 更多内容请大家购买正版《iPhone应用程序开发指南(基础篇)》 目录: 准备部分 1 iPhone开发前的准备 1.1 应该具备的条件 1.1.1需要掌握的知识 1.1.2开发环境 1.2  iPhone开发特点 1.3  iPhone 开发流程 1.4 小结 2 开发工具介绍 2.1 开发工具简介 2.2  About项目的创建 2.3  Xcode窗口 2.3.1窗口的布局 2.3.2常用资源管理 2.4 Interface Builder构建About的界面 2.4.1添加需要的控件 2.4.2Inspector中设置控件属性 2.4.3为程序添加图标 2.5 iPhone模拟器中运行程序 2.6 常用的快捷键 2.7 小结 语言部分 第3章 Objective-C基础 3.1  Objective-C简介 3.2  创建项目 3.3  解析Note 3.4  Objective-C中的面向对象 3.4.1类的声明 3.4.2类的实现@implement 3.4.3用NoteClass类封装记录 3.4.4初始化方法 3.4.5属性 3.5  内存管理 3.5.1iPhone中的内存管理 3.5.2用于内存管理的方法 3.5.3内存管理规则 3.6  小结 第4章 几个重要的Cocoa类 4.1  NSObject 4.2  NSString 4.2.1修改Note 4.2.2字符串的创建 4.2.3字符串的使用 4.2.4可变字符串 4.3  NSArray 4.3.1用数组组织多个记录 4.3.2 NSArray对象的创建 4.3.3获取NSArray指定索引处的元素 4.3.4 NSMutableArray 4.4  NSDictionary 4.5  小结 (..更多内容)