阅读视图

尝试做了一个vscode的博客md文件管理工具

全程使用cursor和copilot协助,typescript和vscode插件开发本身一点不懂😂

唧唧歪歪

之前有尝试过在vscode里写博客的文章,虽然vscode的编辑器很好用,插件也很多了,但是文件夹里的文件默认都是按照文件名排序的,想找文章非常不便。以前没有什么办法,因为找不到相关的插件,自己也不会插件开发。现在有AI工具的帮助,自己实现插件就变得可以尝试了。

成品

在花了2,3个小时的不断与AI对话,调整,debug,最后做出了一版Blog文章管理插件,取名BlogMan,支持按照时间排序文章,按照tag和年份分类文章,且排序和分类方式可配。

插件会根据yaml的文件头,将文章的标题,tag, 时间等信息解析出来显示,并按照相关内容进行排序。文章的标题后会显示文章的时间,鼠标放在标题上还会显示文章的tag信息。

切换为年份分组后就会按照年份进行文章分类。

切换为标签分组后就会按照标签进行文章分类。

~~

现在还没有上架到vscode的商店,因为还不知道怎么上架,后面有空再研究研究好了,先自己用用看。不过AI真的开始改变编程开发了,细思极恐啊。

  •  

国庆香港citywalk

国庆打卡香港,感受文化的交织与碰撞

趁着国庆,一个人从深圳福田口岸到香港,整一个Citywalk,两天时间第一天暴走37000步,第二天27000步,把香港主要的热门地点都转了转,感受很明显,和内地的任何一个城市都完全不一样,整个香港的感觉是冲突融合碰撞。

城市建设

香港的高密度建筑+高密度路网的布局,市区的每栋楼都挨在一起,基本上完全没有间隙,而且一栋或者两栋楼的宽度就是一条路。路都很窄,大量的单行道,每条路都没有非机动车道,除了主干道,其他很多路都没有红绿灯,都靠观察通过。虽然路很窄,但是路上的车开的都很快,通行效率还蛮高的。
机动车道路面水泥路面为主,而现在内地的各省市基本已经逐渐变为沥青路面了。人行道香港主要也是水泥铺装,而内地基本上都是人行道砖,目前走遍的各个城市基本都是一般。
香港的过街天桥很发达,有很多互联多个路口,连接公交地铁,同时还会连接路两边的楼栋,非常方便,通行效率也很高。不过这个应该也只有香港才能做到,其他很少有地方楼栋和道路挨的如此的近。

香港路上能看到不少在建设或者装修的大楼,建设过程中,脚手架都是用竹子做的,不知道是什么原因,内地现在应该都是钢制脚手架了。

公共交通

香港的公共交通,地铁+公交+有轨电车(叮叮车)的组合,车次都非常的密,经常路上一溜排的公交车,除了地铁稍贵,公交和有轨电车应该完全是靠补贴存在的。
公共交通主要覆盖的是主干道,很多支路还是只能靠走,因为路网密倒是不太远。
坐在叮叮车上,晃晃悠悠看遍路两边的感觉真的挺好的,3HK$坐多远都行。

商业

香港的商业让我感觉特别的割裂,一遍有着很多现代化的商业综合体,宽敞,现代化;
另一方面,街上的单面大多门脸开间特别小,每间店铺都有种家门口五金店塞得满满的感觉。
大概是这两年经济不景气,非常多的门面都倒闭关门招租中,即使在最繁华的尖沙咀和铜锣湾也不例外。
另外香港遍地的药店,特别的多,卖的东西也很杂。同时还有很多专门的类似于摊位一条街的存在,卖各种各样大小东西的地方,让我想起了我小时候去的城隍庙。

物价

香港的物价总体上感觉是内地的2倍到3倍,总的来说应该还是人工和房租贵,路边食室随便吃点6-70HK,电子产品等批量化的工业产品之类的倒是不贵些。香港的住宿很贵,条件稍可的都要超过1000了,寸土寸金啊。
最不能理解的还是矿泉水和饮料,超级贵,同时价格悬殊极大,便利店都是十几HK,而不少药店却很便宜,最便宜的我看到是2.5;香港的蜜雪冰城柠檬水是9HK, 所以在大多时候,比矿泉水还便宜。

汽车

香港路上,公交车看到的全是油车,私家车则是各种各样,油车的话从跑车,老爷车到一般的代步车,电车的话能明显看出来的就只有特斯拉和比亚迪了,其他的或许也有,我认不出来。
在香港竟然真的有开大牛,小牛代步的,果然有钱,不考虑油钱和舒适度,只要帅就行了。因为香港是右舵,所以都靠左行驶,刚过去还不太适应。
香港骑摩托车的挺多的,车看起来也都还不错,路上也有专门的摩托车停车位。在香港开车,起步都超级快,每个路口是都油门嘶吼的声音,无论是公交车还是私家车,都是一样。

