Pages: 2/6 First page Previous page 1 2 3 4 5 6 Next page Final page [ View by Articles | List ]
Feb 7
问题:
Quotation

项目上线后发现一个问题,项目记录流水的时间是取自本地的时间new Date(),之前一直正常,最近发现异常
经过日志发现时终端设备时区设置异常,但诡异的是终端APPrequest提交的时间戳是正常的……
撸一撸chun
日志中显示记录流水时间是:2017-02-07 08:16:55,为伦敦时间,
而正确的时间应该是2017/2/7 16:16:55,这就导致终端APP界面显示异常,
但request提交的是时间转换的时间戳:Math.round(new Date("2017-02-07 08:16:55".replace(/-/g, '/')).getTime()/1000)


why

什么是时间戳(timestamp)?它和时区(timezone)又有什么关系?初学者可能一开始很难搞懂时间戳这个概念,就像这期《程序员的日常》漫画中的主人公一样。

Highslide JS
漫画注释

从漫画中举的例子来看,这里的时间戳,指的就是Unix时间戳(Unix timestamp)。它也被称为Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。因此,严格来说,不管你处在地球上的哪个地方,任意时间点的时间戳都是相同的。这点有利于线上和客户端分布式应用统一追踪时间信息。

Unix时间戳不仅被使用在Unix系统、类Unix系统中,也在许多其他操作系统中被广泛采用。但是,这并不意味着目前的时间戳规范会一直持续使用下去。 因为到2038年1月19日时,Unix时间戳就会因为32位内存溢出(32-bit overflow)而无法继续使用。因此,在这一天之前,上千万的网络应用要么采用新的时间戳规范,要么迁移到64位系统,后者可以给时间戳争取“一点”时间。


Jan 5

let no="u0000u0000u0000u0000u0000u0000u0000Ou0000u0000u0000u0000u0000u0000u0000u0000"
no = no.replace(/\u0000/g,"");

  \u0000是unicode表示的一个特殊字符,也就是二进制的0,在c里面用这个字符作为字符串结束的标志。
