double类型的最大值表示

#include<iostream> #include<limits> using namespace std; int main() { cout<<numeric_limits<double>::max()<<endl; cout<<numeric_limits<double>::min()<<endl; return 0; }

MCMC

背景 给定一个的概率分布 p(x) , 我们希望产生服从该分布的样本。前面介绍过一些随机采样算法(如拒绝采样、重要性采样)可以产生服从特定分布的样本,但是这些采样算法存在一些缺陷(如难以选取合适的建议分布,只适合一元随机变量等)。下面将介绍一种更有效的随机变量采样方法:MCMC 和 Gibbs采样,这两种采样方法不仅效率更高,而且适用于多元随机变量的采样。 如果一定条件下,马尔可夫链可以收敛到平稳分布。一个绝妙的想法是:如果能构造一个转移矩阵为 P 的马尔可夫链,是其平稳分布刚好是 p(x) 。那我们就可以从任何一个初始状态 x0 出发,沿着马尔可夫链转移,得到一个转移序列 x0 , x1 , x2 ,…, xn , xn+1 , xT , 如果马尔可夫链在第 n 布已经收敛,我们就得到了 p(x) 的样本 xn,xn+1…xT , 过程如下所示: 设置 t=0 生成一个随机状态 u , 设定初始状态 x0=u重复 t=t+1 根据转移概率 p(xt|xt−1) , 采样得到 u 设置 xt=u直到 t=T 这种方法在1953年被 Metropolis 想到了,为了研究粒子系统的平稳性质,Metropolis 考虑了常见的玻尔兹曼分布的采样问题,首次提出了基于马尔可夫链蒙特卡罗的采样方法,即 Metropolis 算法,并在计算机上进行了编程实现。Metropolis 算法是首个普适的采样方法,并启发了一系列MCMC方法,所以人们把它作为随机模拟技术腾飞的起点。Metropolis 的这篇论文被收录在《统计学中的重大突破》,Metropolis 算法当选为二十世纪十个最重要的算法之一。 Metropolis 算法 假定目标概率分布为 p(x) , 我们已经有一个转移矩阵为 Q (q(i,j) 表示从状态 i 转移到状态 j 的概率)的马尔可夫链。通常情况下不满足马尔可夫链的细致平稳条件: p(i)q(i,j)≠p(j)q(j,i) 所以 p(x) 通常不是这个马尔可夫链的平稳分布。我们可否对该马氏链做一个改造,使得细致平稳条件成立呢?譬如,我们引入一个接受率 α(i,j) , 我们希望: p(i)q(i,j)α(i,j)=p(j)q(j,i)a(j,i) 取什么样的 α(i,j) 才能让上式成立呢?最简单的,根据对称性,我们可以取 α(i,j)=p(j)q(j,i) α(j,i)=p(i)q(i,j) 此时细致平稳条件成立: p(i)q(i,j)α(i,j)q′(i,j)=p(j)q(j,i)α(j,i)q′(j,i) 于是我们将原来具有转移矩阵 Q 的一个普通的马氏链,改造成了具有转移矩阵 Q′ ( q′(i,j) 表示从状态 i 转移到状态 j 的概率)的马氏链。而此马氏链的平稳分布刚好就是目标概率分布 p(x) ! 接受率 α(i,j) 的理解 由于 α(i,j)=p(j)q(j,i)≤1 ,因此 ∑j∈Sq′(i,j)=∑j∈Sq(i,j)α(i,j)≤∑j∈Sq(i,j)=1 索引矩阵 Q′ 不满足马尔可夫链状态转移矩阵的条件,因而不能直接作为马尔可夫链的转移矩阵。 细致平稳条件的直观含义如下图所示:

马尔可夫链

