Echarts3 中设置自定义的 markline

在折线上,想要添加一条阈值标线,在echarts2中,这样写:

var category = [....];
var threshold = 80;

var option = {
    xAxis : [{
            type : 'category',
            data : category
        }
    ],
    yAxis : [{
            type : 'value',
            min : 0,
            max : 100
        }
    ],
    series : [
        type : 'line',
        markLine : {
            data : [
                [{
                        name : '阈值',
                        value : threshold,
                        xAxis : 0,
                        yAxis : threshold
                    }, {
                        xAxis : category.length,
                        yAxis : threshold
                    }
                ]
            ]
        }
    ]
};

在2中,x轴是使用类目的索引,要从最左侧画到最右侧,就使用从0到 category.length 一直画就行。

在echars3中,不再建议这样的写法(文档上说不建议,我这样写却是啥也不显示啊),而是改成了:

var category = [....];
var threshold = 80;

var option = {
    xAxis : [{
            type : 'category',
            data : category
        }
    ],
    yAxis : [{
            type : 'value',
            min : 0,
            max : 100
        }
    ],
    series : [
        type : 'line',
        markLine : {
            data : [
                [{
                        name : '阈值',
                        value : threshold,
                        coord : [category[0], threshold]
                    }, {
                        coord : [category[category.length - 1], threshold]
                    }
                ]
            ]
        }
    ]

};

在3中,使用的是坐标系的坐标位置 [x, y]。这时候,x轴上使用的不再是索引,而是类目的值,所以这里取第1个值(category[0])和最后一个值(category[category.length – 1])来作为x坐标的起始点。

Javascript日期时间处理库 moment.js

这是一个在Javascript操作时间的工具库。包括

  • 转换
  • 验证
  • 操作
  • 显示

等功能。
阅读全文 Javascript日期时间处理库 moment.js

jQuery 扁平风格提示条

这是一个依赖jQuery的简单扁平提示组件,tip和dialog两种模式。

使用说明

$.flatip.timeout  = 3000; // 设置tip默认的显示时长

$.flatip.success(message, timeout)
$.flatip.info(message, timeout)
$.flatip.warn(message, timeout)
$.flatip.error(message, timeout)

$.flatip.alert(option)
$.flatip.prompt(option)
$.flatip.dialog(option)

阅读全文 jQuery 扁平风格提示条

Microsoft将Linux带至桌面操作系统

作者 Jeff Martin

在今天的Build大会上Microsoft宣布:今年的Windows 10年度更新将使得Windows 10系统能够无缝运行Linux二进制程序。多年来,专家与开发者都在猜测,Linux如何以及何时才能在普通PC用户的桌面系统中更加流行。从今天的新闻来看,似乎Microsoft本身已经成为这样的一种推动力。

Microsoft与Canonical合作开发了运行二进制程序的能力,这些二进制程序包括Bash Shell脚本和不加修改的Emacs。在今天的Build 2016主题演讲上,来自Microsoft的Kevin Gallo演示了他是如何在Windows下打开一个标准的Bash命令行,并借此运行GNU Emacs的。Gallo称这是真正的Linux兼容—而非通过移植或虚拟机实现。

Microsoft的Scott Hanselman随后发表了一篇简短的声明,并在其中详细披露了一些细节。鉴于Ubuntu是Debian Linux发行版的衍生版,因此用户可以使用自己熟悉的程序包安装器apt-get。与Linux桌面上的操作一样,Windows用户也可以通过apt-get安装新的程序包。有关在Windows 10环境中托管Linux二进制程序所需的技术规范还有待公布,但根据现场提供的屏幕截图来看,至少可以支持64位Linux二进制程序,是否支持32位Linux二进制程序还有待确认。据Hanselman说,64位Windows是必须的。

若想自行尝试该功能,还请期待今年夏天的Windows 10年度更新。

来自Microsoft的Rich Turner和Russ Alexander通过发布在Channel 9,名为《在Windows上通过Ubuntu运行Bash》的演示介绍了更多细节。该项目源自用户在User Voice提交的请求,用户的两个主要诉求是希望获得更好的控制台,以及为Windows提供UNIX/Linux工具。因此他们在Windows内核中构建了一个全新的子系统,用来暴露那些支持Linux所需的系统调用。

