搞定了owncloud以及HTTPS的问题

其实还可以选nextcloud\seafile之类,后者还能支持分布式存储。

怕选择困难症,所以很快就定下来用owncloud,其中主要原因是它提供中文界面。

我本不需要,但如果要方便他人,必须有这个。

暂时不靠它存大文件,主要就是文档存储吧。

yum里有安装源,不过就是下载一堆PHP代码回来而已。

我一开始以为它安到哪里我就必须在哪里用,但发现apache的配置太麻烦,于是自作主张把它移到“合法”的位置,结果发现没问题,这就证明确实是一堆PHP页面没有其他的东西。就算有,其位置也不影响吧。

改了apache的配置之后,遇到几次权限问题。

其中有一个.ocdata的隐藏文件,死也搞不定。后来怀疑是owner的组有问题,照网上的脚本去设置,结果遇到脚本本身的问题,复制下来的脚本代码linux居然不认?仔细看报错,到处都是\r,想来应该是windows下的文本自带了不兼容linux的换行吧。

好吧,全部替换,第一次可行,可是配置不对,第二次又不可行了。后来想想不就是脚本吗?我就手动改好了。手动改掉了owner的group,这个group得是apache的拥有者。后来查了一下apache的进程信息,得到了真正有效的group,用命令改过果然就好了(用winscp是改不了的)。

这个owncloud也是讨嫌,官网不留APP下载地址,只留个google市场的地址。

在国内的安卓市场找到的版本过低,居然只能上传不能下载,也看不到远程的文件。后来到bing.com里下载到了新版本的安卓APP,用起来感觉还算好。

然后接下来发现不用https就不能分享文件。

好我继续搞https,之前有几个证书都过期了,更好理一理。

首先第一个问题,去年第一次过期的时候,把其中一个证书(第2个小程序的证书)给直接装到服务器里了,没有再走那个所谓的负载均衡,那么这个证书必须下载下来放到特定文件夹里,然后配合apache的配置文件来使用。更新完了之后果然好了。

第二个问题是最早那个小程序的证书问题,那个证书不需要自己折腾,直接部署到负载均衡上就行,可问题是以前行,现在不行了,折腾了老半天终于明白是监听器里没有绑定证书。也就是说不但证书要绑到负载均衡上,负载均衡的监听器也要绑证书。由此可知,一个负载均衡绑两个证书也是可以的,只要弄两个监听器就好了?不过既然之前已经自己在服务器上完成了https,那就不折腾了。

弄完证书之后,发现派的域名本身是没有https的,只好换一个有https的域名来访问,但这也不是访问的问题,还要修改config,而且是两条语句,修改完了之后就好了。

然而装到最后,突然想到自己的空间有限,搞这个也就是放放文档吧,如果改用seafile,还能玩分布式,凑一下应该挺好的。以后再说吧。

昨夜做了一个大片梦

一堆游客到一个不知是真实还是虚拟的游乐园中玩。
里面危机重重,我根本分不清楚到底是真的是假的。
这些游客在不同的仓库中,但又好像仓库只是避难所,外面像侏罗纪公园一样,非常蛮荒。可怕的异型、各种高科技武器层出不穷。它们有时候会攻破仓库。
游客也会跑到仓库外面去。
但仓库和仓库外面的世界有可能都是虚拟的,即使在梦中也可以意识到这一点。
因为人们并不会真正的受伤。
有一个男人似乎是控制这个地方的人。
我不知道他是控制这个虚拟世界的,还是控制每个人所见所感的。
游客似乎都要穿着一些设备,可能是这些设备影响了他们的感观。
这些设备也会直接链接到控制者那里。
控制者可以帮助游客避开真正的危险。
非常奇怪的设定。

批量

