Windows搭建NAS软件耘想WinNAS

WinNAS是深圳凯祥源科技有限公司与深圳耘想存储科技有限公司联合推出的一款免费的软件!

在Windows电脑上安装后,电脑就会立即变成一台NAS。支持内网穿透。可以用手机远程访问自己的电脑。可以自动备份手机相册到电脑。还可以分享电脑上的文件或目录给朋友。下载Windows客户端后,还可以用电脑去访问WinNAS电脑。

WinNAS官网地址:https://tilldream.com/

WinNAS下载地址:https://tilldream.com/portal.php?mod=view&aid=95

开源 NAS 操作系统收集

1.TrueNAS(原FreeNAS)

https://www.truenas.com/

https://github.com/truenas

2.XigmaNAS(原 FreeNAS 系统开发者创建)

https://xigmanas.com/xnaswp/

3.OpenMediaVault

https://www.openmediavault.org/

4.RockStor

https://rockstor.com/

5.EasyNAS

https://easynas.org/

 

开源免费Office软件收集

LibreOffice:https://zh-cn.libreoffice.org/

Calligra Office:https://calligra.org/

FreeOffice:https://www.freeoffice.com/zh/

OpenOffice:http://www.openoffice.org/

AbiSource:http://www.abisource.com/

 

 

御定全唐詩卷五十六《六月奉教作》缺字

六月奉教作

(第四句缺三字第七句缺一字第八句缺三字)

養日暫裴回,畏景尚悠哉。避暑移琴席,追涼□□□(缺3字)。

竹風依扇動,桂酒溢壺開。勞餌□飛雪(缺1字),自可□□□(缺3字)。

 

下见影印本:

参考1:https://ctext.org/library.pl?if=gb&file=62465&page=57#box(543,174,4,2)

参考2:https://ctext.org/library.pl?if=gb&file=70714&page=97

花園明朝体——全字符收录的开源日文字体

花園フォント(花園明朝, 花园宋体,Hanazono Mincho,HanaMin)是一款基于日语的自由开源汉字字体,也是 GlyphWiki Project 的一部分。这款字体的特点是涵盖了目前 CJK (中日韩统一表意文字)字库中几乎所有的汉字与字符, 而且作为开源项目,任何人可自由下载使用。

官网:http://fonts.jp/hanazono/

字体下载:https://zh.osdn.net/projects/hanazono-font/

维护修改花园明朝体的是来自 GlyphWiki 的部分匿名用户。该字体日文字符 JIS X0208:1997 的一部分, 通过 2005 年度日本学术振兴会科学研究费补助金 (研究公开促进费) 以及花园大学国际禅学研究所, 在来自文部科学省学术前沿推进事业补助的汉字数据库计划下开发而成。

目前的花园字体仅提供了字重为 1 的明朝体, 但版本仍在不断更新。

包含的文字种类:

本字体收录了 ISO/IEC 10646 以及 Unicode 标准所包含的 107,518 个字符。
详细信息如下。

** 非汉字 9,806 字 **

