<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ginkov的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ginkov</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ginkov]]></copyright><item><title><![CDATA[Windows Terminal Solarized Dark 配色方案调整]]></title><link>https://blog.youkuaiyun.com/ginkov/article/details/144130209</link><guid>https://blog.youkuaiyun.com/ginkov/article/details/144130209</guid><author>ginkov</author><pubDate>Fri, 29 Nov 2024 11:06:06 +0800</pubDate><description><![CDATA[Widnows 10/11 下面自带的 Terminal 还是比较方便的，因为不需要安装额外的 Terminal 软件。我喜欢 Solarized Dark 配色方案，虽然有人批评这个配色方案比较老，但我觉得它比较优雅，尤其对外这种眼神比较差的人，比较友好。但是，Windows 10/11 自带的 Solarized Dark 配色方案，在访问 Linux 时有问题。一些颜色不能正确地显示。如何调整它，能显示出正确的颜色？]]></description><category></category></item><item><title><![CDATA[Dockerfile 中关于 RUN 的奇怪写法 -- 以 | 开头]]></title><link>https://blog.youkuaiyun.com/ginkov/article/details/143145281</link><guid>https://blog.youkuaiyun.com/ginkov/article/details/143145281</guid><author>ginkov</author><pubDate>Tue, 22 Oct 2024 11:44:44 +0800</pubDate><description><![CDATA[所以这里提到了一个概念：YAML pip opertor 及其 strip chomping indicator。这是一个很奇怪的写法，查了一下 Linux Shell 也没有以 “!代表 “保留所有换行，并缩进三格”。在一个大型的官方镜像中 ，我通过。代表下方各行的缩进列数。]]></description><category></category></item><item><title><![CDATA[Dockerfile 中，把多个 RUN 合并在一起，能减少镜像尺寸吗?]]></title><link>https://blog.youkuaiyun.com/ginkov/article/details/142980920</link><guid>https://blog.youkuaiyun.com/ginkov/article/details/142980920</guid><author>ginkov</author><pubDate>Wed, 16 Oct 2024 15:07:07 +0800</pubDate><description><![CDATA[可以看到，pip 安装的这些包，总大小应该在 350MB 左右，加上 python-alpine 原来46MB 的大小，整好是在 396 MB。最理想的结果，是打包出来的镜像（起名为 temp:add_remove)，大小和 alpine 差不多，也应该是 7.8MB 左右的样子。如果两个动作如果没有重叠，就像用多个 pip install 不同的包，产生的多层和合在一个 pip 安装产生的一层的大小差不多。但是，对于先添加，又删除，添加的那层文件始终是在的，只是之后又被删除动作在新的一层上标记为删除。]]></description><category></category></item><item><title><![CDATA[windows 下 Docker 踩坑]]></title><link>https://blog.youkuaiyun.com/ginkov/article/details/142824860</link><guid>https://blog.youkuaiyun.com/ginkov/article/details/142824860</guid><author>ginkov</author><pubDate>Thu, 10 Oct 2024 16:54:23 +0800</pubDate><description><![CDATA[我的开发机是 Windows 11。Windows 早就支持 WSL，也有 Hyper-V 的虚拟化解决方案，当然也能跑 Docker。不过，我对 Docker 不熟悉，踩了不少坑。]]></description><category></category></item><item><title><![CDATA[使用Go (或者 Python) 执行外部命令，直接模式和 Shell模式的区别]]></title><link>https://blog.youkuaiyun.com/ginkov/article/details/141857910</link><guid>https://blog.youkuaiyun.com/ginkov/article/details/141857910</guid><author>ginkov</author><pubDate>Tue, 03 Sep 2024 20:47:04 +0800</pubDate><description><![CDATA[Go 执行外部命令的两种方式]]></description><category></category></item><item><title><![CDATA[解决 Django + Gunicorn + Nginx 的 ”upstream prematurely closed connection while reading response“ 问题]]></title><link>https://blog.youkuaiyun.com/ginkov/article/details/128534221</link><guid>https://blog.youkuaiyun.com/ginkov/article/details/128534221</guid><author>ginkov</author><pubDate>Tue, 03 Jan 2023 15:45:13 +0800</pubDate><description><![CDATA[解决 Django + Gunicorn + Nginx 环境下的  upstream premeaturely closed 问题]]></description><category></category></item><item><title><![CDATA[REST API设计最佳实践]]></title><link>https://blog.youkuaiyun.com/ginkov/article/details/125658222</link><guid>https://blog.youkuaiyun.com/ginkov/article/details/125658222</guid><author>ginkov</author><pubDate>Thu, 07 Jul 2022 14:27:53 +0800</pubDate><description><![CDATA[REST API 设计最佳实践]]></description><category></category></item><item><title><![CDATA[Docker compose up -d 与 Docker restart 的区别]]></title><link>https://blog.youkuaiyun.com/ginkov/article/details/125652878</link><guid>https://blog.youkuaiyun.com/ginkov/article/details/125652878</guid><author>ginkov</author><pubDate>Thu, 07 Jul 2022 11:10:32 +0800</pubDate><description><![CDATA[在现场修改 docker 容器的代码或配置时，docker-compose up -d 和 docker restart 的区别。]]></description><category></category></item><item><title><![CDATA[Hibernate 自动生成 表结构的坑]]></title><link>https://blog.youkuaiyun.com/ginkov/article/details/90484637</link><guid>https://blog.youkuaiyun.com/ginkov/article/details/90484637</guid><author>ginkov</author><pubDate>Thu, 23 May 2019 17:31:08 +0800</pubDate><description><![CDATA[Hibernate 经过配置，可以自动生成表结构，非常方便。
但在过程中，我遇到了几个坑。
不能生成外键的问题
标注了 @ManyToOne + @JoinColumn，但生成的表却不带 Foreign Key! 真是奇怪
后来发现，是 Hibernate 用的 MySQL 的 Dialect 问题。要用 MySQL 5.5 以上的 InnoDBDialect 也管用
换了 Dialect，立即就...]]></description><category></category></item><item><title><![CDATA[Hibernate ManyToOne Bidirectional JoinTable 的一个大坑]]></title><link>https://blog.youkuaiyun.com/ginkov/article/details/89957216</link><guid>https://blog.youkuaiyun.com/ginkov/article/details/89957216</guid><author>ginkov</author><pubDate>Wed, 08 May 2019 15:50:19 +0800</pubDate><description><![CDATA[背景
由于对象设计的关系，我愚蠢地用了多级继承。在持久化的时候，还用了 PerClass Join 的方式。这下子惹了麻烦。最底层的表要往上 Join 很多次才能形成完整的数据，如果同处于较底层的两个表 Join，就费死劲了，有一次还突破了 MySQL 61 层 Join 的限制。非常槽糕。
问题
由于我不想通过  ManyToOne - JoinColumn / OneToMany - Mapp...]]></description><category></category></item><item><title><![CDATA[BLOB 还是文件?]]></title><link>https://blog.youkuaiyun.com/ginkov/article/details/89155477</link><guid>https://blog.youkuaiyun.com/ginkov/article/details/89155477</guid><author>ginkov</author><pubDate>Tue, 09 Apr 2019 17:16:42 +0800</pubDate><description><![CDATA[我们在设计系统时，有时候需要保存一些二进制格式的文件。
最常见的是：