正是因为这个原因,造成调用某些方法的时候字符串被截断。例子:
<textarea id="ff"></textarea>
<script>
var x = 'xxx\u0000yyy';
alert(x);
alert(x.length);
var elm = document.getElementByIdx('ff');
elm.value = x;
y = x.replace('\u0000', ' ');
alert(y);
alert(y == 'xxx\u0000yyy');
alert(y == 'xxx yyy');
alert(elm.value.length);
alert(elm.value == 'xxx\u0000yyy');
alert(elm.value == 'xxx yyy);
</script>
本身声明这个字符串的时候是可以接受\u0000的,所以长度什么的都对
但是通过alert调用的时候,字符串就被截断,认为到\u0000就结束了
同样当作一个字符串赋值给一个textarea的时候,也被截断了(IE6)。
对于firefox,不被截断,textarea.value的值就是'xxx\u0000yyy'
Oct 1

 前一段时间想装一下sqlserver,但是一直装不上。搞得我很郁闷,我重装了一下系统。但是还是没有装上。 

     正好今天有时间,所以就尝试着把sqlserver装上。弄了半天,百度了很长时间,终于弄出来了。估计以后大家可能也会遇到,我也加深一下印象,所以记录了下来: 
      大致出错信息如下: 
    RebootRequiredCheck 检查是否需要挂起计算机重新启动。挂起重新启动会导致安装程序失败。 失败 需要重新启动计算机。必须重新启动计算机才能安装 SQL Server。
 
检查出错:
 
Microsoft SQL Server 2008 Setup - System Configuration Check Report
 
Computer Name(s): JH 
Report Date/Time: 2010/11/25 19:16
Saved to Directory: C:Program FilesMicrosoft SQL Server100Setup BootstrapLog20101125_191528SystemConfigurationCheck_Report.htm
 
Rule Name
Rule Description
Result
Message/Corrective Action
 
GlobalRules: 针对规则组“GlobalRules”的 SQL Server 2008 安装程序配置检查
 
RebootRequiredCheck
检查是否需要挂起计算机重新启动。挂起重新启动会导致安装程序失败。
失败
需要重新启动计算机。必须重新启动计算机才能安装 SQL Server。
 
AclPermissionsFacet
检查 SQL Server 注册表项是否一致。
通过
SQL Server 注册表项是一致的,可以支持 SQL Server 安装或升级。
 
MediaPathLength
检查 SQL Server 安装媒体是否太长。
通过
SQL Server 安装媒体不太长。
 
OsVersionCheck
检查计算机是否满足最低操作系统版本要求。 
通过
该操作系统版本满足此产品的最低要求。
 
ThreadHasAdminPrivilegeCheck
检查运行 SQL Server 安装程序的帐户是否具有计算机的管理员权限。
通过
运行 SQL Server 安装程序的帐户具有计算机的管理员权限。
 
WmiServiceStateCheck
检查 WMI 服务是否已在计算机上启动并正在运行。
通过
Windows Management Instrumentation (WMI) 服务正在运行。
 
 
解决步骤:
a 、重启机器,再进行安装,如果发现还有该错误,请按下面步骤 
b、在开始->运行中输入regedit 
c、到HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession Manager 位置 
d、在右边窗口右击PendingFileRenameOperations,选择删除,然后确认 
e、重启安装,问题解决 
如果还有同样问题,请检查其它注册表中是否有该值存在,如有请删掉
Sep 11

软件架构(software architecture)就是软件的基本结构。

合适的架构是软件成功的最重要因素之一。大型软件公司通常有专门的架构师职位(architect),只有资深程序员才可以担任。

O'Reilly 出版过一本免费的小册子《Software Architecture Patterns》PDF), 介绍了五种最常见的软件架构,是非常好的入门读物。我读后受益匪浅,下面就是我的笔记。

一、分层架构

分层架构(layered architecture)是最常见的软件架构,也是事实上的标准架构。如果你不知道要用什么架构,那就用它。

这种架构将软件分成若干个水平层,每一层都有清晰的角色和分工,不需要知道其他层的细节。层与层之间通过接口通信。

虽然没有明确约定,软件一定要分成多少层,但是四层的结构最常见。

        
  • 表现层(presentation):用户界面,负责视觉和用户互动
  •     
  • 业务层(business):实现业务逻辑
  •     
  • 持久层(persistence):提供数据,SQL 语句就放在这一层
  •     
  • 数据库(database) :保存数据

有的软件在逻辑层和持久层之间,加了一个服务层(service),提供不同业务逻辑需要的一些通用接口。

Aug 25
IOS下日期问题(苹果浏览器Safari对JS函数库中newDate()函数中的参数的解析中不支持形如“2020-01-01”形式)
苹果浏览器safari对new Date(‘1937-01-01‘)不支持,用.replace(/-/g, "/")函数替换掉中划线即可
Aug 4

随着Web App的发展,越来越多的移动端App使用HTML5的方式来开发,除了一些HybridApp以外,其他一部分Web App还是通过浏览器来访问的,通过浏览器访问就需要联网发送请求,这样就使得用户在离线的状态下无法使用App,同时Web App中一部分资源并不是经常改变,并不需要每次都向服务器发出请求,出于这些原因,HTML5提出的一个新的特性:离线存储。通过离线存储,我们可以通过把需要离线存储在本地的文件列在一个manifest配置文件中,这样即使在离线的情况下,用户也可以正常使用App。

怎么用

首先来讲解下离线存储的使用方法,说起来也很简单。只要在你的页面头部像下面一样加入一个manifest的属性就可以了。

<!DOCTYPE HTML> <html manifest = "cache.manifest"> ... </html>

然后cache.manifest文件的书写方式,就像下面这样:

CACHE MANIFEST #v0.11  CACHE:  js/app.js css/style.css  NETWORK: resourse/logo.png  FALLBACK: / /offline.html

离线存储的manifest一般由三个部分组成:
1.CACHE:表示需要离线存储的资源列表,由于包含manifest文件的页面将被自动离线存储,所以不需要把页面自身也列出来。
2.NETWORK:表示在它下面列出来的资源只有在在线的情况下才能访问,他们不会被离线存储,所以在离线情况下无法使用这些资源。不过,如果在CACHE和NETWORK中有一个相同的资源,那么这个资源还是会被离线存储,也就是说CACHE的优先级更高。
3.FALLBACK:表示如果访问第一个资源失败,那么就使用第二个资源来替换他,比如上面这个文件表示的就是如果访问根目录下任何一个资源失败了,那么就去访问offline.html。

浏览器怎么解析manifest

那么浏览器是怎么对离线的资源进行管理和加载的呢?这里需要分两种情况来讨论。

        
  •     

    在线的情况下,浏览器发现html头部有manifest属性,它会请求manifest文件,如果是第一次访问app,那么浏览器就会根据manifest文件的内容下载相应的资源并且进行离线存储。如果已经访问过app并且资源已经离线存储了,那么浏览器就会使用离线的资源加载页面,然后浏览器会对比新的manifest文件与旧的manifest文件,如果文件没有发生改变,就不做任何操作,如果文件改变了,那么就会重新下载文件中的资源并进行离线存储。

        
  •     
  •     

    离线的情况下,浏览器就直接使用离线存储的资源。

Aug 3

 A curated list of delightful Node.js packages and resources.

Inspired by the awesome list thing.

Packages

Feb 29
在nodejs环境
安装protobufjs
Highslide JS
test.js


user.proto文件


Pages: 2/6 First page Previous page 1 2 3 4 5 6 Next page Final page [ View by Articles | List ]