原代码:
function updatePlayerSetting(jumpUrl){
var val=$("input[name='mode']:checked").val();
var valnew = $("#playmode").val();
if(val==5 || valnew == 5){
if($(".custom-player-list .current").length==0 && $(".terminals_mode").length==0){
$("#dialog_vod_tip").dialog({close:function(){}});
countDown("请选择播放器!",3,function(){
$("#dialog_vod_tip").dialog("close");
$("#dialog_vod_tip").dialog({
close: function(event, ui) {
window.clearInterval(intervalFinal);
$("#close_tip").unbind();
refreshDocument();
}
});
},'')
$("#dialog_vod_tip").dialog("open");
return;
}
}
if($("#edit_playsetting_info" ).valid()){
$.ajax({type: 'POST',url:'/training/site/admin/course/vod/updatesetting',data:$("#edit_playsetting_info").serialize(),success:function(result){
var tipInfo="修改失败!"
if(result.indexOf("success")==0){
tipInfo="修改成功!"
}
closeDialog();
$("#dialog_vod_tip").dialog("open");
countDown(tipInfo,5,function(){
$("#dialog_vod_tip").dialog("close");
},'');
}});
}
}

新的代码

http://exzbo.gensee.com/training/site/admin/course/vod/updatesetting

if($("#edit_playsetting_info" ).valid()){
$.ajax({type: 'POST',url:'/training/site/admin/course/vod/updatesetting',data:$("#edit_playsetting_info").serialize(),success:function(result){
var tipInfo="修改失败!"
if(result.indexOf("success")==0){
tipInfo="修改成功!"
}
console.log(tipInfo);
},'');
}});
}

阮大铖写的狮子赚到底怎么个内容

原来所谓赚,只不过是传的通假字
《獅子賺》提要
刊本注百子山樵撰。不书姓名。盖明末阮大铖所作也。剧中关目皆空花幻影。与皈元、昙花、双修诸剧。同借传奇说法也。其曰狮子赚者。大藏经载菩萨作狮子吼。优楼频罗经有狮子眼王菩萨。又佛座为狮子座。故僧家有力能承佛法者。稱法門獅。剧中以狮子作引。后以打破狮子现本来面目作归结。所谓但有言说。都无实义。故曰赚也。

剧云。等轮王者。统摄幽明。总持三界。谓无始以来。阴阳撮合。昼夜平分。人有罪愆。鬼亦有公案。人死而为鬼。历诸地狱。鬼转而为人。亦受诸苦恼。轮王宅心平等。秉敎圆通。无异同也。遂定等轮律三条。使狮头僧传谕酆都一切官吏军民男妇诸鬼。使尽改前非。各安本分。有犯者必依律罚往阳世受罪。唐武举钟馗曾摄功曹印务。管辖八万四千鬼头。以包龙图断盆儿鬼案被揭。至总持殿转降为柰河桥桥梁侯缺大使。闲曹冷署。不堪寂寞。与总持殿掌印判官喇嘛苗有旧。乃盛设飮馔招苗飮。并陈古玩赠苗。苗亦携地里鬼。看财鬼。两头鬼馈钟。酒酣。钟出妹侑酒。苗遂与通。于陵陈仲子以生前矫廉。死为饿鬼。来乞食。为鬼吏所殴。苗醉中遗文笔判簿在地。为仲子拾去。苗归。途遇犼头僧牵小猴一头。在柰河桥演说猴头经。使猴演故事。为众鬼指示因果。苗至。令猴重演。猴加衣冠作判赴席状。自入门揖让馈遗。以至与钟妹戏谑。及殴陈仲子。无不毕现。苗怒甚。欲挞之。猴忽化为虎。众皆惊走。苗至家。遂得疾。其妻子延医赛无常诊视。而犼头僧阴摄钟妹魂使与相见。两情方笃。忽见阳间差役拘之。病益甚。竟不起。馗方欲与苗朋比纳贿。而知苗变。又苗妻以妹赠鞋为据。吿之等轮王。

宋沈括补笔谈云。明皇痁将踰月。巫医不能治。一夕梦二鬼。一大一小。其小者窃太眞紫香囊及上玉笛绕殿而奔。其大者戴帽衣蓝裳。袒一臂。鞹双足。乃刳小者目、擘而噉之。奏曰。臣钟馗氏。即武举不捷之士也。誓与陛下除天下妖孽。梦觉。痁即瘳。乃召吴道子图之。道子承旨。恍若有覩。立图以进。上瞠视久之。抚几曰。是卿与朕同梦耳。何肖若是哉。自是画家多作钟馗像。民间用以压鬼。亦有钟馗嫁妹图。

