本篇讲述如何制作WinPE。我参考了微软的技术文档:
https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/winpe-create-usb-bootable-drive

首先打开开始菜单,找到Windows Kits并展开,右键“部署和映像工具环境”,以管理员身份运行,如下图所示:

在弹出的cmd窗口中,键入以下命令并按回车。此命令的目的是将PE的工作文件创建到你指定的文件夹中

# 要制作64位WinPE,使用下面这个命令。强烈建议使用64位的WinPE
copype amd64 C:\WinPE_amd64
# 如果是要32位的WinPE,则使用这条命令
copype x86 C:\WinPE
# WinPE和WinPE_amd64目录可以更换成你想要的名称,我自己怕麻烦就选择不更改
PE复制完成

接下来就是将PE烧录到U盘中了,使用如下命令:

# 64位
MakeWinPEMedia /UFD C:\WinPE_amd64 P:
# 32位
MakeWinPEMedia /UFD C:\WinPE P:

注意,P:是U盘的盘符。该命令会格式化U盘(FAT32格式),所以建议找个小容量U盘或者SD卡来操作(几年前淘汰下来的存储设备又可以重新发光发热)。盘符一定不能输入错误,否则就会呵呵。烧录时间根据存储设备的性能不同而不同,请耐心等待结束。

C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools>MakeWinPEMedia /UFD C:\WinPE_amd64 E:
WARNING, ALL DATA ON DISK DRIVE E: WILL BE LOST!
Proceed with Format [Y,N]?Y
Formatting E:...

Setting the boot code on E:...

Copying files to E:...


Success

制作完成,可以把U盘插到VMWare中来测试一下效果:

WinPE界面

Emm…看到这个界面就表示WinPE已经制作成功了,这个就是微软的,原汁原味的WinPE。现在可以通过命令行来执行各种命令了。

好了,本篇教程就到这里,下次会讲如何个性化WinPE

首先,让我们去从微软官网上下载ADK。下载地址:
https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/download-winpe–windows-pe

微软官网上的说明

然后,确认一下要制作的WinPE的内核版本。如果要制作1809版本及以上的,需要下载ADK和WinPE插件两个程序;如果是1803或者更早期的内核,则只需要下载一个ADK程序即可。注意,两个ADK并不是同一个程序。这里我选择使用1809的版本

下载完成后得到两个程序,上面一个是ADK,下面那个是WinPE Add-on

ADK程序

首先运行上面个adksetup.exe,因为目的是制作WinPE,所以在选择功能的时候,除了部署工具以外的其他功能统统用不到。点击安装后等待完成安装。

选择“部署工具”即可

接着安装下面那个adkwinpesetup.exe。过程中可能会多次跳出下面这个对话框,表示没有网络连接,这种情况下首先检查自己的网络,确认网络没问题的话只需多点几次Retry,基本就能下载成功。

没有网络连接?

下载过程中请耐心等待。。。。下载完成之后,WinPE的部署环境就搭建好了

本文转载自果壳 https://www.guokr.com/article/439451/

你一定会对这样的场景十分熟悉:在电影或者电视剧的高潮部分,最终大BOSS手拿武器对准躺在地上满身是血的主角。他/她/它(当然)并没有立即终结主角,而是(如你所想地)侃侃而谈:“想当年,我可是……”这段追忆往昔峥嵘岁月的回忆洋洋洒洒,足以写下一篇八百字作文。等等,只听“砰!”的一声——大BOSS(如你所想地)被主角干掉了。

大BOSS常常在占尽优势的时候对主角“话太多”。在说这段剖析自己内心世界的话时,他们给了主角足够的时间准备“逆袭”,而潜台词就是:“主角你在干啥?我都说的口干舌燥了,还不来干掉我?”于是主角愉快地满足了他们的愿望。嗯,那么现在问题就来了:为什么这些坏人、大BOSS,总是功败垂成,最后死于自己太话痨呢?