人文

在香港路上走着,粤语,普通话,日语,韩语,以及带着各种口音的英语,还有我听不出来的语言混杂。从外貌上看,路上碰到的欧美白人,印度人,日韩,其他东南亚人都很多,有不少看得出是旅游的,另外不少则明显就在香港工作。据说香港的外国人占比超过10%。
至于香港本地人和内地过去的游客,从穿衣打扮以及精气神上就是能看出来不同,能够明显看出香港本地人和内地游客,至于具体差异在哪,我描述不清楚。
香港街头还能看到卖电视天线,唱片DVD的小店,同时也还有不少公共电话亭和邮箱,但各处却又wifi覆盖,让我感觉特别的冲突。既现代化,又复古的感觉,很拧巴。全球各地的人又在这里汇集,感觉到不同的文化在这里交织与碰撞。

景点

收费的景点去了坐了太平山的缆车和摩天台上,只要20块的摩天轮也去坐了,就是那一个多小时的队排的不值,又热又晒,还浪费了宝贵的时间。剩下的就是免费的景点和一些热门地段,星光大道,坚尼地城海边,旺角,铜锣湾,尖沙咀啥的都有去,主打一个暴走。

其他

现在从深圳去香港是真的方便,我是从福田口岸过去的,全程自助过关,刷两次港澳通行证就可以了,过关就可以坐上港铁,直达中环附近。

  •  

使用echarts.js生成足迹地图(优化版)

较pyecharts可无缝集成至主题中,无需手动生成更新

之前使用pyecharts制作生成足迹地图过于简陋繁琐,如果需要更新地图,需要手动填写再更新生成,最后替换原有地图,过于繁琐麻烦。最近又好好研究了一番echarts.js,算是让足迹地图的嵌入变得稍微优雅了一些。

地图数据

echarts.js绘图需要GeoJson数据作为绘图数据源,搜索网上,主要都是依赖阿里云的altas平台提供的数据源,不过这里提供的数据都是按照省份分割存储的,没有市级的,又不想做地图的下穿等更复杂的操作,索性写了个小脚本,将GeoJson数据做了下重新拼合,制作了一个按照市级分割的GeoJson数据源。制作好的数据放到的github仓库:https://github.com/wherelse/GeoMapData_ChinaCityProcess 需要市级分割地图的朋友可以下载或者调用china_city.json

主题修改

  • 在header中引入echarts.js:
<script src="https://cdn.jsdelivr.net/npm/echarts@5.5.1/dist/echarts.min.js"></script>
  • 在需要渲染出地图的位置渲染标签:
<body onresize="resizeFresh()">
<div id="footmap" style="width:95%; height:500px; margin:auto; top:30px"></div>
</body>
  • 在主题文件尾部添加echarts初始化及刷新script:
    <script type="text/javascript">
      var chartDom = document.getElementById("footmap");
      var myChart = echarts.init(chartDom);
      var option;

      myChart.showLoading();
      fetch(
        "https://raw.githubusercontent.com/wherelse/GeoMapData_ChinaCityProcess/master/china_city.json",
        {
          method: "get",
        }
      )
        .then((response) => response.json())
        .then(function (ChinaCityJson) {
          myChart.hideLoading();
          echarts.registerMap("China", ChinaCityJson, {});

          option = {
            title: {
              text: "我的足迹",
              subtext:
                "FootPrint in China\n\n感谢来源于阿里云altas平台的地图数据",
              sublink: "http://datav.aliyun.com/tools/atlas/",
              left: "right",
            },

            visualMap: [
              {
                min: 0,
                max: 1,
                show: false,
                inRange: {
                  // 选中范围中的视觉配置
                  color: ["white","#00AAFF"], // 定义了图形颜色映射的颜色列表,
                },
              },
            ],

            series: [
              {
                name: "China Footprint",
                type: "map",
                map: "China",
                roam: true,
                emphasis: {
                  label: {
                    show: true,
                  },
                },
                data:[
                  {name:"北京市", value: 1},
                  {name:"天津市", value: 1},
                  {name:"南京市", value: 1},
                  //在这里添加更新足迹城市
                ]
              },
            ],
          };
          myChart.setOption(option);
        });

     //窗口大小变化时候,进行刷新页面操作,防止样式混乱
     var x=window.innerWidth;
     function resizeFresh(){
         if(x!=window.innerWidth)
             location.reload();
     }
    </script>
  • 根据自己的足迹更新echarts初始化中的series data中的城市目录即可。渲染效果可参考本博客关于页面
  •  

VCS+Verdi仿真Xilinx FPGA Vivado工程