暌车志云。张叔言判冥鬼十人。十人数内两人是妇人。

王隐晋书云。苏韶死而苏云。颜渊、卜商为地下修文郞。

剧内说白有钟馗妹脱鞋为鞋杯。与鬼判奉酒。此绝荒诞。然元末杨维桢好以妓鞋承酒。谓之鞋杯。不为无因也。

vbs调用系统api的终极办法

很多年前,我经常用vbs来做很多事情。

但那个时候调用一些外界api的时候都没有遇到问题。

之所以没有遇到问题是因为我没有调用系统的核心api,如今真要用系统api的时候,才发现原来不是那么容易。

又或者是因为当时我在借用excel内的vba来解决。

但现在遇到很多电脑真的没有装office,或者安了没有激活好。

所以必须脱离office来想办法。

发现原来有人早就想过办法。先是一个美国人搞出了一个dll来解决这个事。

后来这个美国人不玩这个了。

于是又有个叫Yuri Popov的俄罗斯人来解决这个问题,我们只要到他的主页去下载这个dll就可以了。
http://www.script-coding.com/dynwrapx_eng.html#download
使用方法可以看它的主页中的说明。

下面是一些例子:

如Beep的API声明为

Public Declare Function Beep Lib “kernel32″ Alias “Beep” (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long

则使用方法如下

‘创建对象
Set Wrap = CreateObject(“DynamicWrapperX”)
‘注册API
Wrap.Register “KERNEL32.DLL”, “Beep”, “i=ll”, “f=s”, “r=l”
‘调用API
Wrap.Beep(500, 100)
其中注册API中, “i=ll”是API的参数类型, “f=s”是调用方式, “r=l”是返回类型
这些可以参考下面的说明。

REM i: (Argument Type)
REM ‘a’, sizeof(IDispatch*), VT_DISPATCH} // a IDispatch*
REM ‘c’, sizeof(unsigned char), VT_I4} // c signed char
REM ‘d’, sizeof(double), VT_R8} // d 8 byte real
REM ‘f’, sizeof(float), VT_R4} // f 4 byte real
REM ‘k’, sizeof(IUnknown*), VT_UNKNOWN} // k IUnknown*
REM ‘h’, sizeof(long), VT_I4} // h HANDLE
REM ‘l’, sizeof(long), VT_I4} // l long
REM ‘p’, sizeof(void*), VT_PTR} // p pointer
REM ‘s’, sizeof(BSTR), VT_LPSTR} // s string
REM ‘t’, sizeof(short), VT_I2} // t short
REM ‘u’, sizeof(UINT), VT_UINT} // u unsigned int
REM ‘w’, sizeof(BSTR), VT_LPWSTR} // w wide string

REM f: (Call Method)
REM ‘m’ – DC_MICROSOFT 0x0000, Default
REM ‘b’ – DC_BORLAND 0x0001, Borland compat
REM ‘s’ – DC_CALL_STD 0x0020, __stdcall
REM ‘c’ – DC_CALL_CDECL 0x0010, __cdecl
REM ‘4’ – DC_RETVAL_MATH4 0x0100, Return value in ST
REM ‘8’ – DC_RETVAL_MATH8 0x0200, Return value in ST

REM r: (Return Type)
REM Same as i
示例:

