存档

‘一句话’ 分类的存档

apt-get -f install执行之后错误,python配置出错

2020年6月16日 没有评论

这几天在尝试在ARM上安装python3,是各种麻烦的很。突然发现apt-get install后各种报错,郁闷之极。

现在回头再检查,应该就是当初运行了 apt-get -f install 命令导致的。

因为是安装各种软件都有这个问题,所以影响很大,内心恨不得要把系统给重装了才对。在网上各种检索都不对,后来无意间终于发现了一个方法

亲测有效。但是不知道原因。

cd /var/lib/dpkg  
sudo mv info info.bak  
sudo mkdir info

就这么简单的几行代码,解决了问题。

现在要做的就是回想当初遗漏了哪些命令。

分类: Firefly, 一句话 标签:

根据进程获取 UWP 的包信息

2020年5月15日 没有评论

最近的一个实验项目,要监控UWP程序的启动。发现了一个比较简单的方式是使用 WMI,当有新的进程被创建时,就可以收到一个消息回调,这样的方式比不断地去轮询要优雅和有效率的多。

但是我们的目标UWP,是采用 WinJS开发的,这样会带来一个问题。就是在进程列表里,它是托管在一个叫做 wwahost.exe 的进程里的。如果有多个类似的程序的话,我们无法简单地区分出来。

所以我们需要进一步获取详细信息以便做过滤,幸好微软提供了配套的东西。我们可以使用一个叫做 UserModelId的东西来对不同的UWP程序做区分。下面是来自微软官方的实例代码(https://docs.microsoft.com/zh-cn/windows/win32/api/appmodel/nf-appmodel-getapplicationusermodelid)。

#define _UNICODE 1
#define UNICODE 1

#include <Windows.h>
#include <appmodel.h>
#include <malloc.h>
#include <stdlib.h>
#include <stdio.h>

int ShowUsage();
void ShowProcessApplicationUserModelId(__in const UINT32 pid, __in HANDLE process);

int ShowUsage()
{
    wprintf(L"Usage: GetApplicationUserModelId <pid> [<pid>...]\n");
    return 1;
}

int __cdecl wmain(__in int argc, __in_ecount(argc) WCHAR * argv[])
{
    if (argc <= 1)
        return ShowUsage();

    for (int i=1; i<argc; ++i)
    {
        UINT32 pid = wcstoul(argv[i], NULL, 10);
        if (pid > 0)
        {
            HANDLE process = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, pid);
            if (process == NULL)
                wprintf(L"Error %d in OpenProcess (pid=%u)\n", GetLastError(), pid);
            else
            {
                ShowProcessApplicationUserModelId(pid, process);
                CloseHandle(process);
            }
        }
    }
    return 0;
}

void ShowProcessApplicationUserModelId(__in const UINT32 pid, __in HANDLE process)
{
    wprintf(L"Process %u (handle=%p)\n", pid, process);

    UINT32 length = 0;
    LONG rc = GetApplicationUserModelId(process, &length, NULL);
    if (rc != ERROR_INSUFFICIENT_BUFFER)
    {
        if (rc == APPMODEL_ERROR_NO_APPLICATION)
            wprintf(L"Desktop application\n");
        else
            wprintf(L"Error %d in GetApplicationUserModelId\n", rc);
        return;
    }

    PWSTR fullName = (PWSTR) malloc(length * sizeof(*fullName));
    if (fullName == NULL)
    {
        wprintf(L"Error allocating memory\n");
        return;
    }

    rc = GetApplicationUserModelId(process, &length, fullName);
    if (rc != ERROR_SUCCESS)
        wprintf(L"Error %d retrieving ApplicationUserModelId\n", rc);
    else
        wprintf(L"%s\n", fullName);

    free(fullName);
}

整体的代码比较简单,没有什么特别好说的。代码中一共调用了2次GetApplicationUserModelId方法,第一次是为了计算数据的长度,然后第二次根据数据长度重新请求以得到最终的数据。

这就是我为什么讨厌C++的原因,把指针的操作搞这么恶心。

在代码验证后,又发现了另外一个API:IsImmersiveProcess ,通过该函数可以简单地判断一个进程是否是Store类型的程序,在有的场合例如唯一性校验上还是有帮助的。有兴趣可以移步 https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-isimmersiveprocess

分类: C++, 一句话, 日常 标签: , ,

由于管理员设置的策略,该磁盘处于脱机状态

2020年4月15日 没有评论

服务器在安装了一次系统更新后,数据盘不见了。跑到后台看磁盘还在,于是进磁盘管理看,可以看到那块磁盘,但是未加载。提示由于管理员设置的策略,该磁盘处于脱机状态。

按照网上的说法,非常忐忑低执行了操作,担心数据一下子没有了。后来成功加载回来了,数据没有丢失。

1.运行:cmd
2.输入:diskpart 回车进入diskpart命令行
3.DISKPART> san
4.DISKPART> san policy=onlineall
5.DISKPART>list disk
6.DISKPART> select disk 1
7.DISKPART>attributes disk clear readonly
8.DISKPART>online disk

分类: 一句话, 日常 标签:

正式在家远程办公

2020年3月12日 没有评论

节前放假的时候,忘记带电源线,没有想到这个就是噩梦的开始哇。

由于疫情的影响,又是封城,结果一直买不到电源线。直到最近,各个省市逐渐复工,快递才开始工作。

终于收到了电源线。

可以干活了,可以当键盘侠了。

分类: 一句话, 日常 标签:

npm 镜像源管理

2020年2月12日 没有评论