在使用过VCS配合Verdi进行波形仿真之后,再也无法忍受vivado那缓慢的仿真与卡顿的界面,Verdi追踪信号更是极快加速问题定位。不过FPGA的IP不能像普通Verilog IP一样直接使用VCS进行编译仿真,需要调用一些Vivado IP Library才可以,下面分享一下如何使用VCS进行FPGA工程波形前仿真。

环境配置

需要使用VCS+Verdi进行仿真,这两个必须要是安装好的,这个参考其他教程。然后就是Vivado,开发 Xilinx FPGA这个也是必备的。这些都有安装后,基础的环境就算是OK了。

FPGA工程基础准备

在工程中,调用的vivado IP核,都需要完成调用和预综合,在对应的IP文件目录生成对应的xxx_sim_netlist.v,这个一般是放在/工程目录/sources/new/ip/xxx 中。这些需要先Ready,是后面在VCS编译过程中调用到这些IP的基础。工程中调用的vivado原语则不用处理,正常使用即可。然后是准备好工程中所有使用到的.v文件,除了testbench以外,其他文件都不需要做特殊的修改。testbench文件需要额外添加以下内容,用于dump fsdb波形和mem等内容:

initial begin
	$fsdbDumpfile("xxx.fsdb"); //xxx根据需要替换为文件名
	$fsdbDumpvars();
end

filelist准备

VCS和Verdi的仿真和波形查看都基于filelist进行维护,而不是和Vivado一样的图形化界面。需要将所有调用的.v文件,lib文件等的目录和文件名整理到filelist文件中,VCS和Verdi会自动根据文件列表分析结构层次。

  1. V文件列表整理:可以使用下面的脚本,一件生成当前目录及子目录下所有文件的filelist

    find . -name "*.v" -exec ls -dl \{\} \; | awk '{print $9}' >> flist.f
    
  2. ip sim netlist列表整理,根据项目中调用的IP情况,将所有调用的IP sim netlist添加到filelist中。

  3. Vivado LIb文件添加,为了能够正常仿真IP和原语,还需要在filelist中添加额外的Vivado库文件,这些文件都存放在vivado的安装目录中,一般必须添加unisim库和glbl库,如果有调用serdes源语或者GT收发器,则还需要调用额外的.vp加密库。目录参考:xxx/xilinx/vivado/$vivado version$/data/srcxxx/xilinx/vivado/$vivado version$/data/secureip/

run脚本准备

用于配置VCS编译选项,调用filelist,可以写一个简单run文件,也可以写一个makefile作为管理,这里以一个简单run文件为例:
vcs -R -full64 -debug_all -debug_region+cell+encrypt -f flist.f
仿真开始后,就可以打开Verdi查看已经完成部分的仿真波形,快捷迅速的追踪信号,仿真速度也会比Vivado自带仿真快很多。

  •  

利用pyecharts制作自己的足迹地图

之前有在高德和百度地图的软件上看到自己的足迹地图,不过这两个软件因为我使用的原因,数据都不完整。很多之前去过的地方并没有标记,或者只是坐火车坐高铁路过而已的地方也都记录了下来。然后就萌生了自己能不能做一个属于自己的足迹地图,且能够方便的嵌入在博客中。

尝试

在一番搜索研究,看了看已有的开源项目,首先看到了基于echarts的方案。仔细研究了一番,发现常规的geojson文件都是按照省份划分,如果想要精确到市级,要么做点击下穿,要么要自己花时间去做城市级的json数据整合。一番搜索没有找到现成的数据,又不想花额外的时间,随放弃。

研究

又经过一番搜索,发现了pyecharts,echarts的python开源版本,echarts本身则是基于JavaScript的。pyecharts的官方示例直接就带了一个全国市级地图示例,这不正是我想要的吗。不过这个示例还有不少额外的标记,不太需要,经过又一番搜寻和文档阅读,首先找到了Python-pyecharts生成精确到市的地图, 经过一番魔改修改成了这样,成功把各种标识全部关闭:

from pyecharts import options as opts
from pyecharts.charts import Map
finished=["北京市", "天津市", "南京市", "合肥市","六安市","安庆市","黄山市","池州市","淮南市","焦作市","西安市","福州市","杭州市","绍兴市","苏州市"]#对应地图中的名字
citylist=[]
for each in finished:
    citylist.append([each,100])
map_data = (
    Map()
    .add("中国地图", citylist, "china-cities", is_map_symbol_show=False,)
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    .set_global_opts(
        title_opts=opts.TitleOpts(title="我的城市足迹",is_show=False),
        legend_opts=opts.LegendOpts(is_show=False),  # 隐藏图例
        visualmap_opts=opts.VisualMapOpts(is_show=False),
    )
)
map_data.render("citymap_footprint.html")

