苹果公司开发者账号注册流程

苹果公司开发者账号注册流程 http://www.cnblogs.com/xilinch/p/4037164.html http://blog.csdn.net/totogo2010/article/details/8854879 http://wenku.baidu.com/link?url=2ib_WwmKsadzm3sj3Ts6scAEti98IroFeBrY5eP68y_8UPtLTez6skh2folvVD8r6AbIlokfccMdnbLax3I-aSJXl1La_R4PjtBEeoigwJ3 个人开发者账号 用于个人开发者上传和发布应用,在apptore上显示个人开发者信息。 1.只能有一个开发者; 2.100个IOS设备UDID测试 否 688 http://developer.apple.com/programs/iOS/ 团体账号 用于团体、公司开发者上传和发布应用,在apptore上显示团体名称。 1.允许多个账号管理; 2.100个IOS设备UDID测试 是 688 http://developer.apple.com/programs/iOS/ 公司账号 用于公司发布应用,使用该证书的应用不需要审核,但是也不能发布到appstore 1.不能上传到appstore; 2.无IOS设别UDID数量限制 是 1988 https://developer.apple.com/programs/iOS/enterprise/ 教育账号 不能对外正式发布应用 苹果特批 -- 企业账号: 一般是公司规模在500人以上的企业,用于内部测试发布的账号,该账号发布的应用不发布在appstore上。$299。 2.企业账号三大好处: 发布内部App Distribute In-house Apps Distribute proprietary, in-house iOS apps to your employees. You can also securely host and wirelessly distribute or update in-house apps to employees, keeping them current anywhere, anytime. 在各个设备上测试 Test on iPad, iPhone, and iPod touch ...

2015-04-27 · 1 min · 167 words · -

golang bufio 处理 TCP 粘包

golang bufio 处理 TCP 粘包 http://feixiao.github.io/2016/05/08/bufio/ 我们经常需要自定义协议,然后将自己定义的协议打包成二进制数据发送到对端,然后对端根据协议解包,TCP是流式传输所以我们需要自己从数据中找到数据的分隔点, 解析我们的数据包。 经常看到自定义的协议设计类似这样: 第一和第二个字节表示版本号,如V1, 第三、四字节表示数据的大小(不包括前面的四个字节),后面的就是这个数据包的大小。 // 类似这种结构 type Package struct { Version [2]int8 Datalen int16 Data []byte } Golang里面处理这个包的方式之一如下: 1: 一直阻塞读取第一个第二个字节,获取版本号(如果错误就做错误处理); 2: 然后读取第三、四个字节,获取数据的大小; 3: 然后根据第二步中的数据大小,后面下面的数据; 4: 重复上面的过程; NSQ 就是采取这种方式。 还有一种方式是我下面介绍的,我遇到的问题是这样: 我解析RTP Over RTSP数据,一个数据流里面有两种协议数据,所以我刚开始想到的方式就是,先从conn里面读取数据然后缓存,然后不断peek数据拿来分析(我不能拿走数据,因为数据可能不完整,所以一直做peek),自己管理buffer,其实这种方式很傻,golang的标准库其实已经给我们提供了实现。 使用Scanner就可以完成我们的需求, 实现如下: scanner, 分离函数, 分割函数, split func main() { // 创建一个包,版本是V1,数据是ABCDEFGHIJK,大小是11 var pkg Package pkg.Version[0] = 'V' pkg.Version[1] = 1 pkg.Data = []byte("ABCDEFGHIJK") pkg.Datalen = int16(len(pkg.Data)) fmt.Println(&pkg) // 打包成二进制数据 var buf bytes.Buffer pkg.Pack(&buf) // 从二进制数据里面获取数据 var pkg1 Package pkg1.Unpack(&buf) fmt.Println(&pkg1) // 模拟数据流,打包三个数据包 pkg.Pack(&buf) pkg.Pack(&buf) pkg.Pack(&buf) // 创建Scanner,分析buf数据流(r io.Reader,换成net.Conn对象就是处理tcp数据流,自己连数据都不需要去收取) scanner := bufio.NewScanner(&buf) // 数据的分离规则,根据协议自定义 split := func(data []byte, atEOF bool) (advance int, token []byte, err error) { if !atEOF && data[0] == 'V'{ if len(data) > 4 { var dataLen int16 binary.Read(bytes.NewReader(data[2:4]),binary.BigEndian,&dataLen) if int(dataLen) + 4 <= len(data) { return int(dataLen) + 4, data[:int(dataLen)+4],nil } } } return } // 设置分离函数 scanner.Split(split) // 获取分离出来的数据 for scanner.Scan() { fmt.Println(scanner.Bytes()) } if err := scanner.Err(); err != nil { fmt.Printf("Invalid input: %s", err) } } // 自定义协议的组包和拆包 type Package struct { Version [2]int8 Datalen int16 Data []byte } func (p *Package) String() string { return fmt.Sprintf("Version:%d DataLen:%d Data:%s", p.Version,p.Datalen,p.Data) } func (p *Package)Pack(w io.Writer) { binary.Write(w, binary.BigEndian,p.Version) binary.Write(w, binary.BigEndian,p.Datalen) binary.Write(w,binary.BigEndian,p.Data) } func (p *Package)Unpack(r io.Reader) { binary.Read(r,binary.BigEndian,&p.Version) binary.Read(r,binary.BigEndian,&p.Datalen) if p.Datalen > 0 { p.Data = make([]byte,p.Datalen) } binary.Read(r,binary.BigEndian,&p.Data) }

