分类目录归档:其他

【Mac环境】PHP开源论坛 Discuz搭建

1.使用XAMPP组建搭建PHP运行环境

下载组件:https://www.apachefriends.org/download.html

安装组件:http://jingyan.baidu.com/article/9faa7231831ca7473c28cb01.html

mac终端运行异常处理:http://blog.sina.com.cn/s/blog_9592635a0102uy87.html

2.设置PhpMyAdmin访问权限,设置mysql数据库初始密码

     访问http://localhost/phpmyadmin/,这时候会有如图1-2提示没有访问权限的错误:http://www.jianshu.com/p/87fd5541e9a7

设置mysql初始密码:http://blog.csdn.net/black_hole2009/article/details/71249063

3.将论坛源代码放入Apache服务器的代码文件夹内

初始状态下,代码目录为:/Applications/XAMPP/xamppfiles/htdocs,将下载的项目解压包文件夹整个复制到该目录下。

4.源代码目录处理

将源代码文件夹 Discuz_X3.3_SC_UTF8 重命名为 D ,这样就可以防止代码目录杂乱无章,访问 localhost/D/ 即可进入项目文件夹。

修改代码目录的访问权限为可读和写:http://bbs.csdn.net/topics/391898780?page=1

5.将upload文件夹下的文件拷贝到 htdocs/D/ 目录

参考:修改根目录:http://blog.csdn.net/yitudou/article/details/46290639

6.浏览器访问 localhost/D/ 

浏览器中会提示进行discuz程序的安装,安装过程参考:http://www.discuz.net/thread-2141484-1-1.html

如果安装后,提示(0)Connection Error mysql数据库连接错误,是因为没有设置数据库初始密码,参考网址:

http://blog.csdn.net/black_hole2009/article/details/71249063

7.搞定!

大数据学习(机器学习)初学者常犯的9个错误

原文:9 Mistakes to Avoid When Starting Your Career in Data Science

如果你想从事大数据行业(包含机器学习,下同),那么你一定要避免以下9个错误,否则你会走很多弯路,花费没有必要的时间。 
甚至因为遇到很多挫折而失去学习的热情和动力,所以以下9个错误,是新手开始学习大数据之前必须了解的。

这些错误分布在3个阶段: 
* 大数据技术学习阶段 
* 应聘工作阶段 
* 面试阶段

大数据技术学习阶段

这一阶段的错误很难发现,它们在无形之中榨干你的时间。 they spawn from the misconceptions surrounding this field.

1.花费过多时间在理论上

很多新手都会花费过多时间在理论上,不管是数学相关的理论(线性代数、概率论等)还是机器学习相关的理论(算法、推导等)。

为什么说这样效率低呢? 
1. 学习周期很长,很容易让初学者望而怯步,中途放弃。 
2. 在学习完很多的理论之后,你仍然没有办法对机器学习有一个整体的概念。机器学习是一个实践性较强的领域,要想打下坚实的基础,最好的方法是学习与实践结合。 
3. 很可能你会因为没有看到你学习的东西与现实的联系而失去动力,甚至放弃学习。

注重理论的学习方法是学校中的传统教学方法,但是大部分人的实践技能还是从结果导向的学习中获得的。

为了避免这个错误,你应该: 
– 兼顾理论学习与项目实践。 
– 适应实践性学习,知识漏洞是在所难免的,随着你的进步,漏洞会自然填补上。 
– 了解碎片化的知识在整个知识体系中的位置(请参考我翻译的“机器学习实用教程”)。

2.所有算法从头实现

这个错误导致了很多初学者只见树木不见森林,在开始阶段,其实没有必要把每个算法都自己从头实现一遍。

当然,实现几个算法练手是可以的。随着算法的普及,越来越多成熟的机器学习库和开源的解决方案被开源使用,大多数的从业人员甚至都没有从头实现过算法。

现在,对于大数据行业从业人员而言,更重要的是理解如何使用对的设置(和用对的方式),来使用对的算法。

