分类目录归档:未分类

代码范例收集

// 数字1-9, 找出9位数,使得其从左边开始,每第n(1<=n<=9)位组成的数字都能被n整除
class Cat {
	public $result = [];
	
	public function c($ss, array $aa, $count) {


		foreach($aa as $a){
			$tmp = $ss.$a;
			
			if(((int)$tmp % $count) === 0){
				$bb = array_diff($aa,[$a]);

				$this->c($tmp,$bb,$count+1);
			}
		}
		if(empty($aa)){
			$this->result[] = $ss;
		}

		return $this;
	}

	public function getResult() {
		return $this->result;
	}
}


$cat = (new Cat())->c('', ['1','2','3','4','5','6','7','8','9'], 1)->getResult();
print_r($cat);

浏览器基础知识

WebKit所包含的WebCore排版引擎和JSCore引擎来自于KDE的KHTML和KJS。Apple的Safari是基于WebKit(AppleWebKit)引擎的浏览器 。(Webkit实际由Apple控制)。

WebKit所包含的WebCore排版引擎和JSCore引擎,均是从KDE的KHTML及KJS引擎衍生而来。它们都是自由软件,在GPL条约下授权,同时支持BSD系统的开发。所以Webkit也是自由软件,同时开放源代码。

——————–
上面说的WebCore(KHTML)和JSCore(KJS)是一个浏览器核心的两个组成部分,一个是页面渲染,一个JS解析器。苹果把KHTML换了个名字叫WebCore,一个意思,跟Firefox浏览器中用的Gecko是同样概念的东西,都实现页面渲染。

Google在发展自己的浏览器时并不是从头开始的,它从WebKit基础上创建了一个叫Chromium的内核,Google自身维护这个内核,Chrom就基于这个内核,但是Google从2010年开始开始决定“脱离”WebKit,真正自己维护一条主线,所以这个内核改名为blink引擎。(Blink是一个渲染引擎,从WebKit分离)。

Google的Chromium是一个开源浏览器实现,包括了Blink引擎和V8引擎。Chrome是基于Chromium的,不一样的地方是:Chrome是闭源的,并且添加了自己的特色功能。

其它的浏览器厂商可以基于Chromium或WebKit开发自己的浏览器,并在其上贴牌、增加特色功能等,跟Apple的Safari和Google的Chrome是同一个级别的。

所以浏览器可以简单分为几大类:
1 基于Webkit,比如Safari
2 基于Chromium, 比如Chrome
3 Firefox(Gecko)
4 IE类

简单的关系图:
browser-relate

开发常用工具(备用)

版本控制
1 Git for Windows(原命名为msysgit, MS系统下的GIT)
说明:Windows下Git管理软件不二的选择
下载:https://git-for-windows.github.io/