嗯,那一定挺疼的……图片来源:mrwgifs.com

剧情要求,主角光环不能始终无敌

首先,在影视作品里很显然这事儿得问编剧跟导演啊!这可都是编剧和导演弄出来的鬼把戏。一方面,作为正面角色,主人公做事儿不能太顺利,主角光环只能在关键时刻用一用,如果全程都是无敌效果,那还有什么看头啊?估计这样的片子只能吸引吸引小学三年级以下的观众了——现在的动画片儿都不太这么演了好嘛。

反过来,坏人也不能太厉害,他可以一直都占据优势、占据主动,但最后必须被主人公给干掉。你要是让坏人一路占尽优势,最后把主人公给干掉了,观众也不答应啊。就算是观众答应了,你不给个正面的光明的结尾,也有些人要跟你急啊。

不过,话说回来,艺术来源于生活。时间是最好的编剧,现实世界才是我们能看到的最伟大的戏剧。在这部漫长而丰饶的现实大戏里,坏人死于话多的情况,真的会出现。

真实的坏人也死于“话太多”

美国联邦调查局(FBI)的科学调查组创始人雷斯勒写过一本很著名的书,叫《FBI心理分析术》,详细记录了自己为FBI工作的过程和细节。他提到,自己曾经跟上世纪70年代纽约一个著名的连环杀手大卫·柏克威兹(David Berkowitz),做过深入的谈话。这个柏克威兹很厉害,他自称“山姆之子”,总是在深夜伏击正在亲热的情侣。而且还很高调地给当地媒体写信,讲述自己的故事。截止到被捕的时候,他一共杀死了6个人,击伤7人。可以说是罪行累累。


“山姆之子”,真名叫作大卫·柏克威兹,他专门狙杀约会中的情侣,往往隐藏在小暗巷中趁情侣们缠绵时从车窗口向女方射击。crimemagazine.com

然而,就是这样一个心狠手辣的杀手,他却告诉雷斯勒一个此前所有心理学家、刑侦专家,估计连大长脸儿夏洛克都没有注意到过的信息:凶手在行凶之后,常常会情不自禁地回到案发现场。很快,心理学方面的一些研究也证实了这一点。这个现象后来被运用到刑侦工作当中,起了很大的作用。现在我们看一些刑侦题材的影视剧作品,也经常会看到这样的桥段:警方在勘查案发现场的时候,在围观的人群中发现了形迹可疑者,这个时候嫌疑人一定会拔腿狂奔,警察则一定会紧紧追赶。而且这一追捕行动一定会失败:不是被嫌疑人跑掉,就是突然暴毙,看一眼进度条就什么都明白了。

美国小说家帕拉尼克在名作《肠子》里也提到过这样的桥段,警探会在谋杀弃尸的现场藏一个麦克风,然后监听这里的情况。因为几乎所有的凶手都会回来跟受害者说话。所有人都有倾诉的需求,而杀人者只能与那个被杀死的,也就是永远都不可能出卖他的人分享自己的罪行。

可是,匪徒为什么要去多这么一嘴呢?他难道不能像个北欧人一样保持沉默吗?如果进入了心理学的范畴,一切都变得好理解了。

为啥坏人总是喋喋不休?

消解认知失调

行凶者面临的第一个问题就是认知失调。认知失调简单来说就是我们所做的事情跟我们的认知发生了冲突。比如我们会有一个基本认识:“杀人是不对的”。行凶者在做这件不对的事情,但又不愿意承认自己犯罪是错误的。所以,他必须要通过将杀人行为“合理化”来实现建立心理防御机制。

