群晖上的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

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

以前由于Google被墙导致Google字体不能顺利访问导致网站访问慢,将其替换成了国内360提供的前端公共字体库,访问速度嗖嗖的。

但是现在打开网站的时候速度又变慢了,查看了一下,原来是一直在等待360的前端公共字体库的相应,心想这肯定不正常

然后找到了这篇360公告:

感谢您一直以来给予网站卫士前端公共库的支持与厚爱!由于我们业务发展方向上的调整,经过网站卫士团队的考量协商,我们怀着万分遗憾的心情宣布网站卫士前端公共库从即日起停止提供服务。

已经使用网站卫士前端公共库的网站,需要将“常用前端公共库”所调用的资源转移至您的网站本地存储,我们的网站卫士服务将继续给您提供缓存加速服务。

使用网站卫士“Google公共库”或者“Google字体库”的网站,请替换我们的URL,直接调用谷歌官网URL即可。

我们会继续努力,为网站卫士的用户免费提供更优秀的网站安全防护与加速服务!

360网站卫士团队

解决办法:把改成fonts.useso.com的还原成fonts.googleapis.com 或者直接使用本地资源

前不久遇到了一个极光推送的问题,java后台在进行消息推送的时候,安卓这边会同时收到通知和自定义消息,当时搞得很郁闷。

后来java后台发现了问题所在:

qq20160811

如此就能解决同时推送通知和自定义消息的问题了!

 

由于伟大的gfw的干涉,原来挂靠在日本樱花的博客已经很难打开了,于是这次决定搬家了!

这次搬家到了香港,又回到了博客最初诞生的地方,想想也挺唏嘘的

support-v4中的fragment在现在看来显得有些老旧,因为现在的手机绝大部分都是4.X系统以上了,所以v4包中的fragment其实可以甩掉了。本文教你如何从v4包的fragment转换到原生fragment

首先你要确定一件事情——你想要你的app兼容到哪个系统。如果你想放弃过时的2.X系统,那么就请继续往下看吧

从v4的fragment转换到原生的fragment其实并不困难,有几点需要注意:

1)导入的包:

请将android.support.v4.app.fragment替换为android.app.fragment;

同样的,FragmentManager请替换为android.app.FragmentManager,以及FragmentTransaction

2)修改Activity:

一般情况下继承AppCompatActivity即可,这个也是AS默认的Activity继承类

3)如果使用了viewpager的话,请不要改动viewpager的引用

4)调用viewpager的setAdapter方法的时候,需要实现一个继承于android.support.v13.app.FragmentStatePagerAdapter的适配器,而这个类的引用方式需要引入v13的包:

compile ‘com.android.support:support-v13:23.3.0’

基本就是以上注意点,除此之外的用法均和support-v4中的一致。如果还有其他注意要点的话我会继续补充~

一句命令解决问题:

电脑端有adb的话

adb shell settings put global captive_portal_server g.cn

手机上操作的话需要有root,拿到手机的shell后

su

settings put global captive_portal_server g.cn

然后重启下手机

从此能正常使用的网络不会再跳出登录到XXX网络的烦人提示了,除了一些需要登录的免费热点

===============================================

2016年9月15日更新:

手机刷了Android 7.0 后发现此方法失效!7.0系统请移步:Android 7.X 去掉网络感叹号 

 

公司给配了一台Dell Inspiron  3558用于外出办公。由于工作需求又安装了Ubuntu 14.04,结果发现就触摸板没反应。为了能把触摸板用起来,找了很多方法都不奏效,最后在Google上找到这么个解决方案:

参考地址:http://askubuntu.com/questions/592925/dell-inspiron-3551-unresponsive-touchpad

主要思路是关闭i2c_hid并且在启动的时候加入nopnp参数(i2c_hid是啥我也没搞明白)

首先:sudo gedit /etc/default/grub

然后再gedit里面找到这么一行:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

把它改成:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash i8042.nopnp"
保存后执行:
sudo update-grub
然后再运行这4条语句:

echo "blacklist i2c_hid" | sudo tee /etc/modprobe.d/i2c-hid.conf
sudo depmod -a
sudo update-initramfs -u
echo "synaptics_i2c" | sudo tee -a /etc/modules

重启,然后就能发现触摸板居然能用了!

再贴一下英文原文:

 

You can fix it by switching off i2c_hid and setting nopnp in boot parameters this way

  1. Run

sudo gedit /etc/default/grub

In the open window edit line

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

it should look this way

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash i8042.nopnp"

Save file and run

sudo update-grub
  1. Run
    echo "blacklist i2c_hid" | sudo tee /etc/modprobe.d/i2c-hid.conf
    sudo depmod -a
    sudo update-initramfs -u
    echo "synaptics_i2c" | sudo tee -a /etc/modules
    
  2. Reboot.