小图片
大段文本（比如交换机配置）

经过思考，我的建议是：
如果要保存的文件都不大，比如 2MB 以内，就使用 BLOB
原因是，用 BLOB 统一放在数据库里，容易备份，容易迁移。
而因为文件不大，不会对数据库造成太大压力。
反之，就要考虑文件系统了。

...]]></description><category></category></item><item><title><![CDATA[JPA CascadeType.ALL 的坑]]></title><link>https://blog.youkuaiyun.com/ginkov/article/details/89099025</link><guid>https://blog.youkuaiyun.com/ginkov/article/details/89099025</guid><author>ginkov</author><pubDate>Mon, 08 Apr 2019 17:49:28 +0800</pubDate><description><![CDATA[今天遇到了一个 JPA cascadeType 不管用的问题，折腾了半天。
现象：
一个 Server 对象， ManyToOne Unidirectional 包含了 OS 对象。
但是保存 Server 对象时， CascadeType.PERSIST 不管用。非得用 CascadeType.ALL 才行。
可是我又不想用 CascadeType.ALL， 因为里面也含有 CascadeTyp...]]></description><category></category></item><item><title><![CDATA[Windows 环境下，通过 Putty 配置SSH免认证登录]]></title><link>https://blog.youkuaiyun.com/ginkov/article/details/80505040</link><guid>https://blog.youkuaiyun.com/ginkov/article/details/80505040</guid><author>ginkov</author><pubDate>Wed, 30 May 2018 09:14:49 +0800</pubDate><description><![CDATA[这篇文章写得比较清楚，按照它做，也能配通。 
http://www.jb51.net/LINUXjishu/33586.html 
要点是：


使用 puttykeygen.exe 生成密钥。 
缺省是 RSA 2048 位。 
点击保存私钥(可以不设置密码保护),不要生成公钥,因为PUTTY生成的公钥OpenSSH无法使用.
SSH密码方式登入远端Linux服务器/VPS,创建.ssh/aut...]]></description><category></category></item><item><title><![CDATA[学习 Docker]]></title><link>https://blog.youkuaiyun.com/ginkov/article/details/80497439</link><guid>https://blog.youkuaiyun.com/ginkov/article/details/80497439</guid><author>ginkov</author><pubDate>Tue, 29 May 2018 15:46:52 +0800</pubDate><description><![CDATA[今天看了一下 Docker 的内容。感觉它是把一系列的应用组件容器化。比如，容器化的 MySQL，容器化的 Tomcat，容器化的 Httpd。



轻量+隔离 = 组件级的虚拟机 –&amp;gt; 快速部署