U+0000-007F 基本拉丁文 94字
U+0080-00FF 拉丁文补充-1 95字
U+0100-017F 拉丁文扩展-A 128字
U+0180-024F 拉丁文扩展-B 208字
U+0250-02AF 国际音标扩展 96字
U+02B0-02FF 占位修饰符号 69字
U+0300-036F 结合附加符号 1字
U+0370-03FF 希腊字母及科普特字母 122字
U+0400-04FF 西里尔字母 248字
U+0500-052F 西里尔字母补充 48字
U+0530-058F 亚美尼亚字母 70字
U+0590-05FF 希伯来文 1字
U+0E00-0E7F 泰文 61字
U+10A0-10FF 格鲁吉亚字母 20字
U+1100-11FF 諺文字母 254字
U+13A0-13FF 切罗基字母 40字
U+1680-169F 欧甘字母 29字
U+16A0-16FF 卢恩字母 89字
U+1C80-1C8F 西里尔字母扩展-C 9字
U+1CC0-1CCF 巽他字母补充 8字
U+1D00-1D7F 语音学扩展 128字
U+1D80-1DBF 语音学扩展补充 64字
U+1E00-1EFF 拉丁文扩展附加 256字
U+1F00-1FFF 希腊语扩展 233字
U+2000-206F 常用标点 67字
U+2070-209F 上标及下标 42字
U+20A0-20CF 货币符号 32字
U+20D0-20FF 组合用记号 7字
U+2100-214F 字母式符号 51字
U+2150-218F 数字形式 60字
U+2190-21FF 箭头 74字
U+2200-22FF 数学运算符 201字
U+2300-23FF 杂项工业符号 164字
U+2400-243F 控制图片 39字
U+2440-245F 光学识别符 1字
U+2460-24FF 封闭式字母数字 160字
U+2500-257F 制表符 128字
U+2580-259F 方块元素 32字
U+25A0-25FF 几何图形 96字
U+2600-26FF 杂项符号 158字
U+2700-27BF 印刷符号 53字
U+27C0-27EF 杂项数学符号-A 40字
U+27F0-27FF 追加箭头-A 11字
U+2800-28FF 盲文点字模型 256字
U+2900-297F 追加箭头-B 81字
U+2980-29FF 杂项数学符号-B 47字
U+2A00-2AFF 追加数学运算符 113字
U+2B00-2BFF 杂项符号和箭头 90字
U+2C00-2C5F 格拉哥里字母 21字
U+2C60-2C7F 拉丁文扩展-C 32字
U+2C80-2CFF 科普特字母 7字
U+2D30-2D7F 提非纳文 58字
U+2E00-2E7F 追加标点 25字
U+2E80-2EFF 中日韩部首补充 115字
U+2F00-2FDF 康熙部首 214字
U+2FF0-2FFF 表意文字描述符 12字
U+3000-303F 中日韩符号和标点 57字
U+3040-309F 日文平假名 93字
U+30A0-30FF 日文片假名 96字
U+3100-312F 注音字母 42字
U+3130-318F 谚文兼容字母 93字
U+3190-319F 象形字注释标志 16字
U+31A0-31BF 注音字母扩展 27字
U+31C0-31EF 中日韩笔画 36字
U+31F0-31FF 日文片假名语音扩展 16字
U+3200-32FF 带圈中日韩字母和月份 254字
U+3300-33FF 中日韩兼容 256字
U+4DC0-4DFF 易经六十四卦符号 64字
U+A000-A48F 彝文音节 2字
U+A490-A4CF 彝文字根 2字
U+A4D0-A4FF 老傈僳文 48字
U+A640-A69F 西里尔字母扩展-B 80字
U+A700-A71F 声调修饰字母 20字
U+A720-A7FF 拉丁文扩展-D 160字
U+A960-A97F 谚文扩展-A 29字
U+AB30-AB6F 拉丁文扩展-E 54字
U+D7B0-D7FF 谚文字母扩展-B 72字
U+F137-F6B0 (Unicode標準外)台湾中央研究院CDP部件外字※ 1,404字
U+FB00-FB4F 字母表达形式 7字
U+FE00-FE0F 異体字选择符 16字
U+FE10-FE1F 竖排形式 10字
U+FE30-FE4F 中日韩兼容形式 32字
U+FE50-FE6F 小寫变体形式 26字
U+FF00-FFEF 半形及全形 224字
U+FFF0-FFFF 特殊 2字
U+10000-1007F 线形文字B音节文字 2字
U+10190-101CF 古代记数系统 13字
U+10280-1029F 吕基亚字母 29字
U+102A0-102DF 卡利亚字母 49字
U+10300-1032F 古意大利字母 39字
U+10330-1034F 哥特字母 27字
U+10350-1037F 古彼尔姆文 19字
U+10380-1039F 乌加里特字母 5字
U+10500-1052F 艾尔巴桑字母 1字
U+10900-1091F 腓尼基字母 3字
U+10920-1093F 吕底亚字母 27字
U+10A60-10A7F 古南阿拉伯字母 32字
U+10C00-10C4F 古突厥文 73字
U+10C80-10CFF 古匈牙利字母 33字
U+10E60-10E7F 卢米文数字 31字
U+16FE0-16FFF 表意的符号和标点 1字
U+17000-187FF 西夏文 6字
U+18800-18AFF 西夏文部件 71字
U+1B000-1B0FF 日文假名补充 256字
U+1B100-1B12F 日文假名扩展-A 31字
U+1BC00-1BC9F 杜普雷速记 1字
U+1BCA0-1BCAF 速记格式控制符 4字
U+1D100-1D1FF 音乐符号 17字
U+1D300-1D35F 太玄经符号 87字
U+1D360-1D37F 算筹 18字
U+1D400-1D7FF 字母和数字符号 197字
U+1F000-1F02F 麻将牌 44字
U+1F030-1F09F 多米诺骨牌 100字
U+1F0A0-1F0FF 扑克牌 60字
U+1F100-1F1FF 带圈字母数字补充 191字
U+1F200-1F2FF 带圈表意文字补充 58字
U+1F300-1F5FF 杂项符号和象形文字 124字
U+1F600-1F64F 表情符号 26字
U+1F650-1F67F 装饰符号 8字
U+1F680-1F6FF 交通和地图符号 7字
U+1F700-1F77F 炼金术符号 16字
U+1F780-1F7FF 几何图形扩展 4字
U+1F900-1F9FF 补充符号和象形文字 2字