为了避免这个错误,你应该: 
– 学习通用的机器学习库,例如:Scikit-Learn (Python) or Caret (R)
– 如果你真的想从头实现算法,抱着学习的心态去做,不要追求完美。 
– 对机器学习算法有一个总体的了解,弄清楚他们的长处和短处。 
拓展阅读:landscape of modern machine learning algorithms

3.学习急功近利

一些人进入这个领域是因为他们想要参与建设未来的科技:无人驾驶汽车、高级机器人学、机器视觉等。这些科技是通过深度学习、自然语言处理等技术实现的。

要想掌握未来科技,先要把基础打好。每个跳水运动员都是从游泳开始学起的,你也应该把基本的技术掌握了,再考虑更远的发展。

为了避免这个错误,你应该:

  1. 掌握“传统的”机器学习技术和算法,想要建楼,先要有砖。
  2. 要知道,传统的机器学习还是有巨大的潜力,尽管很多的算法都已经成熟了,但是我们在算法的使用上还处于初级阶段,发掘算法的有效使用方式还有待探索。
  3. 系统地学习用机器学习解决问题的方法(详见free 7-day crash course,或者我已经翻译的“机器学习实用教程”)

应聘工作阶段

这个阶段的错误会导致你错过很多工作机会,尽管你能力很强。避免这些错误,你可以获得更多的机会。

4.在简历上列举太多技术术语

应聘者最大的错误就是简历上塞满各种技术术语。

你的简历应该突出重点,直观得体现你你能够给对方公司带来的贡献,特别是你在应聘一个初级岗位的时候。

为了避免这个错误,你应该: 
– 不要生硬地列举你使用过的编程语言和库,说说你用它们做了什么,结果如何。 
– 越简洁越好。把最重要的技能列出来就好,突出重点,不要分散注意力。 
– 用一个好的简历模板,针对不同岗位设计不同版本的简历。

5.自视过高

有时候,毕业生会因为有好的学历而自视过高。不可否认,有一个对口专业的重点大学学历确实可以给你带来更多工作机会,但很多时候,学历不是最重要的因素。

当然,也并不是说毕业生傲慢。大多数情况下,学校里教的知识和企业里实际使用的技能是很不一样的,实际的权衡能力对于项目时间节点、客户需求、技术瓶颈之间的平衡是很重要的,但是学校里并没有重视这些能力和知识的传授。

为了避免这个错误,你应该: 
– 使用真实数据集来完成课程作业。 
– 系统地学习用机器学习解决问题的方法(详见free 7-day crash course,或者我已经翻译的“机器学习实用教程”) 
– 实习机器学习相关的岗位。 
– 请教大数据行业的从业人员。

6.搜索岗位的时候太过于局限

大数据是一个很新的领域,很多企业还在摸索阶段,如果你在搜索岗位的时候,只搜索“大数据”的话,你会错失更多相关的工作机会。

一些岗位没有标明大数据,但是实际上做的工作是类似的。

为了避免这个错误,你应该: 
– 通过“能力要求”来搜索岗位(比如:机器学习、数据展示、SQL数据库等) 
– 通过岗位职责来搜索岗位(比如:预测模型建立、A/B测试、数据分析等) 
– 通过岗位中使用的技术栈来搜索岗位(比如:Python、R、Scikit-Learn、Keras等) 
– 搜索更多相关的岗位名称(比如:数据分析师、机器学习工程师等)

面试阶段

这个阶段的错误是面试的时候的阻碍。

7.没准备好讨论项目

在公文包里随身带着自己的项目介绍,可以让你更好地应对“你会如何”这一类情景假设的面试问题。这时候你就可以举出曾经处理过的实际的例子,而不是空口无凭地说。

还有就是,通常你的直系领导会特别希望你有独立解决问题的能力,因为大数据相关的岗位包含有项目管理相关的职责。你应该理解整个大数据的工作流程,并且知道如何将各个流程步骤拼接起来。

