<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Posts on Complex Standalone</title>
    <link>http://lovex.in/posts/</link>
    <description>Recent content in Posts on Complex Standalone</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh-cn</language>
    <lastBuildDate>Tue, 29 Oct 2024 00:00:00 +0000</lastBuildDate><atom:link href="http://lovex.in/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>IIS 静态托管某些文件出现404</title>
      <link>http://lovex.in/posts/763/</link>
      <pubDate>Tue, 29 Oct 2024 00:00:00 +0000</pubDate>
      
      <guid>http://lovex.in/posts/763/</guid>
      <description>需要手动添加 MIME 类型，比如我这里是nupkg无法识别，那就添加 application/zip. 没想到 IIS 不认识的文件就 404. 笑死。</description>
      <content:encoded><![CDATA[<p>需要手动添加 MIME 类型，比如我这里是nupkg无法识别，那就添加 <code>application/zip</code>.</p>
<p>没想到 IIS 不认识的文件就 404. 笑死。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Follow认证</title>
      <link>http://lovex.in/posts/438/</link>
      <pubDate>Mon, 28 Oct 2024 00:00:00 +0000</pubDate>
      
      <guid>http://lovex.in/posts/438/</guid>
      <description>This message is used to verify that this feed (feedId:73640245744633856) belongs to me (userId:61215711186951168). Join me in enjoying the next generation information browser https://follow.is.</description>
      <content:encoded><![CDATA[<p>This message is used to verify that this feed (feedId:73640245744633856) belongs to me (userId:61215711186951168). Join me in enjoying the next generation information browser <a href="https://follow.is">https://follow.is</a>.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Postgres 自增ID不同步造成主键重复错误</title>
      <link>http://lovex.in/posts/503/</link>
      <pubDate>Wed, 05 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>http://lovex.in/posts/503/</guid>
      <description>postgresql 自增 ID 的不同步问题。觉得这个估计是个新手常见问题，开始使用的关键词不对，搜索不到有用结果，后来直接用主键报错就找到答案了。so还是你大爷啊</description>
      <content:encoded><![CDATA[<p>postgresql 自增 ID 的不同步问题。觉得这个估计是个新手常见问题，开始使用的关键词不对，搜索不到有用结果，后来直接用主键报错就找到答案了。so还是你大爷啊。</p>
<p><a href="https://stackoverflow.com/questions/4448340/postgresql-duplicate-key-violates-unique-constraint">https://stackoverflow.com/questions/4448340/postgresql-duplicate-key-violates-unique-constraint</a></p>
<p>简单来说就是，如果设置了自增ID，但是插入的时候直接指定了ID，就很可能导致了数据库内部的自增序列和表实际的最大ID不同步，导致插入新数据时（使用自增ID），出现主键重复的错误。</p>
<p>这里涉及一个问题：如果你完全不懂出现的问题真正的是什么，如果问出有效的问题，快速找到答案？</p>
<p>答案是：尽量使用原始出错信息，直接Google…… 这样简单直接有效。没有测试ChatGPT，估计直接贴错误，也能解答出来，毕竟爬了互联网来训练的。就是不知道，按自己的理解，可能没问到点子上时，她能不能像真正的人类专家一样，快速意会，给出正确解答。回头试试。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>使用powershell远程管理windows服务器</title>
      <link>http://lovex.in/posts/182/</link>
      <pubDate>Thu, 01 Feb 2024 00:00:00 +0000</pubDate>
      
      <guid>http://lovex.in/posts/182/</guid>
      <description>主要使用的是PowerShell Remoting 的功能，需要两台主机都安装有PowerShell。 功能启用 这个在 Windows Server 2012 R2 之后都是默认启用的。Windows</description>
      <content:encoded><![CDATA[<p>主要使用的是PowerShell Remoting 的功能，需要两台主机都安装有PowerShell。</p>
<h2 id="功能启用">功能启用</h2>
<p>这个在 Windows Server 2012 R2 之后都是默认启用的。Windows 10上需要手动开启，管理员权限运行<code>Enable-PSRemoting -Force</code></p>
<h2 id="winrm">WinRM</h2>
<p>Windows Server的PowerShell Remotiong默认使用的是 WinRM 协议。这个协议基于一个开放标准Web Services for Management（简称 WS-Management）。Windows添加这个支持还蛮早，08年提出的，XP都支持。除了Windows，好像没什么人使用这个标准了，毕竟这个是面向Web服务的，而Web服务可以选择的太多了。后面如果说WSMan其实就是WinRM。微软还弄了个Linux上的WSMan，叫作 <a href="https://github.com/Microsoft/omi">Open Management Infrastructure</a>但是看起来已经弃坑了，所以可以认为这项技术是Windows Only了。</p>
<p>WinRM 是基于HTTP或HTTPS的SOAP协议，标准端口是80和443，但是Windows7之后都默认使用5985和5986。</p>
<p>有些PowerShell命令有个ComputerName的参数，可以让命令在远程主机上执行，这些命令使用的是RPC协议。它们和PowerShell Remoting是不同的。这些命令可以使用一下命令查看</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-pwsh" data-lang="pwsh"><span style="display:flex;"><span>Get-Command | Where-Object {
</span></span><span style="display:flex;"><span>     $_.Parameters.Keys <span style="color:#f92672">-contains</span> <span style="color:#e6db74">&#34;ComputerName&#34;</span> <span style="color:#f92672">-and</span>
</span></span><span style="display:flex;"><span>     $_.Parameters.Keys <span style="color:#f92672">-notcontains</span> <span style="color:#e6db74">&#34;Session&#34;</span>
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><h2 id="openssh">OpenSSH</h2>
<p>微软在18年fork了OpenSSH，18年底后的Windows版本（包括Windows Server）都内置了openssh的客户端，但是服务端需要额外启用。PowerShell Remoting 可以使用 ssh 协议连接，这样就跨平台了，比如在macOS或者Linux中来远程Windows服务器。当然如果开启了ssh server，我们也可以直接 ssh 到远程主机了！并不一定需要使用PowerShell的远程功能。</p>
<h2 id="认证">认证</h2>
<p>如果使用主机名来连接，默认使用的是 Kerberos 协议，这个是双向认证的，即也会检查服务器是否可信。</p>
<p>如果使用的是IP或者连到工作组服务器，这个使用使用的是 NTLM。NTLM默认没有启用！所以要么在远程主机上设置SSL，要么在客户端设置信任主机。</p>
<h2 id="信任主机">信任主机</h2>
<p>服务器往往没有配置SSL，NTLM协议无法验证服务器的身份，为了安全，需要在发起端信任远程主机，运行</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-powershell" data-lang="powershell"><span style="display:flex;"><span>Set-Item wsman<span style="color:#960050;background-color:#1e0010">:</span>\localhost\client\trustedhosts *
</span></span><span style="display:flex;"><span>Restart-Service WinRM
</span></span></code></pre></div><p>上面使用了通配符，任何服务器都会信任。</p>
<h2 id="服务器winrm设置">服务器WinRM设置</h2>
<p>Windows Server 上默认启动了winrm服务（Get-Service winrm），但是有服务不一定能工作，需要有listener，也就是能处理WSMan协议报文的服务。</p>
<p>查看当前的监听服务（listener）</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cmd" data-lang="cmd"><span style="display:flex;"><span>winrm enumerate winrm/config/listener
</span></span></code></pre></div><p>查看配置</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cmd" data-lang="cmd"><span style="display:flex;"><span>winrm get winrm/config
</span></span></code></pre></div><p>快速配置</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cmd" data-lang="cmd"><span style="display:flex;"><span>winrm quickconfig
</span></span></code></pre></div><h2 id="测试连接">测试连接</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-pwsh" data-lang="pwsh"><span style="display:flex;"><span>Test-WsMan Server-COMPUTER
</span></span></code></pre></div><h2 id="临时远程运行命令">临时远程运行命令</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-pwsh" data-lang="pwsh"><span style="display:flex;"><span>Invoke-Command -ComputerName Server01,Server02 -ScriptBlock { COMMAND } -credential USERNAME
</span></span></code></pre></div><h2 id="开启远程会话持续运行命令">开启远程会话，持续运行命令</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-pwsh" data-lang="pwsh"><span style="display:flex;"><span>Enter-PSSession -ComputerName COMPUTER -Credential USER
</span></span></code></pre></div><h2 id="创建一个持久的连接">创建一个持久的连接</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-pwsh" data-lang="pwsh"><span style="display:flex;"><span>$s = New-PSSession -ComputerName Server01, Server02
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Invoke-Command -Session $s { powershell-command-run-on-remote }
</span></span></code></pre></div><h2 id="传输文件">传输文件</h2>
<p>利用持久连接，可以使用Copy-Item向或者从远程主机拷贝文件！最大的痛点解决了！</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-pwsh" data-lang="pwsh"><span style="display:flex;"><span>$Session = New-PSSession -ComputerName <span style="color:#e6db74">&#34;Server01&#34;</span> -Credential <span style="color:#e6db74">&#34;Contoso\User01&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Copy-Item <span style="color:#e6db74">&#34;D:\Folder001\test.log&#34;</span> -Destination <span style="color:#e6db74">&#34;C:\Folder001_Copy\&#34;</span> -ToSession $Session
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Copy-Item <span style="color:#e6db74">&#34;C:\MyRemoteData\scripts&#34;</span> -Destination <span style="color:#e6db74">&#34;D:\MyLocalData\&#34;</span> -FromSession $Session
</span></span></code></pre></div><h2 id="其他设置">其他设置</h2>
<p>如果遇到以下错误：
Enter-PSSession: Connecting to remote server x.x.x.x failed with the following error message : WinRM 客户端无法处理该请求。如果身份验证方案与 Kerberos 不同，或者客户端计算机未加入到域中， 则必须使用 HTTPS 传输或者必须将目标计算机添加到 TrustedHosts 配置设置。 使用 winrm.cmd 配置 TrustedHosts。请注意，TrustedHosts 列表中的计算机可能未经过身份验证。 通过运行以下命令可获得有关此内容的更多信息: winrm help config。 For more information, see the about_Remote_Troubleshooting Help topic.</p>
<p>使用<code>winrm quickconfig -transport:https</code>转换传输协议，然后确保设置对信任主机即可。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>使用Rime输入法</title>
      <link>http://lovex.in/posts/358/</link>
      <pubDate>Mon, 27 Nov 2023 00:00:00 +0000</pubDate>
      
      <guid>http://lovex.in/posts/358/</guid>
      <description>一般来讲，我现在是直接使用系统自带的输入法的。然后由于使用了小鹤双拼，除了苹果平台默认的双拼里有这个输入方案外，其他都需要配置一番。但是新版</description>
      <content:encoded><![CDATA[<p>一般来讲，我现在是直接使用系统自带的输入法的。然后由于使用了小鹤双拼，除了苹果平台默认的双拼里有这个输入方案外，其他都需要配置一番。但是新版macOS的中文输入体验着实不佳，而且卡顿之bug不绝于耳。于是，最终还是需要三方输入法。我的三方输入法选择只有<a href="https://rime.im">rime</a>。</p>
<p>rime 以折腾出名，但是我还是想在5分钟内完成设定和切换。</p>
<h2 id="安装">安装</h2>
<p>打开官网，开始安装。我使用brew来管理软件包，自然希望rime也能方便用brew来安装，然后打开官网，这个命令不是那么显著。
<code>brew install --cask squirrel</code>
注意必须要有&ndash;cask，否则就会安装成另外一个包了。安装过程需要sudo权限，因为这里安装了一个pkg</p>
<h2 id="切换输入源头">切换输入源头</h2>
<p>这点，官方的文档却没有说明。安装完成后，直接F4，显然是无法自动切换为鼠须管的（rime的macOS版本的名称）。</p>
<p>在macOS的输入法设置里添加。然后现在苹果的系统bug太多，打开之后没有找到，重启之后竟然直接空白，点击其他语言，再切回简体中文，终于看到了鼠须管的名字，搞定。</p>
<h2 id="使用开箱即用的配置">使用开箱即用的配置</h2>
<p>快递浏览了一下rime文档，发现没有双拼具体的配置说明，只好google一下，为了再避免配置词库之类的，
这里我选择了 <a href="https://github.com/iDvel/rime-ice">https://github.com/iDvel/rime-ice</a> 包含全拼和其他双拼方案，开箱即用，直接下载复制到设定目录即可！</p>
<h2 id="重新部署">重新部署</h2>
<p>这个在鼠须管的配置菜单里，修改了配置文件，记得点一下就好了。</p>
<p>整个过程果然无法5分钟完成哈哈，一来rime文档还需完善，二来果子的bug也是烦人，本来还想直接参照文档来自己快速配置的…… 还有rime配置竟然不支持yml扩展名？ :fearful:</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Quote</title>
      <link>http://lovex.in/posts/860/</link>
      <pubDate>Mon, 20 Nov 2023 00:00:00 +0000</pubDate>
      
      <guid>http://lovex.in/posts/860/</guid>
      <description>人永远都无法知道自己该要什么，因为人只能活一次，既不能拿它跟前世相比，也不能在来生加以修正。没有任何方法可以检验哪种抉择是好的，因为不存在任</description>
      <content:encoded><![CDATA[<p>人永远都无法知道自己该要什么，因为人只能活一次，既不能拿它跟前世相比，也不能在来生加以修正。没有任何方法可以检验哪种抉择是好的，因为不存在任何比较。一切都是马上经历，仅此一次，不能准备。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>自动令牌身份验证</title>
      <link>http://lovex.in/posts/145/</link>
      <pubDate>Thu, 16 Nov 2023 00:00:00 +0000</pubDate>
      
      <guid>http://lovex.in/posts/145/</guid>
      <description>Github Actions 支持使用 secrets.GITHUB_TOKEN这个环境变量来获取，更加安全方便。不过有些限制，比如默认的权限范围，具体参考：https</description>
      <content:encoded><![CDATA[<p>Github Actions 支持使用<code> secrets.GITHUB_TOKEN</code>这个环境变量来获取，更加安全方便。不过有些限制，比如默认的权限范围，具体参考：https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>碎碎念</title>
      <link>http://lovex.in/posts/367/</link>
      <pubDate>Wed, 22 Mar 2023 00:00:00 +0000</pubDate>
      
      <guid>http://lovex.in/posts/367/</guid>
      <description>开一个碎碎念专用楼。</description>
      <content:encoded><![CDATA[<p>开一个碎碎念专用楼。</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>2023新的开端</title>
      <link>http://lovex.in/posts/279/</link>
      <pubDate>Wed, 04 Jan 2023 00:00:00 +0000</pubDate>
      
      <guid>http://lovex.in/posts/279/</guid>
      <description>2023 年已经过去 1% 了。 从如何最小心智负担的重新开始写博客、记笔记开始吧。 心智负担这东西对每个人自然是不同定义的。对于一个主要做技术的人来说，能快</description>
      <content:encoded><![CDATA[<p>2023 年已经过去 1% 了。</p>
<p>从如何最小心智负担的重新开始写博客、记笔记开始吧。</p>
<p>心智负担这东西对每个人自然是不同定义的。对于一个主要做技术的人来说，能快速想到的，不用在静态网站生成器、博客系统、主题上纠结花时间的方式，大概就是直接用 github 本身来做。没错，我的博客心智负担是什么，可能不是没有东西可写之类的，反正是产生的可能都是垃圾，也不想着给人看的那种，那么开始动手写的意义，大于其他的一切。</p>
<p>写东西的负担没用了，那么下面就是在开始的时候，不想再去管服务器，各种程序、主题配置，命令行操作之类的。独立域名这个其实也没那么重要，一般域名都会有，绑域名后面真想的时候也不迟。一些付费或者免费的服务自然是最方便的，自己觉得靠谱的也一直有，比如 Wordpress、typlog等，但是，还是想写的东西自己可控一些，同时目前不想花钱。</p>
<p>github 拥有以下优点：</p>
<ol>
<li>使用 issues 或者 discussion 自带好用的markdown编辑器</li>
<li>随时随地打开即可开始写</li>
<li>github actions 可以方便的自动化发布，如果有发布需求</li>
<li>有标签系统</li>
<li>天然自带评论</li>
<li>不管放不放git里，都有了备份（推荐git里存一份）</li>
<li>丰富的api可以做很多事情</li>
</ol>
<p>使用这个来做记录的非常多，各种玩法基本都是现成的，可以直接拿来用，比较有名的像是yihong，把github玩出花来了。没有了传统独立博客、rss 之类的洁癖，一切都简单了。<strong>最最重要的只要一个，那就是开始并坚持写下去</strong>。</p>
<p>所以这个博客要写些什么？还是秉承低心智负担的原则，开始是从0到1，最最重要，后面就是无数的迭代，一切都是从混沌混乱中建立起来的，不用去模仿别人，不用有完美主义的想法。</p>
<p>先记下最初在脑海中的一些点：</p>
<ol>
<li>主要以技术笔记为主，碎碎念和吐槽要控制，只当作思考和写作练习来用</li>
<li>可以是每天发现的几个重点，网上看到的好东西或者一些反思总结</li>
<li>尽量达到一定的深度，没有也没关系，当作学习过程的记录，毕竟时间、精力和能力有限</li>
<li>但是有时间还是尽量达到可供分享的正式品的程度，形成稳定的风格</li>
</ol>
<p>今天的一些sparkles:</p>
<ul>
<li><input checked="" disabled="" type="checkbox"> 博客可以作为C#、dotnet技术的深入学习笔记</li>
<li><input disabled="" type="checkbox"> Task.Run 的进程池不稳定可能销毁重建比较耗时？验证这一点</li>
<li><input disabled="" type="checkbox"> jetbrain 家有免费的 resharper command line tools</li>
<li><input disabled="" type="checkbox"> zerotier 其实有官方的 knowledge base 里面有如何添加路由访问局域网的，下午在bing上搜还多试了一直不行……经验教训特别大</li>
<li><input disabled="" type="checkbox"> 感觉以上需求或许 logseq 之类的比较合适，最后再整理发布出去，但是不会多机合并、github同步、自动发布之类的，所以现在也是心智负担，想快点开始，那么这个作为后续要去做的要点</li>
<li><input disabled="" type="checkbox"> <a href="https://github.com/bflattened/bflat">https://github.com/bflattened/bflat</a> 这个很cool</li>
<li><input disabled="" type="checkbox"> 新本子上总需要配置各种东西，总结一篇《我的Windows配置》，如果同步配置或者自动快速配好一台新机器，这个没好好想过</li>
</ul>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
