Value Object in Symfony

看了这篇文章 ,接触到一个概念, value object. 所谓value object是用来保存value的一种对象。这种对象的几个主要特征是

关心值本身而不是基于id的

不可变 (immutable). 意思就是说,只有getter方法, 没有setter等等可从外边改变该对象的方法。该对象的值在创建对象的时候通过构造函数就被确定了,且不能再被修改了。

使用场景

在symfony的form里,用户通过表单提交来创建一个新的value object. 当用户通过表单编辑对象的时候,本能的会想到调用setter方法来修改对象。但是这会失败,因为value object没有setter方法。 这时候需要实现额外的interface,来实现这些个功能。最后在Type (关于symfony的form type是另外一个抽象概念,看文档)里面,把这个方法设置为formBuilder的DataMapper方法。

Wow, Doctrine reverse engineering is so cool

just with two simple Symfony commands are all model php files is genereated. It is so cool.

php bin/console doctrine:mapping:import „App\Entity“ annotation –path=src/Entity
for getter/setter
php bin/console make:entity –regenerate App

Source: https://symfony.com/doc/current/doctrine/reverse_engineering.html

看到几句有启发的话

在infoq的网站是那个看到Uber公司的一个开发者的一篇文章,听有意义的。摘录如下:

原文链接:

写在最后

我认为,计算机科学当中的一切东西都存在一种权衡,不存在所谓的通用的高级语言。无论你做什么,都要明白你为什么要这么做,不要让它演变成各派固执己见的政治斗争。

设立好故障点。如果你意识到自己犯了一个错误,你要弄清楚如何做出权衡,并给自己一条出路。你陷在错误决策中的时间越长,成本就越高。不要做一个对解决问题没有贡献的坏脾气的人,不要做一个给别人制造更大问题的狂热者。与我共事过的那些优秀的工程师们都很善于避免落入这两个陷阱。

https://threadreaderapp.com/thread/1336890442768547845.html

初玩 nginx的反向代理

得到任务要完善公司的ngix服务。加入自定义的错误页面。然后就在自己的机器的docker里装上了2个ngix的容器。一个扮演proxy,一个扮演backend app server.

第一步 为2台服务器准备2个内部的ip。然后写个简单的 docker-composer.yaml让2个ngix都能自己跑起来。里面有个小插曲,就是当nginx配置错误,或导致docker启动错误,就自己关闭了。在最后加上一个tty:true可以让进程不挂掉。

本地的host文件加入

192.168.88.18 xxxxxxx.vm
192.168.88.19 app.xxxxxxx.vm

proxy的docker-composer 这样写

version: "3.5"
services:
  # nginx server
  app:
    container_name: xxxxxxx-master
    restart: "no"    
    image: nginx:1.17
    volumes:
        - /home/hchen/private/xxxxxxx/nginx:/var/www/html:delegated
    ports: 
      - "8080:80" 
    expose:
      - "80"  
    networks:
      dh_net:
        ipv4_address: 192.168.88.18
    extra_hosts:
      - "echobot.vm:192.168.88.18"
    tty: true

networks:
  dh_net:    
    name: dh_network
    ipam:
      driver: default
      config:
        - subnet: 192.168.88.0/24
  

然后app的类似,这样写

version: "3.5"
services:
  # nginx server
  app:
    container_name: xxxxxx-app
    restart: "no"    
    image: nginx:1.17
    volumes:
        - /home/hchen/private/xxxxxx/apps:/var/www/html:delegated
    ports: 
      - "8081:80"    
    networks:
      dh_net:
        ipv4_address: 192.168.88.19
    extra_hosts:
      - "xxxxxxx.vm:192.168.88.18"
      - "app.xxxxxxx.vm:192.168.88.19"

networks:
  dh_net:    
    name: dh_network
    ipam:
      driver: default
      config:
        - subnet: 192.168.88.0/24
  

写完以后,跑起来,分别可以打开这2个站点。