2015-04-27 · 2 min · 215 words · -

drill、exercise、practice、training与discipline

drill、exercise、practice、training与discipline drill : 侧重进行有系统的,严格和重复的练习,尤指军事训练。 In some of these schools, army-style drills are used to instil a sense of discipline. 这些学校中有一些利用军训来培养纪律观念。 a spelling/pronunciation drill 拼写/发音练习 exercise : 主要指为强壮体魄而进行的锻炼,也可指进行练习以保持已经获得的技巧。 Swimming is my favourite form of exercise. 我最喜欢的锻炼方式是游泳。 You really should take more exercise. 你真的应该多进行体育锻炼。 I do stomach exercises most days. 大多数时候我做锻炼腹肌的运动。 practice : 指把所学的理论或知识用于实践以获得技艺与技巧。 I need to get some more practice before I take my driving test. 考驾照前我还得再练练。 Are you coming to choir practice this evening? 今晚的合唱训练你来吗? She’s never at home because she spends all her free time at hockey practices. 她从来都不在家,因为她把所有的空闲时间都用在练习曲棍球上了。 You’ll gradually get better at it - it’s just a question of practice. 你慢慢会更熟练的——这只是个练习问题。 I’m a little out of practice (= I haven’t had any recent experience) but I’d love to play. 我最近没怎么练习,但我愿意参加。 Do you mind if I have a few practice shots before we start the game? 开赛前我练几下投篮你介意吗? training : 普通用词,泛指为从事某种职业而进行的身体或智力方面的训练。 ...

2015-04-27 · 1 min · 188 words · -

Linux 下删除正在进行读写操作的文件

Linux 下删除正在进行读写操作的文件 多进程环境下, 打开同一个文件, 进行读写操作过程中, 如果其中一个进程删除这个文件, 那么, 另外正在读写这个文件会发生什么呢? 因为文件被删除了, 正在读写的进程发生异常? 正在读写的进程仍然正常读写, 好像没有发现发生了什么? 删除文件,其实是删除 inode 和文件的对应关系,而 linux 文件系统只有当连接文件的 inode 数量为0,并且没有程序在使用这个文件时,才会标记文件内容所在的数据块删除。 每个文件都有 2 个 link 计数器 - i_count 和 i_nlink。i_count 的意义是当前使用者的数量,i_nlink 的意义是介质连接的数量;或者可以理解为 i_count 是内存引用计数器,i_nlink 是硬盘引用计数器。再换句话说,当文件被某个进程引用时,i_count 就会增加;当创建文件的硬连接的时候,i_nlink 就会增加。 对于 rm 而言,就是减少 i_nlink。这里就出现一个问题,如果一个文件正在被某个进程调用,而用户却执行 rm 操作把文件删除了,会出现什么结果呢? 当用户执行 rm 操作后,ls 或者其他文件管理命令不再能够找到这个文件,但是进程却依然在继续正常执行,依然能够从文件中正确的读取内容。这是因为,rm 操作只是将 i_nlink 置为 0 了;由于文件被进程引用的缘故,i_count 不为 0,所以系统没有真正删除这个文件。i_nlink 是文件删除的充分条件,而 i_count 才是文件删除的必要条件。 基于以上只是,大家猜一下,如果在一个进程在打开文件写日志的时候,手动或者另外一个进程将这个日志删除,会发生什么情况? 是的,数据库并没有停掉。虽然日志文件被删除了,但是有一个进程已经打开了那个文件,所以向那个文件中的写操作仍然会成功,数据仍然会提交。 下面,告诉大家如何恢复那个删除的文件。 例如,你删除了 tcpdump.log, 执行 lsof | grep tcpdump.log,你应该能看到这样的输出: tcpdump 2864 tcpdump 4w REG 253,0 0 671457 /root/tcpdump.log (deleted) ...