为了避免这个错误,你应该: 
– 完成课程:end-to-end projects that allow you to practice every major step(例如:数据清洗、模型训练等) 
– 形成自己的一套方法论,大数据是严谨的,而不是随意的。 
– 练习和描述一遍你在实习、工作、课程中做的项目。

8.低估专业知识的价值

专业技能和机器学习知识是做好岗位工作的先决条件,如果想在竞争中突围而出,你还应该要学习更多专业领域的知识,从而更好地把技能应用到专业领域中。大数据从来都不是空想就可以做好的。

为了避免这个错误,你应该: 
– 如果你要应聘银行的岗位,学习基本的金融知识。 
– 如果你要应聘世界500强的决策岗位,参考一些面试案例,了解该公司的盈利点。 
– 如果你要应聘创业型公司,了解该公司的市场,尝试了解该公司的核心竞争力。 
– 面试之前主动一些,肯定不会错的。

9.忽略沟通技能的重要性

目前,在大多数企业,大数据团队跟其他开发、分析团队比,还是很小的。所以一个大数据岗位的新人通常会跟着一个老员工,数据科学家的工作环境一般都是跨职能的。

面试官会希望看到你跟不同技术岗位、数学背景的认为你交流的能力。

为了避免这个错误,你应该: 
– 尝试把技术概念解释给非技术人员听。例如,把你最喜欢的算法解释给朋友听。 
– 准备对拓展阅读中通用面试问题的回答,表述你的答案。 
拓展阅读:common interview questions 
– 分析几个数据集,抽取关键信息,说明你的发现。

总结

在本文中,你了解了大数据初学者容易犯的9个错误,并且获得了一些针对9个错误观念的实用建议。

1.花费过多时间在理论上 
2.所有算法从头实现 
3.学习急功近利 
4.在简历上列举太多技术术语 
5.自视过高 
6.搜索岗位的时候太过于局限 
7.没准备好讨论项目 
8.低估专业知识的价值 
9.忽略沟通技能

为了近一步引导你入门,我们邀请你参与我们的课程: 
free 7-day email crash course on applied machine learning 
(也可参考我翻译的教材:“机器学习实用教程”)

常见开源协议介绍

一、常用开源协议汇总图

首先从一张图开始,介绍几种主流的开源协议,以及决定选用哪种框架的思路。
使用哪种开源协议,决定了你发布的开源项目被别人使用了之后,别人的项目是否受到你的项目的开源协议的约束、受到哪种约束。
同理,采用别人的开源项目时,也要留意开源协议,这直接影响到日后你的项目是否需要开源、是否需要采用同样的许可证、是否需要对修改的源码进行文档说明、是否需要再修改过的文件中放置版权说明、衍生软件的广告等。

常用开源协议汇总图

二、常用开源协议简介

现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的开源协议目前有83种:https://opensource.org/licenses/alphabetical

那么,要如何从这么多的开源协议中选取适合自己项目的协议呢?
在这里我们参考:Open Source Licenses by Category(开源协议分类)
中的:Licenses that are “popular and widely-used or with strong communities”(被广泛应用或被大社区使用的开源协议)中所列出的几个协议作简要说明:(中文简介摘录参考文章[1])

Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足的条件也和BSD类似:
1)需要给代码的用户一份Apache Licence
2)如果你修改了代码,需要再被修改的文件中说明。
3)在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。
4)如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。
Apache Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。

BSD (3-Clause) License
BSD允许使用者修改和重新发布代码(以其他协议形式),允许闭源商业发布和销售。
BSD鼓励代码共享的同时,要求尊重代码作者的著作权。
使用BSD协议,需要遵守以下规则:
1 再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议;
2 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档那个和版权声明中包含原来代码中的BSD协议;
3 不可以用开源代码的“作者/机构的名字”或“原来产品的名字”做市场推广。

与 “3-clause BSD license (BSD-3-Clause)” 的内容形似。