完善一下

但是这个时候,pyecharts生成的html文件,地图只在左上角的角落里,缩放之后更是直接被截断。按pyecharts学习2--自适应屏幕居中显示这个博客内容又处理了一番,唉嘿,输出的文件是我想要的样子了,一个全屏可自适应的,除了足迹以外无标记地图。

效果

<iframe src= "/citymap_footprint.html" style= "border:none; width: 100%; height: 50vh; "  scrolling="no"></iframe>

最后使用iframe嵌入到文章或者博客主题中,完美,效果如下:

🚅我的城市足迹

我最后是将我的足迹嵌入到了关于页面,毫无违和感,非常合适。可放大缩小,以后更新也只需要替换一下iframe嵌入的html文件即可。

  •  

2023to2024

这是我在博客写下每年愿望的第四个年头,2024又有什么期待呢。

我的2023总结

回看23年初时,写下的几个23年的愿望,现在有实现的吗?

2023年的几个愿望:
1.工作精进,技能增长 (√)
2.多出去走走转转看看 (...√)
3.加强锻炼,身体健康 (x)
4.坚持内容输出,提升自己的输出能力(√)

第一条,工作中有了新的变化,也能力上有提升,算是完成了,详细的下面细说。
第二条,下半年的周末,只要没有雨雪,基本每周都会出去走走,但是现在回头看来,基本没有走出市区,走出最常生活的范围。
第三条,今年算是荒废的一年,基本没有什么锻炼,虽然没有经常生病,但是感觉体能是真的差了不少。
第四条,2023年一年总共写了9篇或长或短的博客,还搭了memos时不时输出一下碎碎念,算是圆满。

2023中我的工作

从去年毕业到现在,毕业也已有一年半的时间,但也算是挺短的。年初部门因为很多人离职,就剩下一群应届生,换了大领导,完全不一样的行事风格。新领导比旧领导要push不少,但是愿意带我们新人,给予机会和帮助。这一年学了不少东西,虽然有些零碎不成系统,但是回看年初的时候工作中的自己已不可同日耳语。同时今年的公司,裁员降本不断,行业整体也不景气,不知道到2024会如何。同时我也从开始基本不加班,到现在加班多了,加班真的会降低生活质量,这算是这一年中工作中相当难受的点。

2023中我的生活

生活上,最大的变化是新家装修完之后,我自己一个人住了,而不是和去年一样和爸妈住一起。之前我还经常做饭,但是自己一个人住后加上经常加班,家里没菜,做饭变得异常麻烦起来,就不自己做饭了,之前还会准备第二天的午饭,带到公司去热,因为不做饭也就不再带了。但是一个人住,对于我这个享受独处的人来说,也是一种释放,每天少了许多我爸的啰嗦和负能量。
另一个是因为周内经常加班,到家一般都是9点多了,周内属于自己的生活时间基本所剩无几,回家之后基本打开电脑随便翻翻网页,就洗漱上床,刷会手机睡觉了。周末则就是拿起相机,出去瞎转,去寻找值得记录的风景。
这一年的生活,如果用一个词来总结,我大概只能用平淡来总结。

2023中的买买买

2023年为我自己花钱最贵的两个,一个是电脑,一个是相机,也算是工作后对之前多年愿望的满足吧。电脑现在有点后悔,稍微配的有些性能过剩了,工作之后已是电子阳痿状态😭,对很多游戏完全没有之前那样想玩的欲望。相机则是刚刚到手,希望后面多拍多用,毕竟拍的越多,用的越多,钱花的越值。
如果说我认为买的最值的,我则是认为一个是新买的小斜挎包,一个是Airpods pro。新包买回来之后基本每天出门都背着,包超级轻且背起来贴合身体,但是容量相当可观,出门所需的东西基本都能塞得下。Airpods pro则是佩戴舒适度超级好,基本无感,作为一个地铁通勤人真的是太有用了。能让我每天通勤过程中,隔绝于地铁那震耳欲聋的噪声之外,拥有一段本失去的时光。

我的2024愿望

经过一番短时间的碎碎念,可能遗漏了不少我在2023的所想,但是还是决定停下来,写下我在2024的愿望。

  1. 工作多学习提升少加班,生活多些滋味。
  2. 运动起来,跑步最简单,就从它开始吧。
  3. 坚持内容输出,多写长文,多记录,尝试更多形式,无论文字,图片还是视频。
  4. 多出去走走,走的更多更远,见更多山河,攀更多山峰。
  5. 精打细算,尽可能多存些钱。

新的一年,开始~~

  •  

入手索尼A7C2

SONY A7C2 让我爱不释手

碎碎念