最近的项目使用了 nodejs,有时候在安装 npm 包时,下载速度那个捉急哇。

尝试了搜索下,果然发现了淘宝的镜像源,果断换之。

首先,查看当前的 npm 源地址,输入 npm config list

不出意外的话,可以看到输出里包含这样的结果:metrics-registry = “http://registry.npm.nodejs.org/”

我们改为淘宝的镜像:npm set registry https://registry.npm.taobao.org/

后来再安装 npm 包就很快了,这点还是要谢谢阿里的同学。

如果有一天,各位肉身到了国外,用不上了,就可以使用 rm 命令删除掉: npm config rm registry

祝各位前程似锦。

分类: 一句话, 日常 标签: ,

Windows Server 2012 修改默认远程桌面端口

2020年1月12日 没有评论

众所周知,windows 远程桌面默认的端口号是3389,随着现在网络安全环境的恶劣,远程桌面已经很不安全了。修改默认的端口号可以略微的过滤下低级的黑客。

最简单的方式是修改注册表,一共需要修改2个地方地方。

HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control/Terminal Server/WinStations/RDP-Tcp找到下面的 “PortNumber”,用十进制方式显示,默认为3389,改为任意可用端口。

HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Terminal Server/Wds/rdpwd/Tds/tcp找到下面的 “PortNumber”,用十进制方式显示,并做出修改。

这2个端口号要是一样的。

最后一步,找开 windows 防火墙高级管理,添加入站规则,允许刚才设定的端口号。这里一定不要忘记了,不然就登不上去了。

重启服务器后就可以使用新的配置登录了。

分类: 一句话 标签:

win10 删除用户账户历史头像

2019年12月2日 没有评论

以前一直没有修改过系统默认的图像,前几天为了测试 IR Camera 不经意间随手换了个图像,结果发现图像无法删除。

于是就想找到存放的地方去删除,经过一番搜索,发现路径在 C:\Users[User Name]\AppData\Roaming\Microsoft\Windows\AccountPictures,需要留意的是,对于中文系统,AccountPictures 文件夹名字叫做“用户图像”。

进入该文件夹后,就可以看到所有的历史图像了,根据需要删除文件即可。

分类: 一句话 标签:

Ubuntu 安装SSR

2019年10月11日 没有评论

先前在 Vultr上安装的是 SS,貌似状态不好,时好时坏。

后来无意间看到一个免费的 SSR 服务,虽然时不时地更新端口什么的,好在可以及时地感知更新,因为我专门写了一个python脚本实现自动化,斗智斗勇的过程中也学了基本知识。平时就用来搜索下开发相关的文章什么的,一时倒还蛮好的。

唯一的不顺的地方就是,该服务禁止下载大文件,也不知道是如何做到的。导致我从Google Drive里无法下载一些机器学习相关的数据集什么的。

只好回过头来,在服务器上搭建自己的SSR,借此来做文件中转。

我选择了别人提供的最简单的方式:一键安装脚本。

wget -N –no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/ssr.sh && chmod +x ssr.sh && bash ssr.sh

后续的步骤就不用写了,都是中文提示,基本上使用默认配置就可以了。

分类: 一句话 标签:

Angular 的 base 文件路径

2019年9月18日 没有评论

在最近的Angular 项目中,由于需求变多,按照过去的流程,资源协调无法全部满足。所以就决定按照功能先打版本测试下,等逐渐稳定后再安装时间点合到主分支上。这就要求我们可以并行支持多个部署。

最简单的一个方式就是在原来的服务器目录下创建子目录,客户端根据不同的功能访问不同的版本目录。

实际操作后,发现有些资源无法显示,原因在于路径不对。网上检索了下,均提示使用 base-href 参数来打包。

调用后发现还是无法满足要求,最后换了个写法 ng build –base-href ./voip/../,跳到子目录里再跳出来,是不是很傻X,但是有效果诶。

分类: 一句话 标签:

下载 Google Drive 文件

2019年9月11日 没有评论

最近在跟进一些和机器学习相关的事情,就觉得自己的数学知识实在是太渣了,有一些还给了老师,剩余的部分不够用。

诶哟喂,这个公式怎么就推导出这个结论了?

扯远了,有一些数据集是放在墙外的,要下载回来就颇费点功夫了。因为我用的梯子是免费的,服务器后端貌似做了些限制,导致在下载大文件的时候无法成功下载。

有的模型或者数据就放在别人的Google Drive里,中转到自己的空间里就想着怎么可以下载回来。

在网上发现了一个工具 Gdrive,是命令行方式的,虽然官方说不再支持了,但是看起来似乎够简洁。

首先,去 https://github.com/gdrive-org/gdrive/releases 下载和自己系统对应的版本,然后给移动到 /usr/bin 下 ,为其添加执行权限, chmod +x /usr/bin/gdrive 。

首先运行 gdrive about 命令,会显示一个链接地址,该地址即为验证链接,复制地址,在浏览器里打开(这里需要翻墙),登录成功,给予gdrive 访问权限后,浏览器界面里会显示一串字符。

复制该字符,然后粘贴到命令行里,回车。如果会显示云盘的大体信息时,就表明前置依赖都已经配置好了。

后面就很简单了,都是常用命令:

gdrive list 显示根目录下的文件夹和文件

gdrive upload xxx 上传文件到云盘里

gdrive download xxx 下载文件或者文件夹到本地

gdrive mkdir xxx 创建目录

我这里试了一下,貌似通过别人分享的内容,使用 list 参数是没有列出来的。这意味着白折腾了,囧。

分类: 一句话, 日常 标签: