开源协议及知识共享协议简单介绍

旧地址:http://blog.canself.com/licenseindex/
https://www.shisujie.com/blog/LicenseIndex

本文为加强个人作品的保护以及尊重他人作品而整理。

作为一名程序员,你可能会面临开源协议的选择;
而作为网络博文的写作者,你亦可能需要对知识共享许可协议做一定了解。
关于协议作用不限于上述举例,请勿狭义理解。

协议详细内容链接【英文内容】:

开源协议

相关协议介绍中文版 —— 来自开源中国红薯

个人推荐 MIT 协议(亦是个人常用),内容相对开放。

趣味协议

  • WTFPL – Do What the Fuck You Want to Public License —— 个人常译为 “你想干嘛就干嘛协议”,看个人喜好了。
    • 这应该是最自由的开源协议了吧。如果你对自己的作品觉得没啥需要保护的,但又想加个开源协议,这个就是不二之选了。

知识共享许可协议

简要参考

协议英文 协议中文 协议图片
CC BY 署名
CC BY-SA 署名-相同方式共享
CC BY-NC 署名-非商业性使用
CC BY-NC-SA 署名-非商业性使用-相同方式共享
CC BY-NC-ND 署名-非商业性使用-禁止演绎

点击此处帮助选择许可协议


掘:奇葩史

Log4net快速索引参考

官方项目地址:The Apache log4net project
本文内容仅为相关项参考,不进行具体使用讨论
另转载请注明出处

Log4net快速索引参考

Log4net主要有以下三个部件:

  • loggers —— 记录器:开发者通过它来写日志
  • appenders —— 输出位置/目标控制器:通过它控制日志需要记录在哪些地方
  • layouts —— 输出格式控制器:通过它控制日志的输出格式或内容

注意事项:在使用配置文件(App.config)处理log4net时,需要在AssemblyInfo.cs文件中加上 [assembly: log4net.Config.XmlConfigurator(Watch = true)],否则无法输出;
当然这不是唯一解决方法(但应该是最简单方便的了),更多方法见官方文档:Apache log4net™ Manual - Configuration


loggers

日志级别

标识日志的重要性。

Log4net默认提供以下5个级别:

  • DEBUG —— 调试使用,如记录一些变量的值
  • INFO —— 一般信息,如记录一些进度情况
  • WARN —— 警告信息,如记录可忽略的异常信息
  • ERROR —— 错误信息,如记录一些错误异常
  • FATAL —— 致命错误信息,如记录软件崩溃信息

重要/严重程度:DEBUG < INFO < WARN < ERROR < FATAL.

以下为示例使用:

ILog log = LogManager.GetLogger("logname");
log.Info("message");

日志记录控制

即表示日志是否需要记录

与日志级别相比,多了以下两个等级:

其他等级按照其重要程度控制。

  • ALL —— 表示所有日志都需要记录
  • OFF —— 表示所有日志都不需要记录,即关闭日志记录

此内容常在配置文件中配置,示例如下:

<logger name="yourlogname">
    <level value="INFO" />
</logger>

ILog log = LogManager.GetLogger("yourlogname");
log.Info("test");

注意:日志记录级别的控制还可以在<root>元素内控制所有记录器的记录级别。


appenders

控制输出目标位置

常用的输出目标控制器主要有以下两个:

  • log4net.Appender.ConsoleAppender —— 用于输出到控制台,调试期间使用频率较高
  • log4net.Appender.FileAppender —— 用于记录到文件,软件应用发布后使用频率较高

当然,log4net还提供了一系列的控制器,具体内容见文末表格。


layouts

控制日志输出格式及要输出的内容

最常用的输出格式控制器为:log4net.Layout.PatternLayout

log4net.Layout.PatternLayout

以下为常用的格式化参数——ConversionPattern:

  • %m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息
  • %n(new line):换行
  • %d(datetime):输出当前语句运行的时刻
  • %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数
  • %t(thread id):当前语句所在的线程ID
  • %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等
  • %c(class):当前日志对象的名称,即类名称或日志记录器的名称
  • %L:输出语句所在的行号
  • %F:输出语句所在的文件名
  • %-数字:表示该项的最小长度,如果不够,则用空格填充

其示例如下,如PatternLayout的输出格式定义为:

%r [%t]%-5p %c - %m%n

则最终将输出内容为:

176 [main] INFO  org.foo.Bar - Located nearest gas station.

关于log4net提供的更多输出格式控制器见文末表格。


其他内容

必须元素

<root>在配置文件中必须添加

过滤器-Filters

用于精确控制不同输出目标控制器,如两个输出目标控制器可以使用不同的日志输出级别。


常用的完整示例

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
    </configSections>
    
    <log4net>
        <root>
            <level value="WARN" />
            <appender-ref ref="FileAppender" />
            <appender-ref ref="ConsoleAppender" />
        </root>

        <logger name="yourlognameorfullclassname">
            <level value="DEBUG"/>
        </logger>

        <appender name="FileAppender" type="log4net.Appender.FileAppender">
            <file value="log-file.txt" />
            <appendToFile value="true" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
            </layout>
        </appender>

        <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
            </layout>
        </appender>
    </log4net>
