標籤: 租車

  • 特斯拉將發表自動駕駛電動車?本週見分曉

    美國電動車大廠特斯拉(TESLA)將挺進無人車市場?特斯拉執行長穆斯克(Elon Musk)上週在推特上發表「是時候推出D和其他東西了」的推文,外界揣測將會推出新款Model D的電動車,且可能有自動駕駛功能。

    About time to unveil the D and something else

    — Elon Musk (@elonmusk)

    福斯(Volkswagen)、賓士(Mercedes-Benz)等國際車廠先後投入自動駕駛無人車的研發,穆斯克在此之前也曾表示,特斯拉正在研發多項電動車相關技術,包括預計在三年內推出具自動駕駛功能的電動車。據中時報導,穆斯克日前接受CNNMoney訪問時,即表示「再幾個月就能推出自動駕駛車」,且特斯拉電動車在明年可能就能達到90%行程由自動駕駛進行的目標。這樣的功能相當適合高速公路駕駛。

    而穆斯克的「D和其他東西」的推文,似乎指向豪華電動車Model S之外的另一款新車,且可能搭配「自動走道」(automated lane)技術。自動走道技術是一種智能駕駛系統,能讓車體自動保持在車道上行進。在車道劃分明確的高速公路上,只要車款安裝「自動車道」功能,就能讓汽車自動在車道上行駛。

    十月9日將舉行巴黎國際汽車大展,穆斯克的推文,很可能代表特斯拉將在該展上發表眾所矚目的電動休旅車、大眾車,以及自動駕駛科技。除此之外,鴻海董事長郭台銘本周末首度搭乘白色特斯拉Model S出席活動,也為特斯拉與鴻海之間的合作進展增添了不少想像空間。

    本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※超省錢租車方案

    ※別再煩惱如何寫文案,掌握八大原則!

    ※回頭車貨運收費標準

    ※教你寫出一流的銷售文案?

  • 轉銷商囤貨致民眾難買?Switch 日本二手價較新品高 1 成

    任天堂(Nintento)日前雖稱 Switch 遊戲機生產將在近期內恢復正常,不過因宅需求夯,遊戲機持續維持高人氣,加上疑似有轉銷商囤貨,導致一般民眾依舊難於買到 Switch,讓 Switch 日本二手價當前仍較新品價高出 1 成。

    日經新聞 14 日報導,任天堂雖曾在 6 月時稱 Switch 遊戲機生產將在近期內恢復正常,不過因宅需求夯,提振遊戲機產品持續維持高人氣,加上疑似有以高價轉賣為目的的「轉銷商」囤貨,導致 Switch 在日本市場上依舊難入手,目前二手價(網拍價)仍較新品價高出約 1 成。

    在調查營運網拍比較網站 aucfan 的價格行情後得知,7 月份 Switch 平均網拍成交價為 35,699 日圓,和 4 月時的高點相比雖大幅便宜了 3 成,不過仍高於新品的希望零售價格(32,978 日圓)。

    報導指出,仍有眾多消費者表示,「買不到 Switch」;日本國內分析師表示,「以高價轉賣為目的的『轉銷商』囤貨,讓一般消費者難於買到 Switch」,預估二手價要回復正常水準仍需時間。

    任天堂 14 日上漲 0.23%,收 51,320 日圓;今年迄今股價累計大漲 16.7%,表現遠優於東證一部指數(TOPIX)同期間的下挫 5.69%。

    新聞來源:https://ccc.technews.tw/2020/08/17/japan-used-switch-is-10-percent-higher-than-new-product/

    【其他文章推薦】

    ※超省錢租車方案

    ※別再煩惱如何寫文案,掌握八大原則!

    ※回頭車貨運收費標準

    ※教你寫出一流的銷售文案?

  • 全球相機市占前五強出爐!Nikon 被超車、Sony 衝上第二名

    數位相機近年銷售逐漸下滑,眾品牌逐漸調整策略,大舉擁抱更輕巧的無反相機,也讓市占排名出現變化。《日經新聞》數據部門近期釋出 2019 年全球相機市占排行前五名,相較於去年出現不少變化。

    第一名仍是業界龍頭 Canon,擁有接近一半的市占率,且對比 2018 年還增加了 2.4%,現在累積至 45.4%。說明即便面臨富士、Sony 在無反領域持續進攻,Canon 仍以自身步調推出新產品,今年亦發表 EOS R5、R6 以及一系列 RF 鏡頭,有望在專業領域搶下更多死忠用戶。

    Sony 則在 2019 年首度超越 Nikon,隨著 A7 III 獲得熱烈好評,消費級別的 a6000 系列以及 RX100 也都有斬獲,市占率小幅增加至 20.2%,全年上升 0.9%。至於 Nikon 由於較晚踏入無反領域,面臨不少挑戰,2019 年市占率下滑 1.6%,整體落在 18.6%。外媒《PetaPixel》分析,隨著 Nikon 投入無反 Z 系列,今年應該能稍微止血。

    排行第四、第五的分別是富士與 Panasonic,兩者市占率皆是 4.7%,前者全年下滑 0.4%,後者則是維持不動。至於近期遭到出售的 Olympus 在 2018 年原本是第五位,如今因銷售量下滑,被擠出前五名。

    對於相機品牌來說,2019 年依舊不好過。數據亦顯示全年出貨數量僅 1483 萬台,下滑了 22%。今年碰上疫情更是雪上加霜,根據日本相機影像器材工業協會(CIPA)數據,上半年(1-6 月)數位相機總出貨量僅有 351 萬台,對比去年同期少了 51.9%,是 CIPA 於 2000 年開始公布數據以來,史上最低點的成績。

    新聞來源:https://3c.ltn.com.tw/news/41345

    【其他文章推薦】

    ※教你寫出一流的銷售文案?

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※回頭車貨運收費標準

    ※別再煩惱如何寫文案,掌握八大原則!

    ※超省錢租車方案

  • Docker(三)Docker常用命令

    Docker(三)Docker常用命令

    Docker常用命令

    幫助命令

    # 显示 Docker 版本信息
    docker version  
    
    # 显示系統信息,包括鏡像和容器的數量
    docker info 
    
    # 查看幫助文檔 幫助文檔地址:https://docs.docker.com/reference/
    docker [命令] --help  
    

    鏡像命令

    查看最近創建的鏡像

    docker images 查看最近創建的鏡像

    docker images [OPTIONS] [REPOSITORY[:TAG]]
    
    # 幫助文檔
    [root@hwh1 ~]# docker images --help 
    Usage:	docker images [OPTIONS] [REPOSITORY[:TAG]]
    List images
    Options:
      -a, --all             Show all images (default hides intermediate images)    显示所有鏡像
          --digests         Show digests                                           显示摘要
      -f, --filter filter   Filter output based on conditions provided             根據提供的條件過濾輸出
          --format string   Pretty-print images using a Go template                用 Go 模板打印出一個圖像
          --no-trunc        Don't truncate output                                  不截斷輸出
      -q, --quiet           Only show numeric IDs                                  只显示数字 ID
    
    # 查看最近創建的鏡像
    # REPOSITORY  鏡像的倉庫源
    # TAG  鏡像的標籤
    # IMAGE ID  鏡像的id
    # CREATED  鏡像的創建時間
    # SIZE  鏡像的大小
    [root@hwh1 ~]# docker images   
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    hello-world         latest              bf756fb1ae65        5 months ago        13.3kB
    
    # 查看所有鏡像
    [root@hwh1 ~]# docker images -a
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    hello-world         latest              bf756fb1ae65        5 months ago        13.3kB
    
    # 只显示数字 ID
    [root@hwh1 ~]# docker images -q
    bf756fb1ae65
    

    搜索鏡像

    docker search 搜索鏡像

    docker search [OPTIONS] TERM
    
    [root@hwh1 ~]# docker search --help 
    Usage:	docker search [OPTIONS] TERM
    Search the Docker Hub for images
    Options:
      -f, --filter filter   Filter output based on conditions provided   根據提供的條件過濾輸出
          --format string   Pretty-print search using a Go template      用 Go 模板打印出一個圖像
          --limit int       Max number of search results (default 25)    搜索結果的最大值限制
          --no-trunc        Don't truncate output                       不截斷輸出
    
    
    [root@hwh1 ~]# docker search mysql
    NAME                              DESCRIPTION                                     STARS    OFFICIAL            AUTOMATED
    mysql                             MySQL is a widely used, open-source relation…   9626
    

    下載鏡像

    docker pull 下載鏡像

    docker pull [OPTIONS] NAME[:TAG|@DIGEST]
    
    [root@hwh1 ~]# docker pull --help 
    Usage:	docker pull [OPTIONS] NAME[:TAG|@DIGEST]
    Pull an image or a repository from a registry
    Options:
      -a, --all-tags                Download all tagged images in the repository      下載倉庫中標記所有的鏡像,拿來選擇版本
          --disable-content-trust   Skip image verification (default true)            跳過圖像驗證       
          --platform string         Set platform if server is multi-platform capable  如果服務器支持多平台,則設置平台
     -q, --quiet                   Suppress verbose output                           禁止詳細輸出              
    
    # 下載鏡像
    [root@hwh1 ~]# docker pull mysql
    Using default tag: latest                     # 版本信息(默認不設置tag,則為最新版)
    latest: Pulling from library/mysql           
    8559a31e96f4: Pull complete                   # 分層下載,docker image 的核心,聯合文件系統
    d51ce1c2e575: Pull complete 
    c2344adc4858: Pull complete 
    fcf3ceff18fc: Pull complete 
    16da0c38dc5b: Pull complete 
    b905d1797e97: Pull complete 
    4b50d1c6b05c: Pull complete 
    c75914a65ca2: Pull complete 
    1ae8042bdd09: Pull complete 
    453ac13c00a3: Pull complete 
    9e680cd72f08: Pull complete 
    a6b5dc864b6c: Pull complete 
    Digest: sha256:8b7b328a7ff6de46ef96bcf83af048cb00a1c86282bfca0cb119c84568b4caf6          # 簽名
    Status: Downloaded newer image for mysql:latest 
    docker.io/library/mysql:latest                 # 真實地址
    

    刪除鏡像

    docker rmi 刪除鏡像

    docker rmi [OPTIONS] IMAGE [IMAGE...]
    
    [root@hwh1 ~]# docker rmi --help 
    Usage:	docker rmi [OPTIONS] IMAGE [IMAGE...]
    Remove one or more images
    Options:
      -f, --force      Force removal of the image        強制刪除鏡像
          --no-prune   Do not delete untagged parents    不刪除未標記的父類
    
    
    # 刪除指定鏡像
    [root@hwh1 ~]# docker rmi mysql 
    Untagged: mysql:latest
    Untagged: mysql@sha256:8b7b328a7ff6de46ef96bcf83af048cb00a1c86282bfca0cb119c84568b4caf6
    Deleted: sha256:be0dbf01a0f3f46fc8c88b67696e74e7005c3e16d9071032fa0cd89773771576
    Deleted: sha256:086d66e8d1cb0d52e9337eabb11fb9b95960e2e1628d90100c62ea5e8bf72306
    Deleted: sha256:f37c61ee1973b18c285d0d5fcf02da4bcdb1f3920981499d2a20b2858500a110
    Deleted: sha256:e40b8bca7dc63fc8d188a412328e56caf179022f5e5d5b323aae57d233fb1069
    Deleted: sha256:339f6b96b27eb035cbedc510adad2560132925a835f0afddbcc1d311c961c14b
    Deleted: sha256:d38b06cdb26a5c98857ddbc6ef531d3f57b00e325c0c314600b712efc7ff6ab0
    Deleted: sha256:09687cd9cdf4c704fde969fdba370c2d848bc614689712bef1a31d0d581f2007
    Deleted: sha256:b704a4a65bf536f82e5d8b86e633d19185e26313de8380162e778feb2852011a
    Deleted: sha256:c37206160543786228aa0cce738e85343173851faa44bb4dc07dc9b7dc4ff1c1
    Deleted: sha256:12912c9ec523f648130e663d9d4f0a47c1841a0064d4152bcf7b2a97f96326eb
    Deleted: sha256:57d29ad88aa49f0f439592755722e70710501b366e2be6125c95accc43464844
    Deleted: sha256:b17c024283d0302615c6f0c825137da9db607d49a83d2215a79733afbbaeb7c3
    Deleted: sha256:13cb14c2acd34e45446a50af25cb05095a17624678dbafbcc9e26086547c1d74
    
    # 遞歸刪除(批量刪除)
    [root@hwh1 ~]# docker rmi -f $(docker images -aq)
    Untagged: hello-world:latest
    Untagged: hello-world@sha256:6a65f928fb91fcfbc963f7aa6d57c8eeb426ad9a20c7ee045538ef34847f44f1
    Deleted: sha256:bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b
    # 已全部刪除
    [root@hwh1 ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    
    

    容器命令

    注:下載一個 centos 鏡像測試

    新建容器並啟動

    docker run 新建容器並啟動

    [root@hwh1 ~]# docker pull centos
    Using default tag: latest
    latest: Pulling from library/centos
    8a29a15cefae: Pull complete 
    Digest: sha256:fe8d824220415eed5477b63addf40fb06c3b049404242b31982106ac204f6700
    Status: Downloaded newer image for centos:latest
    docker.io/library/centos:latest
    
    docker run
    
    [root@hwh1 ~]# docker run --help 
    Usage:	docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
    Run a command in a new container
    Options:
          -d, --detach                     Run container in background and print 
                                              container ID                           後台方式運行
          --name string                    Assign a name to the container            容器名字,來區分容器
          -i, --interactive                Keep STDIN open even if not attached      使用交互方式,進入容器查詢內容
          -t, --tty                        Allocate a pseudo-TTY                     使用交互方式,進入容器查詢內容
          -p, --publish list               Publish a container's port(s) to the host 指定容器端口 
              -p 主機端口:容器端口
              -p 容器端口
              -p ip:主機端口:容器端口
              容器端口
          -P, --publish-all                Publish all exposed ports to random ports 隨機端口
          
    
    # 啟動並進入容器,相當於一個小型虛擬機
    [root@hwh1 ~]# docker run  -it centos /bin/bash
    [root@af833bdd3acf /]# ls      # 基礎版 centos 很多命令都不完善
    bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
    dev  home  lib64  media       opt  root  sbin  sys  usr
    [root@af833bdd3acf /]# exit    # 退出命令
    exit
    

    列出所有正在運行的容器

    docker ps 列出所有正在運行的容器

    docker ps [OPTIONS]
    
    [root@hwh1 ~]# docker ps --help
    Usage:	docker ps [OPTIONS]
    List containers
    Options:
      -a, --all             Show all containers (default shows just running)           列出所有的容器,包括正在運行和停止的
      -f, --filter filter   Filter output based on conditions provided                 
          --format string   Pretty-print containers using a Go template
      -n, --last int        Show n last created containers (includes all states)       列出最近運行的容器
                            (default -1)
      -l, --latest          Show the latest created container (includes all states)    显示最後創建的容器
          --no-trunc        Don't truncate output                                      不截斷輸出
      -q, --quiet           Only display numeric IDs                                   只显示数字 ID
      -s, --size            Display total file sizes                                   显示文件總大小
    
    
    [root@hwh1 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    a0f986785f33        centos              "/bin/bash"         7 seconds ago       Up 5 seconds                            nervous_agnesi
    [root@hwh1 ~]# docker ps -n=1
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    a0f986785f33        centos              "/bin/bash"         6 minutes ago       Up 6 minutes                            nervous_agnesi
    [root@hwh1 ~]# docker ps -q
    a0f986785f33
    

    退出容器

    exit             # 直接容器停止並退出
    Ctrl + P + Q     # 不停止容器退出(快捷鍵)
    

    刪除容器

    docker rm 刪除容器

    docker rm [OPTIONS] CONTAINER [CONTAINER...]
    
    [root@hwh1 ~]# docker rm --help 
    Usage:	docker rm [OPTIONS] CONTAINER [CONTAINER...]
    Remove one or more containers
    Options:
      -f, --force     Force the removal of a running container (uses SIGKILL)      強制刪除正在運行的容器
      -l, --link      Remove the specified link                                    刪除指定的鏈接
      -v, --volumes   Remove anonymous volumes associated with the container       刪除與容器關聯的匿名卷
    
    [root@hwh1 ~]# docker rm af833bdd3acf      刪除已經停止的
    af833bdd3acf
    [root@hwh1 ~]# docker rm -f a0f986785f33   刪除正在運行的容器
    a0f986785f33
    
    # docker ps -a -q|xargs docker rm    # 刪除所有的容器,使用管道符
    

    啟動和停止容器操作

    docker start id       # 啟動
    docker restart id     # 重啟
    docker stop id        # 停止當前正在運行的容器
    docker kill id        # 強制停止當前容器
    
    [root@hwh1 ~]# docker start 7b28015cd7f6
    7b28015cd7f6
    [root@hwh1 ~]# docker restart 7b28015cd7f6
    7b28015cd7f6
    [root@hwh1 ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                   PORTS               NAMES
    7b28015cd7f6        centos              "/bin/bash"         46 seconds ago      Up 9 seconds                                 unruffled_wiles
    e2ff2fee0669        bf756fb1ae65        "/hello"            12 days ago         Exited (0) 12 days ago                       amazing_nightingale
    690a9f41c7a8        bf756fb1ae65        "/hello"            12 days ago         Exited (0) 12 days ago                       zealous_blackwell
    [root@hwh1 ~]# docker stop 7b28015cd7f6
    7b28015cd7f6
    [root@hwh1 ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS              NAMES
    7b28015cd7f6        centos              "/bin/bash"         57 seconds ago      Exited (0) 2 seconds ago                      unruffled_wiles
    e2ff2fee0669        bf756fb1ae65        "/hello"            12 days ago         Exited (0) 12 days ago                         amazing_nightingale
    690a9f41c7a8        bf756fb1ae65        "/hello"            12 days ago         Exited (0) 12 days ago       
    

    常用的其他命令

    後台啟動容器

    # docker run -d 鏡像名
    [root@hwh1 ~]# docker run -d centos
    9e34ebe17e41fb762f535ab21d81240b5fb4b105a44ed13c8813a8a8978f9b27
    # 問題:
    # docker ps -a,發現服務停止了
    # 常見的坑:
    # docker 容器使用後台運行,就必須要有要一個前台進程,docker發現沒有應用,就會自動停止
    

    查看日誌

    docker logs [OPTIONS] CONTAINER
    
    [root@hwh1 ~]# docker logs --help
    Usage:	docker logs [OPTIONS] CONTAINER
    Fetch the logs of a container
    Options:
          --details        Show extra details provided to logs                         显示額外的詳細信息
      -f, --follow         Follow log output                                           跟蹤日誌輸出
          --since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37) or     從時間戳開始显示
                           relative (e.g. 42m for 42 minutes)
          --tail string    Number of lines to show from the end of the logs (default   日誌显示行數
                           "all")
      -t, --timestamps     Show timestamps                                             显示時間戳
          --until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37)     在時間戳之前显示日誌
                           or relative (e.g. 42m for 42 minutes)
    

    查看容器中進程信息

    docker top CONTAINER [ps OPTIONS]
    
    [root@hwh1 ~]# docker top --help 
    Usage:	docker top CONTAINER [ps OPTIONS]
    Display the running processes of a container
    
    # docker top 容器id
    [root@hwh1 ~]# docker top 147f08710d27
    UID                 PID                 PPID                C                   STIME   
    root                76123               76105               0                   21:13  
    

    查看鏡像的元數據

    docker inspect [OPTIONS] NAME|ID [NAME|ID...]
    
    [root@hwh1 ~]# docker inspect --help 
    Usage:	docker inspect [OPTIONS] NAME|ID [NAME|ID...]
    Return low-level information on Docker objects
    Options:
      -f, --format string   Format the output using the given Go template          用 Go 模板打印出一個圖像
      -s, --size            Display total file sizes if the type is container      如果類型是容器的話,就显示容器大小
          --type string     Return JSON for specified type                         返回指定類型的 JSON 字符串
    
    # 查看 centos 的元數據
    [root@hwh1 ~]# docker inspect 147f08710d27
    [
        {
            "Id": "147f08710d2732d81ee9ce2680a7cfad48cbd186e87e27b081d82c103a29f084",
            "Created": "2020-06-15T13:13:13.783652979Z",
            "Path": "/bin/bash",
            "Args": [],
            "State": {
                "Status": "running",
                "Running": true,
                "Paused": false,
                "Restarting": false,
                "OOMKilled": false,
                "Dead": false,
                "Pid": 76123,
                "ExitCode": 0,
                "Error": "",
                "StartedAt": "2020-06-15T13:13:15.632825635Z",
                "FinishedAt": "0001-01-01T00:00:00Z"
            },
            "Image": "sha256:470671670cac686c7cf0081e0b37da2e9f4f768ddc5f6a26102ccd1c6954c1ee",
            "ResolvConfPath": "/var/lib/docker/containers/147f08710d2732d81ee9ce2680a7cfad48cbd186e87e27b081d82c103a29f084/resolv.conf",
            "HostnamePath": "/var/lib/docker/containers/147f08710d2732d81ee9ce2680a7cfad48cbd186e87e27b081d82c103a29f084/hostname",
            "HostsPath": "/var/lib/docker/containers/147f08710d2732d81ee9ce2680a7cfad48cbd186e87e27b081d82c103a29f084/hosts",
            "LogPath": "/var/lib/docker/containers/147f08710d2732d81ee9ce2680a7cfad48cbd186e87e27b081d82c103a29f084/147f08710d2732d81ee9ce2680a7cfad48cbd186e87e27b081d82c103a29f084-json.log",
            "Name": "/dazzling_benz",
            "RestartCount": 0,
            "Driver": "overlay2",
            "Platform": "linux",
            "MountLabel": "",
            "ProcessLabel": "",
            "AppArmorProfile": "",
            "ExecIDs": null,
            "HostConfig": {
                "Binds": null,
                "ContainerIDFile": "",
                "LogConfig": {
                    "Type": "json-file",
                    "Config": {}
                },
                "NetworkMode": "default",
                "PortBindings": {},
                "RestartPolicy": {
                    "Name": "no",
                    "MaximumRetryCount": 0
                },
                "AutoRemove": false,
                "VolumeDriver": "",
                "VolumesFrom": null,
                "CapAdd": null,
                "CapDrop": null,
                "Capabilities": null,
                "Dns": [],
                "DnsOptions": [],
                "DnsSearch": [],
                "ExtraHosts": null,
                "GroupAdd": null,
                "IpcMode": "private",
                "Cgroup": "",
                "Links": null,
                "OomScoreAdj": 0,
                "PidMode": "",
                "Privileged": false,
                "PublishAllPorts": false,
                "ReadonlyRootfs": false,
                "SecurityOpt": null,
                "UTSMode": "",
                "UsernsMode": "",
                "ShmSize": 67108864,
                "Runtime": "runc",
                "ConsoleSize": [
                    0,
                    0
                ],
                "Isolation": "",
                "CpuShares": 0,
                "Memory": 0,
                "NanoCpus": 0,
                "CgroupParent": "",
                "BlkioWeight": 0,
                "BlkioWeightDevice": [],
                "BlkioDeviceReadBps": null,
                "BlkioDeviceWriteBps": null,
                "BlkioDeviceReadIOps": null,
                "BlkioDeviceWriteIOps": null,
                "CpuPeriod": 0,
                "CpuQuota": 0,
                "CpuRealtimePeriod": 0,
                "CpuRealtimeRuntime": 0,
                "CpusetCpus": "",
                "CpusetMems": "",
                "Devices": [],
                "DeviceCgroupRules": null,
                "DeviceRequests": null,
                "KernelMemory": 0,
                "KernelMemoryTCP": 0,
                "MemoryReservation": 0,
                "MemorySwap": 0,
                "MemorySwappiness": null,
                "OomKillDisable": false,
                "PidsLimit": null,
                "Ulimits": null,
                "CpuCount": 0,
                "CpuPercent": 0,
                "IOMaximumIOps": 0,
                "IOMaximumBandwidth": 0,
                "MaskedPaths": [
                    "/proc/asound",
                    "/proc/acpi",
                    "/proc/kcore",
                    "/proc/keys",
                    "/proc/latency_stats",
                    "/proc/timer_list",
                    "/proc/timer_stats",
                    "/proc/sched_debug",
                    "/proc/scsi",
                    "/sys/firmware"
                ],
                "ReadonlyPaths": [
                    "/proc/bus",
                    "/proc/fs",
                    "/proc/irq",
                    "/proc/sys",
                    "/proc/sysrq-trigger"
                ]
            },
            "GraphDriver": {
                "Data": {
                    "LowerDir": "/var/lib/docker/overlay2/74794286462edce8a73f8e74239c0229d6cec3afac92f052951245d91e05c7cd-init/diff:/var/lib/docker/overlay2/ae0a1afad34903571dd0df8a39bc4bea93ccd793ae2f6185fa95385c18d56f05/diff",
                    "MergedDir": "/var/lib/docker/overlay2/74794286462edce8a73f8e74239c0229d6cec3afac92f052951245d91e05c7cd/merged",
                    "UpperDir": "/var/lib/docker/overlay2/74794286462edce8a73f8e74239c0229d6cec3afac92f052951245d91e05c7cd/diff",
                    "WorkDir": "/var/lib/docker/overlay2/74794286462edce8a73f8e74239c0229d6cec3afac92f052951245d91e05c7cd/work"
                },
                "Name": "overlay2"
            },
            "Mounts": [],
            "Config": {
                "Hostname": "147f08710d27",
                "Domainname": "",
                "User": "",
                "AttachStdin": true,
                "AttachStdout": true,
                "AttachStderr": true,
                "Tty": true,
                "OpenStdin": true,
                "StdinOnce": true,
                "Env": [
                    "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
                ],
                "Cmd": [
                    "/bin/bash"
                ],
                "Image": "centos",
                "Volumes": null,
                "WorkingDir": "",
                "Entrypoint": null,
                "OnBuild": null,
                "Labels": {
                    "org.label-schema.build-date": "20200114",
                    "org.label-schema.license": "GPLv2",
                    "org.label-schema.name": "CentOS Base Image",
                    "org.label-schema.schema-version": "1.0",
                    "org.label-schema.vendor": "CentOS",
                    "org.opencontainers.image.created": "2020-01-14 00:00:00-08:00",
                    "org.opencontainers.image.licenses": "GPL-2.0-only",
                    "org.opencontainers.image.title": "CentOS Base Image",
                    "org.opencontainers.image.vendor": "CentOS"
                }
            },
            "NetworkSettings": {
                "Bridge": "",
                "SandboxID": "dcbcaf21dc6395481ce4c27bd58e83b306aee13216f852b4ac92edab13dc6698",
                "HairpinMode": false,
                "LinkLocalIPv6Address": "",
                "LinkLocalIPv6PrefixLen": 0,
                "Ports": {},
                "SandboxKey": "/var/run/docker/netns/dcbcaf21dc63",
                "SecondaryIPAddresses": null,
                "SecondaryIPv6Addresses": null,
                "EndpointID": "1b8456cbbb162e74762144d5a13305ba84acb45db92ce2467c0bc15724077b72",
                "Gateway": "172.17.0.1",
                "GlobalIPv6Address": "",
                "GlobalIPv6PrefixLen": 0,
                "IPAddress": "172.17.0.2",
                "IPPrefixLen": 16,
                "IPv6Gateway": "",
                "MacAddress": "02:42:ac:11:00:02",
                "Networks": {
                    "bridge": {
                        "IPAMConfig": null,
                        "Links": null,
                        "Aliases": null,
                        "NetworkID": "23077e8fffbf9407b9d83e492e05cc11904b4dbf7fd3ab3a4b84c36c1a7ee4a5",
                        "EndpointID": "1b8456cbbb162e74762144d5a13305ba84acb45db92ce2467c0bc15724077b72",
                        "Gateway": "172.17.0.1",
                        "IPAddress": "172.17.0.2",
                        "IPPrefixLen": 16,
                        "IPv6Gateway": "",
                        "GlobalIPv6Address": "",
                        "GlobalIPv6PrefixLen": 0,
                        "MacAddress": "02:42:ac:11:00:02",
                        "DriverOpts": null
                    }
                }
            }
        }
    ]
    

    進入當前正在運行的容器

    # 我們通常容器都是使用後台方式運行的,需要進入容器,修改一些配置
    # 方式一 :docker exec -it 容器id bashShell
    # 進入容器后開啟一個新的終端,可以在裏面操作(常用)
    # docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
    
    [root@hwh1 ~]# docker exec --help 
    Usage:	docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
    Run a command in a running container
    Options:
      -d, --detach               Detached mode: run command in the background             在後台運行命令
          --detach-keys string   Override the key sequence for detaching a container      重寫用於分離容器的鍵序列
      -e, --env list             Set environment variables                                設置環境變量
      -i, --interactive          Keep STDIN open even if not attached                     即使沒有連接,也保持STDIN打開
          --privileged           Give extended privileges to the command                  授予命令擴展權限
      -t, --tty                  Allocate a pseudo-TTY                                    分配一個偽TTY
      -u, --user string          Username or UID (format: <name|uid>[:<group|gid>])       用戶名或者 id
      -w, --workdir string       Working directory inside the container                   容器內的工作目錄
      
    
    [root@hwh1 ~]# docker exec -it a41c80fd6d1c /bin/bash
    [root@a41c80fd6d1c /]# ls
    bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
    dev  home  lib64  media       opt  root  sbin  sys  usr
    
    
    # 方式二 :docker attach 容器id
    # 進入容器正在執行的終端,不會啟動新的終端
    # docker attach [OPTIONS] CONTAINER
    
    [root@hwh1 ~]# docker attach --help 
    Usage:	docker attach [OPTIONS] CONTAINER
    Attach local standard input, output, and error streams to a running container
    Options:
          --detach-keys string   Override the key sequence for detaching a container       重寫用於分離容器的鍵序列
          --no-stdin             Do not attach STDIN                                       不要附加STDIN
          --sig-proxy            Proxy all received signals to the process (default true)  將所有接收到的信號代理到進程(默認為true)
    
    
    [root@hwh1 ~]# docker attach a41c80fd6d1c
    [root@a41c80fd6d1c /]# ls
    bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
    dev  home  lib64  media       opt  root  sbin  sys  usr
    

    拷貝文件

    # 從容器被拷貝文件到主機上
    # docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-               docker cp 容器id:容器內路徑 目的的主機路徑
    
    # 從主機上拷貝文件到容器
    # docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH               docker cp 主機路徑 容器id:目的的容器內路徑
    
    [root@hwh1 ~]# docker cp --help 
    Usage:	docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
        	docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
    Copy files/folders between a container and the local filesystem
    
    Use '-' as the source to read a tar archive from stdin
    and extract it to a directory destination in a container.
    Use '-' as the destination to stream a tar archive of a
    container source to stdout.
    
    Options:
      -a, --archive       Archive mode (copy all uid/gid information)  存檔模式(複製所有uid/gid信息)
      -L, --follow-link   Always follow symbol link in SRC_PATH        始終遵循容器內路徑中的符號鏈接
    
    # 從容器被拷貝文件到主機上
    [root@hwh1 home]# docker attach a41c80fd6d1c
    [root@a41c80fd6d1c /]# cd /home
    [root@a41c80fd6d1c home]# ls
    [root@a41c80fd6d1c home]# touch hwh.java               # 在 home 目錄下創建一個  hwh.java
    [root@a41c80fd6d1c home]# ls
    hwh.java
    [root@hwh1 home]# ls
    hwh  hwh1  hwh2  user01  user02
    [root@hwh1 home]# docker cp a41c80fd6d1c:/home/hwh.java /home           # 將 hwh.java 複製到主機上
    [root@hwh1 home]# ls
    hwh  hwh1  hwh2  hwh.java  user01  user02
    
    

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

    ※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

    南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

    ※教你寫出一流的銷售文案?

    ※超省錢租車方案

  • NFC芯片選型及基本電路框架

    NFC芯片選型及基本電路框架

    RFID作為一項專業度較高的技術,在一些公司,可能還會專門招聘專業的RFID工程師。本篇闡述的涉及到的只是基本選型設計、電路框架,關於RFID天線調試、低功耗檢卡調試等,後續再其他篇章會繼續更新!

     

    NFC(Near Field Communication)芯片選型:

     

    主要考量點:

    芯片支持的協議、是否支持低功耗檢卡、是否能過金融認證、芯片價格

     

    芯片支持協議:

    • ISO14443A/B、ISO15693、 ISO18092 和 ISO21481 等

    • ISO14443A 卡:Mifare 系列、 Ultralight 系列、 Plus 系列、 CPU 卡系列等。

    • ISO14443B 卡:身份證、 SR176、 SRI512 等。

    • ISO15693:NXP 的 ICODE 系列、 TI 的 Tag_it HF-I、 ST LRI 等。

    • ISO18092:包括讀卡模式、卡模式、點對點通信模式。

    • ISO21481:在 ISO18092 基礎上兼容 ISO15693 協議。

    • LPCD 功能:芯片低功耗檢測卡片功能。沒有卡片靠近時,芯片處於低功耗狀態, 僅需10uA 電流,就能完成卡片偵測, 當卡片靠近時,芯片偵測到卡片,喚醒單片機讀卡。

    • 金融認證:PBOC2.0/3.0 標準、 EMV 標準

     

    電路架構:

     

    NFC芯片外部電路通常由以下幾個部分組成:供電電路、通信接口電路、天線電路、振蕩電路;

    供電電路:主要包括模擬電源AVDD、数字電源DVDD、發射器電源TVDD、引腳電源PVDD、測試引腳電源PVDD2;

    a. 如果需要提高發射功率可提高TVDD的電壓,例如5V供電的TVDD形成的發射功率會比3V的要強;

    b. 芯片的供電電流通常在幾十到幾百mA,主要的能量消耗在發射器的電路上。例如FM175xx的天線發射電流在100mA,RC663則可以達250mA,因此選擇供電芯片、電感器件時,需要注意留足余量;

    c.讀卡芯片天線13.56MHz的正弦波信號會幹擾電源,為減少傳導干擾,可以在電源端加π型濾波器,但為減少電路設計冗餘度,一般情況下不添加。

     

    通信接口:

    通常都支持SPI/I2C/UART,一般通過外部引腳配置選擇,為方便升級,可做兼容設計;

     

    天線設計:

    天線電路主要由4部分組成:EMC濾波、匹配電路、天線、接收電路。以FM17550為例,如下:

    濾波電路:

    由L1、C1組成的低通濾波器用於濾除13.56MHz的衍生諧波,該濾波器截止頻率應設計在14MHz以上。L1電感不可靠近擺放,以免互相干擾(互感效應)。濾波電路元件匹配公式:f=1/(2π√LC)

     

    匹配電路:

    用於調節發射負載和諧振頻率。射頻電路功率受芯片內阻和外阻抗影響,當芯片內阻和外阻抗一致時,發射功率效率最高。C2是負載電容,天線感量越大,C2取值越小。C3是諧振電容,取值和天線電感量直接相關,使得諧振頻率在13.56MHz。

     

    接收電路:

    C4濾除直流信號,R2和R3組成分壓電路,使得RX接收端正弦波信號幅度在1.5-3V之間。

     

    天線:

    • 由R1電阻(通常是1ohm或0ohm)和印製PCB組成。

    • 天線越大,讀卡距離越遠,當天線面積達到5cm x 5cm以後,再增大天線,讀卡距離沒有明顯提升。

    • 天線線寬建議選擇0.5mm – 1mm。天線大於5cm x 5cm不能多於3圈,小於3cm x 3cm不能小於4圈

    • 為減小EMC輻射干擾,需要將PCB走線轉角處畫成圓弧。

    • 天線區域內和天線邊緣禁止將信號、電源、地線畫成圈或者半圓,天線圈內不可有大面積金屬物體、金屬鍍膜,避免引起磁場渦流效應造成能力嚴重損耗。

    • 天線PCB繞線方式是相對的,不是同向。

    • 天線電路設計元件的精度應控制在2%以內,否則容易導致天線諧振頻點偏差,導致讀卡性能嚴重下降,產品一致性難以保證

    天線大小和讀卡距離關係

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    新北清潔公司,居家、辦公、裝潢細清專業服務

    ※別再煩惱如何寫文案,掌握八大原則!

    ※教你寫出一流的銷售文案?

    ※超省錢租車方案

  • 測試同學動手搭個簡易web開發項目

    測試同學動手搭個簡易web開發項目

    技術棧

    node.js, vue.js, axios, python, django, orm, restful api, djangorestframework, mysql, nginx, jenkins.

    環境配置

    操作系統

    Windows 7 旗艦版,Service Pack 1。

    前端

    Node.js

    >node -v
    v12.18.0
    >npm -v
    6.14.4
    

    Vue.js

    >vue -V(大寫)
    @vue/cli 4.4.1
    

    後端

    Python

    >python --version
    Python 3.7.2
    

    Django

    >python -m django --version
    3.0.7
    

    數據庫

    MySQL

    >mysqladmin --version
    mysqladmin  Ver 8.0.19 for Win64 on x86_64 (MySQL Community Server - GPL)
    

    命令行登錄mysql,

    >mysql -u root -p
    Enter password: ******
    

    查詢數據庫,

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | new_schema         |
    | performance_schema |
    | sakila             |
    | sys                |
    | world              |
    +--------------------+
    7 rows in set (0.00 sec)
    

    代理

    Nginx

    在nginx安裝目錄執行start nginx,瀏覽器訪問http://localhost:80,

    持續集成

    Jenkins

    安裝后,會自動打開http://localhost:8080/,

    軟件安裝過程就不贅述了,聰明的你一定知道怎麼安。

    項目搭建

    本文的目的是走通整個項目的鏈路,於是會“弱化”掉系統功能的實現。

    創建後端工程

    執行django-admin startproject djangotest創建項目。

    cd djangotest,執行python manage.py startapp myapp創建應用。

    python manage.py runserver,啟動服務,訪問http://localhost:8000/,

    創建RESTful API

    安裝mysqlclient和djangorestframework,

    pip --default-timeout=6000 install -i https://pypi.tuna.tsinghua.edu.cn/simple mysqlclient
    
    pip --default-timeout=6000 install -i https://pypi.tuna.tsinghua.edu.cn/simple djangorestframework
    

    在settings.py中,添加’rest_framework’和’myapp’,

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
    
        'rest_framework',
    
        'myapp',
    ]
    

    同時修改數據庫配置,

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': '127.0.0.1',
            'PORT': 3306,
            'NAME': 'world',
            'USER': 'root',
            'PASSWORD': '123456'
        }
    }
    

    在myapp\models.py添加model,model叫做HellloDjango,有2個字段id和name,

    from django.db import models
    
    # Create your models here.
    
    
    class HelloDjango(models.Model):
        id = models.AutoField(primary_key=True)
        name = models.CharField(null=False, max_length=64, unique=True)
    

    執行python manage.py makemigrations,提交,

    >python manage.py makemigrations
    Migrations for 'myapp':
      myapp\migrations\0001_initial.py
        - Create model HelloDjango
    

    執行python manage.py migrate,創建,

    >python manage.py migrate
    Operations to perform:
      Apply all migrations: admin, auth, contenttypes, myapp, sessions
    Running migrations:
      Applying contenttypes.0001_initial... OK
      Applying auth.0001_initial... OK
      Applying admin.0001_initial... OK
      Applying admin.0002_logentry_remove_auto_add... OK
      Applying admin.0003_logentry_add_action_flag_choices... OK
      Applying contenttypes.0002_remove_content_type_name... OK
      Applying auth.0002_alter_permission_name_max_length... OK
      Applying auth.0003_alter_user_email_max_length... OK
      Applying auth.0004_alter_user_username_opts... OK
      Applying auth.0005_alter_user_last_login_null... OK
      Applying auth.0006_require_contenttypes_0002... OK
      Applying auth.0007_alter_validators_add_error_messages... OK
      Applying auth.0008_alter_user_username_max_length... OK
      Applying auth.0009_alter_user_last_name_max_length... OK
      Applying auth.0010_alter_group_name_max_length... OK
      Applying auth.0011_update_proxy_permissions... OK
      Applying myapp.0001_initial... OK
      Applying sessions.0001_initial... OK
    

    看看數據庫,新增了auth_和django_開頭的表,以及model映射的表myapp_hellodjango,

    mysql> show tables;
    +----------------------------+
    | Tables_in_world            |
    +----------------------------+
    | auth_group                 |
    | auth_group_permissions     |
    | auth_permission            |
    | auth_user                  |
    | auth_user_groups           |
    | auth_user_user_permissions |
    | city                       |
    | country                    |
    | countrylanguage            |
    | django_admin_log           |
    | django_content_type        |
    | django_migrations          |
    | django_session             |
    | myapp_hellodjango          |
    +----------------------------+
    14 rows in set (0.00 sec)
    

    插入2條測試數據,

    mysql> insert into myapp_hellodjango(name) values('hello');
    Query OK, 1 row affected (0.09 sec)
    
    mysql> insert into myapp_hellodjango(name) values('django');
    Query OK, 1 row affected (0.20 sec)
    
    mysql> select * from myapp_hellodjango;
    +----+--------+
    | id | name   |
    +----+--------+
    |  2 | django |
    |  1 | hello  |
    +----+--------+
    2 rows in set (0.00 sec)
    

    照着官網的例子,在myapp目錄下新增urls.py,添加rest代碼,

    from django.conf.urls import url, include
    from rest_framework import routers, serializers, viewsets
    
    from .models import HelloDjango
    
    
    # Serializers define the API representation.
    class HelloSerializer(serializers.HyperlinkedModelSerializer):
        class Meta:
            model = HelloDjango
            fields = ['id', 'name']
    
    
    # ViewSets define the view behavior.
    class HelloViewSet(viewsets.ModelViewSet):
        queryset = HelloDjango.objects.all()
        serializer_class = HelloSerializer
    
    
    # Routers provide an easy way of automatically determining the URL conf.
    router = routers.DefaultRouter()
    router.register(r'hello', HelloViewSet)
    
    urlpatterns = [
        url(r'demo/', include(router.urls)),
    ]
    
    

    在djangotest下的urls.py中添加路由,

    from django.contrib import admin
    from django.urls import path, include
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('api/', include('myapp.urls'))
    ]
    

    通過這2個urls.py文件的指定,api接口的路徑為,/api/demo/hello。

    執行python manage.py runserver啟動服務,使用postman來調用http://127.0.0.1:8000/api/demo/hello/。先發1個post請求,往數據庫新增1條數據,

    再發1個get請求,會看到返回了3條數據,2條預先插入的數據,1條post請求新增的數據,

    創建前端工程

    在djangotest根目錄下,執行vue create vuetest,創建vue工程。

    默認安裝,一路回車,啪啪啪。

    開始創建,

    Vue CLI v4.4.1
    a  Creating project in D:\cicd\vuetest.
    a  Initializing git repository...
    aa Installing CLI plugins. This might take a while...
    

    創建成功,

    a  Successfully created project vuetest.
    a  Get started with the following commands:
    
     $ cd vuetest
     $ npm run serve
    

    執行cd vuetestnpm run serve,前端工程就啟動起來了,訪問http://localhost:8080/,Welcome to Your Vue.js App,

    前端調後端接口

    此時djangotest的目錄結構為,

    ├─djangotest
    │  ├─djangotest
    │  ├─myapp  # app
    │  ├─vuetest  # 前端
    │  ├─manage.py
    

    修改vuetest\src\components\HelloWorld.vue,添加{{info}},用來展示後端api返回的數據,

    <div class="hello">
      {{info}}
        <h1>{{ msg }}</h1>
    

    同時在<script>中使用axios添加ajax請求,請求http://127.0.0.1:8000/api/demo/hello/,將response.data賦值給info,

    <script>
    export default {
      name: 'HelloWorld',
      props: {
        msg: String
      },
      data() {
        return {
            info: 123
        }
      },
      mounted () {
        this.$axios
          .get('http://127.0.0.1:8000/api/demo/hello/')
          .then(response => (this.info = response.data))
          .catch(function (error) { // 請求失敗處理
            console.log(error);
          });
      }
    }
    </script>
    

    為了運行起來,需要安裝axios,

    npm install --save axios
    

    並在vuetest\src\main.js中引入,

    import Vue from 'vue'
    import App from './App.vue'
    import axios from 'axios'
    
    Vue.config.productionTip = false
    
    Vue.prototype.$axios = axios;
    
    new Vue({
      render: h => h(App)
    }).$mount('#app')
    

    分別啟動後端和前端服務,

    python manage.py runserver
    
    cd vuetest
    npm run serve
    

    嚯!ajax請求失敗了,F12可以看到報錯信息,

    localhost/:1 Access to XMLHttpRequest at ‘http://127.0.0.1:8000/api/demo/hello/’ from origin ‘http://localhost:8080’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.

    django的端口是8000,vue的端口是8080,vue在請求django的時候,出現了跨域問題。瀏覽器有個同源策略,域名+端口+協議都相同才認為是同一來源。

    通過配置django來解決,先安裝django-cors-headers,

    pip install django-cors-headers
    

    在settings.py中添加中間件和開關,

    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'corsheaders.middleware.CorsMiddleware',  # 添加
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ]
    
    CORS_ORIGIN_ALLOW_ALL = True  # 添加
    

    此時vue就可以請求到django提供的接口了,http://localhost:8080/

    前後端結合

    vuetest目錄下創建vue.config.js,這是因為django只能識別static目錄下的靜態文件,這裏指定vue生成靜態文件時套一層static目錄,

    module.exports = {
        assetsDir: 'static'
    };
    

    在vuetest目錄下執行npm run build,生成靜態文件到vuetest/dist文件夾。

    修改urls.py,指定django的模板視圖,

    from django.conf.urls import url
    from django.contrib import admin
    from django.urls import path, include
    from django.views.generic import TemplateView
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('api/', include('myapp.urls')),
        url(r'^$', TemplateView.as_view(template_name="index.html")),
    ]
    

    在settings.py中配置模板目錄為dist文件夾,

    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': ['vuetest/dist'],
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]
    

    指定靜態文件目錄為vuetest/dist/static,

    # Add for vuejs
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, "vuetest/dist/static"),
    ]
    

    瀏覽器訪問http://localhost:8000/,显示的不再是django的歡迎頁面,而是vue的頁面。

    前後端結合完成。vue的8080可以停了。

    Nginx轉發

    nginx常用3個命令,啟動,重新加載,停止,

    nginx start
    nginx -s reload
    nginx -s stop
    

    修改\conf\nginx.conf,監聽端口改為8090,添加轉發proxy_pass http://localhost:8000;

       server {
            listen       8090;
            server_name  localhost;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location / {
                root   html;
                index  index.html index.htm;
                proxy_pass http://localhost:8000;
            }
    

    執行nginx start,瀏覽器訪問http://localhost:8090/,也能正常訪問djangotest。

    通過nginx將8090轉發到了8000。

    持續集成

    本來想弄個pipline的,無奈家裡這台破機器安裝失敗,windows也沒有linux對jenkins支持好,只能將就做個雞肋版本。

    New Item,命名為vuetest,添加vue的build腳本,

    d:
    cd D:\cicd\djangotest\vuetest
    npm run build
    

    New Item,命名為djangotest,添加django的build腳本,

    d:
    cd D:\cicd\djangotest
    python manage.py runserver
    

    直接執行會報錯python不是可運行命令。添加python環境變量,在首頁左下角,

    把路徑D:\Python37添加為環境變量path並保存,

    建好的這2個job就可以用來編譯vue和啟動django了,

    專註測試,堅持原創,只做精品。歡迎關注公眾號『東方er』
    版權申明:本文為博主原創文章,轉載請保留原文鏈接及作者。

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    新北清潔公司,居家、辦公、裝潢細清專業服務

    ※別再煩惱如何寫文案,掌握八大原則!

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    ※超省錢租車方案

    ※教你寫出一流的銷售文案?

  • Pytorch入門——手把手帶你配置雲服務器環境

    Pytorch入門——手把手帶你配置雲服務器環境

    本文始發於個人公眾號:TechFlow,原創不易,求個關注

    今天這篇是Pytorch專題第一篇文章。

    大家好,由於我最近自己在學習Pytorch框架的運用,並且也是為了響應許多讀者的需求,推出了這個Pytorch專題。由於這個專題是周末加更的,所以不能保證更新進度,我盡量和其他專題一樣,每周一更。

    Pytorch簡介

    Pytorch底層是Torch框架,Torch框架是一個科學計算框架,擁有一個與Numpy類似的張量操作庫。非常靈活,但是它的語言是Lua,比較小眾,因此沒有廣泛流行。

    後來開發團隊在Torch的基礎上包裝了一層Python的Api,使得我們可以通過Python來進行調用。它是由Facebook的人工智能小組開發維護的,目前在業內也非常流行,尤其是學術界,幾乎清一色的Pytorch。它擁有兩個最大的優點,一個是動態網絡,像是TensorFlow等框架定義出來的神經網絡是靜態的,一旦寫死不能輕易改變。但是Pytorch我們可以零延遲地改變任何神經網絡。第二個有點是具有強大的GPU加速計算的工具,Pytorch的GPU加速非常好用。

    另外Pytorch的語法更加簡潔規範,更加Pythonic,學習曲線也更平穩一些。寫出來的代碼更加容易理解,更適合初學者。

    當然由於誕生的時間還短,並且在工業界的普及度還不如TensorFlow,所以它也有一些短板,比如一些底層的文檔不夠完善,一些功能欠缺等等。在我個人的學習和使用當中,我的體驗非常好,因此如果你沒有學過深度學習的框架的話,推薦使用它作為你的第一門框架。

    雲服務器

    既然是深度學習的框架,那麼最好是能夠擁有GPU環境。但是對於我們大多數人而言,GPU環境並不是一個容易的事情。比如我是Mac黨,本身的機器就沒有N卡,外接也不方便。當然沒有GPU用CPU硬肝也是可以的,不過發熱很嚴重,對電腦也有損傷。所以,最好的辦法就是租借網上的GPU雲服務器或者是雲服務。

    推薦一下滴滴雲服務器,我個人使用下來體驗還不錯,最便宜的只要兩塊多一個小時,應該比網吧上網便宜。最近在搞巨大活動,包年雲GPU只要2200,簡直是白菜價中的白菜價。注意這個優惠只能第一筆下單的時候享受。如果感興趣的話可以訪問鏈接:https://i.didiyun.com/2cvmFVGpCjz

    查看原文

    因為我是特邀用戶,所以我拿到了內部優惠的大師碼,如果要購買其他GPU雲服務器的話,可以在付款的時候輸入我的大師碼2323,可以再享受9折優惠。

    當然你也可以購買裝好環境的Notebook,或者是按照時常購買。Notebook好處是預裝了各種環境,上手可用,但是缺點是不支持定製化,一些操作不太方便。畢竟有了雲服務器可以自己搭建Notebook,但是Notebook並不支持服務器的功能。

    如果你想要使用其他雲服務器平台,可以查看我之前的文章

    想要學深度學習但是沒有GPU?我幫你找了一些不錯的平台

    環境配置

    為了防止一些小白租借了機器不會用,接下來提供一下配置環境的詳細教程(基於滴滴雲)。如果你用的別家的服務器,由於環境不一定完全相同,所以可能並不一定適用,只能當做參考。

    總之我們整個流程是:安裝Python3,安裝jupyter,配置jupyter遠程訪問,安裝Pytorch

    這些是明面上的流程,如果機器環境不健全,還會有一些隱藏流程。比如說普通的Linux環境需要配置apt-get,還需要下載git,wget等常用工具。如果沒有cuda驅動的話,還需要自己安裝cuda配置。如果其中的步驟出現了問題,還需要分析問題的原因解決問題。所以說配置環境說起來簡單,但是實際操作的時候問題並不少。

    安裝Python3

    yum install python36
    

    安裝 jupyter notebook

    sudo pip3 install ipython jupyter notebook lab
    

    設置jupyter的密碼

    jupyter notebook password
    

    生成jupyter notebook的配置,這個配置默認不存在,需要我們通過這個命令來生成。

    jupyter notebook --generate-config
    

    運行之後,會返回配置文件所在的路徑:

    我們用vim打開,修改其中的幾行:

    c.NotebookApp.ip='0.0.0.0'
    c.NotebookApp.open_browser = False
    c.NotebookApp.port =8888 # 可以自己指定
    

    我們需要將本地的端口和遠程進行綁定,這樣我們就可以在本地打開遠程的jupyter了。這一行代碼當中我們將本地的8899綁定了遠程的8888端口。這裏的8888端口就是上面配置當中的遠程的jupyter端口。

    ssh dc2-user@116.85.10.225 -L 127.0.0.1:8899:127.0.0.1:8888
    

    如果你喜歡的話,還可以安裝一下jupyter lab

    sudo pip3 install jupyterlab
    

    使用方法和notebook類似,在遠程執行命令開啟jupyter

    jupyter lab --allow-root
    

    啟動沒有問題的話,我們在本地訪問:http://localhost:8899就可以打開Jupyter,輸入密碼之後就可以使用了。

    當我們用完了雲服務器之後,要記得刪除機器。但由於平台機器數量有限,根據當前平台的設置,關機之後依然會為用戶保留資源,但是前提是需要付費。如果你是按時租的服務器顯然不能接受自己沒在使用還需要付費。針對這個問題,我們可以通過快照來解決。我們在關機之前先創建快照

    然後刪除雲服務器,下次重新創建服務器的時候選擇從快照創建。這樣下次創建的機器還可以保留當前的配置和數據,而且也不需要扣費了。如果你嫌麻煩的話,還可以加我的微信聯繫我,我幫你找到工作人員加入關機免扣費的白名單

    我們用pip安裝一下Pytorch和一些其他需要用到的包。安裝好了,之後,我們通過torch.cuda.is_avaiable()查看一下cuda的情況,如果輸出是True,那說明已經安裝好了。

    tensor

    Pytorch當中很重要的一個概念就是tensor,它直譯過來是張量,TensorFlow當中的tensor也是這個意思。我們可以認為tensor是一個高維的數組。當它是0維的時候就是一個數,一個標量。當它是一維的時候就是一個向量,二維的時候是一個矩陣,多維的時候是高維的數組。它和Numpy當中的數組類似,不過Tensor可以使用GPU進行加速。

    我們通過torch當中的接口來初始化tensor,和Numpy當中的數組類似,它支持好幾種初始化的方式。

    empty函數創建一個指定大小的未初始化的tensor,當中的元素內容是不可保證的。

    rand創建一個隨機初始化的數組:

    ones和zeros創建全是0或者全是1的數組:

    我們可以傳入類型指定元素的類型

    我們也可以通過現成的數組創建tensor:

    這些創建函數都有對應的like方法,可以傳入一個已有的tensor,創建出一個和它一樣大小的新的tensor來。

    這裏只是列舉了常用的幾種,官方的api當中還有其他的幾種創建tensor的方式:

    除此之外,tensor還支持從numpy的數組當中創建,我們可以利用from_numpy函數來實現:

    同理,我們也可以通過numpy函數,從一個tensor得到numpy的數組:

    還可以通過tolist方法將tensor轉化成Python的數組:

    函數 功能
    Tensor(*sizes) 基礎構造函數
    tensor(data,) 類似np.array的構造函數
    ones(*sizes) 全1Tensor
    zeros(*sizes) 全0Tensor
    eye(*sizes) 對角線為1,其他為0
    arange(s,e,step) 從s到e,步長為step
    linspace(s,e,steps) 從s到e,均勻切分成steps份
    rand/randn(*sizes) 均勻/標準分佈
    normal(mean,std)/uniform(from,to) 正態分佈/均勻分佈
    randperm(m) 隨機排列

    我們在創建tensor的時候不僅可以指定它們的類型,還可以指定它們存放的設備。比如是CPU還是GPU。當然前期我們暫時用不到這點,只需要記得即可。

    總結

    這是Pytorch的第一篇文章,我們簡單了解了一下這個框架,以及它當中tensor這個數據結構。簡單來說,我們可以用常用的Numpy去類比它。基本上Numpy當中有的功能它都有,它還有一些自己特性Numpy沒有的api。但不管怎麼說,萬變不離其宗,tensor的用處就是為了方便我們處理數據的

    關於Pytorch中tensor的用法還有很多,實在是沒有辦法在一篇文章當中窮盡,所以這裏只是簡單介紹,具體的用法將會放在下一篇文章當中,讓我們下周再見吧。

    如果喜歡本文,可以的話,請點個關注,給我一點鼓勵,也方便獲取更多文章。

    本文使用 mdnice 排版

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※教你寫出一流的銷售文案?

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※回頭車貨運收費標準

    ※別再煩惱如何寫文案,掌握八大原則!

    ※超省錢租車方案

  • MySQL按指定字符合併及拆分

    MySQL按指定字符合併及拆分

    按照指定字符進行合併或拆分是經常碰到的場景,MySQL在合併的寫法上比較簡單,但是按指定字符拆分相對比較麻煩一點(也就是要多寫一些字符)。本文將舉例演示如何進行按照指定字符合併及拆分。

    1、 合併

    MySQL數據庫中按照指定字符合併可以直接用group_concat來實現。

    創建測試表

    mysql> create table  tb_group(id int auto_increment primary key ,col1 varchar(20));
    Query OK, 0 rows affected (0.01 sec)

    插入測試數據

    mysql> insert into  tb_group(col1) values('a'),('c'),('dddd'),('ewdw'),('vxgdh');;
    Query OK, 5 rows affected (0.01 sec)
    Records: 5  Duplicates: 0  Warnings: 0

    合併col1字段的內容

    默認是按照逗號進行合併的,例如:

    mysql> select group_concat(col1) from tb_group; 
    +---------------------+
    | group_concat(col1)  |
    +---------------------+
    | a,c,dddd,ewdw,vxgdh |
    +---------------------+
    1 row in set (0.01 sec)

    指定分隔符合併,例如指定使用 ||  符號進行合併

    mysql> select group_concat(col1,'||') from tb_group; 
    +-------------------------------+
    | group_concat(col1,'||')       |
    +-------------------------------+
    | a||,c||,dddd||,ewdw||,vxgdh|| |
    +-------------------------------+
    1 row in set (0.00 sec)

    注意

    默認情況下,合併后的長度不能超過1024,否則結果會被截斷

    例如,我再寫個腳本插入一些數據

    #  使用shell腳本來實現
    vim  test_insert.sh
    #   添加如下內容 
    
    #!/bin/bash
    # gjc
    
    for i in  {1..1025}
    do
        mysql -uroot -p'123456' --socket=/data/mysql3306/tmp/mysql.sock  -e "insert into testdb.tb_group1(col1)values('a') "
    done
    
    #  運行腳本插入數據 
    sh test_insert.sh
    mysql> select  count(*)from tb_group;
    +----------+
    | count(*) |
    +----------+
    |     1030 |
    +----------+
    1 row in set (0.00 sec)

    再進行合併

    mysql> select group_concat(col1)cols, length(group_concat(col1)) col_len from tb_group\G
    *************************** 1. row ***************************
       cols: a,c,dddd,ewdw,vxgdh,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,
    col_len: 1024
    1 row in set, 2 warnings (0.01 sec)

    可以看出,結果中總長度字節只有1024

    對於這種情況,實際使用時肯定是不滿足的,如何解決呢?其實此長度與MySQL數據庫的group_concat_max_len參數有直接關係(默認為1024)

    mysql> show global variables like 'group_concat_max_len';
    +----------------------+-------+
    | Variable_name        | Value |
    +----------------------+-------+
    | group_concat_max_len | 1024  |
    +----------------------+-------+
    1 row in set (0.08 sec)

    那我們調整一下參數看看

    /* 修改全局參數,這樣所有的新連接都會生效 */
    mysql> set  global group_concat_max_len=102400;
    Query OK, 0 rows affected (0.01 sec)
    
    /* 修改本會話參數,這樣當前連接不用退出也可以生效 */
    mysql> set  session  group_concat_max_len=102400;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> show global variables like 'group_concat_max_len';
    +----------------------+--------+
    | Variable_name        | Value  |
    +----------------------+--------+
    | group_concat_max_len | 102400 |
    +----------------------+--------+
    1 row in set (0.00 sec)
    
    mysql> show  variables like 'group_concat_max_len';
    +----------------------+--------+
    | Variable_name        | Value  |
    +----------------------+--------+
    | group_concat_max_len | 102400 |
    +----------------------+--------+
    1 row in set (0.01 sec)

    再合併一下看看

    mysql> select group_concat(col1)cols, length(group_concat(col1)) col_len from tb_group\G
    *************************** 1. row ***************************
       cols: a,c,dddd,ewdw,vxgdh,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
    col_len: 2069
    1 row in set (0.01 sec)

    這樣結果就對了。因此生產環境中 該參數建議調整為合適的大小。

    (Tips:Oracle數據庫中可以使用listagg或wm_concat等多種方式實現,也比較簡單,可以自行測試)

    2、 拆分

    按指定字符拆分字符串,也是比較常見的場景。但是MySQL數據庫中字符串的拆分沒有其他數據庫那麼方便(其他數據庫直接有拆分函數),且需要藉助mysql庫中的mysql.help_topic表來輔助實現。例子如下:

    創建測試表及數據

    mysql> create table tb_split(id int primary key auto_increment,col1 varchar(20));
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> insert into  tb_split(col1) values('a,b,c,d'),('c,a,g,h');
    Query OK, 2 rows affected (0.01 sec)
    Records: 2  Duplicates: 0  Warnings: 0

    按照逗號拆分

    mysql> SELECT a.id, substring_index(substring_index(a.col1, ',', b.help_topic_id + 1), ',',- 1) NAME  

    FROM tb_split a JOIN mysql.help_topic b

    ON b.help_topic_id < (length(a.col1) - length(REPLACE(a.col1, ',', '')) + 1); +----+------+ | id | NAME | +----+------+ | 1 | a | | 1 | b | | 1 | c | | 1 | d | | 2 | c | | 2 | a | | 2 | g | | 2 | h | +----+------+ 8 rows in set (0.00 sec)

    這樣也就實現了拆分。

    按指定字符拆分

    如果是其他分隔符的,修改瑞陽的分隔符字段即可。

    mysql> insert into  tb_split(col1) values('a|v|f');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select  * from tb_split;
    +----+---------+
    | id | col1    |
    +----+---------+
    |  1 | a,b,c,d |
    |  2 | c,a,g,h |
    |  3 | a|v|f   |
    +----+---------+
    3 rows in set (0.01 sec)
    
    mysql> SELECT a.id, substring_index(substring_index(a.col1, '|', b.help_topic_id + 1), '|',- 1) col_split  FROM tb_split a JOIN mysql.help_topic b ON b.help_topic_id < (length(a.col1) - length(REPLACE(a.col1, '|', '')) + 1) where a.id=3;
    +----+-----------+
    | id | col_split |
    +----+-----------+
    |  3 | a         |
    |  3 | v         |
    |  3 | f         |
    +----+-----------+
    3 rows in set (0.00 sec)

    這樣就完成按照指定字符的合併及拆分了。

    3、 結語

    本文介紹了MySQL常用的合併及拆分方法,對於擅長寫SQL的同學也可以使用其他方式實現,以便解決權限不足(例如拆分時需要使用mysql庫的help_topic表的權限)等情況下的需求。

    想了解更多內容或參与技術交流可以關注微信公眾號【數據庫乾貨鋪】或進技術交流群溝通。

     

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※超省錢租車方案

    ※別再煩惱如何寫文案,掌握八大原則!

    ※回頭車貨運收費標準

    ※教你寫出一流的銷售文案?

  • 菲南民答那峨島規模6.3強震

    摘錄自2019年10月17日中央社報導

    菲律賓南部民答那峨島北可塔巴托省(North Cotabato)杜路南鎮(Tulunan)東南方約22公里處,16日7時37分發晚間發生規模6.3強震,震源深度僅15公里,附近省份都感受到地震震波。已知造成2人死亡,至少20多人受傷。ABS-CBN新聞網報導,根據菲律賓火山暨地震研究所(Phivolcs)資訊,這起地震沒有海嘯風險。美國地質研究所測得地震規模為6.4。

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

    ※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

    南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

    ※教你寫出一流的銷售文案?

    ※超省錢租車方案

  • 氣候變遷示威者中斷倫敦交通 與通勤民眾爆衝突

    摘錄自2019年10月17日中央社報導

    自「反抗滅絕」10月7日在倫敦發動新一波公民不服從運動以來,社運人士17日中斷了英國倫敦東區的鐵路交通,社群媒體影片顯示,一名爬上地鐵車廂的示威者與憤怒的通勤民眾爆發肢體衝突。

    英國交通警察局(BTP)表示,警方正因應在靠近倫敦金絲雀碼頭(Canary Wharf)金融區的沙德韋爾(Shadwell)、斯特拉特福(Stratford)及坎寧鎮(Canning Town)發生的事件。警方在聲明中指出:「已經展開逮捕行動,警方正致力迅速恢復服務。」

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    新北清潔公司,居家、辦公、裝潢細清專業服務

    ※別再煩惱如何寫文案,掌握八大原則!

    ※教你寫出一流的銷售文案?

    ※超省錢租車方案