Archive for web

豆瓣竟然有网友用我的脚本了,还希望我加个次数限制,所以升级了一下,刚看到,复制到博客里了。 // 检查间隔 var interval = 30000; // 是否开启提醒计数,0关闭,>0为几次停止 var open_count = 4; // ==UserScript== // @name 豆瓣豆油提醒脚本 // @namespace http://0x55aa.com/ // @version 0.2 // @description 豆瓣豆油提醒脚本,来豆油后进行弹窗提醒! // @author 0x55aa // @match https://*.douban.com/* // @grant none // ==/UserScript== (function() { 'use strict'; // 检查间隔 var interval = 30000; // 是否开启提醒计数,0关闭,>0为几次停止 var open_count = 4; var count = Number(window.localStorage.getItem("count")) || 0; // 提醒 if (Notification && Notification.permission !== "granted") { Notification.requestPermission(function (status) { if (Notification.permission !== status) { Notification.permission = status; } }); } function notify() { var titleText = "豆油来啦"; var options = { dir: "ltr", lang: "utf-8", icon: "https://img3.doubanio.com/favicon.ico", body: "请赶快处理!!!!!" }; if (Notification && Notification.permission === "granted") { var n = new Notification(titleText, options); } window.localStorage.setItem("count", count+1); window.location.reload(); } function check() { console.log($('#top-nav-doumail-link').children().text()); console.log(count); if ($('#top-nav-doumail-link').children().text()){ if (!open_count){ notify(); }else{ if (count < open_count){ notify(); }else{ window.location.reload(); } } }else{ window.localStorage.setItem("count", 0); count = 0; } } var timer = setInterval(check, interval); })();

Continue

折腾了我一个周五下午加一个周末的问题。 写的代码上线两个周了,之前只测试了同步跟列表的功能,展示没问题,上周测试了一下更新问题,开始删除没刷新,我还以为是前端老版本的编译有问题,发现接口确实调用了就没管了。 直到测试一个更新功能,发现接口调用成功了,但是数据没更新。还返回了http 200。我就看了一下代码,返回200不可能没执行到更新保存的代码。 发现只有在提交commit之前有查询操作,就会导致表更新失败。所以应该是个session问题。 试了我本机环境没问题,然后我就想到装的python包的版本问题,踩什么bug了吧。然后我对比了一下版本,我管理都是只写主要包的版本,依赖包的版本没有写,所以依赖包有的版本会高一点。 我选了几个可能的包,更换版本,发现不是这个原因。周末想想,如果是这个包的问题,应该早就发现了,会打补丁。 然后我就想到数据库的问题,我用的mariadb,测试系统是centos,然后我看了一下有新版本的mariadb,更新了一下,这里现在想想数据库的问题的概率也十分小了,而且是这么明显的bug。 mariadb的源巨慢无比,我又在尝试更新mysqlclient包,因为我记得安装的时候mariadb-devel不能用,网上说的用mysql-devel。我又从新试了一次,各种方法,发现不成功。 到下午快下班,安装完mariadb,又试了一遍mariadb-devel也不行。觉得还是用mysql,又安装称mysql。 但是发现数据库数据文件不兼容,升级的命令好像也不太行,我备份的导出数据库数据,导入又有外键关联的限制,懒得搞数据了。下班了。 周末有时间的时候就想了想,我之前虽然抓包测试环境mysql,发现没问题,但是没对比本机的。如果周一mysql不行,试试本机环境连线上数据库,排除一下是包的问题还是数据库问题。感觉周五的时候应该先排除问题再更新数据库才对。 周一来,同步了一下数据,更新了一下发现mysql还是不行。然后重新编译mysqlclient,测试发现通过了。 最后还是mysqlclient编译依赖有问题,使用mysql-devel编译,连接mariadb有问题。好像还不是所有的版本有这个问题。

Continue

网站的编辑器从simditor换到了emeditor。原因是嫌simditor的编辑功能太弱。比如样式都在前台定义的,不能控制单个字符的大小,源代码编辑刚加上,效果也不尽人意。 但是换成emeditor,开始挺快,配置也简单,但是上传图片这一关,搞了好长时间,不知道错在哪里。返回的数据按照官网来的,蛋就是提示上传失败。然后没办法Google了一下,发现也有人有这个问题。最后找的了别人的解决方法,貌似是官方的bug,不知道为什么一直不修复。 修改image.js里的186行左右,添加一行

r=r.replace("<pre>", "").replace("</pre>", ""); var json = eval('('+r+')');

Continue

jquery在post一个array的时候,我直接{array:array},提交的字段名字会改称array[]. 解决方法是在发送post之前加上一个jQuery.ajaxSettings.traditional = true; 直接用ajax的话加一个traditional:true 参数。然后就好了,从提交的数据看,array[]=[]直接提交一个list。而array是array=&array=&&&这种形式。

Continue

在选中一个值的时候,设置必须选中其他值。开始使用attr('selected','selected'),发现只有在第一次选中的时候好用。 从网上查找发现要使用prop('selected','selected')来做,问题就解决了。

Continue