‘用机箱内的蜂鸣器播放音乐
Sub BeepMusic()
Set Wrap = CreateObject(“DynamicWrapperX”)
Wrap.Register “KERNEL32.DLL”, “Beep”, “i=ll”, “f=s”, “r=l”
res = Wrap.Beep(500, 100)
res = Wrap.Beep(550, 100)
res = Wrap.Beep(600, 100)
res = Wrap.Beep(650, 100)
res = Wrap.Beep(700, 700)
WScript.Sleep 200
res = Wrap.Beep(700, 100)
res = Wrap.Beep(650, 100)
res = Wrap.Beep(600, 100)
res = Wrap.Beep(550, 100)
res = Wrap.Beep(500, 700)
End Sub
BeepMusic
‘取前景窗体标题
Sub GetForeWindowCaption()
Const WM_GETTEXT = &HD
Set Wrap = CreateObject(“DynamicWrapperX”)
Wrap.Register “USER32.DLL”, “GetForegroundWindow”, “f=s”, “r=l”
Wrap.Register “USER32.DLL”, “SendMessage”, “i=lllr”, “f=s”, “r=l”
Title = Space(100)
res = Wrap.SendMessage(Wrap.GetForegroundWindow(), WM_GETTEXT , 100, Title)
GetForeWindowCaption = Title
End Sub
MsgBox GetForeWindowCaption
‘发送键盘消息,显示桌面
Sub ShowDesktop()
Const VK_LWIN = &H5B
Const VK_D = &H44
Public Const KEYEVENTF_KEYUP = &H2
Set Wrap = CreateObject(“DynamicWrapperX”)
Wrap.Register “USER32.DLL”, “keybd_event”, “i=ccll”, “f=s”
Wrap.keybd_event VK_LWIN, 0, 0, 0
Wrap.keybd_event VK_D, 0, 0, 0
Wrap.keybd_event VK_D, 0, KEYEVENTF_KEYUP, 0
Wrap.keybd_event VK_LWIN, 0, KEYEVENTF_KEYUP, 0
End Sub
ShowDesktop

lnmp创建https主机失败

安装了lnmp,很多事情比自己分开装nginx和php什么的要方便多了。

用lnmp vhost add命令创建虚拟主机有个好处。

就是可以直接生成ssl证书,

全站https很轻松,不用自己改conf配置文件,也不用去申请证书什么的。

其实是因为人家内置了证书申请功能。

但是我今天创建主机的时候,遇到报错,内容如下:

Let’s Encrypt SSL Certificate create failed!

光看这个是看不出所以然的。

可以看日志。

但是看日志也看不出所以然……

还得自己想想问题所在。

其实问题很简单,就是因为脚本自动申请证书的时候,会需要验证域名。

然而,我在架主机的时候没有做域名解析!

所以证书申请失败。

至于说免费证书靠不靠谱?

应该是靠谱的吧。

反正目前用了一两年也没问题,不过每年似乎都要更新。

在阿里和腾讯申请的证书每年似乎都会过期。

lnmp内置的那个,不知道什么时候过期。

到时候可能是要折腾一下了。

对了,遇到证书问题怎么办呢?

最简单的办法就是直接删除主机重建。

lnmp vhost del

放心,它不会删除你的文件的,也就是干掉一点配置文件而已。

危险方法

《危险方法》
《危险方法》是由大卫·柯南伯格执导,凯拉·奈特莉、维戈·莫特森和迈克尔·法斯宾德等联袂出演的剧情电影。影片于2011年9月2日在意大利威尼斯电影节率先放映。影片根据英国编剧克里斯托弗·汉普顿的舞台剧《谈话治疗》改编而成,讲述了一名年轻貌美的女病人让两位未来的心里学家弗洛伊德和荣格大受启发,却又最终导致二人分道扬镳的故事。

迅雷下载

空调扇的制冷原理

空调扇用的冰晶制冷,
冰晶是用水,水和乙醇,凝胶剂等作为蓄冷剂。
水,这种大家都用过,就是冰块,就不说什么了;
水和乙醇,水和乙醇在不同比例的配比下释放冷量的速度不同,可以在一段时间内维持放冷,放冷时始终保持雪融状,比较温柔。比冰块蓄冷多,放冷慢,维持时间长。
凝胶型的比较复杂,配方基本都是厂家自有的,本人没找到。其原理就是用高蓄能的材料,如聚乙烯醇等高分子材料,加入交联剂,如CMC,形成凝胶状,装袋,冷冻后使用,在融化的时候手感软绵绵的