大概6年前,我刚刚对摄影有了些认知的我买了索尼a6300,6300陪伴我度过了大学,研究生,到了工作时期。作为一代神机,真的很能打,有些规格即使到了现在仍然能和有些相机打的有来有回。兜兜转转的几年间,我用6300学习了摄影最基本的知识,摸清了我到底喜欢用相机拍什么。但是毕竟是发布于7年前的老机器了,用起来算是充满了年代感,microusb的充电接口,容量超小的电池,难用的菜单,稀烂的屏幕,都在不断的提示着我。

心路历程

在今年,索尼发布的A7C2在发布前就让我眼前一亮,相比一代有了不少的提升,该有的拨轮,快捷按键都不少,整体的规格基本和A7M4也基本一致。同时那超小的体积和相对轻的重量,和我在使用的6300基本一致,是可以轻松放到我日常通勤的斜跨包当中,随时带着就走,而不用顾忌该如何带走。在几年的相机使用过程中,“能经常带出去拍照的相机才是最好的相机”,是我不断提醒自己,同时又在相机的使用中不断被验证的一句话。

因为工作了,有了自己的可支配收入,买一台全画幅的相机有了足够的预算。然而A7C2一发布就缺货,溢价不断,直到最近12月,价格才逐渐下降,回归到正常水平。在这几个月的纠结犹豫后,想买的心使用没有平复,终于下定决心把6300卖了买A7C2。



上周末,去线下实体店原价入手了银色的A7C2单机,为了搭配机子,在闲鱼淘了一个适马35F2镜头作为挂机镜头。还配了一个银色的底板,提升了握持手感,同时也和机身的颜色很搭。



新机体验

新机子拿到手,手感确实和6300差不多,但是屏幕,电池续航,拍照防抖,AI对焦,菜单这些都提升巨大,尤其是拍照防抖,轻松用0.xs的快门在晚上拍照不会糊片,这个真的太爽了,之前完全不敢想。同时新的菜单比索尼之前的祖传菜单真是好用太多。

同时更高的像素加上全幅,拍出的成片也是能明显感到差别,真的是爱不释手的感觉。另外新的创意外观也是比较好用,有的时候不想修图调色就直接开创意外观直出就可以了。看网上还可以导入自定义lut,暂时还没有尝试,什么时候尝试一下。

样片时间

最后放几张用新相机拍的照片,传递一下拥有新相机的快乐,嘿嘿😁:







  •  

新房装修分享

新家装修自去年9月初开始,收到去年疫情管控以及自己本身拖拉的影响,拖拖拉拉到了今年8月才基本结束,在今年的9月总算住了进来。装修真是一个费钱,费心,不断妥协的过程,这一年下来,工作的收入基本全砸在了里面,额外还从爸妈那里花了不少钱。不过总算是结束了,用文字和图片的形式记录一下装修的亮点、心得与踩坑。

户型改造

首先是布局改造,整体变动不大,一个是把次卫门口处的洗手池位置改进了厨房,用来放冰箱,不然冰箱没有合适的位置来放。另一个是把原来主卧的门封了起来,把书房和主卧打通,做成了套房的形式。这样减少了客厅开间里门的数量,让电视背景墙更大,整体性更好。同时也把客厅与阳台设计成了一个整体,显得空间更大。

门头抬高

在拆改的过程中,把家里的所有门洞的抬高到了梁,正常门只有约2m高,抬高后的门大概约2.3m高左右。从现在装修完来看,效果相当不错,因为门洞拉高之后,门显得细长一些,有拉伸层高的观感,显得家里层高更高一下。同时也不会像有的人家里加的门楣板那种,尤其是开门之后,看起来整体性并不好。

水电改造

水电改造相比原来的毛坯加了非常多的点位,主要注意的是厨房的厨下用来安装厨下净水器,洗碗机,以及吸烟烟机,冰箱插座的位置需要在设计阶段安排好,避免后续冲突。阳台的家政柜中和水池下柜分别预留了充电插座,以及洗衣机,烘干机,扫地机器人的供电插座点位。在两个卫生间门口留了装小夜灯的插座/86盒位置,卫生间内预留只能马桶以及智能镜柜的供电插座或者供电线。在各个房间的窗户顶位置预留了电动窗帘的点位。剩下的地方基本上能想到后续可能使用到的顺手的地方都留的插座,比如沙发,电视柜(尽可能多,大部分人家中这里的小电器都很集中),房间角落(用来接电风扇之类的)。除了这些需要特别注意的地方,其他都是按照设计师给的点位去做的。
最后完工安装插座总共装了60多个,从目前入住的使用感受来看,点位留的很充足,用起来很顺手。
对了还有记得给开关留零线,这样如果想做智能家居时,只需要换个开关就行,而且不挑。

网络布局