2015-04-22 · 1 min · 167 words · -

mbr gpt

MBR GPT http://www.rodsbooks.com/linux-fs-code/ 自从 2007 年 Vista 操作系统推出以后, 各大硬件厂商对硬件开发速度明显加快, 其中对于硬盘的速度和容量, 从最早的 5400 转, 160G 容量, 提升到现在的 7200 转甚至万转机械盘, 容量也先后出现上 TB 级别的。单硬盘都出现 4Tb 容量。 由于磁盘容量越来越大, 传统的 MBR 分区表 (主引导记录) 已经不能满足大容量磁盘的需求。传统的 MBR 分区表只能识别磁盘前面的 2.2TB 左右的空间, 对于后面的多余空间只能浪费掉了,而对于单盘4TB的磁盘,只能利用一半的容量。因此,才有了GPT (全局唯一标识分区表) 。 除此以外,MBR分区表只能支持4个主分区或者3主分区+1扩展分区 (包含随意数目的逻辑分区) ,而GPT在Windows下面可以支持多达128个主分区。 下面IT之家也给大家分享下MBR和GPT的详细区别。 MBR 分区表 在传统硬盘分区模式中,引导扇区是每个分区 (Partition) 的第一扇区,而主引导扇区是硬盘的第一扇区。它由三个部分组成,主引导记录MBR、硬盘分区表DPT和硬盘有效标志。在总共512字节的主引导扇区里MBR占446个字节,第二部分是Partition table区 (分区表) ,即DPT,占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中。第三部分是magic number,占2个字节,固定为55AA。 一个扇区的硬盘主引导记录MBR由4个部分组成。 •主引导程序 (偏移地址0000H-0088H) ,它负责从活动分区中装载,并运行系统引导程序。 •出错信息数据区,偏移地址0089H-00E1H为出错信息,00E2H-01BDH全为0字节。 •分区表 (DPT,Disk Partition Table) 含4个分区项,偏移地址01BEH-01FDH,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4。 •结束标志字,偏移地址01FE-01FF的2个字节值为结束标志55AA,如果该标志错误系统就不能启动。 GPT 分区表, GUID Partition Map GPT 的分区信息是在分区中,而不象 MBR 一样在主引导扇区, 为保护 GPT 不受 MBR 类磁盘管理软件的危害, GPT 在主引导扇区建立了一个保护分区 (Protective MBR) 的MBR分区表 (此分区并不必要), 这种分区的类型标识为0xEE, 这个保护分区的大小在Windows下为128MB,Mac OS X下为200MB,在Window磁盘管理器里名为GPT保护分区, 可让MBR类磁盘管理软件把GPT看成一个未知格式的分区,而不是错误地当成一个未分区的磁盘。 ...

2015-04-21 · 1 min · 114 words · -

PXE booting

PXE booting 预启动执行环境 (Preboot eXecution Environment,PXE,也被称为预执行环境)提供了一种使用网络接口 (Network Interface) 启动计算机的机制。这种机制让计算机的启动可以不依赖本地数据存储设备 (如硬盘) 或本地已安装的操作系统。 PXE当初是作为Intel的有线管理体系的一部分,Intel 和 Systemsoft于1999年9月20日公布其规格版本2.1。通过使用像网际协议(IP)、用户数据报协议(UDP)、动态主机设定协定(DHCP)、小型文件传输协议(TFTP)等几种网络协议和全局唯一标识符(GUID)、通用网络驱动接口(UNDI)、通用唯一识别码(UUID)的概念并通过对客户机(通过PXE自检的电脑)固件扩展预设的API来实现目的。 _PXE 客户机(client)_这个术语是指机器在PXE启动过程中的角色。一个_PXE 客户机(client)_可以是一台服务器、桌面级电脑、笔记本电脑或者其他装有PXE启动代码的机器。

2015-04-18 · 1 min · 17 words · -

MES系统

MES系统 MES系统即制造企业生产过程执行管理系统,是一套面向制造企业车间执行层的生产信息化管理系统。MES 可以为企业提供包括制造数据管理、计划排程管理、生产调度管理、库存管理、质量管理、人力资源管理、工作中心/设备管理、工具工装管理、采购管理、成本管理、项目看板管理、生产过程控制、底层数据集成分析、上层数据集成分解等管理模块,为企业打造一个扎实、可靠、全面、可行的制造协同管理平台。[1]