Microsoft和Canonical合作开发的这个新系统名为Windows Subsystem for Linux,可提供一种“用户模式 Linux”。这个新增的子系统可以“提供兼容Linux的系统调用层”。

此番合作证明上述的子系统不是虚拟机或仿真系统,他们在演示中使用的系统为Ubuntu 14.04.4 LTS。如果你希望了解第一手信息,可以从视频中看到,目前已经支持原生运行多种程序:GNU编译器、Vi文本编辑器,甚至可以在Linux中挂载本地文件系统。然而目前还有些程序无法支持,因此诸如MySQL等程序还无法运行,但该团队正在继续努力工作,以进一步改善用户体验。

查看英文原文:Microsoft Brings Linux to the Desktop

Javascript 对象深度克隆

对象的深度克隆,最大的问题就循环引用了。

现在,就在函数中使用一个数组,将所有的引用都保存起来,在clone前先检查,这个引用是否已经存在了,如果已经存在,就不再解析这个对象。

然后就很简单的了,直接上代码:

function cloneObject(obj){
    if(typeof obj !== 'object' || obj === null){
        return obj;
    }
    // 保存引用 
    var refs = arguments[1];
    // 通过 _refid 属性判断参数是不是需要的refs
    if(typeof refs === 'undefined' || refs === null || !refs._refid){
        refs = [obj];
        refs._refid = Math.random();
    } else if((function(refs, obj){
        // 检查引用是否存在  存在时返回true
        for(var i = 0;i < refs.length; i++){
            if(refs[i] === obj){
                return true;
            }
        }
        
        return false;
    })(refs, obj)){
        return obj;
    } else {
        // 保存当前对象的引用
        refs.push(obj);
    }
    
    var newobj = {};
    // 检查对象是否是数组
    if(typeof obj === 'object' && typeof obj.length === 'number' && obj.slice === Array.prototype.slice){
        newobj = [];
    }
    
    for(var key in obj){
        newobj[key] = cloneObject(obj[key], refs);
    }
    
    return newobj;
}

更多信息请到 http://git.oschina.net/hyjiacan/jsfunc

修改Windows10我的电脑打开的默认显示

Windows10在打开“此电脑”后,默认显示的是快速访问,很不习惯这个。于是找了下,发现可以通过设置

1 控制面板
2 外观和个性化 (控制面板非分类视图时没有跳过)
3 文件资源管理器选项 -> 指定单击或双击打开
4 打开文件资源管理器时打开 右边选择 此电脑
5 收工

jQuery3 新功能(译文)

jQuery已经在互联网荡了10来年了,它提供给它的玩家各种好用的接口,包括DOM操作,AJAX请求,动画效果====。另外,与DOM API不同的是,jQuery实现了混合模式(Composite Pattern)。就因为这个,我们就可以随心所欲地在jQuery上面调用jQuery方法。

再过个几周,jQuery就要迎来下一个重要的里程碑了————发布jQuery3。jQuery3修复了不少的八阿哥,移除和停用了一些函数,也添加了一些函数,还改变了一些函数的玩法。在本文中,我们就来围观一下jQuery3的重要变化吧。

阅读全文 jQuery3 新功能(译文)

Gogs 服务启动失败:进程意外终止

在 Windows 上,配置完成Gogs后启动服务,遇到问题:
进程意外终止。。最后在日志文件 gogs.log中看到,gogs尝试在命令行执行git命令时失败。

就猜测问题可能是安装git时没有将git命令配置到环境变量path中引起的。

于是,重新安装了 git,安装时选择了使用 Windows Prompt作为git命令的宿主(也可以将git目录直接添加到path上),重新启动gogs服务,启动成功,问题解决。

————————
电脑改名后,导致 gogs 启动也报这个错,这时候要修改配置文件
custom/conf/app.ini里面的RUN_USER的值为新的名称:

COMPUTERNAME$

COMPUTERNAME 应该是在命令行执行

echo %computername%

得到的字符串。

一定要大写,大写,大写。

WordPress被WordPress机器人消耗大量流量

最近网站流量飞升,一个小站而已,一个月才过一半,怎么就会用到差不多5G流量。 这个不会偷着笑,因为用户量明摆着,只有那么多。就估计是bot或者spider在搞事。于是就云阿里云(因为我用的阿里云的服务器,其它空间商应该也会提供这样的功能吧),就发现。。