</configuration>

更多示例配置见官方文档:Apache log4net™ Config Examples


参考表格

appenders-输出目标控制器

内容见官方文档:Appenders

layouts-输出格式控制器

内容见官方文档:Layouts

Filters-过滤器

内容见官方文档:Filters


掘:奇葩史

关于使用WiXUI后遇到错误2819问题解决

场景

在使用Wix Toolset过程中,为安装包添加界面时,添加如下代码:

<UIRef Id="WixUI_InstallDir"/>

安装包生成成功后进行安装时,出现错误代码为2819的错误提示——出现在将要展示文件路径选择时

解决方案:

为WixUI指定Install目录,使用如下代码:

<Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER"/>

注意:代码中WIXUI_INSTALLDIR为全部大写,value值需要在目录配置中指定。

至此,重新生成即可。

天气API相关内容索引

文档内容为天气api整理

主要包括:

  • 专门提供天气服务的api(含国内国外)
  • 天气服务为部分业务服务(含国内国外)
  • 提供天气查看却没有api的——主要集中于导航站

个人推荐:心知天气

专业天气服务


国外部分

Weather

AccuWeather

OpenWeatherMap


国内部分——按alexa排名排序

中国天气网

## **心知天气**【荐】

彩云天气:

和风天气

  • 官网地址:http://www.heweather.com/
  • 收费情况:免费+收费,免费限制,个人基本够用
  • 地区:国内
  • alexa排名:50 0000以内

最美天气

丫丫天气

  • 官网:http://www.yytianqi.com/
  • 收费情况:免费+收费,免费限制,相对限制较多
  • 地区:国内
  • alexa排名:500 0000以内

天气服务为部分业务


明确提供api服务

雅虎天气

百度地图里的车联网


未找到api服务

微软小娜里面的最美天气 —— 好像又与小鱼天气相关

提供天气查看的网站 —— 部分

主要内容为一些导航网站(或类似)等含有天气插件的网页,可以分析网页源码获取天气调用接口;
其中还包括以前提供过api,但现在已不提供的部分内容
注:不建议使用,一方面网站改版带来不稳定,另一方面没有授权存在争议


另可参考内容(apistore类型):

百度apistore:

聚合数据


掘:奇葩史

关于Visual Studio单元测试项目中Console使用和WinForm相关问题

问题来源:个人想给单元测试添加用户输入,即添加Console.ReadLine()。但vs的单元测试中并不会显示控制台窗口。

解决方案:

1、关于Console.WriteLine——要查看输出,无法直接查看,只能在运行结束后查看,查看方式如下:

output

点击图中的“输出”或者在测试资源管理器中点击“输出”

testoutput

 

2、 想在“输出窗口”查看输出结果,将Console改为System.Diagnostics.Trace或System.Diagnostics.Debug,即如下:

经测试,需要在调试模式下才会在输出窗口看到内容,此时Console同样有效

System.Diagnostics.Debug.WriteLine("输出");
System.Diagnostics.Trace.WriteLine("输出");

 

3、关于输入Console.ReadLine,未找到合适解决方案,最终使用添加Form窗体来进行输入处理。

但是,使用form窗体时,在运行情况下,窗体可以显示,调试时窗体会显示不出来。

解决方案:将窗体的ShowInTaskbar属性改为false即可

RSS/Atom开发索引

本文托管地址:http://git.oschina.net/huaxia283611/JustForFeed/tree/master/docs/ThirdPartyAPI.md

RSS阅读器开发信息整合

名称 开源及费用 API 官方支持平台 语言 描述
Feedly 否,高级收费 https://developer.feedly.com/ Web/IOS/Android/Kindle 支持中文
AOL Reader http://reader.aol.com/api Web/IOS/Android 支持中文
NewsBlur 开源,高级收费 http://www.newsblur.com/api Web/IOS/Android 英文
Inoreader 否,高级收费 http://www.inoreader.com/developers/ Web/IOS/Android/WP 支持中文
Reader 开源 http://reeder.io/api 未知 英文 官网已无法访问,应已不在维护,纯粹因为开源整理进来
Feedbin 开源,收费 https://github.com/feedbin/feedbin-api#readme Web 英文

关于其他大部分rss阅读器,很多都是依赖以上几个后台api服务
曾经霸主:Google Reader —— 谷歌服务调整被砍

.NET开发参考

针对win10/UMP开发

其他

  • 由于现在微软.net framework提供了SyndicationFeed订阅信息解析类,故我们自己无需再去专门写解析。

个人开发 - 暂未明确定位,故有时调整会比较大 - 偏向学习

其他内容

关于RSS/Atom