2015-04-13 · 1 min · 3 words · -

flake8

flake8 pip install flake8 flake8 --max-line-length=120 project_0 # 忽略掉 E501,E302,E122,E225,E303,W291,E221,E231 flake8 --max-line-length=120 --ignore=E501,E302,E122,E225,E303,W291,E221,E231 project_0 # 只检查 F821 undefined name flake8 --select=F821 /path/to/project_0

2015-04-12 · 1 min · 22 words · -

IntelliJ tomat

IntelliJ tomat IntelliJ and Tomcat{.question-hyperlink} http://stackoverflow.com/questions/19596779/intellij-and-tomcat-changed-files-are-not-automatically-recognized-by-tomcat/19609115#19609115

2015-04-11 · 1 min · 6 words · -

english date time on at in

english date time on at in 答: 英语中表示时间的介词用法: in+年/月/季节/世纪 (较大范围) ,另外固定结构: in the morning/afternoon/evening 如: in 2010在2010年, inJune在六月, in spring 在春天, in the 1980s 在20世纪80年代 on+具体某日/星期几 (要具体到某一天) 如: on October 1st在十月一日, on Sunday 在星期日 at+具体点钟,另外固定结构: at night ,at noon 如: at ten o’clock在十点钟, at half past four 在四点半 at指时间表示: (1) 时间的一点、时刻等。如: They came home at sunrise (at noon, at midnight, at ten o’clock, at daybreak, at dawn) . (2) 较短暂的一段时间。可指某个节日或被认为是一年中标志大事的日子。如: He went home at Christmas (at New Year, at the Spring Festival, at night) . in指时间表示: (1) 在某个较长的时间 (如世纪、朝代、年、月、季节以及泛指的上午、下午或傍晚等) 内。如: in 2004, in March, in spring, in the morning, in the evening, etc (2) 在一段时间之后。一般情况下,用于将来时,谓语动词为瞬间动词,意为"在……以后"。如: He will arrive in two hours. 谓语动词为延续性动词时,in意为"在……以内"。如: These products will be produced in a month. 注意: after用于将来时间也指一段时间之后,但其后的时间是"一点",而不是"一段"。如: He will arrive after two o’clock. on指时间表示: (1) 具体的时日和一个特定的时间,如某日、某节日、星期几等。如: On Christmas Day (On May 4th) , there will be a celebration. (2) 在某个特定的早晨、下午或晚上。如: He arrived at 10 o’clock on the night of the 5th.

2015-04-11 · 1 min · 156 words · -

golang defer

golang defer 不要在for循环直接用defer https://studygolang.com/articles/12061 panic Golang里比较常见的错误处理方法是返回error给调用者,但如果是无法恢复的错误,返回error也没有意义,此时可以选择go die: 主动触发panic。 除了代码中主动触发的panic,程序运行过程中也会因为出现某些错误而触发panic,例如数组越界。 panic 会停掉当前正在执行的程序 (注意,不只是协程) ,但是与os.Exit(-1)这种直愣愣的退出不同,panic的撤退比较有秩序,他会先处理完当前 goroutine 已经 defer 挂上去的任务,执行完毕后再退出整个程序。 而defer的存在,让我们有更多的选择,比如在defer中通过recover截取panic,从而达到try..catch的效果。 panic允许传递一个参数给他,参数通常是将出错的信息以字符串的形式来表示。panic会打印这个字符串,以及触发panic的调用栈。 defer func() { if e := recover(); e != nil { var buf [4096]byte n := runtime.Stack(buf[:], false) fmt.Printf("==> %s\n", string(buf[:n])) os.Exit(1) } }() defer defer 和 go一样都是Go语言提供的关键字。defer用于资源的释放,会在函数返回之前进行调用。一般采用如下模式: f,err := os.Open(filename) if err != nil { panic(err) } defer f.Close() 如果有多个defer表达式,调用顺序类似于栈,越后面的defer表达式越先被调用。 不过如果对defer的了解不够深入,使用起来可能会踩到一些坑,尤其是跟带命名的返回参数一起使用时。在讲解defer的实现之前先看一看使用defer容易遇到的问题。 defer使用时的坑 先来看看几个例子。例1: ...

2015-04-08 · 2 min · 226 words · -

8D报告