** 汉字 88,884 字 + 异体字 8,828 字 **

U+4E00 .. U+9FA5 URO※ 20,902 字 完全收录
U+9FA6 .. U+9FEA URO 追加 69 字 完全收录
U+3400 .. U+4DB5 Ext-A 6,582 字 完全收录
U+20000 .. U+2A6D6 Ext.B 42,711 字 完全收录
U+2A700 .. U+2B734 Ext.C 4,149 字 完全收录
U+2B740 .. U+2B81D Ext.D 222 字 完全收录
U+2B820 .. U+2CEA1 Ext.E 5,762 字 完全收录
U+2CEB0 .. U+2EBE0 Ext.F 7,473 字 完全收录
U+F900 .. U+FAD9 互换文字 472 字 完全收录
U+2F800 .. U+2FA1D 互换扩展 542 字 完全收录
IVD※ .. 2016-08-15 版 28,770 字 完全收录(包括 8,828 异体字)

※URO : ISO/IEC 10646-1:1993 所规定的 CJK 统一表意文字 20,902 字
※IVD : Ideographic Variation Database
※CDP : http://cdp.sinica.edu.tw/zip/font/eudc.zip

本字体完全收录的其他规格

- ASCII
- JIS X 0208:1997 汉字部分 6,355 字 + 非汉字 1 字(仝)
- JIS X 0212:1990 汉字部分 5,801 字
- JIS X 0213:2004 汉字部分 3,695 字
- GB 2312-80 汉字部分 6,763 字
- Big-5 汉字部分 13,053 字 + 非汉字 12 字(兙兛兞兝兡兣嗧瓩糎十卄卅)
- KS X 1001:1992 汉字部分 4,888 字
- IBM 扩展文字 汉字部分 360 字
- IICORE(Wikipedia 中的项目) 9,810 字
- GB18030-2000 汉字部分
- Adobe-Japan1-6 汉字部分
- 通用规范汉字表
- HKSCS(香港増補字符集)
- 台湾中央研究院CDP部件外字

本字体对应了 2004 年 JIS X 0213 的修正。

本字体分为以下两个部分。

** 花園明朝 A (HanaMinA.ttf) **

51,991 字(非汉字 9,802 字、汉字 33,357 字、IVD 异体字 8,828 字。
用来认字体的 U+20000 除外)

- 非汉字
- CJK 统一表意文字(URO、URO+、Ext.A) CJK 互换汉字(包含补充)
- JIS X 0213:2004 收录的汉字
- IVD(以及 SIP 中的基础字符)
- 通用规范汉字表
- HKSCS(香港増補字符集)

** 花園明朝 B (HanaMinB.ttf) **

60,317 汉字(用来认字体的 U+4E00 除外)

-CJK 统一表意文字(Ext.B、Ext.C、Ext.D、Ext.E、Ext.F)

链接:

[1] http://fonts.jp/kage/
[2] http://www.angusj.com/delphi/clipper.php
[3] http://fontforge.sourceforge.net/
[4] http://sourceforge.net/projects/fonttools/
[5] http://glyphwiki.org/
[6] http://www.unicode.org/ivd/

亚马逊全球各国官方网站

澳大利亚https://www.amazon.com.au/
巴西https://www.amazon.com.br/
加拿大https://www.amazon.ca/
中国https://www.amazon.cn/
法国https://www.amazon.fr/
德国https://www.amazon.de/
印度https://www.amazon.in/
意大利https://www.amazon.it/
日本https://www.amazon.co.jp/
韩国https://www.amazon.co.kr/(无)
墨西哥https://www.amazon.com.mx/
荷兰https://www.amazon.nl/
波兰https://www.amazon.pl/
比利时https://www.amazon.com.be/
沙特阿拉伯https://www.amazon.sa/
新加坡https://www.amazon.com.sg/
西班牙https://www.amazon.es/
瑞典https://www.amazon.se/
台湾https://www.amazon.com.tw/(无)
泰国https://www.amazon.co.th/(无)
土耳其https://www.amazon.com.tr/
阿拉伯联合酋长国https://www.amazon.ae/
英国https://www.amazon.co.uk/
美国https://www.amazon.com/
越南https://www.amazon.vn/(无)

