开始工作咯
清明节放了几天假,再加上又请了2天假,休息咯一个星期呢。感觉还没有玩够呢,明天开始上班咯。
加油!
微软在昨天的时候发布了 windows 8 消费者预览版,当时衣服自己洗就在服务器上下载了。
早上到单位想把镜像从服务器上移动到电脑上,由于速度太慢给放弃了。装了QQ旋风,重新下载看看,好在代理今天没有封锁QQ旋风,果断下载镜像以及 VS 安装包。
本来是想安装在虚拟机里的,但是虚拟机貌似版本太低了,安装有问题。更新了新版本后,又提示 Product Key 有问题,于是把硬盘给整理了一下,做双系统安装。
安装过程不表,下面说一下感受。
创建账号的时候发现可以使用 Live 账号来代替本地帐户,这个简直和苹果的 Apple ID 太像了。
按照习惯,进入系统做的第一件事情就是激活 Administrator 账号。发现这个账号居然无法使用应用商店,好吧,我切换到普通用户下面。安装 Visual Studio 时候弹出了用户权限的提示,点击确定后,再取消安装,然后程序崩溃了。正儿八经地一路确定下来,到蛮正常的。
点击进入应用商店,以为和模拟器一样可以按着鼠标不松左右来滑动屏幕,发现不行,仔细一看在底部看到了滚动条。昨天有看新闻说QQ是第一个在 App Store 里上线的,去下载一个看看。点击安装,系统提示无法购买。不知道是不是因为我机器上网是需要代理的原因,什么软件都安装不了,太悲催了。
接下来要说的是关机、重启的操作,这个可能还是习惯的问题。衣服自己洗能找到的一个方式是,注销账号后,点击屏幕右下方的电源按钮,即可实现关机或者重启。或许还有别的方式吧。
嗯,输入法,系统安装好后会有一个英文输入法和一个中文输入法。他们之间通过 Shift 按键来切换,嗯衣服自己洗想说的是这个习惯我在以前的 windows 上面没有怎么注意过,在苹果上面用的蛮多的。
Visual Studio 安装完后我又继续安装中文语言包,安装到最后出现了一个错误,Microsoft Visual Studio 11 IntelliTraceLoc 无法使用服务(503)。不知道是什么情况。
比较赞的是,IE 10 的关于里,自动安装新版本默认是选中的,这是一个很大的进步。如果可以后台静默强制更新就好了。不晓得以后的前端会不会根据 IE 10 不同的小版本做 hack,如果会有这个影响的话,那么前端就更值钱了。
任务管理器也很符合开发者的口味,可以显示简略信息也可以显示详细信息。如果你做开发的话,那么不需要衣服自己洗来说明,好处么你懂的。
想登陆新浪微博看一看,要么就是验证码不显示,要么就是验证码不好识别,反正最后的结果就是告诉我登陆异常,切换回 win 7 的系统,就正常了,再切换回来又是说登陆频繁啊什么的,反正不让用,手机客户端也不可以操作。
给客服打电话,等了10多分钟,话说我的话费估计又没有了,这个月你不晓得我口袋紧张,早饭要不要加杯豆浆都要犹豫半天的。回到正题,那客服mm到是蛮专业的,提供资料后她反馈说他那边验证是没有问题的。然后我说我用的是最新的 win 8 系统做的测试,她说你稍等,我又等待了5分钟后,mm告诉我说他们的技术部门测试了没有问题,还特别告诉我,新浪微博在电脑上一般用的是 XP 系统(我突然觉得新浪微博的FE好苦逼呀)。我说我这用的是 IE 10,对方说用的内核都是一样的。那一刻我陷入了沉思,这IE 6 和 IE 10 两者到底算不算一样的内核呢?
其实这里有个问题,衣服自己洗需要和大家一起讨论,就是客服在系统验证的时候,是需要你提供账号和密码前3位。我就在想,那么在架构上,新浪微博的密码是如何保存的呢?密码的加密算法是可逆的,或者密码是明文保存,又或者是数据库中有一个字段保存了密码的前3位?
接着说,我对客服mm说,那你帮我转一下客户端吧,我客户端也登陆不了。客户端那边是一个GG,问我要账号和密码,我就迷惑了,这个密码一定是需要的么,他说是的这样才可以做验证嘛。我说那算了,我没有问题了。
所以到最后,我还是不知道新浪微博登陆不上到底是哪里出问题了。
其实寒假在家的时候,我都打算看一看淘宝的开放平台的东西的。
这几天先用的免费的东西搭建了一个利用淘宝API推广的东西出来了。有兴趣的同学可以点击这里看一看,名字就叫做淘豆购物网,域名是www.taodoushop.com,话说申请域名的时候真不好申请,最后不可免俗地带了一个shop,啧啧,这名字看着真俗。
不管怎么样,先这么用着吧。各位同学,各位亲友,如果以后你们有去淘宝买东西的需求,可以先在我这里搜索一哈,如果有的话,通过我这里跳转到淘宝官方的店铺并成交的话,我这里会有几分钱的红包,为服务器做个资助不是么~
亲,要不现在就去淘豆购物网看一哈,来点批评,搞点建议什么的。
先说一点题外话,糗事的android、windows phone 7、iOS 版本都有一点点眉目了,android 的版本都开始进行第二版了,但是网站一直都没有动静。
网站部分我是打算分为2块,一块是给mobile html5的那部分,给那些 java 和 诺基亚 Sysmain 的用户访问的;另外一部分是传统网页,打算用 javascript 和 php 好好地写一下,然后看看能不能找一个前端方面的职位。
在这里,要非常地感谢一个人,就是我的好朋友ququ同学,他给与我太多太多的帮助,事无巨细,我为有这样的一个好朋友而骄傲。
本来空间是在国外的,平时都是自己在用,糗事的web版本我担心大家使用速度可能会有点慢,可是用国内的话备案就简直是一个杯具,要现场照相不说,还有个人信息泄漏的风险。衣服自己洗就曾经踩了一个坑,现在简直是非常地排斥备案,于是最终就用的新浪的SAE空间。
网上看了很多教程,说的是打开apache 的重写功能,虽然看的头晕晕的,半按照网上的方法修改半自己揣摩着,期间还给ququ连发了2封邮件呢。下班时最后的效果就是访问网站的时候,虽然会显示期望的内容,但是地址栏的url会变化,还是会显示真实的地址,我用工具查看了下,确实会有 http 304 请求。
这不是我想要的。在吃过晚饭后,觉得这样也不是办法,ququ还木有回邮件,于是就自己琢磨呗,网上又看了一些帖子,最终整理如下。
第一步,首先是要打开apache的相关功能。
sudo a2enmod rewrite 打开 url 重写,虽然反向代理用不上,但是程序的其它地方是需要的,这里就一并给打开了。
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer
这里一共有3个命令,我开始的时候按照网上的教程只打开了第一个,后面的2个没有打开,总是报服务器500 内部错误,后来添加了后面的2个后就解决了。如果你在配置的时候,日志里提示“proxy: No protocol handler was valid for the URL /. If you are using a DSO version of mod_proxy, make sure the proxy sub”,那么你应该和我一样,添加后面的2个功能。
第二步,设置网站的配置文件,在ubuntu的apache里,每个网站的配置文件是放在单独的文件里,找到 sites-available 文件夹里对应的文件并修改,修改后的配置文件差不多是下面的样子。
ServerName www.a.com
DocumentRoot “/var/site/www/”
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://host.com/
ProxyPassReverse / http://host.com/
ErrorLog “/var/log/apache2/www.log”
CustomLog “/var/log/apache2/www_accesses.log” common
ProxyRequests 是代理的类型,如果是 on 呢就表示正向代理,我们这里需要的是反向代理,就设置为off。ProxyPassReverse / http://host.com/ 呢就表示把所有的来自根目录的请求都代理到 http://host.com/ 的根目录下。
第三步呢,就是重启 apache。使用 sudo /etc/init.d/apache2 restart 命令,然后刷新页面就大功告成了。
最后回想起来,虽然很简单,是真的折腾了好久。另外在今天知道了一个小技巧,博客本来是 www.withonly.com,我是想直接输入 withonly.com 也可以直接访问的,但一直不知道要如何设置。总不至于需要新设置一个虚拟目录吧,按照 IIS 里的操作来看,应该是个很简单的,这个也一直没有好意思问ququ。
好在今天晓得了,在配置文件里设置 ServerAlias 就可以了。好吧,这里接受你们尽情的鄙视。
文字写到这里基本上就算是完事了,剩下要考虑的就是如何尽快地渲染页面,我刚才看了下效果,一个请求从国外再到国内,速度还是慢了许多,这个优化我还是放在前端去解决吧。
夜深了,祝大家好梦。 –2012-02-23 1:23
最近在不断地清空数据库的表,人工操作起来稍显的麻烦了点,放上SQL语句,以备后用。
–/第1步**********删除所有表的外键约束*************************/
DECLARE c1 cursor for select ‘alter table [‘+ object_name(parent_obj) + ‘] drop constraint [‘+name+’]; ‘ from sysobjects where xtype = ‘F’ open c1 declare @c1 varchar(8000) fetch next from c1 into @c1 while(@@fetch_status=0) begin exec(@c1) fetch next from c1 into @c1 end close c1 deallocate c1
–/第2步**********删除所有表*************************/
declare @sql varchar(8000) while (select count(*) from sysobjects where type=’U’)>0 begin SELECT @sql=’drop table ‘ + name FROM sysobjects WHERE (type = ‘U’) ORDER BY ‘drop table ‘ + name exec(@sql) end
衣服自己洗上周还在和@ququ 说话,问他电脑上都安装了些什么软件,说从这周开始就换个电脑用。
去年年底的时候买了个本,到现在总开机次数不超过20次,再不用过几天就过时了。除了 xmind 没有找到安装包,Git 目前用不上,其它的基本上都安装好了。
结果木有想到,到上班后居然坏了。一开机,屏幕开始全屏轮流显示白色、红色、绿色、蓝色、灰色、深灰色……然后就悲催了。马上给苹果网站上留的400打电话,在浪费了我的电话费却没有得到什么有效进展后,办理了去西单大悦城的预约。
时间本来约的是下午2点,那边我还没有去过,然后就早早地过去了,到西单才12点多。进去体验了下,里面人好多啊,都在那里玩。其实我对这些设备没有多大的兴趣。其它的地方很值得称赞,装饰还成,墙壁的背景色、展示屏的摆放位置和播放内容似乎挑选过。每个区域里都有保洁人员和保安。另外一个就是在商品的旁边会放一个刷卡机,可以直接刷卡购买。还有一个就是产品描述和工作人员办公都是用的苹果自己的产品,我觉得这个还蛮不错的诶,在pad界面上你还可以找到呼叫工作人员的按钮。
在里面无聊了很久,才轮到我。工程师说是屏幕坏了,要把整个上盖给换掉,也可能是主板的问题。先预约这2个配件。后来外接了个mac的显示器,在大屏幕上似乎就没有问题,看起来似乎果然是屏幕的问题。
但是原因很奇怪,都小心呵护着呢,还这样,我运气是不是也太好了点。
开了单子后回家,等通知吧。
版本号变为1.0.3,上图先,添加了背景图片,大家觉得这样和上次的界面比较起来要怎么样?你们敢不敢给点意见呀!
求工作呀,求RP呀。
话说 iOS 上面进展不大,要从今天起,晚上回家了就把 Macbook Pro 作为主要的工具,而不是 Y450 。
在上一篇文字里,已经写了如何获取数据。其实,在农历新年前,那部分代码衣服自己洗就已经写好了,丢在那里了。
我今天要说的,在任务栏显示数据,可不是在系统托盘区域显示图标,那个在 NET 里用 NotifyIcon 控件就可以做到的。按惯例,先上图。
这个是任务栏在底部的时候
这个是任务栏在右部的时候
至于任务栏在左边和在上边,原理都是一样的。
我在网上也确实搜索了一把,关于 NET 来实现这样效果的资料好少,年少不学 C++,老来就空叹气。
再说原理前,提一哈句柄这个概念,在 C++ 里,几乎所有的界面、控件都有句柄。例如一个窗体,一个按钮,桌面,和今天的主体“任务栏”都有句柄。这里说的是几乎,因为还有用 DirectUI 实现的界面是没有句柄的,例如 QQ、MSN、百度Hi、YY 等,DirectUI ,这是题外话了。
我们对句柄操作实际上就是对控件或者说所代表的内存进行操作。从广泛意义上来说,var obj=document.createElement(“div”); 这里的 obj 变量就可以理解为一个句柄。
实现原理是酱紫的,我们创建一个控件比如说 Label ,然后设置它的父容器为任务栏,最后再设置它的位置。就可以达到要求了。
任务栏主要有两块,一是显示当前运行的程序,我这里自己取名字叫工具条,二是显示程序的托盘图标,我取名字叫托盘栏。
第一步,引入相关的 C++ API。什么 FindWindow 、GetWindowRect 什么的。
[DllImport(“user32.dll”, EntryPoint = “FindWindowEx”, SetLastError = true)]
static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport(“user32.dll”)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport(“user32.dll”)]
static extern int GetWindowRect(IntPtr hwnd, out Rect lpRect);
[DllImport(“user32.dll”, EntryPoint = “MoveWindow”)]
static extern int MoveWindow(IntPtr hwnd, int x, int y, int nWidth, int nHeight, int bRepaint=1);
[DllImport(“user32.dll”)]
static extern int SetParent(IntPtr wnd, IntPtr newParentWnd);
第二步,拿到我们需要操作的对象的句柄。
IntPtr trayHwnd = FindWindow(“Shell_TrayWnd”, null); //获取任务栏整体句柄
IntPtr notifyHwnd = FindWindowEx(trayHwnd, IntPtr.Zero, “TrayNotifyWnd”, null);//获取任务栏托盘区域句柄
IntPtr toolbarHwnd = FindWindowEx(trayHwnd, IntPtr.Zero, “ReBarWindow32”, null);//获取任务栏工具条区域句柄
IntPtr imeHwnd = FindWindowEx(toolbarHwnd, IntPtr.Zero, “CiceroUIWndFrame”, null);//获取语言栏区域句柄
第三步,开始获取相关尺寸。
Rect box = new Rect();
GetWindowRect(toolbarHwnd, out box);
//获取任务栏尺寸
int boxWidth = box.Right – box.Left;
int boxHeight = box.Bottom – box.Top;
//判断任务栏是水平还是垂直。true 为水平,false 为垂直
bool position = boxWidth > boxHeight ? true : false;
Rect ime = new Rect();
int d = GetWindowRect(imeHwnd, out ime);
//获取语言栏尺寸
int imeWidth = 0;
int imeHeight = 0;
if (d != 0)
{
imeWidth = ime.Right – ime.Left;
imeHeight = ime.Bottom – ime.Top;
}
frmHwnd = FindWindow(null, “SysMonitor”); //查找程序窗体
第四步,开始计算目的坐标。
if (frmHwnd != IntPtr.Zero)
{
int x1, y1; //窗体目标坐标
int x2, y2;//语言栏目标坐标
if (position)
{
x1 = boxWidth – w;
y1 = (boxHeight – h) / 2;
x2 = x1 – imeWidth-10; //这里多减的 10 是为了增加间隙,漂亮点
y2 = 0;
}
else
{
int diff = 2; //垂直方向,扣减宽度更美观
//如果为垂直方向,修改宽度以适应任务栏宽度
w = boxWidth – diff;
x1 = box.Left==0?0:diff;
y1 = boxHeight – h;
x2 = x1;
y2 = boxHeight – imeHeight – h;
}
this.Width = w;
this.Height = h;
lblInfo.Width = w;
lblInfo.Height = h;
int c = SetParent(frmHwnd, toolbarHwnd);//设置任务栏为窗体的父窗体
第五步,移动 CPU 温度窗体和语言栏到目的位置。
MoveWindow(frmHwnd, x1, y1, w, h);//移动显示CPU温度的窗体
MoveWindow(imeHwnd, x2, y2, imeWidth, imeHeight);//移动语言栏窗体
写到这里,整体结构就算完了。不要忘记了添加一个 Timer 喔,定时获取最新的 CPU 温度并显示出来。
最后生成的 exe 我就不放上来了。如果大家有需要的话,留言衣服自己洗会发给你们。代码优化的事情就交给你们去做拉。
CPU 温度工具到这里就算完拉。剩下的一个未完成的是在直接在桌面上绘制内容,相信我,这对我来说很有用的。
最后的最后,我那些亲爱的朋友们,我想你们了。