我们都知道在计算机中,数字是以补码的形式存储的,好处就是利于减法计算,可是为什么呢?让我们来试图回答以下几个问题。
什么是补码,如何计算?补码如何将减法转化为加法? 但凡编程入过门,都知道补码是怎么回事。正数的补码是其自身,负数的补码是其绝对值取反加一。
在这里我们不考虑正数,因为正数没有补码,其实是不需要更准确。我们只看负数的补码,这里有两个信息:取反和加一。由这两个信息引出两个问题:
取反是什么意思?为什么要加1? 二进制不符合人的直观认知,所以我们在十进制下来看看补码的计算。以15-7为例,用补码计算。
首先我们假设数字位宽是4位,最高位为符号位,15表示为0015,-7应该是1007。但我们清楚的知道这样计算出来的结果0015+1007=1022是不对的。我们要将-7用补码来表示,这里涉及第一个问题,如何取反?
在二进制中取反就是0变1,1变0,那么在十进制中取反的含义是什么呢?
取反的本质是该进制下的极数减去原数。所谓极数就是该进制所能表达的最大数,比如4位十进制所能表达的最大数是9999,那么-7取反就是9999-7=9992。所以,为什么二进制取反是0/1互换呢,因为二进制所能表达的极数是1111,相减的结果当然就是0变1,1变0了。
知道了如何取反,那么-7的补码就是9992+1=9993,现在在来计算15-7,就变成了0015+9993=10008,但是由于我们只有4位位宽,所以最高位的1会被截断,最终结果变成0008!
看到这里,是不是就觉得补码计算没那么神奇了。我们将计算过程进一步展开:
15 − 7 = 0015 − 0007 = 0015 + 9999 − 0007 + 1 = 0015 − 0007 + 9999 + 1 = 0015 − 0007 + 10000 = 0015 − 0007 \begin{aligned} 15-7&=0015-0007\\&=0015+9999-0007+1\\&=0015-0007+9999+1\\&=0015-0007+10000\\&=0015-0007 \end{aligned} 15−7=0015−0007=0015+9999−0007+1=0015−0007+9999+1=0015−0007+10000=0015−0007
从上面的过程中我们可以清楚的看到减法是如何变成加法的,以及补码取反之后为什么要加1。现在我们再来审视前面提出的问题,补码把减法变成加法的原理是位宽溢出。我们之所以可以做直接做加法,是因为补码已经帮我们做了一次减法,就是求反码的时候。只不过在二进制中,求补码的减法刚好就是取反!所以,取反的意思其实是做减法。
再次回到文章标题,其实补码并没有将减法转化为加法,而是补码帮你做了减法。
最后我们再来看看为什么正数没有补码,因为补码中蕴含的是减法运算,而正数代表的是加法运算,负数代表的才是减法运算。
开机选择第二项按 e
修改 linux/boot 将红圈内容替换为 rw single init =/bin/bash ,然后按住 Ctrl + X (或者 F10),就进入单人维护模式界面。
输入命令 passwd root 回车,之后输入新的密码 两遍。关机重启就好了
强调文字颜色2 word2010如何将文字设置成红色,强调文
word2010如何将文字设置成红色,强调文字颜色2,淡色40%
选中文字,从工具栏中单击字体颜色的图标A右侧的下拉式标记,选择相应颜色,如图
excel里的40%强调文字颜色2怎么弄
1、打开一个excel文件: 2、输入需要调整颜色的文字,这里以百度知道为例: 3、用鼠标点击A1单元格,选中输入的文字: 4、在上方的工具栏点击红色的A调节文字颜色的图标: 5、选择如图的文字颜色,就是颜色2淡色40% 6、设置完成的效果:
excel2010强调文字颜色2 淡色80% 怎么弄?
工具/材料:excel2010 1.首先在电脑桌面上找到excel2010表格,然后点击此表格进入。 2.进入到表格页面之后,选择需要设置的文字,右键单击鼠标后选择设置单元格格式进入。 3.将页面切换到字体的页面。 4.然后点击颜色旁边的下拉箭头,在主题颜色...
word2010中添加3磅阴影边框,底纹填充:橙色,强调文字颜色6,淡色80%;在哪里...
选中该段文字,页面布局--页面背景--页面边框: 1、阴影:在边框选项卡,在"设置"中按"阴影&qu...
本文标题:强调文字颜色2 word2010如何将文字设置成红色,强调文
http://www.jianglexinxi.cn/yanergaozhi/279657.html
在win10系统中,我们有时候要使用一些端口,可是却发现使用的端口被别的程序占用了,导致无法开启端口,但是却不知道如何查看端口被哪个进程占用,方法很简单那,这就给大家讲解一下win10系统下查看端口被哪个进程占用的具体步骤
查询端口号对应的进程号 netstat -aon|findstr "80" 使用tasklist命令查看进程
tasklist|findstr "进程编号" 然后,可以用taskkill语句结束进程,可能需要管理员权限才能正常的结束语句;
taskkill /f /t /im 应用程序
算法的实现方法: 通过对仪表的观察决定算法采用传统的检测方法实现,对仪表特征的分析,发现仪表的指针特征较为明显,且仪表形状为圆形,故算法决定采用Hough直线检测方法检测指针的位置,采用Hough检测圆的方法实现对仪表的检测。
指针仪表检测源码
文章目录 算法的实现方法:一、 算法实现步骤1.1 流程图说明:1.1.1 标定表中刻度最大最小值:1.1.2 划定仪表所在ROI区域:1.1.3 对ROI区域进行矫正:1.1.4 指针检测:1.1.5 预处理说明1.1.5. 求指针旋转中心1.1.6 通过旋转中心求最大最小刻度的夹角1.1.7 通过旋转中心、刻度最小值、Hough检测直线得到的指针的点求0刻度到指针刻度的夹角 1.2 细化算法 二、刻度检测算法2.1算法说明2.1.1 高斯滤波2.1.2 黑帽处理2.1.3 自适应二值化2.1.4 轮廓检测 2.2 总结三、算法测试情况 一、 算法实现步骤 1.1 流程图说明: 1.1.1 标定表中刻度最大最小值: 目前对于刻度最大最小值的标定方式采用手动标定方式实现,标定表中最大最小值的目的是用于计算指针指向最大最小值之间的夹角,以此来计算仪表的读数。下图中绿色为手动标定最小值点,红色为最大值点。
1.1.2 划定仪表所在ROI区域: 仪表位置的定位方式目前采用四个点坐标绘制矩形区域。这一步骤的意义在于减少周围物体对仪表检测的干涉和减少在检测过程中的计算量,达到提升检测速率和检测精度的效果。
1.1.3 对ROI区域进行矫正: 未矫正图像对检测精度和检测效果都有很大的影响,故我们需要对图像进行矫正后再进行检测。
目前该算法中采用的矫正算法为,通过手动标定四个点画出一个正方形,然后将这四个点作为特征与,我们直接给出的一个正方形进行匹配,以此来求出矫正后的图形。由于在标定这四个点时我们无法找到合适的对应点,所以该算法矫正效果并不理想。下图为矫正标定图像,红色点为标定的点,图为矫正后图像。我们可以看到在矫正后图像的刻度依旧出于畸变的形态,且表盘矫正效果好时应为圆形,此处矫正后表盘也并非圆形。
1.1.4 指针检测: 对矫正后图像进行预处理,预处理处理步骤如下图所示
1.1.5 预处理说明 划分仪表所在圆形ROI区域:再次对仪表位置进行定位,增加检测精度和提升检测速率。
ROI区域如下图所示,由于矫正后仪表并非圆形,所以我们通过表盘的颜色来区分表盘所在位置,并通过轮廓描绘方式描绘出轮廓,再通过求最小包围圆的方式拟合出仪表所在圆。
灰度化:对图像进行灰度化。灰度化的作用为:将原图RGB(OpenCV通道表示为BGR)三通道转换为单通道,灰度化的过程就是将每个像素点的RGB值统一成一个值,进而达到简化运算的目的。方图均衡化:直方图均衡化是图像处理领域中利用直方图对对比度进行调整的方法。该方法可以把原始图像的直方图变成均匀分布的形式,这样就增加了像素灰度值的动态范围,进而达到增强图像整体对比度的效果,提高图像质量。通过下图我们可以看到通过直方图均衡化后指针和刻度的特征更为明显。
图像取反:图像取反的目的主要是将图像中指针和刻度变成白色为接下来的指针检测做准备。取反操作的结果如下图所示
中值滤波:中值滤波的目的主要是为了去除图像中文字和一些刻度对检测的干扰,滤波后示意图如下图所示。
腐蚀:腐蚀操作可以理解为将图像黑色部分放大,进而达到去除白色点的作用,我们利用腐蚀操作的这一特性来消除刻度和表盘中的文字对指针检测造成的干扰。腐蚀后图像如下图所示。
开运算:开运算=先腐蚀后膨胀,开运算可以用于消除一些孤立的小点,毛刺和小桥。可进一步对图像效果进行优化。开运算后图像如下图所示。
二值化:二值化的作用就是将整个图像变成黑白效果,只存在黑白两种颜色。
二值化后图像如下图所示。
细化操作:由于Hough检测直线时需要先将图像先进行边缘检测,边缘检测结果如图14-1所示,我们可以看到在图14-1中如果直接对指针进行直线检测,检测到的直线为指针的边缘而非指针的中心,且由于我们计算刻度的方式指针所在直线进行判定,故采用边缘检测后直接对指针进行检测存在很大的误差。
针对指针的检测方法,我查阅了许多的论文,最终在进行Hough检测前旋转采用细化的方法而非边缘的方法。关于细化算法,后面单独一章说明。 10. Hough直线检测(检测指针):
Hough检测是一种利用图像的全局特征将特定形状的边缘连接起来,形成一个连续平滑边缘的一种方法。它通过将源图像上的点影射到用于累加的参数空间,实现对已知解析式的直线或曲线的识别。
Hough指针检测效果如下图所示:
1.1.5. 求指针旋转中心 求旋转中心的方式:
一、第一种方式:起初想到的是通过检测表盘的圆进而得到圆心,由于指针所在旋转中心与表盘中心是同一个中心,故表盘的圆心就是指针的旋转中心。但该方式有一个必要条件就是表盘的圆可以准确检测出来,而由于表盘畸变严重,表盘所在的圆无法通过Hough变换检测出,且表盘中心也无法准确求出。
二、第二种方式:通过三个点拟合圆,三个点拟合圆的方法存在几个问题:
由于刻度无法检测出,所以我们需要标定三个点,而既然已经标注三个点那为何不能够直接将指针旋转中心标定呢?三个点拟合出来的圆并不准确,存在的一定程度的圆心偏差,会导致在后续的运算中的误差。
介于这两个问题,选择放弃第二种方式。
三、第三种方式:通过刻度最小值和最大值的中垂线和指针求指针的旋转中心。由于表盘是圆,故我们可以得到刻度值也都在一个圆上,而刻度的最大值和刻度的最小值都在这个圆上,故其中垂线必定经过圆心,且刻度所在圆的圆心与指针旋转中心为为同一个中心。此时我们只需要求出指针与中垂线的交点便可以得到指针所在的旋转中心坐标。原理如图16所示,Line1为刻度最大最小值连线,Line2为Line1的中垂线,Line3为指针。计算公式如下所示。
Line3斜率:
k3 = (Line3.
前言 最近项目不太忙,想着学点新东西,之前看Butterknife源码时接触了APT(Annotation Processing Tool 注解处理器 ),当时没深入研究,所以刚好学一学,看看能不能自己写一个实用的工具.
其实对于Android日常开发项目来说,除了页面显示部分,剩下应该就是网络请求这块内容用的比较多了,当然提到网络请求,okhttp3.x + retrofit2.x的网络请求框架基本就是标配了(还可以结合Rxjava处理异步操作).我的项目都是MVP架构,每次写一个网络请求都需要创建一套M,V,P,通过接口回调交换数据,相似代码和逻辑很多,但又不能省略,所以写了一个自动生成代理类的工具-NetPresenter. 简介 NetPresenter是一款基于retrofit2的轻量级无侵入的快速网络请求开发工具,使用 apt技术自动生成网络代理层代码,减轻编码负担,加快编码速度.
使用方法: 第一步: 添加依赖
1.项目根目录中添加jitpack
allprojects { repositories { ... maven { url 'https://jitpack.io' } } } 2.开发项目中添加
android { ... // java 1.8 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { implementation 'com.github.Dearyu:NetPresenter:1.2.0' annotationProcessor 'com.github.Dearyu:NetPresenter:1.2.0' } 第二步: 配置相关内容:
@NetBuilder:网络构建类,需实现INetBuilder接口,提供Retrofit实例,用于构建网络请求.
@NetUnit:网络单元类,需实现INetUnit接口,用于创建一个网络单元进行网络请求的相关操作.
@NetListener:网络回调类,需实现INetListener接口,用于处理网络响应的回调类.
在Github项目中的netpresenter-demo中提供了RxJava和retrofit2 Call的两种实现方式的例子
这里演示用RxJava配置的例子
1.NetBuilder:
@NetBuilder public class NetManager implements INetBuilder { public static final String BaseUrl = "
原地址:https://www.jianshu.com/p/86b93e0e1e4b 参考:https://blog.csdn.net/GBYQ66/article/details/80652998
参考:https://www.jianshu.com/p/29e315ff44a6
1.在 build.gradle 中添加依赖 implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-21' implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-21'//没有使用特殊Header,可以不加这行 //注意版本与项目一致 implementation 'com.android.support:recyclerview-v7:28.0.0' 2.在XML布局文件中更换为 SmartRefreshLayout <com.scwang.smartrefresh.layout.SmartRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/refreshLayout" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" android:dividerHeight="20dp" android:cacheColorHint="#00000000" /> </com.scwang.smartrefresh.layout.SmartRefreshLayout> 3.在 Activity 或者 Fragment 中添加代码 RefreshLayout refreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout); refreshLayout.setOnRefreshListener(new OnRefreshListener() { @Override public void onRefresh(RefreshLayout refreshlayout) { refreshlayout.finishRefresh(2000/*,false*/);//传入false表示刷新失败 } }); refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { @Override public void onLoadMore(RefreshLayout refreshlayout) { refreshlayout.finishLoadMore(2000/*,false*/);//传入false表示加载失败 } }); 4.使用指定的 Header 和 Footer a.方法一 全局设置 public class App extends Application { //static 代码段可以防止内存泄露 static { //设置全局的Header构建器 SmartRefreshLayout.
开篇
Kindle有一个“魔弹”,可以随时在上面安装自定义代码,包括从添加越狱键、自定义屏幕保护程序或自定义字体,一直到在上面安装完全不同的操作系统,比如Android操作系统。这些工具已经存在,我们知道如何使用它们。将提供简单的分步说明,以及已经包含我们想要的自定义更改的自定义分区映像。
为什么不是快速启动模式
到目前为止,我一直在想,因为fastboot太强大了(因此对初学者来说太危险了),所以我们应该避免使用它,尽可能使用amazon提供给我们的工具,尽可能接近它们的默认配置。这意味着使用尽可能简单的方法将自定义代码安装到kindle上。
越狱
因为所有kindle型号都可以安装签名的更新包,正常的越狱程序会添加一个自定义密钥,这样开发者签名的更新包就可以使用“更新你的kindle”菜单项安装,就像它们是亚马逊签名的更新包一样。这些开发人员签名的更新包含安装过程中运行的安装脚本,可以对kindle进行任何更改,包括添加新的屏幕保护程序、新字体,甚至USB网络,这样您就可以使用SSH获得根shell。
破解
当一款kindle机型问世,或者对现有kindle进行新的固件更新时,真正的问题是如何首先将自定义密钥安装到主系统根分区上。这需要大量的研究来找到获得根访问权限的方法(通常称为“根”设备),以便可以运行自定义代码。对于kindle,rooting它做的第一件事就是安装自定义密钥,这样用户选择的自定义应用程序就可以使用开发者签名的更新来安装。
在新的k4(kindle mini)上,原来根访问是直接在diags的USBnet菜单项中提供的。只需将ENABLE_DIAGS添加到USB驱动器并重新启动,然后从DIAGS菜单中启用USBnet并使用SSH获得一个根shell。使用根shell,您可以进行任何更改并安装任何程序。首先要做的一件事是将dropbear文件从diags复制到main,这样当从main引导时就可以使用SSH获得一个根shell。另一件事,你想安装自定义密钥,以便开发人员签署的更新可以安装从“更新你的kindle”菜单,就像所有其他kindle。
对于触摸,事情与K4有点不同,因为当您从diags菜单启用USBnet时,diags缺少允许SSH的文件。在这种情况下,有必要找到一个漏洞来利用它。第一个发现的是“MP3 bug”,它允许一个专门设计的MP3文件执行它包含的代码。这是用来创建MP3越狱,它安装了自定义密钥,以便可以从“更新kindle”菜单安装开发人员签名的更新。
固件更新
随后固件版本5.0.3问世,修复了MP3的漏洞,因此需要一种新的方法来破解5.0.3固件附带的新Kindle。替换越狱使用当前的“tar根路径bug”,它使用数据.tar.gz将自定义代码安装到可写位置,但不执行此自定义代码。有必要研究启动脚本,找到用户可以编写自定义代码的位置数据.tar.gz并找到一个方法来触发代码的执行。在/var/local中找到了多个位置,其中可以包含在启动期间执行的自定义脚本代码。使用的第一个位置是/var/local/system/locale,但这只在触摸屏上起作用,而且只在从main引导时起作用。
继续搜索其他位置和触发方法,以防新固件禁用现有方法。发现了多个位置和触发方法,其中一些仅在main(正常模式)中起作用,一些仅在diags(工程模式)中起作用,一些仅在Touch上起作用,而另一些则在K4上起作用。我们将在这个线程中使用的是“/var/local/system”/mntus.参数“有效负载脚本。这一个特别强大,因为它运行在触摸屏上的主要和诊断,它运行在K4在主要和诊断,它运行在K3,和DX和DXG。除了这个特殊的有效载荷目的地是强大的,它也是危险的。如果你使用mntus.参数专为不同型号的kindle设计,它可以让启动脚本擦除你的USB驱动器。如果你在使用kindle运行自定义代码时犯了一个小错误,它会严重阻塞你的kindle,使你无法启动main或diags,也无法访问USB驱动器。在这种情况下,只有“USB Downloader”模式才能访问它。它可以部署在K4上,并在数据.tar.gz文件。
USB下载模式和魔法按键
我们可以通过插入USB电缆进入USB下载模式,使电源指示灯亮起,然后按住电源按钮直到指示灯熄灭,然后在松开电源按钮之前,我们需要在松开电源按钮的同时按住“魔法按键”。每种kindle型号都有一个不同的“魔法按键”(在源代码中实际上是这样称呼的)。Touch使用Home按钮(它唯一的按钮)作为魔术键。K4使用五向向下按钮作为魔术键。K3使用音量下降按钮(Vol-)作为魔术键,但它也使用不同的VID/PID,需要不同的工具与之通信。
随着我们对USB下载模式的了解,我们称之为USB下载的模式也在不断变化。在这些论坛中,它可以被称为“USB HID”模式(因为这是它在Windows设备管理器中的显示方式),也可以被称为“USB恢复”模式(因为这正是我们想要使用它的目的),但在制造商文档中,他们称之为“USB Downloader”模式(这是它的官方名称)。在USB Downloader模式下,K4和Touch似乎是具有VID/PID 0x15a2/0x0052的USB HID设备。可从制造商网站下载的特殊软件(飞思卡尔网站)可以使用VID/PID与kindle通信。我们在这个线程中使用的软件称为“MfgTool”。它允许很多事情,包括向mmc存储设备写入新固件。但我们用它来加载和执行kindleram内存中的自定义代码。在这个线程中,我们使用定制的u-boot引导加载程序代码来选择我们想要的引导模式并引导到那个模式。这里提供的引导模式有main、diags和fastboot。对于一个kindle砖如此严重,它只能引导到fastboot模式,我们需要修复它要么使用MfgTool(在USB下载模式下工作)或我们可以修复它在fastboot模式下使用kindle fastboot工具。
快速启动模式——为什么要使用它?
使用fastboot工具处理命令行参数比使用MfgTool更快更简单,MfgTool可以做许多与fastboot相同的事情,但是需要自定义XML文件来配置您想做的每一件事情。Fastboot更简单,所以我们将使用它。我们只使用MfgTool引导到main、diags或fastboot模式。
Fastboot功能强大,可以轻松擦除或重新编程kindle mmc存储设备中的任何内容(包括USB驱动器、主固件和diags固件)。危险之处在于,它甚至会破坏fastboot工具与之通信的固件部分,使fastboot不再工作。在这种情况下,您可以回到MfgTool,它将始终工作,因为它只依赖于CPU芯片(iMX50 SoC)内置的功能。这使得fastboot的危险性有所降低,因为即使您通过错误地使用fastboot来禁用fastboot支持,您也可以使用MfgTool恢复kindle。使用MfgTool作为备份方法,使用fastboot可以减少恐惧感。
所以,首先使用fastboot的原因是当一个kindle变成砖,它不能引导到main或diags,但仍然可以引导到fastboot,我们可以使用fastboot来修复我们的kindle。即使我们破坏了它,使fastboot不再工作,那么我们最终可以开发定制的XML文件,这样我们就可以使用MfgTool来修复fastboot模式,这样我们就可以再次使用fastboot模式来修复kindle。
强大的快速启动模式
Fastboot可以将映像文件写入主分区、diags分区和数据分区。它还可以编写新的引导加载程序代码,如果执行不正确,则会禁用上面提到的fastboot。但是,(这是我今天晚上刚刚意识到的突破性的发现)数据分区包含USB驱动器,这是将内容上传到kindle的正常方式。
真正的突破是当你需要一个特别的数据.tar.gz以及运行名.sh当你无法访问U盘时,你可以使用fastboot将这些文件放到U盘上!怎样?创建一个包含这些文件的vfat格式的映像文件,然后使用fastboot将其flash写到数据分区。就这么简单!
我们甚至可以使用fastboot来闪存自定义的main或diags分区映像,这些映像是官方分区的备份映像,其中添加了额外的文件,例如自定义越狱密钥、丢失的SSH文件,以及任何您想要的自定义屏幕保护程序和自定义字体。不需要安装任何东西,而且预先安装的工厂固件是否修复了所有错误,从而无法通过任何其他方法添加自定义代码也无关紧要。只要亚马逊没有禁用fastboot,这种方法就一直有效,即便如此,MfgTool仍然可以用来在kindle上安装自定义代码,就像fastboot工具一样,但配置起来有点复杂。当然,在创建mfgtoolxml配置文件之后,可以多次使用它们。
永久解决方案
亚马逊阻止我们安装自定义固件的唯一方法是,如果他们在新Kindle上禁用“解锁”USB下载模式,以便只有使用其官方(秘密)密钥签名的固件才能写到mmc存储设备。根据制造商文档,CPU SoC似乎是以“加密固件”模式从工厂来的,并且在首次配置时必须永久烧毁内部保险丝,以便像kindles现在支持的那样未加密(打开)固件。
这意味着任何现在可以运行自定义代码的kindle都将始终能够运行自定义代码。只有新的Kindle才能锁定,以防止这一点,因为它不烧允许自定义代码的保险丝。K5 u引导源代码包括对多个kindle型号的支持,包括使用签名固件包的未来型号,因此未来的kindle型号可能会防止固件映像。在这种情况下,我们必须返回当前的方法,利用bug来获得根访问。
对我们有什么好处?
我的kindle现在处于“fastboot only”模式(它不能启动main或diags,也没有USB驱动器访问)。这样做是因为mmcblk0p3包含损坏的mntus.参数我不知道如何用fastboot修复这个问题。我知道变砖是因为mntus.参数不会返回到在运行名.sh脚本被调用。我可以用不同的运行名.sh修复损坏的脚本mntus.参数文件(替换或删除它,或销毁mmcblk0p3)。但是我不能用普通的方法把这些文件添加到我的USB驱动器上。如果问题出在主分区上,可以通过引导到diags来修复。但是它在mmcblk0p3上,我不知道如何(或者是否)使用fastboot刷新分区。
所以我会用我所知道的去做。我将创建一个包含运行名.sh我需要修复文件数据.tar.gz我要启动它运行名.sh文件。我将使用fastboot将该映像文件写入数据分区。然后我将重新启动到诊断模式。在这一点上,我相信这将做的工作。
对你们有什么好处?
即使mmcblk0p3、main和diags都已损坏,我们也可以使用fastboot将修复的(原始)映像写入main(系统)和diags分区,并将自定义USB驱动器映像写入包含运行名.sh以及数据.tar.gz维修mmcblk0p3。这样做可以救K4变砖,但有固件映像触摸使用fastboot有问题。这可以通过为MfgTool配置文件使用bist(内置自检)构建u-boot来克服,其中包括“修复的”fastboot代码(如果它有任何bug需要修复的话)。
最后
所以,全部都是好消息。不仅对我,而且对每个人。对?让我们听听反馈吧!最起码,kindle在fastboot模式下给电池充电的速度要快得多,所以它至少在这方面是有用的。
编辑:由于这是编写的,我们发现一个大小限制,防止fastboot写入大型映像文件,如主系统分区(mmcblk0p1)。我清理了kindletouch,其他许多人也成功地清理了kindle,方法是使用fastboot从包含SSH预安装的映像中写入较小的诊断分区(mmcblk0p2),然后引导到诊断模式,并使用linux“dd”命令从备份映像中写入较大的主系统分区。这种恢复bricked kindle健康的方法与以前的方法相比已经大大简化,并在“simple kindle touch(and k4nt)debricking method”一文中进行了说明。
kindle 3 GPL源代码包含一个uboot-1.3.0-rc3文件夹。”grep-r fastboot*“找不到fastboot。所以你的“加载”(否定)问题的答案要么是“是的,fastboot不在那里”,要么是“不,fastboot不在那里”。另一类问题是“你停止打你妻子了吗?”。在这种情况下,英语很难学。
Fastboot是新kindles中u-boot引导加载程序的bist(内置自检)版本,它从mmc加载,当您使用idme bootmode Fastboot引导时运行。
USB Downloader模式与fastboot有很多相同的功能,并且它不能被锁定以防止在解锁后闪烁未签名的自定义代码(通过烧掉SoC中的配置保险丝)。到目前为止,所有的kindle都没有锁。
kindle5(touch)u-boot源代码中有一些注释,显示了为使用签名固件映像的未来kindle设备配置设置,因此未来的kindle可能会被锁定以防止自定义固件,然后我们只能利用固件错误来运行自定义代码,就像我们过去所做的那样。
Kindle3使用了飞思卡尔IMX35CPU SoC,也有USB下载模式。它使用与iMX50 CPU SoC不同的USB VID/PID,并且需要不同的下载工具(AdvancedToolKit,而不是MfgTool)。我已经在我的主机PC上安装了AdvancedToolKit,并且我验证了它报告说它在我的Kindle3中成功下载并运行了代码。
直入主题,小程序一般有三种情况会被销毁
1、小程序切到后台看不到后,一般 5 分钟内就会被微信客户端主动销毁;
2、iOS 下如果 5 秒内连续大于等于 2 次的内存告警,会被销毁;
3、在微信客户端下拉最近访问的小程序里删除,也会从内存里销毁。
前言 apollo 是一个开源的配置中心项目,功能很强大,apollo 本身的配置项并不复杂,但是因为配置的路径特别多,非常容易搞混了, 所以本文试图聚焦 spring-boot 的场景,在 spring-boot 微服务场景下,搞清楚 apollo-client 的加载过程
集成使用 1、添加 gradle 依赖 implementation "com.ctrip.framework.apollo:apollo-client:1.6.0" 2、配置 application.properties apollo 自身的配置共包含 9 项,必要配置只有 3 项,其他的都是可选的配置。apollo 在 spring-boot 环境下的配置命名和 System 参数的命名保持了一直,最终 spring 的配置会注入到 System 中,具体的逻辑下文分析。
必须配置 #应用的ID app.id = java-project # apollo 的 config-service 服务发现地址 apollo.meta = http://apollo.meta # 启用 apollo apollo.bootstrap.enabled = true 可选配置 # 在日志系统初始化前加载 apollo 配置 apollo.bootstrap.eagerLoad.enabled=true # 加载的命名空间,默认加载 application ,多个以逗号隔开 apollo.bootstrap.namespaces = application # apollo 的安全拉取 secret 配置 apollo.
利用OneDrive搭建属于自己的私人云盘
什么是网盘 网盘很常见,百度,腾讯,微软,亚马逊,甚至正在公测的阿里都是在为客户提供储存用户资料,提供较大空间来供客户保存生活中的一些生产和学习资料。
但由于提供资源的空间较小,也如某盘的带宽流氓限制,导致我们使用网盘的体验并不是很好,再往深处说,我们甚至可以使用网盘来当作我们图片的外链使用,使我们的网站可以利用网盘当作图床,音频床和视频床,然而这些资料都是存在云端,不会影响到我们的服务器内存,很Nice。✨🏆
搭建Oneindex的方法 Oneindex是什么?
Oneindex是利用Onedrive,Google Drive等云盘当作储存空间,利用微软和谷歌的强大带宽来实现搭建私人的网盘空间,可以实现文件预览和共享的一种个人网站。
当然随着Serverless Frame框架的不断发展,我们应用的创建和使用有了越来越多不同的方式,对于网盘搭建感兴趣的,可以去看一看Oneindex,OneManager,可道云等多种私人网盘的相关内容。
服务器方式搭建 利用服务器搭建网站,是个人站长最基本的技能之一,不需要过于阐述。
随着Oneindex开发者的删库跑路,我们在网上找到一个最新的Onendex
Github网站如下:
https://github.com/mengxiangke/oneindex-3/releases
具体的搭建方法如下:
https://github.com/xinb/Oneindex
https://www.shanyemangfu.com/oneindex.html
无服务器方式搭建 没有服务器,也就意味着不需要担心服务器没钱,然后一夜之间数据关停,高额的续费金额让人忘却止步(没错,俺懒得备份)🌦
那就不得不说腾讯云 SCF(云函数),身为Serverless的 一部分,曾经免费向客户使用,但随着时间的推移,到了2021年了,呜呜呜,SCF也开始收费了爷清洁🤣
还好云函数每个月有100万次的免费额度,仅仅是我们个人使用的话是绝对够用的。
下面是关于SCF的几位站长的搭建教程:
https://www.nbmao.com/archives/4076
https://www.mad-coding.cn/2019/12/02/使用腾讯SCF-onedrive搭建5T个人网盘/
https://blog.csdn.net/weixin_42409476/article/details/106522893
PS:这是OneManager的搭建方法,可以体验一下:
https://github.com/qkqpttgf/OneManager-php
1、B/S的特点
B/S模式(Browser/Server,浏览器/服务器模式) • 是目前应用系统的发展方向。BS是伴随着Internet技术的兴起,对C/S架构的改进,为了区别 于传统的C/S 模式,特意称为B/S模式。在这种结构下,通过Web浏览器来进入工作界面, 极少部分事务逻辑在前端(Browser)实现,主要事务逻辑在服务器端(Server)实现,形 成三层结构。这样使得客户端电脑负荷大大简化(因此被称为瘦客户端),减轻了系统维 护、升级的支出成本,降低了用户的总体成本(TCO)
• 优点• 分布性强,客户端零维护。只要有网络、浏览器,可以随时随地进行查询、浏览等业务处理。 • 业务扩展简单方便,通过增加网页即可增加服务器功能。 • 维护简单方便,只需要改变网页,即可实现所有用户的同步更新。 • 开发简单,共享性强。
• 缺点• 个性化特点明显降低,无法实现具有个性化的功能要求。 • 在跨浏览器上,BS架构不尽如人意。 • 客户端服务器端的交互是请求-响应模式,通常动态刷新页面,响应速度明显降低(Ajax可以一定程度上解决这个问 题)。无法实现分页显示,给数据库访问造成较大的压力。 • 在速度和安全性上需要花费巨大的设计成本。 • 功能弱化,难以实现传统模式下的特殊功能要求。
Web系统的特点
• 图形化 • 可以在一页上同时显示图形、视频、音频、文本,非常易于导航
• 与平台无关 • Web对系统平台(windows、UNIX、Mac 等)没有任何限制
• 分布式的 • Web页面中显示的图形、视频和音频等信息可以放在不同的站点上,只需要在浏览器中指明 站点就可以了。它使物理上并不在一个地点的信息在Web页面上一体化
• 动态的• 为保证信息的时效性,Web站点上的信息是动态更新的
• 交互的• Web的交互性表现在它的超链接上,用户向服务器提交请求,服务器根据用户的请求返回相 应信息
工作原理:
初始化客户端
使用前请先初始化客户端,请参见
获取视频上传地址和凭证
调用CreateUploadVideo接口,完成获取视频上传地址和凭证功能。
接口参数和返回字段请参见/**
* 获取视频上传地址和凭证
* @param client 发送请求客户端
* @return CreateUploadVideoResponse 获取视频上传地址和凭证响应数据
*/
function createUploadVideo($client) {
$request = new vod\CreateUploadVideoRequest();
$request->setTitle("Sample Title");
$request->setFileName("videoFile.mov");
$request->setDescription("Video Description");
$request->setCoverURL("http://192.168.0.0/16/tps/TB1qnJ1PVXXXXXCXXXXXXXXXXXX-700-700.png");
$request->setTags("tag1,tag2");
$request->setAcceptFormat('JSON');
return $client->getAcsResponse($request);
}
try {
$client = initVodClient('', '');
$uploadInfo = createUploadVideo($client);
var_dump($uploadInfo);
} catch (Exception $e) {
print $e->getMessage()."\n";
}
刷新视频上传凭证
调用RefreshUploadVideo接口,完成刷新视频上传凭证功能。
接口参数和返回字段请参见/**
* 刷新视频上传凭证
* @param client 发送请求客户端
* @return RefreshUploadVideoResponse 刷新视频上传凭证响应数据
*/
function refreshUploadVideo($client, $videoId) {
原文地址:Turning an old Amazon Kindle into a eink development platform
译者 & 校正:HelloGitHub-小鱼干 & 卤蛋
我想有个用于(开发)未来项目的水墨屏,刚好我又买了一个带树莓派 “hat” 的小玩意。就这样,灵光一闪的我想到旧 Amazon Kindle 电子书阅读器可以变废为宝。
译者:这便是本文的由来。
我之前有过使用 Kindle 的经验:我为它移植过一个 Infocom 解析器 和一个 Manga 漫画阅读器 。我让亚马逊软件以 “Kindlets” 形式加载 Infocom 和 Manga,并将它们集成到电子书阅读器 Kindle 中。而现在,我想要一个好用且便宜的水墨屏 Linux 开发平台。
下面就是全部的操作和流程!
Ebay 上便宜的 Kindle(和它们便宜的原因) 我在 Ebay 上看到了许多便宜的 Kindle,上面标着 “BLOCKED BY AMAZON”,当然我并不打算买它们,因为理论上它们可能被偷了。最后,我选择了一个 7 英镑的非触摸版 Kindle 4。
几天后,我收到货发现了它这么便宜的原因:这台 Kindle 陷入了某种不可退出的演示模式:
我在 Google 上搜了下解决方法,后来版本的 Kindle 是可以退出演示模式,但这些方法在这个 Kindle 4 版本上没用。不过不要紧,这不重要:因为我并不想在这个 Kindle 上运行原装的 Kindle 电子书软件。
前言 最近在学Redis,学习的过程中看到网上爆出 黑客入侵服务器实现批量挖矿
这nb的操作就是靠着redis这个跳板。
本文原地址:http://www.blog.lisok.cn/?id=34,欢迎访问,说不定能解决你的其他问题
简单分析一下整个流程,批量入侵,使用redis未授权访问漏洞。
首先要有入侵的一些服务器地址,然后根据Redis的组件指纹去判断是否存在这个漏洞,也就是 6379 端口的开放情况。
写个脚本 尝试使用socket连接服务器的6379 进行获取数据,能否得到希望的响应,可以得到以下结果
存在其他服务占用了6379,只得放弃该鸡 hhh,大批量入侵并不在乎这只需要授权,不用说,更得放弃nil 或者查到具体数据 ,这就是我们心仪的目标 φ(* ̄0 ̄) 生成ssh公钥,拷贝到目标服务器的/root/.ssh
ssh连接
铺垫 整个入侵的过程还是比较 理想化的,也就是说很少能碰到这么不安全的服务器 hhh,
一般被入侵服务器有以下几个缺陷:
服务器的防火墙被关闭 这是第一重防御
redis的配置文件中 允许远程连接 和 不绑定IP
redis 未设置密码
使用默认指纹,也就是默认端口号6379
所以各位引以为戒,避免产生以上的缺陷。
入侵复现 先准备服务器(左侧被入侵机器) 和 攻击端(右侧Kali系统) 两个都要安装Redis,其中
左侧IP : 192.168.41.130
右侧IP : 192.168.41.129
写Py脚本 探测一下目标服务器是否开放6379,以及是否为redis绑定该端口、Redis是否设置密码。 如果运行返回true可以进行下一步,若不能请判断是否满足上文分析的缺陷。
from socket import socket, AF_INET, SOCK_STREAM s = socket(AF_INET, SOCK_STREAM) s.settimeout(10) # 元组 (目标ip,端口) s.connect(('192.168.41.130', 6379)) s.send('GET 1\r\n'.encode()) data = s.recv(20) s.
一、分类 1)连续时间系统与离散时间系统
连续时间系统的数学模型用微分方程描述
离散时间系统的数学模型用差分方程描述
2)即时系统与动态系统
即时系统:当前输出只有当前输入有关,与过去的输入无关。
动态系统:当前输出不仅与当前输入有关,还与过去的输入有关。
3)线性系统与非线性系统
线性系统:具有叠加性与均匀性(齐次性)的系统
非线性系统:不满足叠加性或均匀性的系统。
4)时变系统与时不变系统
时变系统:系统参数随时间变化的系统。
时不变系统:系统参数不随时间变化的系统。
5)因果系统与非因果系统
因果系统是指某时刻的输出只取决于此时刻和此时刻之前输入的系统。如果系统现在的输出还取决与未来的输入,则不符合因果关系,是非因果系统,是不实际的系统。
因果系统的充要条件是:单位冲激响应h(n) = 0, n<0 。 即系统的输出与n<0时刻无关。
二、离散时间系统 2.1、离散时间线性系统 1、可加性
若 y 1 ( n ) = T [ x 1 ( n ) ] , y 2 ( n ) = T [ x 2 ( n ) ] y_1(n) = T[x_1(n)],y_2(n) = T[x_2(n)] y1(n)=T[x1(n)],y2(n)=T[x2(n)]
则 y 1 ( n ) + y 2 ( n ) = T [ x 1 ( n ) ] + T [ x 2 ( n ) ] = T [ x 1 ( n ) + x 2 ( n ) ] y_1(n)+y_2(n)=T[x_1(n)]+T[x_2(n)]=T[x_1(n)+x_2(n)] y1(n)+y2(n)=T[x1(n)]+T[x2(n)]=T[x1(n)+x2(n)]
手动路由配置 在配置路由参数的过程中,对应的component文件要写children参数,否则只会匹配一级路由,子路由内容不展示
{ path: '/test', title: 'name', component: '@/pages/test/rank/index', routes: [ { path: '/test/rank/index', title: 'name', component: '@/pages/test/rank', }, ] } @/pages/test/rank/index文件: import React from 'react'; const Index = () => { return <div>'test-首页'</div>; }; export default Index; //此文件中未写children参数,导致匹配子路由test/rank/index时未进行渲染
文章目录 1. 基本信息2. HICO 概述2.1. 标注文件介绍 3. HICO-DET3.2. 标注文件介绍 附录80类物体列表117类行为列表600类 HOI 行为(动名词组合)列表 1. 基本信息 这是HOI(Human Object Interaction)领域最常用的数据集之二。
官方资料:官网,HICO论文,另一篇相关论文
PapersWithCode:HICO榜单,HICO-Det榜单
基本信息:包括117类行为,80类物体,600类动名词组合(查看附录)。
HICO-DET:共47776张图片,38118属于训练集,9658属于测试集。 2. HICO 概述 本身就是一个多分类任务,列出了600中动名词组合(详见附录)。 当然,不全是正负样本,也有“模糊”样本。 2.1. 标注文件介绍 下载HICO数据集或HICO-DET数据集时,都包含HICO配置文件,即名为 anno.mat 的标注文件。标签内容(摘录自README) list_action:600x1的ndarray,对于每一类都有 name/vname/vname_ing/syn/def/synset/add_def几个属性。list_train:训练图片名称列表list_test:测试图片名称列表anno_train:训练集标签,shape是 num_classes x num_train_samples 标签包括 +1(positive), -1(negative), 0(ambiguous) anno_test:测试集标签,shape是 num_classes x num_test_samples 标签包括 +1(positive), -1(negative), 0(ambiguous) README内容 a. list_action 600 x 1 struct each entry is one HOI category - nname: noun (object) - vname: verb - vname_ing: verb with the -ing ending - syn: synonyms - def: definition - synset: corresponding wordnet synset - add_def: additional definition b.
strsvr 主要使用串口通过硬件输入信息
TCP Server:等待来自客户端的连接请求,处理请求并回传结果。
TCP Client:主动角色,发送连接请i去,等待服务器的响应。
Ntrip Server的功能是将本地接收机的RTCM数据推送到Ntrip Caster
Ntrip Caster的主要功能是用户管理和播发RTCM数据
Ntrip Client 的功能是登录Ntrip Caster获取RTCM数据
有用链接
http://www,igs,org/rts/products
http://rtk2go.com
这里我们可以尝试用ntrip client 进行连接:
打开option可以看到NTRIP Client配置界面:
NTRIP Caster Host可以输入rtk2go.com
我们也可以打开rtk2go.com来查看端口号
端口号为2101,之后点Ntrip可以查看可使用的站
这里选择F9P-FB,用户名密码如果没有的话可以随便指定一个
点start则可以看到数据在传输
点击左下角的框也可以实时查看数据
之后可以提通过output来设置输出
RTKNAVI rtknavi主要用来做实时导航
首先是INstream
如果RTK需要配置流动站和基站,PPP的话就一个流动站就够了。
这里尝试PPP,使用前面讲过的NTRIP配置
这里的F9P-FB是没有广播星历的,之后我们再配置改装束,改装书是需要广播星历的,不然无法结算
基于matlab的mpsk性能分析 基于 MATLAB 的 MPSK 性能分析【摘 要】 通信系统中的数字调制技术是通信与信息系统领域的基础知识,而相移键控(MPSK)信号是作为常见的数字通信调制信号。目前,它已被广泛应用,不管是在传统的通信系统,还是移动通信系统或卫星通信系统。这些都是因为它的功率和频谱效率高的优点。因此对相移键控信号的调制解调原理的掌握有助于加深对调制技术的理解,并对深入学习新型的调制技术有指导作用。本文首先介绍数字通信系统的组成,然后分析数字调制系统中的几种基本调制解调方法,主要包括 MPSK 和 MDPSK。最后运用 MATLAB软件对 MPSK 和 MDPSK 进行仿真和分析,其中主要是通过仿真得到信噪比与误码率之间的曲线,然后对加性高斯白噪声环境下的性能进行分析,并与理论值相比较。最后,还对MPSK 与 MDPSK 在实际情况下的误码率进行了比较和分析。【关键词】 数字调制,MPSK,MDPSK,误码率,信噪比基于 MATLAB 的 MPSK 性能分析IIMPSK Perance Analysis Based On MATLAB【Abstract】 Digital modulation technology in communication system is basic knowledge in the field of communication and ination systems, and phase-shift keying (MPSK) signals are as common digital modulation signals. Due to its high power and spectrum utilization, MPSK have been widely used in traditional communications, mobile communications and satellite communications systems.