替代curl非常简洁明了的http请求库

替代curl非常简洁明了的http请求库

来源:https://gitee.com/brh/http

备注:作者已逝

<?php defined('SYSPATH') or die('No direct script access.');
/**
 * Provides http server communication options using [Stream]
 * Mainly used to communiate with http
 * Add Support HTTP/1.1 by Default
 * Only Support Connection Close Mode
 *
 * @author     anthony Chen
 */
class Http {

	public static $allow_self_signed = true;
	public static $non_blocking = false;
	/**
	 * @var  array  default header options
	 */
	public static $default_options = array (
			'User-Agent'=> 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit /538.36 (KHTML, like Gecko) Pexcel/6.998',
			'Connection'=> 'Close' //Need to close the request every time for HTTP 1.1
		);

	/**
	 * return Array lines of headers
	 * Overwrite by $options
	 *
	 * @param Array $options, key value pairs of Header options
	 * 
	 * @return Array,Array line of headers
	 */
	private static function getHeaders($options){
		if ($options === NULL) {
			// Use default options
			$options = self::$default_options;
		} else {
			//Merge the $options with $default_options, if the value set in $options,
			//Value in $default_options will be overwrite
			$options =$options + self::$default_options ;
		}

		$headers = array();
		foreach($options as $k=>$v){
			$headers[] = $k.': '.$v;
		}

		return $headers;
	}

	/**
	 * Returns the output of a http URL. 
	 * may be used.
	 *
	 * @param   string   http base URL or FULL url
	 * @param   array    Header options
	 * @param   array $data Get Param
	 * @param   array &$rr_headers,Request Response headers
	 * 		    if Assigned,the response header will be populated
	 * 			If ['fingerprint'] is set, then finger is checked in SSL Context
	 * 			If ['ignore_errors'] is set, then ignore http error code other than 200
	 *
	 * @return  string, Raw String of Http body
	 */
	public static function get($url, array $options = NULL,$data = NULL,&$rr_headers = NULL) {
		$headers = self::getHeaders($options);
		$params = ['http' => [
			'method' => 'GET',
			//Defautl HTTP 1.1 and with Connection Close
			'protocol_version'=>'1.1',
			//'Connection'=> 'Close' //Need to close the request every time for HTTP 1.1
		]];

		if(Arr::get($rr_headers,'ignore_errors') == true){
			$params['http']['ignore_errors'] = true;
		}

		$params['http']['header'] = $headers;

		if($data){
			$url .= '?'.http_build_query($data); 
		}
		$ctx = stream_context_create($params);
		if(self::$allow_self_signed == true){
			stream_context_set_option($ctx,["ssl"=>["allow_self_signed"=>true,"verify_peer_name"=>false,"verify_peer"=>false]]);
			$_finger = Arr::get($rr_headers,'fingerprint');
			if($_finger){
				stream_context_set_option($ctx,["ssl"=>["peer_fingerprint"=>$_finger]]);
			}
		}

		$fp = fopen($url, 'rb', false, $ctx);
		if (!$fp) {
			throw new Exception("Connection failed: $url");
		}

		if(self::$non_blocking == TRUE){
			stream_set_blocking($fp,0);
		}

		if($rr_headers !== NULL){
			$rr_headers = stream_get_meta_data($fp);
		}

		$response = stream_get_contents($fp);
		if ($response === false) {
			throw new Exception("Reading data Failed: $url");
		}
		fclose($fp);
		return $response;
	}