第一个问题
flowlog01
这个老毛子坏啊,一可能连中文都不懂的,居然跑我300多M流量。再看访问记录,
flowlog02
确定这段无疑了。

接着,第二个问题就来了,5G-300M=4.7G 。 这也不过只是冰山一角,还有的呢? 继续看日志,应该还能发现点啥吧。
终于,发现了问题。
flowlog03
这个。。。 wordpress的机器人,搞掉了我 4.3G 的流量。。 这是在吃大户呢。。

果断屏蔽掉上面老毛子的IP和worpress的域名。。。

今天看了下屏蔽后的结果,IP被屏蔽了,但是 wordpress机器人还在继续疯狂地抓取。。继续想办法了。。
wordpress.robot

使用C#开发Notepad++插件遇到的问题

一些希望在Notepad++中使用的功能,找不到插件,就想自己整一下。奈何Notepad++插件需要C++,而我却对C#较熟悉,就开始寻找使用C#开发的道路。
看这里…
https://sourceforge.net/p/notepad-plus/discussion/482781/thread/7d864e52/

我下载了(NppPlugin.NET.v0.6) 这个鬼东西。
里面有 vs2005 2008 2010 的项目文件。整个2010的项目用VS2013打开。生成。。 报错了。

ILDasm: calling ‘ildasm.exe’ with /quoteallnames /unicode /nobar /linenum “/out:C:\Users\hyjiacan\AppData\Local\Temp\tmpAB1F\Demo.il” “C:\hyjiacan\VS\NppPlugin.NET.v0.5\Demo Plugin\NppManagedPluginDemo\bin\Debug\Demo.dll”

重新生成,找问题。。 还是这样。。

突然看到SO上这个:http://stackoverflow.com/questions/21430876/sdk-path-is-empty-in-notepad-plugin-net

这里面提到了一个设置 verbosity(诊断),我也这样改一下试试。。

就重新生成了一下,找到输出里面有这样一个路径:

SdkPath=C:\Program Files\Microsoft SDKs\Windows\v8.1A

再看,目标文件是ildasm.exe,而在这个路径下没有这个文件,接着用 everything 搜一下,发现在这个目录下的 bin\NETFX 4.5.1 Tools目录下有这样一个文件,好吧,估计是这个路径的问题了。

到处找、。。。 发现这个文件挺奇怪的。
NppPlugin.NET.v0.6\Templates\SharpDevelop 4.x\bin\DllExport\NppPlugin.DllExport.targets
然后,打开这个文件:

<Project
  xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <UsingTask TaskName="NppPlugin.DllExport.MSBuild.DllExportTask"
             AssemblyFile="NppPlugin.DllExport.MSBuild.dll"/>
  <Target Name="AfterBuild"
          DependsOnTargets="GetFrameworkPaths"
          >
    <DllExportTask Platform="$(Platform)"
                   PlatformTarget="$(PlatformTarget)"
                   CpuType="$(CpuType)"
                   EmitDebugSymbols="$(DebugSymbols)"
                   DllExportAttributeAssemblyName="$(DllExportAttributeAssemblyName)"
                   DllExportAttributeFullName="$(DllExportAttributeFullName)"
                   Timeout="$(DllExportTimeout)"
                   KeyContainer="$(KeyContainerName)$(AssemblyKeyContainerName)"
                   KeyFile="$(KeyOriginatorFile)"
                   ProjectDirectory="$(MSBuildProjectDirectory)"
                   InputFileName="$(TargetPath)"
                   FrameworkPath="$(TargetedFrameworkDir);$(TargetFrameworkDirectory)"
                   LibToolPath="$(DevEnvDir)\..\..\VC\bin"
                   LibToolDllPath="$(DevEnvDir)"
                   SdkPath="$(FrameworkSDKDir)"/>
  </Target>
</Project>

里面有一个SdkPath,试一下在SdkPath=”$(FrameworkSDKDir)后面添加上这个路径呢(即:SdkPath=”$(FrameworkSDKDir)\bin\NETFX 4.5.1 Tools”)?

保存,再生成,没报错了。