这个工具使得在MS系统以类linux的操作方式来使用Git。这个工具是如何做到的?实际上它集成了一个叫MinGW的工具(http://www.mingw.org/),这个工具全名Minimalist GNU for Windows, 从名称就可以知道,它是GNU软件在Windows下运行的工具,自然Git就可以跑在它上面了,MinGW的Shell是MSYS,它是搭配MinGW来使用的,安装了Git for Windows后看到的Git for Bash,实际就是这么一个东西。

2 TortoiseGit
说明:Git客户端,Windows下最流行的客户端
下载:http://download.tortoisegit.org
3 Gitlab
说明:Git代码托管
下载:https://about.gitlab.com/
使用:http://blog.ifeeline.com/1628.html

文件比较工具:
1 WinMerge
首先是免费的,支持文件和目录比较。
2 Beyond Compare(http://www.scootersoftware.com/ 标准版30美金)专业级的文件和文件夹比较,支持包括二进制在内多种格式文件比较,跟WinMerge相比,它提供了一个右击菜单,可以开速加入文件。
http://blog.ifeeline.com/1880.html

数据库客户端(http://blog.ifeeline.com/1588.html)
1 Navicat
2 phpMyAdmin

虚拟机
VMware Workstation

IDE
Zend Studio

编辑器
EditPlus
Dreamweaver

Shell & FTP
Xshell
WinScp
FileZilla Client
http://blog.ifeeline.com/1865.html

开发环境
Wamp
http://blog.ifeeline.com/1464.html

Cygwin – Windows下运行Linux软件

Cygwin可以说是一个伟大的软件,通过一个DLL(cygwin1.dll)建立了Linux与Windows之间的系统调用和API之间的转换,使得Linux下的绝大多数软件能向Windows迁移。Cygwin和其它的虚拟机软件不一样,虚拟机软件会独占系统资源(Cygwin进行系统调用和API转换)。

关于Wifi万能秘钥

老家客厅网络安装了无线网络,为了方便我设置了我的手机号码作为密码,一亲戚带了一小弟过来拜年,他用所谓的Wifi万能秘钥”破解”了我设置的密码。一阵纳闷…

手机号是纯数字11位,0到9有10位,那么能组合出来的就有10的11次方个,那是100亿,短短几分钟就能试遍100亿?直觉告诉我,绝无可能。那么这样的App是如何做到的呢?

如果有人接入这个网络后,共享了热点(就是把名称和密码告诉它),当别人接入时,首先到所谓的云端查询对应的密码,那么它就可以很顺利地获取到密码,这个就是以上说的破解的唯一可能。肯定有某位成员安装了Wifi万能秘钥这个流氓App并共享了热点(或者这款流氓软件偷偷共享了热点),Wifi万能秘钥默认是选中共享热点的,对于一般的小白来说,它根本不知道共享热点意味者什么。

通过以上分析可知,蹭网并没有那么简单。比较常见的所谓的Wifi密码破解实际都是暴力破解工具,如果密码是数字混合字母,长度设置为6,就有50多亿个密码;长度为9,就有1353亿亿个密码。

现在一般的路由器都可以设置MAC地址绑定或过虑,如果实在担心密码被破解,可以设置MAC地址过滤,只允许自己的设备接入。

最后结论是,蹭网并没有那么容易,完成没有必要谈Wifi破解就色变。Wifi万能秘钥这个App的流氓行为实在卑鄙无耻。

PHP文件编码遭遇UTF-8的BOM

之前总结过PHP文件编码的UTF-8编码带BOM的问题:http://blog.ifeeline.com/952.html

最近又遭遇了一次。过程如下:
我本机无法链接上实际服务器,也没有发布服务器,要做实际的测试需要到专门机器上去做,代码上传上去后报错,在FTP本地这边直接编辑文件保存然后上传,于是问题出现了,特别是那些返回JSON数据的方法,数据传递到客户端,都是就是无法解析。刚开始是代码哪里出了问题,用尽了所有可用方法,仍然无法找到问题出在哪里,最终恢复之前的版本上传到服务器,暂时缓解压力。

建立一个文件,保存为UTF-8编码:
UTF-8编码

然后用Windows中的文本编辑器打开并编辑后保存:
UTF-8 文本编辑

然后再次打开文件(使用EditPlus)查看编码:
修改文件编码

看到了吧,文件变成了ANSI,TMD,ANSI是啥毛啊,为何会改我的文件编码?我这里是Windows 7下做的实验,实际在XP下,如果文件原来是UTF-8编码,通过文本编辑器编辑保存后编码改为UTF-8 + BOM,注意,它是自动修改的,没有任何提示。

PHP中无法支持带BOM的UTF-8编码的文件,如果包含这种文件,将出现无法预料的问题。此问题是我第二次遇到此问题,真实操蛋。慎用Windows文本编辑器。

一点关于中国空军歼击机的文字

中国歼击机

有官方报道J10B是4代机,那么说明中国现在对歼击机的分法是按照5代来分了。根据报道,中国上世纪90年代,从俄罗斯购买了大批的苏27,在吃透了苏27的基础上仿制了J11,并在其基础上进行优化升级,最终生产了J11B。而美国在上世纪70年代末就开始装备了3代战机,中国那时候正是动乱年代,90年代引入了苏27后,才正式有3代战机,至少相差10年,如果从掌握3代机的技术来说,中国比老美至少晚了20年以上。中国的歼击机的发展,选择了一条捷径,那就是从俄罗斯采购3代机,然后吃透3代机的技术,再然后是在掌握了三代机的技术上发展了4代机。J10的研制也是如此,据说得到了以色列方面的技术帮助,而以色列是最早采购美国F16战机的国家,中国目前发展的J10B,据说已经是4代机了(三代半),而中国周边的国家或地区,如日本、韩国、新加坡、台湾等,采购的是美国F15和F16居多,它们应该都是3代机,F15和F16的改进型的这些4代机,是美国现在的主力,估计也不会允许出口,所以中国对周边就有了压倒性的优势。

目前中国已经成功试飞了J20,估计2018年可以装备5代机,但是美国从2005年就已经开始装备了F22,所以从技术来说,中国应该至少还落后老美10年,从中国的这个发展来看,中国的歼击机技术获得了跨代发展,上世纪90年代花钱购买的3代机,非常物有所值。

现在看到很多人说中国的技术涉及抄袭,妄自菲薄。我想说的是,在落后一大截的情况下,抄袭是唯一能赶超并逆袭的方法。在完全吃透了别人的技术的同时,大批的人才以及配套设置就会建立起来,这个为后面的4代和5代机的研究打下坚实的基础,现在的J11B,除了外形类似外,基本已经脱胎换骨了(据说发动机还是短板)。

如果J20开始装备空军,那么就歼击机层面,就可以和老美有得一比了。中国需要一支强大的空军,至少能够和老美抗衡,对日本以及周边国家或地区有压倒性优势,那么日本这样的小杂种才能安分一些,因为当美国不能成为它的靠山时,它还有什么底气?

单从技术上来说,中国的J10B和J11B跟美国的F16和F15,应该差别不大了,不过真格斗起来,应该还是会吃亏,这个不是技术问题了,是实战经验问题。

关于分辨率

分辨率

2K 和 4K名称来着横向分辨率接近2K 和 4K。

电脑的分辨率1024*768 1280*720 1366*768,当前电脑显示器一般都大于等于1366*768。

当前电视机顶盒输出的标清信号一般是7xx*5xx,高清机顶盒输出的信号大于等于1280*720。

当前大多数的电视的物理分辨率大于等于1280*720, 1920*1080的所谓2K电视是当前主流。

在高清机顶盒都没有很普及的情况下,1280*720的电视已经足够,如果需要看高清电影,那么当前主流的1920*1080电视也足够了。至于4K,完全扯淡,再过10年也无法普及。

当前低端的投影仪很多物理分辨率为800*600,如果用来投射标清电视,绰绰有余。如果要投射高清电视就选用1280*720估计比较好,如果要看高清电影就需要选择1920*1080的,但是1920*1080分别率的投影仪,当前的价格虚高。如果采购了一个1920*1080的投影仪,而你又有对应的片源,那么投影到200寸(或更大)的屏幕上,跟在当前的电影院看电影基本一样。如果投影仪的分辨率比较低,投射的屏幕越大,画面自然不够清晰,原因在于投射面越大画面被拉得也越大。

当前家庭影院看起来没有必要选择1920*1080的投影仪,一方面这个分辨率的投影仪当前价格虚高,另一方面家庭影院投射面一般100寸左右,100寸左右的投射,只要能支持到1280*720就足清晰了,当然在1080P的电视上看1080P的高清电影,细腻的度当然会比投射到100寸的屏幕上好很多,但是损失一些细腻度换取了大屏幕体验,也合算吧。

需要批一下的是当前的4K电视。当前机顶盒输出的信号还没有到达1080P(就是2K),所以用2K的电视看所谓的标清或高清电视,已经极度浪费了,只有少部分人会来看个全高清电影等。在视频源都远远无法到达1080P的情况下,开始了4K的炒作,真是无比恶心,而最悲剧的是很多人压根不知道自己为何要买4K电视,只知道越大越好,就比如你有那么大的管子,都是只有一股小泉水流进来,很明显,严重的浪费但自己还不晓得。如果你要搞一部能发挥4K显示效果的电影,粗糙估计也得20G吧,把这个数字在砍半,10G吧,假如你要下载它,假如你的是10M带宽,你至少需要下载2.275个小时,很明显,10M的带宽,你无法在线看,因为一般的电影都没有那么长的时间,除非阉割一下(就是降低质量)。

不过当前很多小区可以接入100M带宽了,如果100M的带宽开始普及,那么有线电视可以光荣退休了,完全可以使用宽带代替它。总而言之,4K电视离我们还很遥远,如果你现在如果购买了一个4K电视,当到了能使用上4K的电视信号时,你的电视估计也差不多报废了。

运单号自动跟踪管理 – 流程备忘

数据表:
数据表 tracks

hash		运单号的哈希码,由于是抓第三方的数据,这个哈希码是由第三方提供的
delivery_date	发货日期
track		跟踪号
shipping_piece	件数
shipping_weight	重量
shipping_method	运输方式
shipping_to	目的地
shipping_cost	运费
delivery_status	运输状态,0表示无法查询 1表示正在运输 2等待提取 3已经签收 4客户确认
delivery_days	运输花费的天数
update_date	用来控制当查询失败后当天不在重复查询
last_update_time最后更新的时间
return_back	是否为退件
total_track	自动跟踪的天数
stop_track	是否停止跟踪(对应超过一定天数的运单,如果没有签收就停止跟踪)
del		是否被删除
note		运单备注
data		查询时获取的数据(保存最新的数据)

我们需要安装一定格式把运单导入:
运单上传文件格式

格式文件下载:上传文件格式文件

文件上传编写了一个接口,文件名为import_track.php,可以安装这个格式把输入导入。

运单管理的文件名为tracks_manage.php,实现灵活查询过滤排序:
upload_format

运单跟踪管理

用户接口就备忘到此。

以下是实现自动跟踪更新运单信息的流程:
自动更新流程

一共涉及4个文件,post.php专门用来实现接收数据并把数据导入到数据的逻辑,auto_client.php通过浏览器ajax的方法远程抓取到数据后提交给post.php,一般只需要在浏览器打开它并且设置它隔一段时间自动刷新就可以自动更新运单信息了,auto_server.php和auto_client.php差不多一样,不过这个是服务器端通过php远程抓取数据后提交给post.php,这个可以在服务器上设置crontab任务自动执行(不过PHP远程抓取数据很耗资源,不太适合干这个,实际上采用客户端工具的ajax来进行,效果更好),另外一个就是force_track.php,由于自动跟踪设置了一定时间间隔,并且当天查询失败的运单,当天不会再次查询(要等到第二天才会被再次查询,主要为了防止可能引发循环获取失败资源导致远程服务器封杀),所以用它可以强制刷新运单的跟踪信息。

总体上,再也不用自己手动跟踪了,此为备忘。

永久链接:http://blog.ifeeline.com/921.html

Zen-cart产品类型

Zen-cart产品布局

product_types表中的字段type_master_type,引用自身的主键,说明类型有继承关系。查看默认表数据:
产品类型层次
注意看,这里的产品类型的嵌套关系。不过这里要实现的功能不明(要覆盖继承过来的选项?)。另外,可以看到,表product_types_to_category对应了目录和产品类型的关联,比如某些目录是某种产品类等:
限制目录产品类型
可以把一种或多种产品类型限制到当前目录或当前目录和子目录,对应的记录记录到product_types_to_category中,如果父目录删除了某种类型限制,不管子目录的同类型是不是由父目录引入的,子目录的类型都会被删除。产品类型限制到目录,很明显,只能是指定的类型能放入该目录中。

另外,在product表中有一个字段products_type标志了这个产品的类型(采用哪些布局参数),这个字段默认是1,所以就是一般的产品的。这个字段决定了如何找到对应的产品类型的handler,比如如果找到产品的类型对应的handler是product,那么就路由到main_page=product_info,如果是product_music,就会路由到main_page=product_music_info(这个由zen_href_link()函数完成)。

不同类型的产品操作:
Zen-cart产品布局设置

虽然Zen-cart中引入了多种产品类型,但是它的控制能力非常有限,通常都被忽略。

产品布局配置参数读入可以参考:http://blog.ifeeline.com/820.html

永久链接:http://blog.ifeeline.com/810.html