背景 马尔可夫性 定义 设 {X(t),t∈T} 是一个随机过程,如果 {X(t),t∈T} 在 t0 时刻所处的状态已知,它在时刻 t>t0 所处的状态的条件分布与其在 t0 之前所处的状态无关。 通俗地说,就是在知道过程现在的条件下,其将来的条件分布不依赖于过去,则称 随机过程 {X(t),t∈T} 具有马尔可夫(Markov)性 马尔可夫过程 {X(t),t∈T} 是一个随机过程,若其满足马尔可夫性,则称其为马尔可夫过程 马尔可夫链 定义 时间和状态都是离散的马尔可夫过程称为马尔可夫链。 其马尔可夫性可以表示为: 对 ∀n≥2 , ∀t1<t2<...<tn∈T , i1,i2,...,in∈S , 有下式成立: P(X(tn)=in|X(t1)=i1,X(t2)=i2,...,X(tn−1)=in−1)=P(X(tn)=in|X(tn−1)=in−1) 也就是说当前状态只与前一时刻的状态有关。 转移概率 定义 称条件概率 Pij(n)=P{Xn+1=j|Xn=i} 为马尔可夫链 {Xn,n∈T} 在时刻 n 的一步转移概率,简称为转移概率,其中 i,j∈S 。 若对任意的 i,j∈I , 马尔可夫链 {Xn,n∈T} 的转移概率 Pij(n) 与 n 无关,则称该马尔可夫链是齐次的,并记 Pij(n) 为 Pij 。 齐次马尔可夫链的状态转移(概率)矩阵为: P=⎡⎣⎢P11P21…P12P22…………⎤⎦⎥ 状态转移矩阵满足以下性质 (1) Pij≥0,∀i,j∈S (2) ∑j∈SPij=1,∀i∈S 例子 社会学家通常按经济状况将人分成三类:下层(lower-class),中层(middle-class)和上层(upper-class)。我们用1,2,3分别代表这三个阶层。社会学家发现决定一个人所属阶层最重要的因素是其父母所属的阶层。从父代到子代,其阶层变化的转移概率如下所示:

bat批处理调用psql执行的时候不输入密码的设定

最近有个500多个csv文件导入postgresql数据库表中需求,于是想bat批处理导入发现每运行一个csv文件就要输入一次密码,好烦啊,本来想点击bat啥事不用管等运行完看看是否导入完成。这样子和我一个一个导入没什么区别。 解决方法 windwos环境下,在C:\Users\Administrator\AppData路径下创建postgresql文件及pgpass.conf文件,pgpass.conf文件输入内容:localhost:5432:test_pg:postgres:postgres,保存退出然后在运行bat文件就OK了。 参考资料 https://www.postgresql.org/docs/9.6/static/libpq-pgpass.html http://www.bathome.net/

android boot image格式分析

boot.img和recovery.img的格式是google自定义的。 1. image的完整构成 一个完整的bootimage是由boot header、kernel、ramdisk、second stage(可选)、X509证书(可选)、签名信息(可选)组成。原始的boot.img只包括boot header、kernel、ramdisk、second stage(可选),且一般而言second staga都是没有的。 2. 原始boot.img格式 包括文件头boot_img_hdr,kernel.gz(Linux内核zImage),以及ramdisk.cpio.gz(根文件系统) 结构如下: * ** +-----------------+ ** | boot header | 1 page ** +-----------------+ ** | kernel | n pages ** +-----------------+ ** | ramdisk | m pages ** +-----------------+ ** | second stage | o pages ** +-----------------+ 原始boot.img的每部分都是页对齐的。其中boot header固定占用1个page的大小。kernel、ramdisk、second stage实际的大小会在boot header中标明。 3. boot header结构 boot header其实就是一个结构体struct boot_img_hdr,它的定义如下 struct boot_img_hdr { unsigned char magic[BOOT_MAGIC_SIZE]; /* 8 byte */ unsigned kernel_size; /* size in bytes */ unsigned kernel_addr; /* physical load addr */ unsigned ramdisk_size; /* size in bytes */ unsigned ramdisk_addr; /* physical load addr */ unsigned second_size; /* size in bytes */ unsigned second_addr; /* physical load addr */ unsigned tags_addr; /* physical addr for kernel tags */ unsigned page_size; /* flash page size we assume */ unsigned unused[2]; /* future expansion: should be 0 */ unsigned char name[BOOT_NAME_SIZE]; /* asciiz product name */ unsigned char cmdline[BOOT_ARGS_SIZE]; unsigned id[8]; /* timestamp / checksum / sha1 / etc */ }; 这里有几个比较重要的值。一个是page_size,这个是页大小。前面说了,boot.