行凶者会找各种借口来获取自己犯罪的正当性,最终说服自己放下良心的包袱,告诉自己“他就是该杀”。这种心理防御机制在电影中的最经典表现来自《黑客帝国》。在片中,史密斯要毁灭人类的理由如此充分:“你们人类一直以为你们自己是哺乳动物,其实你们不是。地球上没有哪种哺乳动物像你们这样生存:每到一处,尽力耗尽那里的资源,榨干那里的财富,直至那里一无所有,然后和那块地方一起死掉。你们人类繁衍的唯一方式就是换一块地方,重新掠夺。地球上只有一种生物像你们这样生存——病毒。你们人类是地球的瘟疫和灾难,而我们——电脑——是解药。”


Ouch!《黑客帝国》大BOSS史密斯被干掉。图片来源:voiceofcrazy.com

现在我们可以理解了,坏蛋为什么总在控制大局,只需再动一下手指就能大获全胜的情况下,突然变得喋喋不休。其实,他就是为了消除自己作恶时由于内化的道德和外显的行为不相符而产生的认知失调。通过不停地说给自己和别人听,来达到所谓的“认知失调消解”。

不过,这套理论有一个缺陷,坏蛋要想达成“认知失调消解”,自己在心里默默调节消解不就好了嘛,为什么一定要说出来呢?这里就牵扯到心理学的另一个机制:通过获得外部反馈,而提升自我评价。

提升自我评价

从原理上来说,提升自我评价有两个途径:自我效能感,社会认同感。这两个途径都迫使坏蛋们不停地说话。

自我效能感简单来说就是强调“我有我可以”。比如你面前有一堆砖,你来要搬它,可你怎么知道自己搬得动它呢?根据自我效能感的理论,你以前成功地搬过砖、你看过体力跟你差不多的人成功地搬砖、有别人或者你自己来现场分析一下你能搬动砖的十大原因、开一个搬砖动员大会、把砖放在你熟悉的环境里搬,这些因素都能让你觉得自己离优秀的搬砖工更近了一步。

自我效能感的提升,能让人感觉异常良好。坏人也是人,也有人的优点和缺点,要遵循人类共有的心理规律。把众人眼中威风凛凛的正义化身踩在脚下,恶棍们随心所欲地发表自己的高谈阔论:一边回顾自己“光辉”的历史,一边叙述自己“天才”的计谋;一边夸耀自己超凡的实力,一边肯定自己胜利的必然——自我效能感简直要爆棚了。然而这还不够,独角戏不够精彩,一定要有一个配角,甚至一批观众才能让个体获得最大的心理满足感。

实际上,在人类犯罪史上确实有罪犯真的在用极端的方式获得自我效能感,鼎鼎大名的“黄道十二宫”杀手,就曾炫耀性地主动寄给当地报社一些自己编写的密文,而其中的“340密文”的谜底至今仍未揭晓。

而社会认同感说的是人意识到自己属于特定的群体,并且通过群体成员的身份来获得价值和情感意义。对于影视剧中的大坏蛋,在毕生追求的野心即将实现之际,不把这一系列的阴谋诡计全盘托出以便让世人知道自己才是名符其实的头号恶棍?这无异于锦衣夜行,实在会让人太失落了。而这种自我标榜为头号恶棍的做法,本身也是社会认同感极端化的表现。


虽然在《钢铁侠3》电影中只是一个傀儡,不过满大人的噱头还是搞得很好的。图片来源:wikia.com

有限认知:给坏人的会心一击

以上的心理动机导致了坏人总是陷入话痨综合征而难以自拔。而一种很重要的心理学概念仍然悄悄潜伏在草丛中,随时准备跃出来,给他致命一击。这就是每次都能让主角绝境翻盘,逆袭反杀的最好帮手:人类有限的认知资源。

人的认知资源是非常有限的,当我们专注地做某一件事时,不在我们关注范围内的信息很可能就无法有效地进入我们的认知加工环节,从而导致视而不见、听而不闻的情况。1999年,美国心理学家西蒙斯做过一项实验,在向观众播放视频的时候,让一个合作者扮成大猩猩从人群前面走过。至少有一半人会注意不到大猩猩的出现。可以想见,当坏人专注于向已经被打倒在地动弹不得的主人公倾诉,以获得自我满足的时候,他是无法注意到后者行为、姿态和情绪上的变化细节的。逆袭的线索,就这样被忽视了。