新家的网络布局是完全我一手规划的,在每个房间都有留网线,在客厅和书房有做了特别的规划和加强。设计的思路主要是全屋2.5G网口接入,客厅与书房两台路由器做有线mesh组网。客厅电视柜位置有预留三个网口,一个网络做单独的IPTV接入网口,另外两个网口做主路由(可选)的来程和去程。然后进入交换机中再连接到各个房间中。书房设计了三个网口,一个用来接电脑,一个用来接mesh路由和NAS,还有一个备用。两个路由组网,WiFi覆盖家中的面积还是非常OK的,基本没有死角。同时两个卧室如果需要接网线也有网口可以接,在需要提升网络稳定性可以连接。

卫生间设计

卫生间的设计次卫比较简单,就是马桶,花洒,以及为了解决原次卧门口洗手池位置被移走,放在卫生间中的一个超小洗手池。主卧花的心思比较多,做了下沉式的淋浴间和玻璃隔断,而不是传统的淋浴房。同时为了解决平时不想洗衣服的困扰,还在马桶上方设计了一个壁挂洗烘洗衣机,用来洗平时的贴身衣物。两个卫生间都是用的60*120cm的大砖上墙,最后小效果非常简洁,美缝完之后,一体性非常好。唯一的缺点可能就是贴砖的工费比较贵了。

净水器与管线机

管线机预埋

管线机真的是解决喝水难题的重要发明,要多少温度的水,点一下就可以立刻出来。以前尤其是夏天的时候,烧开水然后再等着喝水实在是太痛苦了。管线机如果想效果好的话最好再水电阶段就做好预埋,我装修的时候就是因为没有考虑好,导致现在管线机的电源线拖在外面。最好的预埋方式就是从厨房橱柜预埋PE净水管到餐边柜,然后餐边柜中预留一个插座,然后预埋50管到安装位置,这样电源线以及净水管都可以隐藏起来。

净水机选择

净水器的话一定要选择支持零陈水的,不然使用管线机这种场景,喝的都是高TDS值的陈水。

书房设计

书房做的比较简单,主要是作为书房和活动室来布置的,硬装上只做了一组书柜,剩下就都没做了。我在书房放了一个2m*0.8m的电动升降书桌。书桌旁边布置了一个矮柜,用来放我的NAS以及其他的小的东西。

书房与厨房外挂门

因为户型改动的原因,导致书房和厨房如果安装传统的门打开后都会干涉正常的行走动线,最后在设计师的推荐下选择了外挂吊柜门,安装后左右推拉不占用空间,看起来也不丑,黑色也算是家中色彩的一抹点缀。

全屋定制

全屋定制需要细心的对设计图纸,有没有哪里和家中的其他设计有冲突或者干涉,如果不仔细对图纸非常容易踩坑。另外全屋定制也是价格相对不透明的一个品类 ,不同的板材,加工工艺差价很大。如果追求质感强烈建议用烤漆工艺,但是真的贵。不过最最重要的是最后的落地安装,如果选择用全屋定制,一定要去工地看看落地细节,不然设计的再好,最后安装一塌糊涂都白搭,很多安装工人的技术以及对细节的重视和追求都非常差劲。

扫地机器人

扫地机器人的选择上现在竞争很激烈和透明,反而没有太多要注意的。只需要事先规划好放扫地机器人的位置,留好电源和上下水,尤其是上下水,这点很重要,有上下水扫地机器人基本就不太用去维护,只需要过一段时间换下尘袋,清理下基站就可以了。另外家中的家具尽量选择机器人可以进的高度,这样家中就基本不会有卫生死角。

智能电动窗帘

电动窗帘一个注意的就是要在水电改造时预留插座,另一个则是做窗帘盒要做宽一些,不然安装后两个窗帘可能会蹭到一起。另外一个点,就是电动窗帘买的时候不要从旗舰店买,会贵很多,拼多多的店铺包安装的价格会便宜很多。我买的杜亚的电动窗帘就是这种情况,拼多多能便宜三分之一到一半。

杂项

如果是壁挂空调,有条件的话可以提前规划一下做管路背出,这样安装出来会显得很简洁好看。

最后
再放些装修完的一些照片:

  •  

斜挎包挑选记