简单理解:RSS与Atom就是两中信息传输格式(XML格式),而且非常相似。虽说Atom像是RSS的进化版本,但我们提到订阅时,更多的会说到RSS(有时还隐含表述了Atom)。
另注:此Atom非Github的Atom,未避免更多的误解,在提及订阅的时候,直接用RSS,而不提及Atom

关于新闻组

关于新闻组,开发相关内容较少,故在此额外添加,以作后续参考
如果你能够去墙外,直接看 Google Groups


掘客:奇葩史

Visual Studio扩展开发资源汇总

官方开发文档:

中文版:https://msdn.microsoft.com/zh-cn/library/bb166441.aspx

英文版:https://msdn.microsoft.com/en-us/library/bb166441.aspx

含发布流程集合版【此版应该是微软后期调整的重点】:https://www.visualstudio.com/en-us/docs/integrate/ide/extensions/overview

单独附上HelloWorld【代码起于HelloWorld】:https://www.visualstudio.com/zh-cn/docs/integrate/ide/extensions/hello_world

 

代码示例:

微软官方示例:https://github.com/Microsoft/VSSDK-Extensibility-Samples

偶的示例:http://git.oschina.net/huaxia283611/VSExtension-StudySamples


VS2013缺少报表工具

问题1:缺少报表设计工具——即rdlc无法打开设计器

原因:缺少SQL Server Data Tools(SSDT)工具

解决:安装ssdt即可

SSDT下载地址:https://msdn.microsoft.com/library/mt204009.aspx

参考(英):http://stackoverflow.com/questions/31581432/missing-microsoft-rdlc-report-designer-in-visual-studio

后续问题:安装完vs中找不到报表模板,即问题2

 

问题2:添加项中没有报表模板

解决方案:拷贝一份模板至对应目录,如:本人已安装vs2010,从如下目录中拷贝2052文件夹至vs2013项对应的目录——需vs重启:

\Common7\IDE\ItemTemplates\CSharp\Reporting

 

其他——解决问题查的相关资料,此次无效不代表其他情况不好使:

【未经个人测试】添加缺少模板:

安装“Microsoft Report Viewer 2012 Runtime 可再分发包中包括用于查看使用 Microsoft 报表技术设计的报表的控件。 ”

地址:http://www.microsoft.com/zh-CN/download/details.aspx?id=35747

参考问题:http://stackoverflow.com/questions/27778378/visual-studio-2013-add-item-report-option-missing

 

【此次无效】添加报表模板:

安装 适用于 Visual Studio 2013 的 SSDT-BI

下载文件:Microsoft SQL Server Data Tools - Business Intelligence for Visual Studio 2013

下载地址:https://www.microsoft.com/zh-CN/download/details.aspx?id=42313

关于在阿里云弹性web上wordpress密码重置问题

旧地址:http://blog.canself.com/resetwordpresspassword/

来源:前阵子合并之前的两个wordpress网站,想用两个用户区分下,建了新用户无法修改密码,只能生成,就想着利用密码重置来更新密码。

问题1:由于博客托管在阿里云弹性web上,在重置密码时,始终提示错误【具体是啥忘了】,就是发不出密码重置邮件。

解决方案:方法涉及修改wordpress代码,升级后需重新修改。

1、打开/wp-includes/class-smtp.php,查找到如下代码【我的wordpress版本在276-283行,其他版本也就在附近】

1
2
3
4
5
6
7
8
$this->smtp_conn = @stream_socket_client(
$host . ":" . $port,
$errno,
$errstr,
$timeout,
STREAM_CLIENT_CONNECT,
$socket_context
);

2、将其修改为如下代码:

1
$this->smtp_conn = @fsockopen($host,$port,$errno,$errstr,$timeout);

3、安装WP SMTP插件,配置发件人信息【之前还看到直接在步骤2的基础上改代码的-没生效】——此插件很久没有更新了,有类似的都可以试试。


问题2:解决问题1后,遇上另一个问题,每次重置密码的链接打开后,都会提示无效;

原因:每次密码重置的链接首尾都带有<>。

解决方案:修改wordpress根目录wp-login.php文件

1、打开wp-login.php文件,查找如下代码,在340行左右【不同版本有所差别,上下找下】

1
$message .= '<' . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . ">\r\n";

2、去掉首尾<>,代码如下:

1
$message .= network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login');

完成上面的部分后,终于可以正确的重设密码了。

参考链接:

ReportViewer分页表头不显示问题

软件环境:

VS2015、ReportViewer12.0.0.0-应该sql server 2014

问题:RDLC中表添加分组,添加分页后,后面几页不显示表头。

解决方案:使用分组的高级模式

步骤1、在报表设计器下方的分组框中打开高级模式,如图:

打开高级模式

 

步骤2、选中行组里的第一行(静态)——可以看到报表设计器中表格自动选择了列标题。

选择行组首项

 

步骤3、打开属性对话框,设置KeepWithGroup为after、RepeateOnNewPage为true即可,见下图:

修改行组属性