	/**
	 * Post with request options and data 
	 *
	 * @param String url, FULL url
	 * @param Array $options , key=>value pairs array
	 * @param Array $data ,Post Data pairs
	 * @param   array &$rr_headers,Request Response headers
	 * 		    if Assigned,the response header will be populated
	 * 			If ['fingerprint'] is set, then finger is checked in SSL Context
	 * 			If ['ignore_errors'] is set, then ignore http error code other than 200
	 * @return  string, Raw String of Http body
	 */
	public static function post($url,  $options = null,$data=NULL,&$rr_headers = NULL) {
		//Restricted the Form formate
		if(is_array($data)){
			$data = http_build_query($data);
		}

		$options['Content-type'] = Arr::get($options,'Content-type','application/x-www-form-urlencoded');
		$options['Content-Length'] =Arr::get($options,'Content-Length',strlen($data));

		$params = ['http' => [
			'method' => 'POST',
			'protocol_version'=>'1.1',
			//'Connection'=> 'Close', //Need to close the request every time for HTTP 1.1
			//'ignore_errors'=>true,
			'content' => $data
		]];

		if(Arr::get($rr_headers,'ignore_errors') == true){
			$params['http']['ignore_errors'] = true;
		}

		$headers = self::getHeaders($options);
		$params['http']['header'] = $headers;

		$ctx = stream_context_create($params);
		if(self::$allow_self_signed == true){
			stream_context_set_option($ctx,["ssl"=>["allow_self_signed"=>true,"verify_peer_name"=>false,"verify_peer"=>false]]);
			$_finger = Arr::get($rr_headers,'fingerprint');
			if($_finger){
				stream_context_set_option($ctx,["ssl"=>["peer_fingerprint"=>$_finger]]);
			}
		}

		$fp = fopen($url, 'rb', false, $ctx);
		if (!$fp) {
			throw new Exception("Connection Failed: $url ");
		}

		if(self::$non_blocking == TRUE){
			stream_set_blocking($fp,0);
		}

		if($rr_headers !== NULL){
			$rr_headers = stream_get_meta_data($fp);
		}

		$response = stream_get_contents($fp);
		if ($response === false) {
			throw new Exception("Reading data failed: $url");
		}
		fclose($fp);
		return $response;
	} 

	/**
	 * Inflate zipped content
	 *
	 * @param String $_content, gzipped content
	 *
	 * @return String, Inflated content
	 */
	public static function inflate($_content){
		//deflate add 10 charaters before inflate format and 8 charaters checksum append
		//gzdecode is not availible for ALL PHP even gzencode is avalible
		$_content = substr($_content, 10,-8); 
		return gzinflate($_content);

	}

	/**
	 * Check if the reponse content is zipped from response header
	 *
	 * @param Array $_response_header, Response header captured from get/post
	 *
	 * @return Boolean, True for zipped contented
	 */
	public static function isZipped($_response_header){
		if (preg_grep('/^Content-Encoding:\s*gzip/i',$_response_header['wrapper_data'])){
			return TRUE;
		}else{
			return False;
		}
	}

	/**
	 * Parse response headers into K V data
	 *
	 * @param Array $headers, wrapper data return from http request
	 *
	 * @return Array , the parsed headers of http
	 */
	public static function parseHeaders( $_response_header ) {
		$headers = Arr::get($_response_header,'wrapper_data',[]);
		$head = array();
		foreach( $headers as $k=>$v )
		{
			$t = explode( ':', $v, 2 );
			if( isset( $t[1] ) )
				$head[ trim($t[0]) ] = trim( $t[1] );
			else
			{
				$head[] = $v;
				if( preg_match( "#HTTP/[0-9\.]+\s+([0-9]+)#",$v, $out ) )
					$head['reponse_code'] = intval($out[1]);
			}
		}
		return $head;
	}
} // End http


 

Scribus开源电子杂志制作软件

Scribus 适用于Linux,FreeBSD,PC-BSD,NetBSD,OpenBSD,Solaris,OpenIndiana,Debian GNU/Hurd,Mac OS X,OS/2 Warp 4,eComStation,Haiku和Windows的页面布局程序。

Scribus 是一款类似 Adobe Pagemaker 的开源电子杂志制作软件,可以用来制作个人文件、邮件列表、电子杂志类型的电子文档。它体积很小,可以放在 U 盘里,只需插入相应的电脑就可以使用。

官网:https://www.scribus.net/

下载:https://sourceforge.net/projects/scribus/files/scribus/

Scribus安装后,默认支持中文。

 

Krita官方推荐创建PDF软件。

Krita 可以打开包含多个图层的 PDF 文件。但 Krita 目前不支持导出为 PDF,也没有实现 PDF 导出功能的计划。如需使用 Krita 输出的图像创建PDF,请使用 Scribus 。

 

 

Blender免费开源三维图形图像软件

Blender是一款免费开源三维图形图像软件,提供从建模、动画、材质、渲染、到音频处理、视频剪辑等一系列动画短片制作解决方案。Blender拥有方便在不同工作下使用的多种用户界面,内置绿屏抠像、摄像机反向跟踪、遮罩处理、后期结点合成等高级影视解决方案。

官网:https://www.blender.org/