之前一直有两个包常用于日常通勤和外出出行,一个是多年前买的小米的10L小背包,一个是去年在拼多多买的高仿NIID R1斜挎包。
小米小背包
小米小背包从买到现在一直在使用,包很轻,容量却相当可观,背个iPad Pro加上水杯,伞,再加上轻薄外套都不在话。说实话,算是爱不释手的类型,但是也因为包本身很轻,所以都是薄薄的布料,当我出行的时候想带相机[Ps: 相机是索尼α6300,相机加上镜头一斤多]时,就不敢往里放,害怕磕碰。同时也因为是双肩包,同时分类收纳隔层也不多,外出的时候其实不是很方便,取东西或者放钥匙等都不好用,所以我基本上只在需要背比较多东西且不在意磕碰的时候才会使用,过去一年中上班通勤需要带饭的时候一般我都会使用它。另外小米小背包真的很便宜,当时买的大概才20元左右,用了这么多年,一点坏的迹象都没有。
R1
高仿NIID R1斜挎包,去年四十多购于拼多多,皮质质感的表面,但是除此之外做工很拉垮,内里也很松散,不过正版300+的价格,40多的东西也不能有什么品质的要求。这个包的容量也不算小,放个iPad Pro +雨伞水杯也没问题,但是衣服是放不下的。这个包内部有不少分隔,不过由于设计不是很合理,加上买的盗版,内衬松散,放东西用起来很难受,我基本只用来主袋放伞,前袋放钥匙和公交卡,其他空间都是浪费的。这个包的内衬还算稍微有些厚,所以我想带相机出门的时候一般会把相机放在包里,但是,放了相机之后,基本上其他的东西都不太放得下了,背的感觉也会变差很多。

最近因为这个斜挎包用着不是特别合用,就萌生了换一个新的斜挎包的想法,心中理想的包型是内部分隔合理,体积不是很大,背在身上看起来要相对贴合。这样基本能满足我日常通勤的需要,能够包正常需要随身携带的东西收纳清楚同时方便取拿,不浪费空间。同时最好在需要的时候能够放下我的相机。确定了这个目标,心理大概有个筛选条件了,经过一番搜索比较,发现满足我需求的包大概都落在长度在30cm左右,容量在5-10L这样。在淘宝,京东,拼多多一番搜索之后,将目光放在了这几个之中:
[1] 马可·莱登单肩包

这个包体积和我之前的斜挎包差不多,但是内部的隔层看起来要合理很多,但是缺少前拉链,拿东西都需要翻开上盖才行。整体的设计看起来感觉还可以。价格淘宝上约150RMB。

[2] 光影行星星云斜挎包

这款包的设计和之前的包有很多相似之处,甚至前袋都是一样的倾斜设计,倾斜设计一点不好用。然后体积和容积也是基本差不多,基本被我PASS了。这款的价格正版价格大概200+,仿版约80RMB左右。

[3] tomtoc 斜挎包


这款包体积和容积相较之前的也差不多,这个包的外形设计更加简洁,同时前袋设计整齐,内衬的设计看起来也划分也算是比较合理,是我心中的备选之一。这款的价格RMB200+接近300。

[4] Bellroy Lite Sling

这款包的体积和容积稍小,同时包很轻薄。这个的前袋设计也是整齐的,取拿东西应该也比较方便。因为包的设计是轻薄类型,内衬的质感就差了些,不过分隔看起来还是比较科学的。这款的设计也算是比较喜欢,这款国内仿版拼多多50RMB左右,正版则是要700+RMB,实在消费不起。

Bellroy这个品牌还有其他的几个型号,设计和质感从评论中看起来我也中意,不过价格来到1000+,而且国内并没有仿版,只得放弃,暂时消费水平还没有到在一个包上花费上千元。

目前还在[3]和[4]中纠结,准备是先买一个Bellroy Lite Sling试试看,毕竟便宜,如果感觉不喜欢,就在双11买一个tomtoc 的斜挎包。

新包到手

拼多多仿品Bellroy Lite Sling到手,银色的布料观感还可以,还带点反光质感。布料比较薄但是强度还不错。主袋拉链比较顺滑,副带拉链比较涩。包整体很轻。算是能完美符合我通勤时使用的小包,但是有时出门时想塞个相机就装不下了。能够完美符合我通勤+外出拍照随身携带相机的小包据需寻找中。

  •  

verible-verilog-format 使用指南

Verible 是一套 SystemVerilog / verilog 开发工具,包括解析器、样式检查器、格式化程序和语言服务器。这里为主要分享关于格式化工具verible-verilog-format的使用。用来格式化verilog代码,实现代码风格统一。

verible 项目托管于github,项目地址:https://github.com/chipsalliance/verible

安装

verible可以自行编译安装,也可以下载已经编译好的可执行文件。下载路径见github release。下载完成后,将下载到的压缩包解压,在文件夹的子目录verible-bin/中就可以找到 verible-verilog-format 了。

使用方法

使用命令调用:

verible-verilog-format -- [options] filename.v

举例:以原位替换的方式,按照默认规则进行verilog代码格式化, inplace及为原位替换选项。

verible-verilog-format --inplace testbench.v

其他可用配置参数可以参考,以为为部分选项的,全部选项见:https://chipsalliance.github.io/verible/verilog_format.html:

--column_limit 
(Target line length limit to stay under when formatting.);default: 100;
行代码长度限制,默认最长100个字符。 使用示例: --column_limit=200 设置最长字符数为200个

--indentation_spaces 
(Each indentation level adds this many spaces.);default: 2;
代码层级缩进深度,默认为2字符 使用示例:--indentation_spaces=4 设置代码层级缩进为4字符 

--assignment_statement_alignment 
(Format various assignments:{align,flush-left,preserve,infer}); default: infer;
赋值语句对齐方式:{对齐、左对齐、保留、推断} 默认值:推断;   

--case_items_alignment 
(Format case items:{align,flush-left,preserve,infer}); default: infer;
case语句格式化对齐方式:{对齐、左对齐、保留、推断} 默认值:推断;
      
--class_member_variable_alignment 
(Format class member variables:{align,flush-left,preserve,infer}); default: infer;
类成员变量格式化对齐方式:{对齐、左对齐、保留、推断} 默认值:推断;    

--compact_indexing_and_selections 
(Use compact binary expressions inside indexing / bit selection operators); default: true;
使用紧凑的二进制表达式索引/位选择运算符; 默认值:true;    

--distribution_items_alignment 
(Aligh distribution items: {align,flush-left,preserve,infer}); default: infer;
distribution对齐方式:{对齐、左对齐、保留、推断}); 默认值:推断;
    
--enum_assignment_statement_alignment 
 (Format assignments with enums: {align,flush-left,preserve,infer}); default: infer;
 枚举对齐方式:{对齐、左对齐、保留、推断}); 默认值:推断;
     
--expand_coverpoints 
 (If true, always expand coverpoints.); default: false;
 
--formal_parameters_alignment 
 (Format formal parameters: {align,flush-left,preserve,infer}); default: infer;
格式形参对齐方式:{对齐、左对齐、保留、推断} 默认值:推断;    

--formal_parameters_indentation 
 (Indent formal parameters: {indent,wrap});default: wrap;
形参缩进方式{indent,wrap};默认:换行;
    
--module_net_variable_alignment 
(Format net/variable declarations: {align,flush-left,preserve,infer}); default: infer;
wire声明对齐方式:{align,flush-left,preserve,infer}); 默认值:推断;
    
--named_parameter_alignment 
(Format named actual parameters: {align,flush-left,preserve,infer}); default: infer;
命名参数对齐方式:{对齐、左对齐、保留、推断} 默认值:推断; 
    
--named_parameter_indentation 
(Indent named parameter assignments:{indent,wrap}); default: wrap;
命名参数缩进方式:{缩进,换行}); 默认:换行;
    
--named_port_alignment 
(Format named port connections:{align,flush-left,preserve,infer}); default: infer;
端口名称对齐方式:{对齐、左对齐、保留、推断}); 默认值:推断;
   
--named_port_indentation 
(Indent named port connections: {indent,wrap});default: wrap;
端口名称缩进方式:{缩进,换行}); 默认:换行;
    
--port_declarations_alignment 
(Format port declarations:{align,flush-left,preserve,infer}); default: infer;
端口声明格式:{对齐、左对齐、保留、推断} 默认值:推断;
    
--port_declarations_indentation 
(Indent port declarations: {indent,wrap});default: wrap;
端口声明缩进方式:{缩进,换行}); 默认:换行;
    
--port_declarations_right_align_packed_dimensions
(If true, packed dimensions in contexts with enabled alignment are aligned to the right.); default: false;
对齐的上下文中的尺寸将向右对齐。默认值:false;
    
--port_declarations_right_align_unpacked_dimensions 
(If true, unpacked dimensions in contexts with enabled alignment are aligned to the right.); default: false;
    
--struct_union_members_alignment 
(Format struct/union members: {align,flush-left,preserve,infer}); default: infer;
结构体,联合成员变量对齐方式: 默认:推断
    
--try_wrap_long_lines (If true, let the formatter attempt to optimize line
 wrapping decisions where wrapping is needed, else leave them unformatted.
 This is a short-term measure to reduce risk-of-harm.); default: false;
    
--wrap_end_else_clauses 
(Split end and else keywords into separate lines); default: false;
将 end 和 else 关键字分成单独的行;默认值:false;

--inplace (If true, overwrite the input file on successful conditions.);default: false;
原位替换为格式化后结果,默认:false   

根据filelist文件批量处理

为了方便使用,使用python写了一个基于filelist.f进行批量处理的脚本, 可以根据filelist进行代码批量格式化,有需要的可以自取:

https://github.com/wherelse/verilog-formatter

https://circuitcove.com/tools-verible/ 
https://chipsalliance.github.io/verible/verilog_format.html

  •