坏人,就这样死于他的喋喋不休。由此可见,言多必失、沉默是金这样的古律,至少在电影当中是有很重要的作用的。

最后,让我们一起重温一位敦厚长者的谆谆教诲:一定要闷声才能发大财啊!(编辑:Jerrusalem

今天看新闻,看到一篇比较有意思的文章,于是就复制粘贴了过来。如果侵犯了原作者的权益,立刻删除

原文出处:https://baike.baidu.com/tashuo/browse/content?id=5d5bb1f89a4ef1495c7b2152


被捉住的男人女人,站在大家面前,衣不遮体,形容狼藉,女的抱胸,男的捂下身,被大家用极其下流的眼光来审视:奶不大,屁股不够翘,看起来操得也不太得劲……

微博只要一有人出轨,马上就会爆。

比如今天白百何疑似出轨,连续几个关键词都爆了。“白百何”、“陈羽凡”、“白百何离婚申明”、“卓伟”……先后都成超级热点。

网友一边兴奋地点开视频,期待能发现超劲爆的淫秽色情男盗女娼;

一边板起脸孔,大骂当事人贱货白莲花道德败坏。

我对评论出轨事件已经没有兴趣了。

今天想聊聊,为什么中国人这么热衷于捉奸。

大家应该还有印象,不光白百何,陈思诚、林丹、刘恺威疑似出轨时都是这样。

狗仔一放猛料,大家立即闻腥而动,见色而起,全民抓奸,热情永远澎湃,正义感永远高涨。

而平常,无论哪里发生人命,发生残忍至极的犯罪,哪里有孩子被霸凌至死,哪怕有畜生性侵女童,都不会引发这么多人关注。

人命是次要的,抓奸才是重要的。

与人人息息相关的公共环境是次要的,别人的床上发生什么才是重要的。

NO1

为什么大家会这样?

有三个原因:

1,刺探隐私是有快感的。

2,捉奸往往意味着香艳、暴力、狗血。

3, 围观者既可以满足窥私欲,还能满足道德优越感。

所以,捉奸一直是广大人民群众最刺激、最喜闻乐见、最能唤起全民热情的娱乐活动。

易中天曾经说,“捉奸本身就是一台戏。环境是神秘的,人物是真实的,情节是紧张的,动作是惊险的,悬念是强烈的,高潮则是令人兴奋的。既是真人上场,又不用花钱买票,正可谓不看白不看,还可以打着正义道德的旗号,岂有不看之理?”

是啊,也就只有“骂小三”和“骂汉奸”这两件事,最能体现中国人的道德了。

骂得越凶,自己的道德指数就越高。

骂得不给力,就会引来“你是不是也做过小三”、“你是不是也出过轨”的怀疑。

至于当事人的痛苦与隐私如何,谁还去管那些。

NO2

捉奸在中国,历来都是源远流长,历史悠久。

文艺著作中的不说,就说我们亲耳听闻的……

在我们父辈那一代,村子里一旦听见“抓奸去喽”,所有人都会冲出家门,吃饭的放下筷子,拉屎的提起裤子,正在和老婆嘿咻的翻下床,跟着兴奋的大伙们一起跑去看“奸夫淫妇”。

被捉住的男人女人,站在大家面前,衣不遮体,形容狼藉,女的抱胸,男的捂下身,被大家用极其下流的眼光来审视:奶不大,屁股不够翘,看起来操得也不太得劲……

接着便要他们讲偷情细节。

注意,一定要越详细越好,越下流越好……关键之处,还得讲上好几遍。

“这个交代不详细,不老实,重讲!”

“你这什么态度?知不知错?知错就给我把每一个细节都讲出来……”

当然这时候,小孩子是不能站旁边的。但对于大人,却是超强兴奋剂,整整半年的娱乐生活都靠它了。

正像严锋的微博所说的,“从前,我们村没有什么娱乐生活,最让村民兴奋的文化事件是捉奸,那绝对是全村围观,大家快活很多天。”

谁管对错呀,谁管你是不是老公家暴、出轨在先啊,“捉奸”本来就是浓墨重彩的性刺激,旁观者才不关心是非。

NO3

农耕时代的“围观捉奸”,早已经变成了“微博捉奸”。

场合和方式不同,实质却是相同的。

依然是将隐私揪出,供看客娱乐;

依然是多数人暴力;

依然是以一种道德败坏,对抗另一种道德败坏;

依然是将出轨者拉出来游行示众(从前是广场,现在是微博),然后,全民都来骂娘,吐口水,扔破鞋,将他们浸猪笼,挂上“荡妇”、“婊子”、“渣男”的牌子永远踩在脚下。

于是,隔三岔五,微博上就能看到各色捉奸视频,打小三新闻。

年轻的女孩被人当街剥掉衣服,一群人围着抽耳光,踢裸体,一边打,一边骂,那叫一个理直气壮;

旁人呢,纷纷表情复杂地站在一旁,手机拍照,不亦乐乎。

还有一些女人和男人在酒店,忽然闯进一帮人,有的举着手机,有的扑上去扒掉他们的被子和衣物,整个过程杀气腾腾,完全忘记了“你。正。在。违。法”这回事。

别人出轨,跟你是没关系的。

爱人出轨,你要用合法的手段维护权益。

你可以选择离婚,也可以提出损害赔偿。

但是,无论是拍摄证据,还是捉奸,如果使用了违法手段,比如闯入他人住宅或者使用违禁的拍摄设备,或者殴打了他人,有关证据法院可能不予采纳,捉奸者甚至会受到法律的惩罚。

也就是说,出轨的两个人如果反过来告你,你分分钟要背负法律责任。

NO4

捉奸固然有快感,但请你也记得:

1,这是另一种道德败坏。

2,婚姻是一个漫长的双人博弈的过程。不是你一个人努力,就能确保一生安稳。每个人都可能遭遇另外的爱情。每个人都可能踏进雷区。

在出轨率高涨的今天,你或许就是明天的小三,也是明天的出轨男。

今天你辱骂他人的,明天或许就会反诸于身。

NO5

最后讲一个《约翰福音》中的故事。

文士和法利赛人带着一个行淫时被拿的妇人来,叫她站在当中。

对耶稣说:夫子,这妇人是正行淫之时被拿的。摩西在律法上所吩咐我们,把这样的妇人用石头打死。你说该把她怎么样呢?

耶稣弯着腰用指头在地上画字。

他们还是不住的问他。

耶稣就直起腰来,对他们说:“你们中间谁是没有罪的,谁就可以先拿石头打她。”于是又弯着腰用指头在地上画字。

人们听见这话,就从老到少一个一个的都出去了。只剩下耶稣一人,还有那妇人仍然站在当中。

耶稣就直起腰,对她说:妇人,那些人在哪里呢,没有人定你的罪么?

她说:主阿,没有。

耶稣说:我也不定你的罪。去吧,从此不要再犯罪了。

群晖上的Docker是个很好用的功能,本人也使用Docker安装了不少程序,总体来说使用还是很方便的。

但是最近冒出了一个问题:Docker里面的程序如果有新版本了要如何更新呢?

搜罗了一圈百度,结果没找到什么有价值的东西,果然百度一下,什么都不知道。最后还是用Google找到了办法,总结了两个办法:

第一个,笨办法:把下载的镜像删掉,容器也删掉,重新下载,保证是最新的;

第二个,保留容器的设置:首先在群晖的web页面上把docker里需要更新的程序停止,然后用命令docker pull <repo>更新要更新的程序,完事后回到页面上选中该程序后,点击操作->清除,清理里面的数据(事实证明,这一步必须要做,否则会无效),最后启动该容器,里面的程序就会是最新版本的了

在使用群晖自带的Audio Station的时候,发现右下角有均衡器EQ的图标:

但是这个图标….居然是灰色的不能点!

尝试过各种方法,然而并不能开启EQ。明明官网上写的是有的哇!

等等。。USB speakers,USB speakers,USB speakers…….

原来这玩意TMD只能在使用USB speakers的时候才有用啊!

为了确认这点,翻了翻官方的knowledgebase ,然后找到了下面这段:

这回是写的清清楚楚的了,看来除了使用USB speakers以外,EQ均衡器都是无法使用的!

 

一、什么是VHD

VHD 是Microsoft Virtual Hard Disk format(微软虚拟磁盘文件)的简称。可以由Microsoft Virtual PC 2007,Windows VistaWindows 7/8,Hyper-VWindows Server 2008 R2/2012,Microsoft Virtual Server 2005等创建,Virtual BoxVMWare等可以挂载使用。

VHD文件格式可以被压缩成单个文件存放在宿主机器的文件系统上,主要包括虚拟机启动所需系统文件

二、VHD文件类型

VHD虚拟硬盘有固定VHD、动态VHD 、差异VHD和链接硬盘四种类型,我们可以根据自己的实际需求去选择相应的格式,但在Windows7中只有固定VHD和动态VHD两种类型。

  • 固定VHD:对已分配的大小不会更改。
  • 动态VHD:大小与写入的数据大小相同,并随着数据的写入而相应增加直到达到大小上限。动态VHD上限为2,040 GB。
  • 差异 VHD :与动态VHD 类似,但只包含所关联父VHD修改后的磁盘块。差异VHD的上限为2,040 GB。
  • 链接硬盘VHD:文件本身指向一个磁盘或者一个分区。

VHD的优点:

  1. 维护简单:VHD磁盘操作时就跟物理磁盘一样,维护起来较为简单,我们可以对它进行分区、格式化、压缩、删除等等操作,这些操作并不影响物理分区。这种操作更有利于初学者反复试验分区、格式等功能。
  2. 像U盘一样加载自如:当你对VHD分区写入一些重要数据后,并不想他人修改其中的内容时,我们可以随时将此VHD进行脱机或分离操作,在需要的时候再将它附加进来修改。同样可以向U盘一样从“安全删除硬件并弹出媒体”中弹出某个VHD。
  3. 轻松备份:备份时我们仅仅需要将创建的VHD文件进行备份,它所包含的分区中所内容便被统一备份,当然我们也可以用备份工具将VHD文件所在的整个物理分区进行备份,这样不用说VHD分区中的内容也被纳入其中了。(其实Windows7和Windows2008的Backup工具备份产生的主文件也是VHD格式)
  4. 迁移方便:当我们有一个VHD文件需要在多台计算机上使用时,我们只要先将此VHD分离开来,将其复制到目的计算机上,再进行附加上去即可。同时我们可以通过服务器进行分发,使用脚本将其附加到目的机。当然在物理机与虚拟机之间迁移也是没问题的。
  5. 与虚拟机互相通用:Windows7和Windows2008 R2的VHD文件与VPC、Hyper-V的虚拟硬盘是互通的,我们可以将虚拟机中的VHD文件附加到Windows7和Windows2008 R2中。反过来Windows7和Windows2008 R2中的VHD在分离后也可以挂载到VPC和Hyper-V中。
  6. 可直接用于系统部署:我们可以使用Imagex工具将已经捕获的映像释放到此放,或通过WDS服务器部署系统到VHD。
  7. 双重的安全保护:由于VHD创建时产生的是一个存储文件,在这里我们便可以对此文件和VHD的分区进行不同的权限限制,这样即可以对分区读写权限进行设置保证部分人员有往VHD分区中存储数据的权限,也可以对此VHD文件设置读写权限保证此文件在分离后不被他人给删除。

三、什么是VHDX

随着虚拟环境的企业工作负荷的增加以及性能要求的提高,虚拟硬盘 (VHD) 格式需要适应这些变化。Windows Server 2012 中的 Hyper-V 引入了一个新版本的 VHD 格式,称为 VHDX,它在设计上可以处理当前以及将来的工作负荷。
与旧的 VHD 格式相比,VHDX 具有更大的存储容量。它还在电源故障期间提供数据损坏保护并且优化动态磁盘和差异磁盘的结构对齐方式,以防止在新的大型扇区物理磁盘上性能降级。

四、VHDX的特性和功能

VHDX 格式的主要新功能如下:

  • 支持的虚拟硬盘的存储容量高达 64 TB。
  • 通过记录对 VHDX 元数据结构的更新,可以在电源发生故障时保护数据不会被损坏。
  • 改进了虚拟硬盘格式的对齐方式,可在大型扇区磁盘上更好地工作。
VHDX 格式还提供以下功能:
  • 动态磁盘和差异磁盘较大的数据块大小,可让这些磁盘满足工作负荷的需求。
  • 一个 4 KB 的逻辑扇区虚拟磁盘,可以在为 4 KB 扇区设计的应用程序和工作负荷使用该磁盘时提供较高的性能。
  • 能够存储有关用户可能想记录的文件的自定义元数据,如操作系统版本或应用的修补程序。
  • 高效地表示数据(也称为“剪裁”),使文件大小更小并且允许基础物理存储设备回收未使用的空间。(剪裁需要直接连接到虚拟机或 SCSI 磁盘的物理磁盘以及与剪裁兼容的硬件。)

五、兼容性

VHD:Windows XP以及更早的操作系统均不能直接挂载

VHDX:Windows 8 / Windows Server 2012引入了VHDX的格式,Windows 7以及更早的操作系统均不能直接挂载使用

挂载方式:自Windows 8 / Windows Server 2012 系统开始,可以直接双击VHD/VHDX进行挂载。一些第三方软件也提供了挂载VHD/VHDX的功能,如:如何在XP中挂载VHD 

不知道什么是VHD/VHDX的,请移步:VHD/VHDX科普文

固定VHD/VHDX在创建之后就直接在磁盘上占用了该文件设定的大小,性能较好;动态vhd/vhdx文件一开始占用磁盘空间小,但是在长时间写入后会不停的增大。即使你删除了其中的文件,虚拟磁盘文件所占用的磁盘物理空间也不会因此自动释放。本文的目的就是把这些空间释放出来。

注意:VHD/VHDX的磁盘分区格式如果是exFat,那么下面的方法是没有太大效果的!如果是NTFS则基本可以完全释放!(之前建立了一个簇大小是512的exFat分区发现磁盘空间回收不能,随后转用NTFS就可以了)

测试环境:windows 10 1609 x64,以下是详细步骤(参考自:https://linhost.info/2011/01/windows-how-to-compact-a-dynamic-vhd/

1.打开cmd,需要使用管理员权限,调用diskpart命令

diskpart

2.选择要处理的vhd/vhdx文件

select vdisk file="<vhd/vhdx文件的路径>"

3.以只读方式附加这个磁盘

attach vdisk readonly

4.使用压缩命令

compact vdisk

5.压缩完成之后进行分离

detach vdisk

经过上述操作之后,文件理论上就会变小了!

一、一般在代码中的调用,要么通过id找到,要么直接new出来:

①、调用setTextSize(<数值单位>,<值>)

这里的数值单位可以为下列的几种:

TypedValue.COMPLEX_UNIT_PX
TypedValue.COMPLEX_UNIT_DIP
TypedValue.COMPLEX_UNIT_SP

当然还有不常用的,比如

TypedValue.COMPLEX_UNIT_PT

1 .如果直接使用固定的数值,那么该数值的单位则由上述的几种枚举决定,比如:

setTextSize(TypedValue.COMPLEX_UNIT_SP,16);//就是设置为16sp的大小

2 .如果使用资源文件中的数值,那么请注意,数值单位 要设置为 COMPLEX_UNIT_PX,比如:

setTextSize(TypedValue.COMPLEX_UNIT_PX,getResources().getDimensionPixelSize(R.dimen.你的资源);

 原因如下

* 获取dimension的方法有几种,区别不大
* 共同点是都会将dp,sp的单位转为px,px单位的保持不变
*
* getDimension() 返回float
* getDimensionPixelSize 返回int 小数部分四舍五入
* getDimensionPixelOffset 返回int,但是会抹去小数部分

getDimensionPixelSize在要求不高的情况下也可以替换为getDimensionPixelSize或者getDimensionPixelOffset,具体根据业务需求决定

②、调用setTextSize(<Size>):

这个方法不带单位,Doc的描述如下:

Set the default text size to the given value, interpreted as “scaled pixel” units. This size is adjusted based on the current density and user font size preference.

大意就是,Size单位是px且当设置为某个值的时候,最后会乘一个destiny后显示出来

没例子,也不建议用

二、自定义控件中调用:

①、使用paint直接画TextView:

调用paint.setTextSize(<px值>)即可

②、在declare-styleable中定义size,在xml中设置size,代码中通过TypedArray取出来:

这是比较常见的情况,此时通过调用TypedArray的对象调用getDimension,getDimensionPixelSize 或者getDimensionPixelOffset 方法来获取。同样的,返回结果是以px为单位的

然后,同(一)里面的做法,设置大小即可

继续阅读

前几天遇到一个问题,将uint32_t类型的值放到字典里面传递到下一个vc中。就这么个简单的问题,却踩进了坑。

由于之前主攻java,想当然的就将uint32_t转换成NSString然后丢到下一个vc中,然后要使用的时候再转回uint32_t,然后问题就出现了:转回uint32_t后发现数值不正确。

下面是之前的转换方式:

//uint32_t --> NSString
uint32_t a=2373916479;
NSString * aStr=[NSString stringWithFormat:@"%u",a];//这个没毛病,确实变成了字符串
//NSString --> uint32_t
uint32_t b=[aStr intValue];//这句话有问题

通过上面的代码执行后发现a和b的值不一样,惊到我了!

通过查询uint32_t的定义,发现这货就是unsigned int。然后再回来看代码,觉得没问题哇。。。

然后再转念一想,它是无符号的int,直接转数值会有损。于是将最后一句改成:

uint32_t b=[aStr longLongValue];

虽然执行结果正确了,但是xcode提示了一个警告:

Implicit conversion loses integer precision:'long long' to 'uint32_t' (aka 'unsigned int')

虽然能解决问题,但是这个警告实在是看的很不爽,而且实现起来比较暴力。怎样才能更加优雅的解决目前的困扰呢?

搜索了StackOverflow,突然发现可以把uint32_t放到NSNumber中,再放到字典里面,于是:

//uint32_t --> NSNumber
uint32_t a=2373916479;
NSNumber * aNumber=[NSNumber numberWithUnsignedInt:a];//用NSNumber包裹uint32_t,这样就能放到字典中了
//NSNumber --> uint32_t
uint32_t b=[aNumber unsignedIntValue];//结果正确

经过上面的实践之后,总结一下:

  1. 一切都是基础不扎实导致的
  2. uint32_t本质是unsigned int,如果先转化为字符串再用intValue转回来就会有可能出现数据不正确的情况,而且NSString也没有提供unsingedIntValue,所以使用NSString不明智;
  3. NSNumber是一个可以放到字典和数组中的类型。如果需要再字字典或者数组中存放基本数据类型,可以把所需要的基本数据类型转化为NSNumber后再存入