GPL v2
我们很熟悉的Linux就是采用了GPL。GPL协议和BSD, Apache Licence等鼓励代码重用的许可很不一样。GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。这也就是为什么我们能用免费的各种linux,包括商业公司的linux和linux上各种各样的由个人,组织,以及商业软件公司开发的免费软件了。
GPL协议的主要内容是只要在一个软件中使用(“使用”指类库引用,修改后的代码或者衍生代码)GPL 协议的产品,则该软件产品必须也采用GPL协议,既必须也是开源和免费。这就是所谓的”传染性”。GPL协议的产品作为一个单独的产品使用没有任何问题,还可以享受免费的优势。
由于GPL严格要求使用了GPL类库的软件产品必须使用GPL协议,对于使用GPL协议的开源代码,商业软件或者对代码有保密要求的部门就不适合集成/采用作为类库和二次开发的基础。
其它细节如再发布的时候需要伴随GPL协议等和BSD/Apache等类似。
GPL v3
GPL v3与GPL v2类似。区别在于,不仅要求用户公布修改的源代码,还要求公布相关硬件。

LGPL v2.1
LGPL是GPL的一个为主要为类库使用设计的开源协议。和GPL要求任何使用/修改/衍生之GPL类库的的软件必须采用GPL协议不同。LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。
但是如果修改LGPL协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL协议。因此LGPL协议的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以LGPL协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。
GPL/LGPL都保障原作者的知识产权,避免有人利用开源代码复制并开发类似的产品
LGPL v3
相对于LGPL v2,不仅要求用户公布修改的源代码,还要求公布相关硬件。

MIT License
MIT许可证之名源自麻省理工学院(Massachusetts Institute of Technology, MIT),又称「X条款」(X License)或「X11条款」(X11 License)
MIT内容与三条款BSD许可证(3-clause BSD license)内容颇为近似,但是赋予软体被授权人更大的权利与更少的限制。
被授权人有权利使用、复制、修改、合并、出版发行、散布、再授权及贩售软体及软体的副本。
被授权人可根据程式的需要修改授权条款为适当的内容。
在软件和软件的所有副本中都必须包含版权声明和许可声明。
此授权条款并非属copyleft的自由软体授权条款,允许在自由/开放源码软体或非自由软体(proprietary software)所使用。
此亦为MIT与BSD(The BSD license, 3-clause BSD license)本质上不同处。
MIT条款可与其他授权条款并存。另外,MIT条款也是自由软体基金会(FSF)所认可的自由软体授权条款,与GPL相容。

Mozilla Public License Version 2.0
MPL是The Mozilla Public License的简写,是1998年初Netscape的 Mozilla小组为其开源软件项目设计的软件许可证。MPL许可证出现的最重要原因就是,Netscape公司认为GPL许可证没有很好地平衡开发者对 源代码的需求和他们利用源代码获得的利益。同著名的GPL许可证和BSD许可证相比,MPL在许多权利与义务的约定方面与它们相同(因为都是符合OSIA 认定的开源软件许可证)。但是,相比而言MPL还有以下几个显著的不同之处:
• MPL虽然要求对于经MPL许可证发布的源代码的修改也要以MPL许可证的方式再许可出来,以保证其他人可以在MPL的条款下共享源代码。但是,在MPL 许可证中对“发布”的定义是“以源代码方式发布的文件”,这就意味着MPL允许一个企业在自己已有的源代码库上加一个接口,除了接口程序的源代码以MPL 许可证的形式对外许可外,源代码库中的源代码就可以不用MPL许可证的方式强制对外许可。这些,就为借鉴别人的源代码用做自己商业软件开发的行为留了一个 豁口。
• MPL许可证第三条第7款中允许被许可人将经过MPL许可证获得的源代码同自己其他类型的代码混合得到自己的软件程序。
• 对软件专利的态度,MPL许可证不像GPL许可证那样明确表示反对软件专利,但是却明确要求源代码的提供者不能提供已经受专利保护的源代码(除非他本人是 专利权人,并书面向公众免费许可这些源代码),也不能在将这些源代码以开放源代码许可证形式许可后再去申请与这些源代码有关的专利。
• 对源代码的定义
• 而在MPL(1.1版本)许可证中,对源代码的定义是:“源代码指的是对作品进行修改最优先择 取的形式,它包括:所有模块的所有源程序,加上有关的接口的定义,加上控制可执行作品的安装和编译的‘原本’(原文为‘Script’),或者不是与初始 源代码显著不同的源代码就是被源代码贡献者选择的从公共领域可以得到的程序代码。”
• MPL许可证第3条有专门的一款是关于对源代码修改进行描述的规定,就是要求所有再发布者都得有一个专门的文件就对源代码程序修改的时间和修改的方式有描述。