好处是，隔离。比如，在一台服务器上，你如果没有 Docker，通常你只能部署一个 MySQL 的实例。但是，有了 Docker，你可以起多个 MySQL 的实例。 
这样，部署起来就灵活得多，...]]></description><category></category></item><item><title><![CDATA[MVC 架构-业务逻辑写在哪儿]]></title><link>https://blog.youkuaiyun.com/ginkov/article/details/79961203</link><guid>https://blog.youkuaiyun.com/ginkov/article/details/79961203</guid><author>ginkov</author><pubDate>Mon, 16 Apr 2018 15:25:50 +0800</pubDate><description><![CDATA[问题

之前自己写乱写的时候，总是把业务逻辑写在 Controller 里面。 
也看到有人说，要把逻辑放在 DAO 之上的 Service 层。 
在最近的一个小项目中，发现逻辑稍微复杂一点儿，把业务逻辑放在 Controller 里面就不可维护了。

感觉又象是回到了以前过程式的编程，一点儿面向对象的味道都没有了。 
那么，到底在哪些写业务逻辑?



解决

在 SO上查了一查，发现大家都建...]]></description><category></category></item><item><title><![CDATA[Mac Homebrew 管理服务]]></title><link>https://blog.youkuaiyun.com/ginkov/article/details/79368713</link><guid>https://blog.youkuaiyun.com/ginkov/article/details/79368713</guid><author>ginkov</author><pubDate>Sun, 25 Feb 2018 14:34:45 +0800</pubDate><description><![CDATA[在 Centos 下，用 systemctl 启停服务非常方便。 
而在 Mac 下，可以用 Homebrew 提供的方法，管理服务。

具体命令是



brew service list
brew service start 
brew service stop

十分方便

Tomcat, Mariadb 这类服务，都可以用 brew service 来管理。...]]></description><category></category></item><item><title><![CDATA[自行车棚效应]]></title><link>https://blog.youkuaiyun.com/ginkov/article/details/79350954</link><guid>https://blog.youkuaiyun.com/ginkov/article/details/79350954</guid><author>ginkov</author><pubDate>Fri, 23 Feb 2018 09:25:10 +0800</pubDate><description><![CDATA[自行车棚效应

争论一些琐碎的事情而逃避那些困难的问题是一种常见的现象，这里有大量著名的理论描述了这一现象。

有一个最著名的理论就是帕金森琐碎定律 （Parkinson’s Law of Triviality），它描述了：一个组织中的成员往往会把过多的经历，花费在一些琐碎的事情上。

帕金森用了一个虚构例子来解释了这个定律：在一个审核新核电站计划的委员会中，会员把主要的时间用于争论员工自行车棚使...]]></description><category></category></item><item><title><![CDATA[Fusion 下创建虚拟机模板]]></title><link>https://blog.youkuaiyun.com/ginkov/article/details/70570095</link><guid>https://blog.youkuaiyun.com/ginkov/article/details/70570095</guid><author>ginkov</author><pubDate>Mon, 24 Apr 2017 10:13:00 +0800</pubDate><description><![CDATA[目标
小型 Linux (CentOS) 虚拟机
能作为模板，供不同的应用安装环境使用
思路
安装 CentOS  Minimal 版本
导出成 OVF 文件
每次创建新虚机时，导入这个 OVF 文件，生成新的虚机]]></description><category></category></item><item><title><![CDATA[解决 OVF/OVA 导入时 Unsupported Hardware Family 问题]]></title><link>https://blog.youkuaiyun.com/ginkov/article/details/70308897</link><guid>https://blog.youkuaiyun.com/ginkov/article/details/70308897</guid><author>ginkov</author><pubDate>Fri, 21 Apr 2017 10:07:45 +0800</pubDate><description><![CDATA[问题在工作中，我们经常需要把虚机拷给客户。 
客户在导入时，因为两边 VMware 版本的问题，有时用报错：Unsupported Hardware Family vmx-12 （或者 vmx-10)原因是导出侧的 VMware 版本太低，不支持虚机上的虚拟硬件版本。这里列出了不同的 VMware 版本与虚拟硬件版本的兼容性。https://kb.vmware.com/selfservice/mic]]></description><category></category></item><item><title><![CDATA[Dao 的 Interface 和 Service 的 Interface]]></title><link>https://blog.youkuaiyun.com/ginkov/article/details/66973424</link><guid>https://blog.youkuaiyun.com/ginkov/article/details/66973424</guid><author>ginkov</author><pubDate>Mon, 27 Mar 2017 16:52:19 +0800</pubDate><description><![CDATA[之前写 Spring MVC 时，傻乎乎的。由于不懂 Spring 是怎么进行注入的。以为只能靠 @Autowired，依赖 Interface 注入。其实 @Autowired 主要是根据类型进行注入。但是一旦在@Transactional 注解下，使用 Proxy，就要 Interface（这部分我到现在还不太懂… ）这篇讲到了 Spring Proxy http://stackoverflow]]></description><category></category></item></channel></rss>