带你看看网盘的世界

本文内容后续会调整,初期为整理自己以前收藏的网盘内容,进行初步整理。有一些完全没打开的网站直接就删掉了。
由于国内个人云存储市场在晃荡,所以自己把以前收藏的网站准备拿出来整理下,好及时调整。

集成客户端——本地管理

  • AsLocal网盘本地管理专家 http://www.aslocal.com/ —— 本人需挂代理访问官网,可能是移动的墙

网盘资源搜索

网盘

国内

国外

已经挂掉的


掘:奇葩史

如何在Visual Studio中利用命令行集成Dotfuscator混淆处理

本文主要内容为使用命令行方式操作Dotfuscator,并将其集成到Visual Studio中,以便于直接生成发布。
另:本文使用的Dotfuscator版本为:集成在Visual Studio 2015 社区版中的Dotfuscator CE版本。

创建友好的Dotfuscator项目文件

Dotfuscator项目文件本质是一个xml,下文主要描述使用Dotfuscator可视化工具创建项目文件。

  1. 首先在Visual Studio中打开Dotfuscator:点击菜单栏中的工具 > PreEmptive Protection - Dotfuscator打开Dotfuscator。

  2. 此处默认新建了Dotfuscator项目,建议先进行保存,将文件保存至你要混淆项目的解决方案文件夹中,如,个人保存的位置为:E:\Projects\OpenSourceProject\ReferenceDoc\Dotfuscator\Samples\DotfuscatorSample\DotfuscatorSample.xml

保存到解决方案文件夹并非必须,此处如此处理可以为了后面进一步处理更加方便。

  1. 添加待混淆文件,如图所示:

添加待混淆文件

  1. 修改文件路径,将文件路径修改为如下图所示:点击属性,查看项目属性 - configdir(就是之前的保存位置),然后切换回输入,点击输入中第三个按钮编辑输入(那支笔),将路径中与configdir匹配的部分替换为**${configdir}**(注意是大括号)。

处理此步骤亦不是必须的,这样处理的原因是为了让我们的配置与本地无关(相对路径),方便其他人合作使用。

查看configdir

修改路径

  1. 至此,基本配置就可以了,点击生成项目就可以进行混淆了。至于其他更多配置见官方文档。

本地可以直接在Dotfuscator工具中点击菜单栏中的帮助 > 帮助目录(此为中文文档,基础的配置基本都有)。
帮助文件本地目录参考(中文帮助):C:\Program Files (x86)\Microsoft Visual Studio 14.0\PreEmptive Solutions\Dotfuscator and Analytics Community Edition\zh-Hans

配置Visual Studio命令调用Dotfuscator

  1. 主要操作就是编辑生成后事件:右击项目属性,切换到生成事件页面,编辑后期生成事件命令行,添加如下代码:

此处为了保证只有在Release的模式下使用混淆,故添加了Release判断。

    if $(ConfigurationName)==Release "C:\Program Files (x86)\Microsoft Visual Studio 14.0\PreEmptive Solutions\Dotfuscator and Analytics Community Edition\dotfuscatorcli.exe" /q "$(SolutionDir)DotfuscatorSample.xml"

代码解释:dotfuscator命令行工具+参数+项目混淆配置文件;其中配置文件之前保存到解决方案文件夹下,故此出可以直接用解决方案文件目录来索引。

代码中唯一不足就是命令行工具使用了绝对路径,vs中的宏参数没有可以直接使用的,若读者有啥好方法将此变为相对路径,望通知。 —— 但关于系统中添加环境变量的法子就不要了,个人不喜。

  1. 如果你在此处下一步需要进一步的打包处理,而你又需要Debug模式下一样可以打包测试。如,本人使用WiX打包,需要配置文件路径,方便一点就是要配置为生成路径,但是release模式下,需要将混淆的打包进去,而非直接生成的文件。此时,你不能改打包配置(改路径的话,debug会用不了),所以,你需要在将混淆过的文件拷贝到原来的release生成目录。所以我最后完整的生成事件就是如下代码了:

注意:经测试,如果在Dotfuscator中将生成路径设为文件来源路径,可以生成还会自动覆盖,但软件会用不了,具体原因不明。

    if $(ConfigurationName)==Release "C:\Program Files (x86)\Microsoft Visual Studio 14.0\PreEmptive Solutions\Dotfuscator and Analytics Community Edition\dotfuscatorcli.exe" /q "$(SolutionDir)DotfuscatorSample.xml"
    if $(ConfigurationName)==Release xcopy /e /y "$(SolutionDir)Dotfuscated\*.*" "$(TargetDir)" 

代码中的copy目录可以见Dotfuscator配置的生成目录:

查看Dotfuscator生成目录


奇葩史

关于Xamarin.Android中启用ProGuard后导致生成时java.exe错误问题解决

解决参考链接:

问题描述

选择启用Proguard后,进行项目生成操作,提示错误:“java.exe”已退出,代码为 1。

Proguard启用步骤:Xamarin.Android项目属性——Android Options页面——Packaging标签——勾选Enable Proguard

解决方法

  1. 下载最新版ProGuard的zip包(版本为5.3),下载地址为:https://sourceforge.net/projects/proguard/files/
  2. 由于ProGuard是没有安装程序的,故后面需要将zip解压到对应目录。
  3. 启动Android SDK Manager,查看菜单下方的SDK Path——查找sdk的位置。例如,我的位置是D:\Android\sdk(个人强迫症,调整过的),一般情况下,默认位置为C:\Users\你的用户名\AppData\Local\Android\android-sdk。而Proguard文件夹则位于此文件夹的tools文件夹中,如我的位置就是:D:\Android\sdk\tools\proguard
  4. 关闭所有可能访问SDK的开发环境(防止占用),然后将 proguard 文件夹命名为 proguard_old (用于备份,防止搞坏了可以恢复,另其中某些文件在下面还要用)。
  5. 将新版的proguard文件夹拷贝到tools文件夹中 —— 注意文件夹名称与上面原来的名称一样,这是为 proguard
  6. 最后,将配置文件从之前的 proguard_old 文件夹中拷贝到新的 proguard 文件夹中。一般是以下三个文件:proguard-android.txt, proguard-android-optimize.txtproguard-project.txt
  7. 最后的最后就是项目在启用ProGuard后重新生成了。

其他

关于其他ProGuard内容可以查看以下内容进一步学习:Xamarin.Android部署——应用程序发布准备


理:奇葩史

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

旧地址: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


掘:奇葩史