第二步,把proxy改为反向代理。修改default.conf

upstream app {
   server 192.168.88.19;
}

server {
    listen       80;
    server_name  xxxxxxx.vm;
     
    location / {
       proxy_pass   http://app;
    }
     
    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    } 
}

主要就是i加上upstream 名称 ,去掉本地 /的解析,改为proxy_pass http://名称。然后reload.

这样一台简单的反向代理就搭建好了。

Hyperion Install

Update: 2020.01.06

USB已经正常工作。关于捕捉卡闪动的问题,其实解决方案就是降低分辨率。 我用倒数第二档就不错了。

另外,实验室发现最后一个灯常量,检查发现是少数了一个LED电珠,修正配置以后问题解决。

原文:

暑假里忙了一段时间的Hyperion,给自家的老电视加上背景灯效果。 然后因为图像捕捉功能有问题,就一直没有继续了。现在圣诞新年假期比较空,就重新整理一下。重新刷了SD卡。然后重新配置。

Hardware

LED 在Aliexpress上买的, 芯片是APA102系列, (颜色顺序BGR) 商家链接(Link
Layout56 (TOP) , 37 (RIGHT), 55 (BOTTOM), 34 (LEFT)
USB GrabberUTVF007 (Link)
RP Pi Zero w亚马逊买的套件 Raspberry Pi Zero W (kabellos) & Zero Essentials-Set (Link), 板子的技术细节(Link), 1G单核CPU,512内存,带WiFi和蓝牙

Software

官方镜像 2020-11-19-HyperBian-lite.imgHyperBian (解压后2GB,)直接灌入SD卡(32GB有点浪费),然后配置Wifi和SSH
镜像内包含了Hyperion.ng 已经安装在Pi上,用来提供Web界面来配置实例
默认安装没有支持这款USB Grabb er需要额外配置。 参见商家网站(Link)和 论坛(Link

主要问题是USB Grbber无法工作。(已经解决)

ssh登录显示USB设备

pi@HyperBian:/tmp $ lsusb
Bus 001 Device 002: ID 534d:0021
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

显示支持格式,则显示设备忙

pi@HyperBian:/tmp $ v4l2-ctl -list-formats-ext
VIDIOC_S_INPUT: failed: Device or resource busy
brightness 0x00980900 (int) : min=0 max=255 step=1 default=25 value=32
contrast 0x00980901 (int) : min=0 max=255 step=1 default=127 value=128
saturation 0x00980902 (int) : min=0 max=255 step=1 default=127 value=128
hue 0x00980903 (int) : min=0 max=127 step=1 default=0 value=0
gamma 0x00980910 (int) : min=0 max=50 step=1 default=0 value=0
pi@HyperBian:/tmp $

如果在Hyerion.ng内关闭USB设备就好了,显示如下

pi@HyperBian:/tmp $ v4l2-ctl -list-formats-ext
Video input set to 0 (Camera 1: Camera, ok)
brightness 0x00980900 (int) : min=0 max=255 step=1 default=25 value=32
contrast 0x00980901 (int) : min=0 max=255 step=1 default=127 value=128
saturation 0x00980902 (int) : min=0 max=255 step=1 default=127 value=128
hue 0x00980903 (int) : min=0 max=127 step=1 default=0 value=0
gamma 0x00980910 (int) : min=0 max=50 step=1 default=0 value=0

似乎是类型不对,设备被识别为Camera而不是

ioctl: VIDIOC_ENUM_FMT
Type: Video Capture

参考:

samba issue after upgrade to ubuntu 20

after ugprading to ubuntu 20, the nas is no more work. It show the error message like „Software caused connection abort“.

Why? Becuase in ubuntu 20 is samba not more installed at default. So you need to install it first.

apt-get install samba

After that you need to change the config, add support for „old samba protocol“

Add „client min protocol = CORE“ in Seciton „[global]

Thats all.