Eclipse Public License v1.0
EPL允许使用者任意使用、复制、分发、传播、展示、修改以及改后闭源的二次商业发布。
使用EPL协议,需要遵守以下规则:
1 当一个代码贡献者将源码的整体或部分再次开源发布的时候,必须继续遵循EPL开源协议来发布,而不能改用其他协议发布.除非你得到了原“源码”拥有者的授权;
2 EPL协议下,你可以将源码不做任何修改来商业发布.但如果你要发布修改后的源码,或者当你再发布的是二进制文件的时候,你必须声明它的源代码是可以获取的,而且要告知获取方法;
3 当你需要将EPL下的源码作为一部分跟其他私有的源码混和着成为一个Project发布的时候,你可以将整个Project/Product以私人的协议发布,但要声明哪一部分代码是EPL下的,而且声明那部分代码继续遵循EPL;
4 独立的模块(Separate Module),不需要开源。

参考地址:
1. 简书:关于开源的一些注意事项
2. 如何选择开源许可证?

通过拼音模糊搜索汉字的功能实现

一、原由

前一段时间用php实现通讯录系统,需要用到拼音查找汉字功能,匹配通讯录的姓名字段,于是在网上搜索已有的开源代码,下面总结和分析一下思路和具体实现。

二、思路

查找了网上的多种解决方案,大致分为几类:

1. 用javascript实现前端实拼音模糊搜索汉字,核心算法有以下2种:

列举所有字符:http://www.cnblogs.com/meteoric_cry/p/5954547.html

也有用ASCII字节码字典来实现字符拼音检索:http://www.jb51.net/article/100864.htm

2. 用数据库函数来实现拼音模糊搜索汉字:

SQL Server:http://blog.csdn.net/lisky119/article/details/8662673

Mysql:http://www.cnblogs.com/zenghansen/p/4846460.html

3. 后端语言逻辑实现拼音模糊搜索汉字:

java:http://blog.csdn.net/zhangfuning1986/article/details/7738875

c#:http://blog.csdn.net/lucky51222/article/details/21068235

4. 用 excel 提前将汉字转换成拼音:http://jingyan.baidu.com/article/48b37f8d39a69c1a646488df.html

三、实现

实际实现中,首先基于现场电脑比较老旧,且浏览器都是老版本,在前端用js实现拼音模糊搜索汉字可能会导致用户系统卡顿的问题,否定了方案1 ;  考虑语言和数据库因素,(php实现后台,mysql数据库) 优先考虑2.2 和4 ;  于是用方案4做了测试,发现实际使用当中,基于ASCII码字典实现的拼音检索汉字功能,有多音字查找的问题,写固定在程序逻辑里之后,后期没办法修正;  因此,采用方案4,再进行拼音修正是一个比较好的方法。

于是就按照方案4的教程,使用MS的EXCEL宏编程功能,复制VBA代码,制作数字签名,然后使用函数进行操作。如教程中所说,有部分汉字识别不出来,就只能手动改了,也算是一个折衷的办法。后来还用拼音检索字段来保存英文名,后期拼音由于多音字识别错误的,可以修正,也还不错。

然后就前端提醒用户使用空格分割多个关键字,后台逻辑用 “%” 做字符串拼接,搜索。