从上上个周开始,就开始进行了。为啥起了这么蛋疼的一个名字,0 0当时建目录的时候不知道起啥名字,然后就起了一个the first web framework(tfwf),然后在bitbucket上开了一个私有项目,就开始写了。 先说说目的:一直都在用别人写的东西,包括接触的n多东西,一直想自己也实现一个。终于下决心用go准备写一个web框架,因为对这个还算是熟悉的了。选择go的原因是,写了可能会有别人用,但是我的出发点是学习并玩玩。不懂设计,不懂高深的理论,能有点样子就好了。 其实go自带的包写web应用已经非常方便了,现在主要实现的功能有: url的正则匹配,并且可以定义`^/aa/(?P<second>\d+)/`这样的样式。 网站的基本设置,像域名,名字,templedir等 控制器模仿tornado的样子写的,感觉蹩脚的很0 0. 启动时模板的导入。 就这些了。   说说从一开始写的过程,现在只记得七七八八了,时间有点长了。 准备写web框架的时候,我先去大略看了一遍谢大的 goweb编程那本书,第3.4节是对web框架开头路由的编写起了关键性的作用。 然后我就直接从http包 函数找到源码,把那里的代码意思看懂,就开始写了支持正则匹配的路由,然后对应的handler是函数。之后我就想写成python里边面向对象可以重载的方法,就研究了一下go的面向对象的编程,写成了接口的模式,什么走路像鸭子就是鸭子0 0。。写这里的时候我遇到一点问题:从接口取到对应struct的元素和方法,我有去看来reflect包的内容。 这期间我找了,web.go和beego的代码,大体看来一遍,发现beego的控制器写的跟我想的基本一样,直接看代码,借鉴了很多代码- -算不算抄袭。像url里匹配的变量,我发现go不支持继承的方法参数啥的必须一样。我就在context里边加了一个属性args,感觉真二。 今天开会的时候又加上了temple的启动时集中导入功能,功能的来源beego。再可耻一下0 0.settings和templates都是全局的,这些都不需要修改,第一次启动添加,应该不会有问题。 现在还有好多细节没处理好。还有很多必要的功能没有,像:错误提示,我自己写的时候测试,都发现非常困难,只是自己比较了解,能快速定位刚才修改的代码。我现在很多代码的错误验证都还没有0 0.、 对 一个主要的功能准备,明天实现:异步的问题,现在还没头绪,明天仔细研究一下,并测试一下在普通http请求这两个差别真的很大吗。我现在只是直接调用方法。觉得挺直观明白的0 0. 代码明天实现异步在上传到github上,现在也没格式化。我觉得我应该用我自己写的框架写点能用的东西,才知道还有哪里需要修改的更好0 0.

Continue

老师说要实现一个在线c语言学习的网站,引导用户一步一步编程。 找到这个网站:http://www.codecademy.com,准备以这个网站为原型设计。这个也不错http://www.paomianba.com/astar/ 需要一个一步一步的引导语,一个代码框,再一个代码保存的功能。代码运行这个先不考虑,安全性我还没考虑好。 加入用户登录功能,记录学习进度。加入每个步骤的提问,评论功能。 后台能够添加教程。 难度主要在代码输入编辑框中后,检测输入是否正确。 代码框准备使用http://ace.ajax.org/。前端使用js与服务器进行数据交互,判断是否正确。 后台代码用python写,框架不准备用django了,笨了点,使用tornado或者web.py,这两个文档都有看,就是没有实践一下了。数据库还是用mysql,查查资料,看看换个,借机学学其他数据库。

Continue

非常简单实用的方法,收藏了。这几天写的东西没用jquery,但是有些功能还是想从简,比如这个提示是否删除。最简单的方法还是只是弹个提示框,于是找到这个方法。 JavaScript弹出确认消息框判断是否删除,删除前提示用户是否删除,点是删除,点否返回。

删除
用法:onClick="return confirm('是否删除此条记录?')" onClick在点击时(这里是指点击这条超链接)触发,confirm会返回“是”(true)或者“否”(false),返回“否”就不产生跳转。 原来这个js中return可以控制超链接是否跳转啊,神奇,嘿嘿,忒神奇了~

Continue

apache在本机上访问正常,但是用ip访问为403禁止访问! apache配置文件修改: # # Possible values for the Options directive are "None", "All", # or any combination of: # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews # # Note that "MultiViews" must be named *explicitly* --- "Options All" # doesn't give it to you. # # The Options directive is both complicated and important. Please see # http://httpd.apache.org/docs/2.2/mod/core.html#options # for more information. # Options Indexes FollowSymLinks # # AllowOverride controls what directives may be placed in .htaccess files. # It can be "All", "None", or any combination of the keywords: # Options FileInfo AuthConfig Limit # AllowOverride all # # Controls who can get stuff from this server. # # onlineoffline tag - don't remove Order Deny,Allow Deny from all Allow from 127.0.0.1 Allow from 127.0.0.1修改为Allow from all,没有查文档,搜索解决。

Continue

几个需要注意的地方,官网说的很清楚: 1、 config.yaml文件修改,

name: py
version: 1

libraries:
- name: django
  version: "1.4"
handlers:
- url: /static
  static_dir: static
2、index.wsgi文件修改,
import os
import django.core.handlers.wsgi

import sae

os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

application = sae.create_wsgi_app(django.core.handlers.wsgi.WSGIHandler())
之后就打印了一个hello world! 用到的几个svn命令 svn checkout https://svn.sinaapp.com/newapp #此处需要认证,用户名/密码为您的SAE安全邮箱和安全密码 svn add 1/ svn commit -m"add wordpress"

Continue