8D报告 8D又称团队导向问题解决方法、8D问题求解法 (8D Problem Solving) 是福特公司处理问题的一种方法,亦适用于制程能力指数低於其应有值时有关问题的解决,它提供了一套符合逻辑的解决问题的方法,同时对於统计制程管制与实际的品质提升架起了一座桥梁。 8D最早是美国福特公司使用的经典质量问题分析手法。 二战期间,美国政府率先采用一种类似8D的流程——“军事标准1520”,又称之为"不合格品的修正行动及部署系统"。 1987年,福特汽车公司首次用书面记录下8D法,在其一份课程手册中这一方法被命名为"团队导向的问题解决法" (Team Oriented Problem Solving) 。 当时,福特的动力系统部门正被一些经年累月、反复出现的生产问题搞得焦头烂额,因此其管理层提请福特集团提供指导课程,帮助解决难题。 8D是解决问题的8条基本准则或称8个工作步骤,但在实际应用中却有9个步骤: D0: 征兆紧急反应措施 D1: 小组成立 D2: 问题说明 D3: 实施并验证临时措施 D4: 确定并验证根本原因 D5: 选择和验证永久纠正措施 D6: 实施永久纠正措施 D7: 预防再发生 D8: 小组祝贺 D0: 征兆紧急反应措施 目的:主要是为了看此类问题是否需要用8D来解决,如果问题太小,或是不适合用8D来解决的问题,例如价格,经费等等,这一步是针对问题发生时候的紧急反应。 关键要点: 判断问题的类型、大小、范畴等等。与D3不同,D0是针对问题发生的反应,而D3是针对产品或服务问题本身的暂时应对措施。 D1: 小组成立 目的:成立一个小组,小组成员具备工艺/产品的知识,有配给的时间并授予了权限,同时应具有所要求的能解决问题和实施纠正措施的技术素质。小组必须有一个指导和小组长。 关键要点: 成员资格,具备工艺、产品的知识;目标 ;分工 ;程序 ;小组建设 D2: 问题说明 目的:用量化的术语详细说明与该问题有关的内/外部顾客抱怨,如什么、地点、时间、程度、频率等。 "什么东西,在什么时候,在哪里,发生了什么问题,严重程度怎样,发生比率多少" 方法: 质量风险评定,FMEA分析 关键要点:收集和组织所有有关数据以说明问题;问题说明是所描述问题的特别有用的数据的总结;审核现有数据,识别问题、确定范围;细分问题,将复杂问题细分为单个问题;问题定义,找到和顾客所确认问题一致的说明,"什么东西出了什么问题",而原因又未知风险等级。 D3: 实施并验证临时措施 目的:保证在永久纠正措施实施前,将问题与内外部顾客隔离。 (原为唯一可选步骤,但发展至今都需采用) 方法: FMEA、DOE、PPM 关键要点: 评价紧急响应措施;找出和选择最佳"临时抑制措施";决策 ;实施,并作好记录;验证 (DOE、PPM分析、控制图等) D4: 确定并验证根本原因 目的:用统计工具列出可以用来解释问题起因的所有潜在原因,将问题说明中提到的造成偏差的一系列事件或环境或原因相互隔离测试并确定产生问题的根本原因。 方法: FMEA、PPM、DOE、控制图、5W1H法 关键要点: 评估可能原因列表中的每一个原因;原因可否使问题排除;验证;控制计划 D5: 选择并验证永久纠正措施 目的:在生产前测试方案,并对方案进行评审以确定所选的校正措施能够解决客户问题,同时对其它过程不会有不良影响。 方法: FMEA 关键要点: 重新审视小组成员资格;决策,选择最佳措施;重新评估临时措施,如必要重新选择;验证;管理层承诺执行永久纠正措施;控制计划 D6: 实施永久纠正措施 目的:制定一个实施永久措施的计划,确定过程控制方法并纳入文件,以确保根本原因的消除。在生产中应用该措施时应监督其长期效果。 方法: 防错、统计控制 关键要点: 重新审视小组成员;执行永久纠正措施,废除临时措施;利用故障的可测量性确认故障已经排除;控制计划、工艺文件修改 D7: 预防再发生 目的:修改现有的管理系统、操作系统、工作惯例、设计与规程以防止这一问题与所有类似问题重复发生。 关键要点:选择预防措施;验证有效性;决策 ;组织、人员、设备、环境、材料、文件重新确定 D8: 小组祝贺 目的:承认小组的集体努力,对小组工作进行总结并祝贺。 关键要点: 有选择的保留重要文档;流览小组工作,将心得形成文件;了解小组对解决问题的集体力量,及对解决问题作出的贡献;必要的物质、精神奖励。 问题解决方法 8D (8 Disciplines) 问题解决8步法 8D的原名叫做8 Disciplines,意思是8个人人皆知解决问题的固定步骤。原始是由Ford公司,全球化品质管制及改善的特殊必备方法,之后已成为QS9000/ISO TS16949、福特公司的特殊要求。凡是做FORD的零件,必须采用8D 作为品质改善的工具,成为一个固定而有共识的标准化问题解决步骤。 Discipline 1. 成立改善小组(Form the Team): 由议题之相关人员组成,通常是跨功能性的,说明团队成员间的彼此分工方式或担任的责任与角色。 Discipline 2. 描述问题(Describe the Problem): 将问题尽可能量化而清楚地表达,并能解决中长期的问题而不是只有眼前的问题。 Discipline 3. 实施及确认暂时性的对策(Contain the Problem): 对于解决 D2 之立即而短期行动,避免问题扩大或持续恶化,包含清查库存、缩短PM时间、加派人力等。 Discipline 4. 原因分析及验证真因(Identify the Root Cause): 发生 D2 问题的真正原因、说明分析方法、使用工具(品质工具)的应用。 Discipline 5. 选定及确认长期改善行动效果(Formulate and Verify Corrective Actions): 拟订改善计划、列出可能解决方案、选定与执行长期对策、验证改善措施,清除 D4 发生的真正原因,通常以一个步骤一个步骤的方式说明长期改善对策, 可以应用专案计划甘特图(Gantt Chart),并说明品质手法的应用。 Discipline 6. 改善问题并确认最终效果(Correct the Problem and Confirm the Effects): 执行 D5 后的结果与成效验证。 Discipline 7. 预防再发生及标准化(Prevent the Problem): 确保 D4 问题不会再次发生的后续行动方案,如人员教育训练、改善案例分享(Fan out) 、作业标准化、产出BKM、执行FCN 、分享知识和经验等。 Discipline 8. 恭喜小组及规划未来方向(Congratulate the Team): 若上述步骤完成后问题已改善,肯定改善小组的努力,并规划未来改善方向。 适用范围 该方法适用于解决各类可能遇到的简单或复杂的问题; 8D方法就是要建立一个体系,让整个团队共享信息,努力达成目标。 8D本身不提供成功解决问题的方法或途径,但它是解决问题的一个很有用的工具; 亦适用于过程能力指数低于其应有值时有关问题的解决; 面对顾客投诉及重大不良时,提供解决问题的方法。 8D法是美国福特公司解决产品质量问题的一种方法,曾在供应商中广泛推行,现已成为国际汽车行业 (特别是汽车零部件产家) 广泛采用来解决产品质量问题最好的、有效的方法。 优点 发现真正肇因的有效方法,并能够采取针对性措施消除真正肇因,执行永久性矫正措施。 能够帮助探索允许问题逃逸的控制系统。 逃逸点的研究有助于提高控制系统在问题再次出现时的监测能力。 预防机制的研究有助于帮助系统将问题控制在初级阶段。 缺点 8D培训费时,且本身具有难度。 除了对8D问题解决流程进行培训外,还需要数据挖掘的培训,以及对所需用到的分析工具 (如鱼骨图和流程图,等等) 进行培训。[1] http://baike.baidu.com/view/1318951.htm