完美!

[win10] [mac] 双系统下丢失mac OS X系统引导的修复方法

图:Mac & Win10

一、起因

windows和mac的磁盘相互间不能访问,希望新建一个磁盘,格式化成两个系统都可以读写的Fat32或exFat格式。(后来发现通过下载NTFS For Mac和HFS+ for Windows即可在Macbook双系统情况下,实现两个系统磁盘之间的互相访问)

二、操作

于是我就在windows系统下使用磁盘管理工具,压缩windows卷,并新建了一个Fat32分区,显示为活动的主分区,重启之后,发现直接进入了windows系统,重启,长按option键,发现没有了os x系统的磁盘!!!

三、原因分析

当时脑子里轰的一声,感觉自己原地爆炸!

于是进入windows系统,不断地搜索,看了很多帖子,才搞清楚原因:windows系统的磁盘分区规则跟mac系统不一样,我在windows系统下操作磁盘分区,将磁盘分区的ID弄乱了,所以磁盘在启动的时候,不能识别到HFS+磁盘。

使用DiskGenius工具查看GUID,下图这个是微软的基础数据分区的GUID,装有OS X系统的分区,文件系统一栏显示的是微软基础数据分区,而不是HFS+分区,

需要将分区GUID更改为:48465300-0000-11AA-AA11-00306543ECAC(HFS)

四、解决

于是按照参考链接中的提示操作:

1.操作环境:win8(我的是win10,不匹配),使用U盘引导,进入命令行进行操作,没有提前制作BootCamp的U盘引导,无法实现;于是在win10系统内直接输入命令语句,提示diskpart函数指令错误,猜测是权限不够,无法使用该函数。

2.使用Paragon Partition Manager 11设置分区ID,将mac分区的Partition ID从“0x06 FAT16 greater than 32MB”改为“0xAF Apple HFS”,该方法需要进入win7的修复界面,打开Paragon Partition Manager工具,进行操作,没有找到操作步骤,无法实施。

后来在搜索中发现各种解决方案都指向两个核心的点:

1.进入系统修复界面,打开命令行操作窗口;

2.在命令行窗口中用命令修改分区ID。

虽然网上搜索的教程都没有win10的操作案例,但是我想只要能做到以上2个核心点,就可以解决问题,于是,我搜索了win10系统打开系统修复界面的教程,照着教程操作。(参考链接3: http://www.xitongcheng.com/jiaocheng/xtazjc_article_19671.html,看不懂?那就只能凉拌了。[手动滑稽])

打开命令提示符:

顺利打开命令行:按顺序输入以下5个指令:

list disk

select disk 0

list partition

select partition 2

set id=48465300-0000-11AA-AA11-00306543ECAC

效果图:

重启后,长按option键,就看到了mac系统的引导:

进入win7后,点击右下角BootCamp操作面板,看到OS X系统的磁盘,原来可以显示的windos启动磁盘在这里不显示了,在mac系统中查看启动磁盘,同样不显示。(以后切换windows系统只能在重启时长按option键切换启动盘进入win10了。以后找到了解决方法再补充,估计是需要修复win10系统引导。)

win10系统下,使用DiskGenius工具查看mac分区的ID,变成了“48465300-0000-11AA-AA11-00306543ECAC”。

进入mac系统,成功!

困扰了一个晚上的问题终于解决了!失而复得的感觉真好!

突然想起DiskGenius启动界面的那句话:数据无价,谨慎操作!

完美!

———-分割线———

燃鹅,当我打开mac 的设备查看磁盘,原先显示 “Macintosh HD” 和 “BootCamp”两个磁盘的,现在只显示mac的磁盘了,也就是说windows 的那个磁盘只有进入windows系统才能查看了。

差评!

参考:

1.http://blog.csdn.net/yuyan1222/article/details/44491835

2.http://bbs.feng.com/read-htm-tid-7296511.html

3.http://www.xitongcheng.com/jiaocheng/xtazjc_article_19671.html