osmdroid 在线加载谷歌瓦片(谷歌地图瓦片地址解释)

osmdroid作为一个开源的项目,在在线地图上还是做的不错,离线地图上也能支持多种格式,例如:zip,sqlite,.mbtiles,gemf,map,gpkg等格式。就是不能直接加载shp文件大为苦恼。osmdroid没有可以设置坐标参考系的接口。只有地图坐标与屏幕坐标的转换绘制。接下来就讲讲osmdroid 在线加载谷歌瓦片。 android osmdroid 加载常用离线地图格式(开源的在线地图) android osmdroid 加载离线地图map格式以及地图网格绘制 android 开源库osmdroid绘制点线面(比例尺,缩小放大,导航图标等) 1、实现效果 影像数据,加上地图标注 影像数据,没有地图标注 矢量数据地图 2、在线地图地址 package com.googlemap.online; import org.osmdroid.tileprovider.MapTile; import org.osmdroid.tileprovider.tilesource.XYTileSource; public class GoogleTileSource extends XYTileSource { //影像的叠加层 lyrs=h static final String[] baseUrl_GoogleLabel = new String[]{ "http://mt1.google.cn/vt/imgtp=png32&lyrs=h@210000000&hl=en-US&gl=US&src=app&s=G", "http://mt2.google.cn/vt/imgtp=png32&lyrs=h@210000000&hl=en-US&gl=US&src=app&s=G", "http://mt3.google.cn/vt/imgtp=png32&lyrs=h@210000000&hl=en-US&gl=US&src=app&s=G" }; //矢量底图 lyrs=m lyrs=是指瓦片类型 有标注 在国内但有偏移,国外暂无测试 static final String[] baseUrl_GoogleRoad = new String[]{ "http://mt1.google.cn/vt/lyrs=m@209712068&hl=en-US&gl=US&src=app&s=G", "http://mt2.google.cn/vt/lyrs=m@209712068&hl=en-US&gl=US&src=app&s=G", "http://mt3.google.cn/vt/lyrs=m@209712068&hl=en-US&gl=US&src=app&s=G" }; //影像底图 lyrs=y 有标注 在国内但有偏移,国外暂无测试 static final String[] baseUrl_Google_cn = new String[]{ "http://mt0.google.cn/vt/lyrs=y@126&hl=zh-CN&gl=cn&src=app&s=G", "http://mt1.google.cn/vt/lyrs=y@126&hl=zh-CN&gl=cn&src=app&s=G", "

Building the kernel with clang

https://lwn.net/Articles/734071/ https://oschina.net/news/89194/linux-build-kernel-with-clang Building the kernel with clang By Jake Edge September 19, 2017 Linux Plumbers Conference Over the years, there has been a persistent effort to build the Linuxkernel using the Clang C compiler that is part of the LLVM project. Welast looked in on the effort in areport fromthe LLVM microconference at the 2015 Linux Plumbers Conference (LPC), but wehave followed itbefore that aswell. At this year's LPC, two Google kernel engineers, Greg Hackmann andNick Desaulniers, came to theAndroidmicroconference to update the status; at this point, it is possible tobuild two long-term support kernels (4.

【TensorFlow随笔】关于一个矩阵与多个矩阵相乘的问题

问题描述: Specifically, I want to do matmul(A,B) where 'A' has shape (m,n) 'B' has shape (k,n,p) and the result should have shape (k,m,p) 参考网站: https://groups.google.com/a/tensorflow.org/forum/#!topic/discuss/4tgsOSxwtkY https://stackoverflow.com/questions/38235555/tensorflow-matmul-of-input-matrix-with-batch-data 解决办法: 1,我们知道TensorFlow的matmul已经支持了batch,即: A = tf.Variable(tf.random_normal(shape=(a, b, n, m))) B = tf.Variable(tf.random_normal(shape=(a, b, m, k))) tf.matmul(A, B) 会返回(a,b,n,k),前面的N个维度会被保留。但是适用情景与题目不符。 2,所以我们自然想到reshape。 You can conflate the two dimensions not used in the multiplication using reshape, multiply the two matrices, and then call reshape again to get the desired shape.

网络端口号汇总

网络端口号汇总 https://ccie.lol/knowledge-base/network-port/ 本篇博文参考了:RFC1340 — Assigned Numbers,以及网上的一些资料整理而来。 如需查看更详细的端口号(尤其是端口号从1025到65535部分)请看这里:Various Port Numbers Lists 端口号的范围是从1~65535。其中1~1024是被RFC 3232规定好了的,被称作“众所周知的端口”(Well Known Ports);从1025~65535的端口被称为动态端口(Dynamic Ports),可用来建立与其它主机的会话,也可由用户自定义用途。 表 C-1. 著名端口 PortProtocolLayerContent0ReservedTCP/UDPReserved1tcpmuxTCP(TCP Port Service Multiplexer)TCP 端口服务多路复用 PS:主要用在SGI Irix机器上2compressnet管理实用程序(Management Utility)3compressnet压缩进程(Compression Process)4 UnassignedTCP/UDPUnassigned5rje远程作业入口(REMOTE JOB ENTRY,RJE)6 UnassignedTCP/UDPUnassigned7echoTCP/UDPEcho 服务8 UnassignedTCP/UDPUnassigned9discardTCP/UDP用于连接测试的空服务10 UnassignedTCP/UDPUnassigned11systat用于列举连接了的端口的系统状态12 UnassignedTCP/UDPUnassigned13daytime给请求主机发送日期和时间14 UnassignedTCP/UDPUnassigned15 UnassignedTCP/UDPUnassigned(TCP was netstat)16 UnassignedTCP/UDPUnassigned17qotd给连接了的主机发送每日格言或引用(Quote of the Day)18msp消息发送协议(Message Send Protocol,MSP)19chargen字符生成服务(Character Generator),发送无止境的字符流20ftp-dataTCP文件传输协议(File Transfer Protocol,FTP)数据端口21ftp-controlTCP文件传输协议(File Transfer Protocol,FTP)控制端口;有时被文件服务协议(FSP)使用22sshTCPSecure Shell服务、SSH远程登陆协议(SSH Remote Login Protocol)23telnetTCPTelnet 远程登陆服务、终端仿真协议24Reserved预留给个人用邮件系统(any private mail system)25smtpTCP简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)26 UnassignedTCP/UDPUnassigned27nsw-feNSW 用户系统现场工程师(NSW User System FE)28 UnassignedTCP/UDPUnassigned29msg-icp TCPMSG ICP30 UnassignedTCP/UDPUnassigned31msg-authMSG验证(MSG Authentication)32 UnassignedTCP/UDPUnassigned33dsp显示支持协议(Display Support Protocol)34 UnassignedTCP/UDPUnassigned35Reserved预留给个人打印机服务(any private printer server)36 UnassignedTCP/UDPUnassigned37timeTCP/UDP时间协议38rap路由访问协议(Route Access Protocol)39rlp资源定位协议(Resource Location Protocol)40 UnassignedTCP/UDPUnassigned41graphics图形(Graphics)42nameserverTCP主机名称服务(Host Name Server,NAMESERV)43nicnameTCP/UDPWHOIS 目录服务44mpm-flagsMPM(消息处理模块)标志协议(MPM FLAGS Protocol)45mpm消息处理模块(Message Processing Module [recv])46mpm-snd消息处理模块(默认发送口)(MPM [default send])47ni-ftpNI FTP48auditd数码音频后台服务(Digital Audit Daemon)49tacacs/login TCP用于基于 TCP/IP 验证和访问的终端访问控制器访问控制系统、Login Host Protocol (TACACS) TACACS登录主机协议 PS:用于Cisco的AAA认证50re-mail-ck远程邮件检查协议(Remote Mail Checking Protocol)51la-maintIMP(接口信息处理机)逻辑地址维护(IMP Logical Address Maintenance)52xns-time施乐网络服务系统时间协议(XNS Time Protocol)53domainTCP/UDPDNS域名解析服务(如 BIND)(Domain Name Server,DNS)PS:客户端进行域名查询用UDP,DNS服务器间的域名复制用TCP54xns-ch施乐网络服务系统票据交换(XNS Clearinghouse)55isi-glISI图形语言(ISI Graphics Language)56xns-auth 施乐网络服务系统验证(XNS Authentication)57Reserved 预留个人用终端访问(any private terminal access)58xns-mailXNS Mail59Reservedany private file service60UnassignedTCP/UDPUnassigned61ni-mailNI MAIL62acasACA Services63whois++ &via-ftpWHOIS++,被扩展了的 WHOIS 服务 & VIA Systems – FTP64coviaCommunications Integrator (CI)65tacacs-dsTACACS-Database Service66sql*netOracle SQL*NET67bootpsUDP引导协议(BOOTP)服务;动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)服务器使用 PS:DHCP服务器向客户端响应68bootpcUDPBootstrap(BOOTP)客户;动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)客户使用 PS:客户端向DHCP服务器请求69tftpUDP小文件传输协议(TFTP,Trivial File Transfer Protocol)70gopherGopher 互联网文档搜寻和检索协议71netrjs-1远程作业服务(Remote Job Service)72netrjs-2远程作业服务(Remote Job Service)73netrjs-3远程作业服务(Remote Job Service)74netrjs-4远程作业服务(Remote Job Service)75Reservedany private dial out service76UnassignedUnassigned77Reservedany private RJE service78vettcpvettcp79fingerTCP用于查询远程主机在线用户等信息的 Finger 服务80httpTCP用于万维网(World Wide Web,WWW)服务的超文本传输协议(HTTP)81hosts2-nsHOSTS2 Name Server82xferXFER Utility83mit-ml-devMIT ML Device84ctfCommon Trace Facility85mit-ml-devMIT ML Device86mfcobolMicro Focus Cobol87Reservedany private terminal link88kerberosUDPKerberos 网络验证系统 PS:登陆域控,身份验证89su-mit-tgSU/MIT Telnet Gateway90dnsixDNSIX Securit Attribute Token Map91mit-dovMIT Dover Spooler92npp网络打印协议(Network Printing Protocol)93dcpTCP设备控制协议(Device Control Protocol)94objcallTivoli Object Dispatcher95supdupSUPDUP,Telnet 协议扩展96dixieDIXIE Protocol Specification97swift-rvfSwift Remote Vitural File Protocol98tacnewsTAC News99metagramMetagram Relay100newacct[unauthorized use]101hostnameTCPSRI-NIC 机器上的主机名服务(NIC Host Name Server)102iso-tsapISO 开发环境(ISODE)网络应用(ISO-TSAP)103gppitnpGenesis Point-to-Point Trans Net、X.

Android- IP LOST_PROVISIONING 的机制

当log中出现以下信息的时候,说明周围的AP设备出现了一个问题。 (standard input):1269530:12-20 06:53:39.325 578 622 D WifiStateMachine: FAILURE: LOST_PROVISIONING, NeighborEvent{elapsedMs=61927860, 10.10.100.11, [(null)], RTM_NEWNEIGH, NUD_FAILED} 下面是对这个机制的说明: 本文主要基于Android 7.0 介绍IP LOST_PROVISIONING 的情况的处理逻辑; 通过Android-IpReachabilityMonitor文章可知对于处于IpWatchlist中neighbor网络,Android 会定期持续地去Probe相应的neighbor状态,如果得不到任何响应response, 则可能将该neighbor的状态置为NUD_FAILED,进一步发出neighbor 配置丢失的消息LOST_PROVISIONING。 IpReachabilityMonitor 1、声明一个IpReachabilityMonitor Callback接口: public interface Callback { // This callback function must execute as quickly as possible as it is // run on the same thread that listens to kernel neighbor updates. // TODO: refactor to something like notifyProvisioningLost(String msg). public void notifyLost(InetAddress ip, String logMsg);

三子棋

小的时候大家一定玩过“井”字棋吧。也就是在九宫格中,只要任意行、列,或者任意连续对角线上面出现三个相同的,就能获胜。现在小明和小花也在玩三子棋,但是他们不是在九宫格里,而是在3×4的格子里面。现在小明先下,但是他知道小花这个人很聪明,他想知道第一步下在哪一个地方最合适,你能帮帮他吗? Input 第一行输入一个整数T,表示数据组数(1<T<10000); 第二行输入两个整数x,y,表示3×4格子里面的一个坐标(x,y)(1<=x<=3,1<=y<=4); Output 每组数据输出最后小明输赢的结果,如果小明一定能赢,第一行输出“Win”,第二行输出小明所需要花的最少步数;如果小明跟小花只能打成平手,第一行输出“Equal”,第二行输出数字0;如果小明不能赢也不能跟小花打成平手,第一行输出“Lose”,第二行输出小花赢小明所需要花的最少步数。 Input示例 2 2 1 2 4 Output示例 Equal 0 Equal 0 代码如下: #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define N 1005 int main() { int T; scanf("%d",&T); while(T--) { int x,y; scanf("%d%d",&x,&y); switch(x) { case 1: switch(y) { case 1: printf("Win\n6\n"); break; case 2: printf("Win\n4\n"); break; case 3: printf("Win\n4\n"); break; case 4: printf("Win\n6\n"); break; } break; case 2: switch(y) { case 1: printf("Equal\n0\n");

Codeforces Round #452 (Div. 2) F. Letters Removing 线段树

F. Letters Removing time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard output Petya has a string of length n consisting of small and large English letters and digits. He performs m operations. Each operation is described with two integers l and r and a character c: Petya removes from the string all characters c on positions between l and r, inclusive. It’s obvious that the length of the string remains the same or decreases after each operation.

SQL数据属性的修改方法

1:向表中添加字段 Alter table [表名] add [列名] 类型 2: 删除字段 Alter table [表名] drop column [列名] 3: 修改表中字段类型 (可以修改列的类型,是否为空) Alter table [表名] alter column [列名] 类型 4:添加主键 Alter table [表名] add constraint [ 约束名] primary key( [列名]) 5:添加唯一约束 Alter table [表名] add constraint [ 约束名] unique([列名]) 6:添加表中某列的默认值 Alter table [表名] add constraint [约束名] default(默认值) for [列名] 7:添加约束 Alter table [表名] add constraint [约束名] check (内容) 8:添加外键约束 Alter table [表名] add constraint [约束名] foreign key(列名) referencese 另一表名(列名) 9:删除约束 Alter table [表名] add constraint [约束名] 10:重命名表 exec sp_rename '[原表名]','[新表名]' 11:重命名列名 exec sp_rename '[表名].

Rust 取代 C++ ?

https://www.zhihu.com/question/27608498 作者:天象 链接: https://www.zhihu.com/question/27608498/answer/50130876 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 其实,Rust是没法取代C++的,没有任何一个语言能取代C++。C++太大了,以很多毫不相干的方式应用在很多毫不相干的领域里面。Rust只会取代C++的应用场景里的一部分,就像很多语言做过的一样,但时代已经不同了,不可能再发明一个C++这样高大全的语言了。因此,也没有办法比较Rust和C++的优劣。 C++大概有这么几个主要的应用场景: 高性能服务器:高性能,高抽象 GUI:中等性能,极高抽象 编译器:高性能,极高抽象 密集计算:极高性能,中等抽象 操作系统:高性能,中等抽象 大型游戏:高性能,高抽象 有没有极高性能,极高抽象的项目呢?其实就是STL,也就是C++本身。 那么,Rust,从现在的样子看,它的特性是高性能、高抽象,这一块确实是至今大家仍然被迫用着C++,没有别的语言可转的。那么,如果一切顺利的话,服务器和大型游戏将会有不少新项目转向Rust。对于Rust来说,世界年轻,大有可为。 然后就是Rust缺的,首先是极高性能的部分,对于C/C++来说就是指针运算。Rust本身语法比较封装,跟C++和Fortran比还是不够底层,再加上C++编译器几十年来的优化,只能说Rust不是干这个的。然后是极高抽象的部分,Rust明显是不能跟C++ class+模板的豪华阵容相比。当然,很多时候程序的抽象在高度分层的抽象层中体现,跟语言本身关系不大。但是像GUI库和编译器这种数量上很多的抽象问题,缺乏原生抽象特性就会显得无力。应该说,很高兴C++还在继续进化,让它能在不同的领域都能面对竞争对手的挑战,不至于让昔日的巨人只剩下情怀和旧代码。

/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby: bad interpreter: No such file o

pod -bash: /usr/local/bin/pod: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby: bad interpreter: No such file or directory MacOS 升级后pod 出现的问题 1、更新gem:sudo gem update --system 2、删除gem源:gem sources --remove https://ruby.taobao.org/ 3、修改gem源:gem sources -a https://gems.ruby-china.org 4、查看gem源是否是最新的:gem sources -l 5、升级cocoapods:sudo gem install -n /usr/local/bin cocoapods --pre 6、查看升级后的cocoapods版本:pod --version

Android 源码编译错误:Could not load 'clearsilver-jni'

基于OK6410的安卓开发学习(问题集) 编译源码时出现如下错误 Could not load 'clearsilver-jni' 这是由于配置32位64位编译模式错误导致的,依次打开下面的文件 external/clearsilver/cgi/Android.mk, external/clearsilver/java-jni/Android.mk external/clearsilver/util/Android.mk external/clearsilver/cs/Android.mk 如果是32位系统就选择m32,注释m64 LOCAL_CFLAGS += -m32 LOCAL_LDFLAGS += -m32 # LOCAL_CFLAGS += -m64 # LOCAL_LDFLAGS += -m64 如果是64位系统则选择m64,注释m32 # LOCAL_CFLAGS += -m32 # LOCAL_LDFLAGS += -m32 LOCAL_CFLAGS += -m64 LOCAL_LDFLAGS += -m64 更改之后先make clean,再./build-android

【Golang实现文件服务器】(二)图片去重与缩略图功能

距离第一次写这个文章已经很久了。 这段时间里基于常用的应用场景,进一步丰富了文件服务器的功能。主要做了如下工作: 现在可以自动检查重名文件是否重复,并自动重命名。现在可以提供三种缩放方式获取缩略图优化了代码结构 很惭愧,就做了这三个微小的工作。 ###文件去重 基于现有的应用场景,首先要求便于部署,其次对存储效率及性能要求不高。在此前提下不适用适用数据库的方式管理文件。所以去重工作仅限于重名相同文件的去重与重命名。 最常用的文件比较方式莫过于比较MD5码。在golang中获取文件的MD5也是一件很简单的事情: //计算MD5值 func calMd5(input io.Reader) string { md5h := md5.New() io.Copy(md5h, input) return string(md5h.Sum([]byte(""))) //md5 } 复制代码 为了实现查重功能,我在存储文件信息的结构体中保存了一个重复次数字段用以计算及重命名。 具体实现步骤如下: 1、检查文件是否存在,不存在直接保存 2、若文件存在,检查MD5码是否相同,相同则记为已保存 3、若MD5码不同,重名计数加一,以添加后缀的方式进行重命名,然后重复步骤1. 在代码上,以下三个函数来实现查重: /** 对文件进行重命名。 */ func (upload *UploadFile) rename() { path := upload.fsroot+upload.name; ex := exist(path,upload.md5) if ex==1{ upload.dupcount = upload.dupcount+1 //重复次数+1 fileext := filepath.Ext(upload.name) //获取扩展名 filename := strings.TrimSuffix(upload.name,fileext) // 获取文件名 if(upload.dupcount>1){ filename = strings.TrimSuffix(upload.name,"_"+strconv.Itoa(upload.dupcount-1)+fileext) // 获取文件名 } filename+="_"+strconv.Itoa(upload.dupcount) //文件名加上重复次数 upload.name = filename+fileext //重命名 upload.

将页面的列表数据导出到excel文件中

1、用的是springMVC的模式 2、在service接口层 //根据页面传过来的id在库里查询 List<TbItem> selectByPrimaryKeydhh(long ids); 在service接口的实现类中 @Override public List<TbItem> selectByPrimaryKeydhh(long ids) { //执行查询的sql List<TbItem> selectByPrimaryKey = tbItemMapper.selectByPrimaryKeydhh(ids); return selectByPrimaryKey; } 3、在controller层 @Controller public class Example { //定义文件的格式 private static final ReportFileTypeEnum X = ReportFileTypeEnum.XLS; @Autowired private ItemService itemService; @RequestMapping(value="/partExportdhh",method=RequestMethod.POST) public void maiddhhn(long ids) { List<Model> dataCode0 = new ArrayList<Model>(); List<TbItem> list = itemService.selectByPrimaryKeydhh(ids); for (int i = 0; i < list.size(); i++) { Model model=new Model(); TbItem tbItem = list.

在OpenCV中使用RANSAC

OpenCV中的solvePnPRansac函数和findHomography函数都具有RANSAC特性,该特性使算法对少量的错误数据鲁棒。 这两个函数利用RANSACPointSetRegistrator类实现RANSAC算法,但这个类并没有对外开放,因此只能通过阅读OpenCV源代码学习RANSAC算法的实现和使用。 类的实现在ptsetreg.cpp中,可通过调用precomp.hpp文件中的createRANSACPointSetRegistrator函数使用。此外,该文件还提供了createLMeDSPointSetRegistrator函数调用最小中值算法。 关于RANSAC的介绍详见这篇博客 createRANSACPointSetRegistrator函数的原型为 Ptr<PointSetRegistrator> createRANSACPointSetRegistrator(const Ptr<PointSetRegistrator::Callback>& cb, int modelPoints, double threshold, double confidence = 0.99, int maxIters = 1000); 参数cb类型为PointSetRegistrator::Callback,是要传入的被包装的估计算法对象,被RANSAC类调用以进行试探的估计过程;参数modelPoints 设定计算模型需要的最少数据点;参数threshold设定区分内点和外点的阈值;参数confidence设定返回正确值的概率(决定抽样次数);参数maxIters设定最大走样次数。后三个参数与solvePnPRansac函数中的意义相同。 其中PointSetRegistrator::Callback类的声明为 class CV_EXPORTS Callback { public: virtual ~Callback() {} virtual int runKernel(InputArray m1, InputArray m2, OutputArray model) const = 0; virtual void computeError(InputArray m1, InputArray m2, InputArray model, OutputArray err) const = 0; virtual bool checkSubset(InputArray, InputArray, int) const { return true; } }; 使用时,需要继承该类,并至少实现其中的前两个函数。 runKernel函数需要根据输入的数据集m1 m2,计算并输出模型model,函数返回输出模型的个数,一般都返回1。左右数据均按行排列。为什么这里有两个输入参数呢,因为OpenCV中的RANSAC算法最初设计是用来求解2D-3D变换的,所以这两个参数分别对应源数据点集和目标数据点集。即便某算法只需要一个参数m1,也必须传入同样大小的m2以避免运行错误。

37. Python 多进程锁 多进程共享内存

Lock组件 当我们用多进程来读写文件的时候,如果一个进程是写文件,一个进程是读文件, 如果两个文件同时进行,肯定是不行的,必须是文件写结束后,才可以进行读操作。 或者是多个进程在共享一些资源的时候,同时只能有一个进程进行访问,那就需要锁机制进行控制。 需求: 一个进程写入一个文件,一个进程追加文件,一个进程读文件,同时启动起来 我们可以通过进程的join()方法来实现,这是一种方法,本节用Lock(进程锁)来实现。 函数说明: # lock = multiprocessing.Lock() # lock.acquire() #获得锁 # lock.release() #释放锁 先写不加锁的程序: #不加锁 # number +1 # number +3 import multiprocessing import time def add(number,value,lock): print ("init add{0} number = {1}".format(value, number)) for i in xrange(1, 6): number += value time.sleep(1) print ("add{0} number = {1}".format(value, number)) if __name__ == "__main__": lock = multiprocessing.Lock() number = 0 p1 = multiprocessing.Process(target=add,args=(number, 1, lock)) p2 = multiprocessing.