2015-04-08 · 1 min · 194 words · -

user_tables num_rows

user_tables num_rows 高水位线应该是最高值而不可能是低于700万的值 根据英文资料: but it’s base on your table analysis strategy,may be not accurate select ‘analyze table ‘||S.TABLE_NAME||’ compute statistics;’ from user_tables s; 翻译如下: 但是它是基于你的表分析策略,由于时间的关系,可能已经不准确了。 如果你要准确,可以 select ‘analyze table ‘||S.TABLE_NAME||’ compute statistics;’ from user_tables s; 后的所有脚本,再运行统计行数。 也就是USER_TABLES中存储的是上一次分析之后的值,而不是准确值.

2015-03-06 · 1 min · 38 words · -

part component

part component http://www.hscode.net/article/glxyx/1caa8dfa-f324-46cf-af72-a3dd675e7488

2015-03-05 · 1 min · 3 words · -

SonarQube

SonarQube SonarQube (曾用名Sonar (声纳) [1]) 是一个开源的代码质量管理系统。 Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量 提供重复代码、编码标准、单元测试、代码覆盖率、代码复杂度、潜在Bug、注释和软件设计报告 通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言的代码质量管理与检测 sonarQube能带来什么? Developers’ Seven Deadly Sins 1.糟糕的复杂度分布 文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员难以理解它们, 且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试 2.重复 显然程序中包含大量复制粘贴的代码是质量低下的 sonar可以展示源码中重复严重的地方 3.缺乏单元测试 sonar可以很方便地统计并展示单元测试覆盖率 4.没有代码标准 sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规范代码编写 5.没有足够的或者过多的注释 没有注释将使代码可读性变差,特别是当不可避免地出现人员变动时,程序的可读性将大幅下降 而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷 6.潜在的bug sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具检测出潜在的bug 7.糟糕的设计 (原文Spaghetti Design,意大利面式设计) 通过sonar可以找出循环,展示包与包、类与类之间的相互依赖关系 可以检测自定义的架构规则 通过sonar可以管理第三方的jar包 可以利用LCOM4检测单个任务规则的应用情况 检测耦合 关于Spaghetti Design: http://docs.codehaus.org/display/SONAR/Spaghetti+Design 通过sonar可以有效检测以上在程序开发过程中的七大问题 SonarQube安装 预置条件 1.已安装JAVA环境 2.已安装有MySQL数据库 软件下载地址: http://www.sonarqube.org/downloads/ 下载SonarQube与SonarQube Runner 中文补丁包下载: http://docs.codehaus.org/display/SONAR/Chinese+Pack 1.数据库配置 MySQL> CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci; MySQL> CREATE USER ‘sonar’ IDENTIFIED BY ‘sonar’; MySQL> GRANT ALL ON sonar.* TO ‘sonar’@’%’ IDENTIFIED BY ‘sonar’; ...

2015-02-12 · 2 min · 330 words · -

free command

free command free命令可以查看系统内存的使用情况,-m 参数表示按照兆字节展示。最后两列分别表示用于IO缓存的内存数, 和用于文件系统页缓存的内存数。需要注意的是, 第二行-/+ buffers/cache,看上去缓存占用了大量内存空间。 这是Linux系统的内存使用策略,尽可能的利用内存,如果应用程序需要内存,这部分内存会立即被回收并分配给应用程序。因此,这部分内存一般也被当成是可用内存。 如果可用内存非常少,系统可能会动用交换区 (如果配置了的话) ,这样会增加IO开销 (可以在iostat命令中提现) ,降低系统性能。 free -h free -m total used free shared buff/cache available Mem: 8.7Gi 4.6Gi 437Mi 1.0Mi 3.8Gi 3.9Gi Swap: 0B 0B 0B Mem:表示物理内存统计。 total:表示物理内存总量( total = used + free + buff/cache )。 used:total - free - buff/cache, 表示总计分配给缓存 (包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。 free:未被分配的内存。 shared:共享内存。Memory used (mostly) by tmpfs (Shmem in /proc/meminfo) buffers:kernel buffers, 系统分配但未被使用的buffers数量。 cached:page cache and slabs, 系统分配但未被使用的cache数量。 available: 启动新的应用程序时可以使用的内存, buffers/cache:表示物理内存的缓存统计。 used2:也就是第一行中的used – buffers - cached也是实际使用的内存总量。 // used2为第二行 free2 = buffers1 + cached1 + free1 // free2为第二行,buffers1等为第一行 free2:未被使用的buffers与cache和未被分配的内存之和,这就是系统当前实际可用内存。 Swap:表示硬盘上交换分区的使用情况。

2015-02-10 · 1 min · 91 words · -

SEM

SEM SEM是Search Engine Marketing的缩写,中文意思是搜索引擎营销。SEM是一种新的网络营销形式。SEM所做的就是全面而有效的利用搜索引擎来进行网络营销和推广。 从狭义角度来讲,SEM就是在搜索平台上投放广告;而SEO则是通过优化目标网站,从而对搜索引擎更加友好。 但从广义角度来说,SEM包含SEO。SEO是SEM的一部分,是搜索引擎营销的其中一个环节。 SEM的四种服务方式: 竞价排名、点击付费、关键词广告、SEO。 竞价排名,顾名思义就是网站付费后才能被搜索引擎收录,付费越高者排名越靠前;竞价排名服务,是由客户为自己的网页购买关键字排名,按点击计费的一种服务。客户可以通过调整每次点击付费价格,控制自己在特定关键字搜索结果中的排名;并可以通过设定不同的关键词捕捉到不同类型的的目标访问者。 而在国内最流行的点击付费搜索引擎有百度,雅虎和Google。值得一提的是即使是做了PPC (Pay Per Click,按照点击收费) 付费广告和竞价排名,最好也应该对网站进行搜索引擎优化设计,并将网站登录到各大免费的搜索引擎中。 购买关键词广告,即在搜索结果页面显示广告内容,实现高级定位投放,用户可以根据需要更换关键词,相当于在不同页面轮换投放广告; 搜索引擎优化 (SEO) ,就是通过对网站优化设计,使得网站在搜索结果中靠前。 搜索引擎优化(SEO)又包括网站内容优化、关键词优化、外部链接优化、内部链接优化、代码优化、图片优化、搜索引擎登录等. PPC ( Pay Per call,按照有效通话收费 ) ,比如: “TMTW来电付费”,就是根据有效电话的数量进行收费。购买竞价广告也被称做PPC 国内搜索引擎营销公司 (SEM) 有SEM工具的 二、无SEM工具的 有工具的: adsage 工具: AFS 特点: 节省人工 国双 SEM 特点: 很炫,也节省人工 分析工具: WebDissector 特点: 小型GA 博雅立方 工具: CubeSearch 特点: 节省人工 无工具的: 紫博蓝 品众互动 中企动力 亿玛 赛美特 网迈 http://www.zhihu.com/question/20307058

2015-02-10 · 1 min · 58 words · -

java rss lib 评测

java rss lib 评测 http://blog.csdn.net/zhaozexin/article/details/282333 前两天上新浪,看到新浪 RSS 频道开通,不容易啊,等了这么久。 我的目标是做一个简单的portlet,每次读取新浪的RSS站点显示最新的新闻条目。 花了一个下午,去sourceforge和google 上搜索 opensource 的 java rss lib,还真有不少 (顺便提一下,sourceforget的搜索真的很烂) 。简单过滤以后,觉得以下三个类库比较有搞头。Rome 、rssutils和rsslib4j。具体的评测如下: 一. Rome Rome 是 java.net 上的一个开源项目,现在的版本是0.5。为什么叫Rome呢,按它的介绍上的说法,有个"条条大路通罗马"的意思,有些RSS的意味。Rome可能是 sun 公司从自己某个子项目中抽离出来的,package和类的命名就象j2sdk一样感觉规范。功能上支持RSS的所有版本及 Atom 0.3(Atom是和RSS类似的一种内容聚合的方式)。Rome 本身是提供API和功能实现,其下独立出一个 rome-fetcher 项目,专门用来读取RSS内容。正和我意啊。 参照 fetcher 上的范例,解析 RSS 相当简单,代码片断如下: FeedFetcher fetcher = new HttpURLFeedFetcher(); SyndFeed feed = fetcher.retrieveFeed(feedUrl); System.out.println(feedUrl + " has a title: " + new String(feed.getTitle().getBytes(“iso8859-1”), “utf-8”) + " and contains " + feed.getEntries().size() + " entries."); for (Iterator iter = feed.getEntries().iterator(); iter.hasNext(); ) { ...

2015-02-09 · 2 min · 332 words · -

jsdom

jsdom jsdom 是一个纯粹由 JavaScript 实现的一系列 Web 标准,特别是 WHATWG 组织制定的 DOM 和 HTML 标准,用于在 Node.js 中使用。 大体上来说,该项目的目标是模拟足够的 Web 浏览器子集,以便用于测试和挖掘真实世界的 Web 应用程序。 import {JSDOM} from "jsdom" test('infoQ test', () => { const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`); console.log("foo test:", dom.window.document.querySelector("p").textContent); // "Hello world" }); 作者:0D0A 链接:https://juejin.cn/post/7151065517569081380 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2015-02-09 · 1 min · 47 words · -

ARC 与 GC 区别

ARC 与 GC 区别 http://my.oschina.net/u/566401/blog/109020 the short and sweet answer is as follow: 1.GC of java is Runtime, while ARC is compile time. 2.GC has reference to the objects at runtime and check for the dependencies of object runtime. While ARC appends the release, retain, autorelease calls at compiletime. **更多链接: ** 1.http://stackoverflow.com/questions/6385212/how-does-the-new-automatic-reference-counting-mechanism-work 2.http://stackoverflow.com/questions/7900167/objective-c-2-0-garbage-collector-vs-automatic-reference-counter-in-iOS-5-sdk 3.http://longweekendmobile.com/2011/09/07/objc-automatic-reference-counting-in-xcode-explained/

2015-02-05 · 1 min · 54 words · -