分类目录归档:未分类

黑群晖 docker 无法拉取镜像 查询注册表失败 解决办法

问题关键是官方连不上了。

解决办法就是使用国内加速站:比如https://docker.nju.edu.cn

可以把此站加入群晖的镜像站中并使用,不服错了。但还是搜不出来镜像

两个办法:

1 使用SSH连接到群晖用命令下载,然后到自带的管理页面的镜像页中就可以看到刚刚下载的镜像了

操作:

先搜索需要的镜像

aaaa@DS918PLUS:~$ sudo docker search ubuntu
Password:
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys… 17003 [OK]
websphere-liberty WebSphere Liberty multi-architecture images … 298 [OK]
ubuntu-upstart DEPRECATED, as is Upstart (find other proces… 115 [OK]
ubuntu/nginx Nginx, a high-performance reverse proxy & we… 112
neurodebian NeuroDebian provides neuroscience research s… 107 [OK]
ubuntu/squid Squid is a caching proxy for the Web. Long-t… 88
ubuntu/bind9 BIND 9 is a very flexible, full-featured DNS… 83
ubuntu/apache2 Apache, a secure & extensible open-source HT… 72
open-liberty Open Liberty multi-architecture images based… 64 [OK]
ubuntu/mysql MySQL open source fast, stable, multi-thread… 61
ubuntu/prometheus Prometheus is a systems and service monitori… 60
ubuntu-debootstrap DEPRECATED; use “ubuntu” instead 52 [OK]
ubuntu/kafka Apache Kafka, a distributed event streaming … 47
ubuntu/postgres PostgreSQL is an open source object-relation… 37
ubuntu/redis Redis, an open source key-value store. Long-… 22
ubuntu/dotnet-aspnet Chiselled Ubuntu runtime image for ASP.NET a… 18
ubuntu/dotnet-runtime Chiselled Ubuntu runtime image for .NET apps… 16
ubuntu/dotnet-deps Chiselled Ubuntu for self-contained .NET & A… 15
ubuntu/jre Distroless Java runtime based on Ubuntu. Lon… 13
ubuntu/zookeeper ZooKeeper maintains configuration informatio… 13
ubuntu/grafana Grafana, a feature rich metrics dashboard & … 9
ubuntu/prometheus-alertmanager Alertmanager handles client alerts from Prom… 9
ubuntu/memcached Memcached, in-memory keyvalue store for smal… 5
ubuntu/cortex Cortex provides storage for Prometheus. Long… 4
ubuntu/cassandra Cassandra, an open source NoSQL distributed … 2

然后拉取:关键是指定镜像站

aaaa@DS918PLUS:~$ sudo docker pull docker.nju.edu.cn/library/ubuntu:16.04
16.04: Pulling from library/ubuntu
58690f9b18fc: Pull complete
b51569e7c507: Pull complete
da8ef40b9eca: Pull complete
fb15d46c38dc: Pull complete
Digest: sha256:1f1a2d56de1d604801a9671f301190704c25d604a416f59e03c04f5c6ffee0d6
Status: Downloaded newer image for docker.nju.edu.cn/library/ubuntu:16.04
docker.nju.edu.cn/library/ubuntu:16.04

2 第二个办法就是安装Portainer

这个也是用方法1:安装docker镜像 汉化好的镜像名称为 6053537/portainer-ce

sudo docker pull docker.nju.edu.cn/6053537/portainer-ce

下载好后运行

sudo docker run -d –restart=always –name=”portainer” -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data 6053537/portainer-ce

然后打开http://网盘IP:9000

第一次进入就设置一个12位的密码

然后配置好源,就可以web页直接下载镜像了

碧霞元君 北顶娘娘庙事件 鸟巢

简介:

碧霞元君是以中国大陆华北地区为中心的山神信仰(道教),称为“东岳泰山天仙玉女碧霞元君”。中国古代神话传说中的女神。其道场是在中国五岳之尊的东岳泰山,位于山东省的泰安市。碧霞元君的影响力由山东省泰安市传播开来,历经上千年,特别是在明清时期以后,对于中国北方地区文化产生了重大的影响。
碧霞元君全称为“东岳泰山天仙玉女碧霞元君”,道经称为“天仙玉女碧霞护世弘济真人”“天仙玉女保生真人宏德碧霞元君”。因坐镇泰山,尊称泰山圣母碧霞元君,俗称泰山娘娘、泰山老奶奶、泰山老母、万山奶奶等。道教认为,碧霞元君“庇佑众生,灵应九州”“统摄岳府神兵,照察人间善恶”,是道教中的重要女神,中国历史上影响最大的女神之一。
中国民间的“北元君 南妈祖”的说法,指得是泰山奶奶和妈祖娘娘之间,虽然有地域之差和山神、海神之别,但同样都普度众生、舍己为人,成为北方地区和南方地区闻名于世的保护女神,“碧霞”意指东方的日光之霞,“元君”则带有浓重的道教色彩,是对道教女神的尊称

 

鸟巢迁址事件:

鸟巢西南,水立下南边有一座古庙,供奉民间传说中的北顶娘娘,许多老人十分敬畏这座庙宇。但是,当时为了方便施工,准备拆掉这座庙宇。各项准备工作结束以后,拆迁工程就开始了。然而,刚刚拆掉两扇门后,鸟巢附近就刮来了一阵罕见的大风,将已经建好的地基全部摧毁,建筑现场有两名工人被砖石打死(后奇迹复活,编者注),几十名工人受伤。专家告诉大家说这是陆地上罕见的尘卷风,数百年才出现一次。大家虽然觉得十分怪异,但想到专家这么说,拆迁工作还是继续进行。但是,第二天,一个更离奇的消息从水立方传来。在水立方的施工现场,挖掘到一个巨大的洞,几名工人好奇,稍稍往里面探了探,发现里面竟然全是蛇!施工立即停止!就在停工的这一天,鸟巢和水立方晚上发生了不明原因的停电,大家在停电时眺望远方时,发现北顶娘娘庙那里灯火通明,就如同有万盏电灯那样,可是在那儿根本就没有电灯的啊。总工程师连夜召集大家开会研究,最后放弃了拆迁,并把鸟巢和水立方往北方移了一段距离,也就是说,我们今天看到的这两座体育场并不是在最初决定的地方,而是在冥冥中的指示下往北移了。虽然耗费了不少财力物力,但是后来的施工十分顺利,而且也保护下来了这座数百年历史的古建筑。

我觉得应该是真有其事,因为按照那谁谁的一般做事风格,如果不是因为有特别原因,是不可能改动这个国际性的建筑设计,也就是说这里真的是有神仙。我多次前去许愿,我觉得还是挺灵验的:)

 

再来几张图(点击看大图)

一般纳税人公司与小规模公司的不同

一般纳税人公司与小规模公司的不同

1、一般纳税人容易和一般纳税人作生意,通常大公司都是一般纳税人,因此生意容易做大。
2、一般纳税人的财务、税务、管理要求规范,财务人员要求高,可以减少经营风险、涉税风险。
3、一般纳税人有一定的经营实力才能申请到,因此让客户感到值得信任。
4、一般纳税人取得增值税进项票可以抵扣,税负比较合理,毛利低一点的生意也可以做,因此生意也容易作大。
结论:企业要做大买卖,一定要做一般纳税人!

增值税一般纳税人与小规模纳税人的主要区别就在于,一般纳税人销售货物可以开具增值税专用发票,购进货物可以取得增值税专用发票,在缴纳增值税时按照销项税额与进项税额的差进行纳税;而小规模纳税人在销售货物时不可以开具增值税专用发票,在购进货物时不可以取得增值税专用发票,在缴纳增值税时按照销售收入乘以6%(工业企业)或4%(商业企业)的简易税率计算纳税。

小规模纳税人同一般纳税人相比,有以下两个方面的局限性。一是缴纳增值税时,按照销售收入乘以6%(工业企业)或4%(商业企业)的简易税率计算纳税,而增值税一般纳税人按照销项减进项的方法计算纳税后,应交增值税占销售收入的比例一般要低于6%或4%,有很多企业远远低于这个比率。第二个局限是:小规模纳税人在销售货物时不可以开具增值税专用发票,这样它的购货方就减少了很多,有很多增值税一般纳税人由于不能从小规模纳税人那里取得增值税专用发票用于抵扣税款,取消了与小规模纳税人的业务往来,使小规模纳税人的生产经营减少了市场。因此,从企业的发展远景看,要想实现更大的发展,拓展更大的市场,还是一般纳税人有利一些。

一般纳税人和小规模纳税人的区别:

①使用发票不同。小规模纳税人销售只能使用普通发票,不能使用增值税专用发票,购买货物与一般纳税人相同,可以收普通发票也能收增值税专用发票,二者收取增值税专用发票后帐务处理不同.一般纳税人按价款部分入成本,税款部分入”应交税金–应交增值税–进项税额”帐户;小规模纳税人则按全额进入成本.

②应交税金的计算方法不同。一般纳税人按”抵扣制”计算税金,即按销项减进项后的余额交税.小规模纳税人按销售收入除于(1+适用税率)后的金额再乘税率计算应交税金,工业6%,商业4%。

③税率不同,一般纳税人分为0税率、13%税率、17%税率。小规模纳税人,商业企业按4%;工业企业按6% ,(免税的除外)。

如何申请一般纳税人企业(一般纳税人企业的认定):

一、认定条件:
1)主要从事生产或提供应税劳务(特指加工、修理修配劳务)的:年销售额在100万元以上的,可以认定为一般纳税人,100万以下的为小规模;2)主要从事货物批发零售的:年销售额180万以上的可以认定为一般纳税人,180万以下为小规模。工业企业年销售额在100万以下的,商品流通企业年销售额在180万以下的,属于小规模纳税人;反之,为一般纳税人 。
二、税收管理的规定:
1)一般纳税人:销售货物或提供应税劳务可以开具增值税专用发票;购进货物或应税劳务可以作为当期进项税抵扣;计算方法为销项减进项。
2)小规模:只能使用普通发票;购进货物或应税劳务即使取得了增值税专用发票也不能抵扣;计算方法为销售额×征收率。
三、税率与征收率:
1)一般纳税人:基本税率17%,税法还列举了5类适应13%低税率的货物,还有几项特殊业务按简易办法征收(参照小规模)。还有零税率应税劳务和货物。
2)小规模:商业小规模按4%征收率;商业以为小规模按6%

analogWrite怎麼做PWM輸出?改PWM頻率,定时器相關

大家都知道在 Arduino UNO 有六支 pin 可以使用 analogWrite( )做 PWM 輸出,
在板子上 pin 旁邊標示有 “~” 符號, analogWrite( ) 可以用來產生模擬電壓,
很多人一定很好奇那是怎麼做到的 ?

首先來看看 PWM 模擬電壓的原理, 這在官網上就有解說了:
     http://arduino.cc/en/Tutorial/SecretsOfArduinoPWM
所謂的 PWM 全稱是 Pulse-Width Modulation (PWM), 其實這也沒啥學問,
就是對 GPIO 腳位不斷的切換 “有電” “沒電”,
每秒鐘循環幾次即為其 Frequency(頻率),
每次”有電”時間佔一個循環的百分比稱為其佔空比(Duty cycle);
以下是官網上的模擬範例:
int pin = 13;
void setup() {
  pinMode(pin, OUTPUT);
}
void loop(){
  digitalWrite(pin, HIGH);
  delayMicroseconds(100); // Approximately 10% duty cycle @ 1KHz
  digitalWrite(pin, LOW);
  delayMicroseconds(1000 – 100);
}
這個範例中, 一個循環是 1000 us = 1ms, 所以一秒循環 1000次, 因此 Frequency 是 1 KHz,
每個循環中, 有電的比率是 100/1000 * 100% = 10%, 所以 duty cycle (佔空比)為 10%;
這樣就可以模擬出 5Volt x 10% = 0.5 Volt 的電壓!
如果真的這樣做, 有好處也有壞處, 官網上已經說了:
好處是任一支 pin 都可這樣用, 包括 Pint 0 到 Pin 13, 以及 Pin A0 到 A5 共 20支 pin 都可以!
壞處卻更多, 首先就是頻率(Frequency)和佔空比(duty cycle)可能受中斷(Interrup)的影響變成不是很準確 !!
最大的壞處是, 在某支 pin 做 PWM 輸出期間都沒辦法做別的事情 !!

既然說這只是示範可以這樣做, 在  Arduino 當然不可能是這麼做,
那 Arduino 是怎麼做的呢?

就是透過 Timer 計時器直接控制 pin 做 PWM 輸出, Arduino UNO 的 MCU 有三個 timer,
其中 timer0 控制 pin 5, pin 6; timer1 控制 pin 9, pin 10; timer 2 控制 pin 11, pin 3;
所以, 我們可以對這些 pin analogWrite(pin, val); 輸出 0 到 255 的 val 值到 pin ;
如果輸出 val 是 0, 它會偷偷直接改用 digitalWrite(pin, 0); 輸出,
如果 val 是 255, 也是會偷偷直接改用 digitalWrite(pin, 1); 輸出!
如果 val 是 1 到 254, 則會下命令請 pin 腳對應的 timer 計時器(定時器)幫忙!!
How ?
首先要知道 timer 的基本知識:
(1)每個 timer 一定有個 counter, 例如 timer0 的TCNT0, timer1 的TCNT1, timer2 的TCNT2;
該 counter 一定是每個 tick 會加 1, 每個 tick 通常是把 CPU 的 clock 拿來經過一個除頻電路,
然後給 timer 使用; Arduino UNO 採用 AVR ATmega328 MCU, 且 clock Rate 是 16MHz,
每個 timer 的除頻 Prescaler 是獨立設定的, 通常可以設 1, 2, 4, 8, 64, 256, or 1024 等,
這必須看 MCU 的 datasheet.

(2)每個 timer 通常提供許多 mode 運作模式, 例如 counter 溢出(Overflow)或Rollover歸零時產生中斷,
或 TCNT? 達到某個值時產生中斷等, Arduino ATmega328 的 timer 有 16種 mode, 許多 Mode 是與 PWM 有關;
要設定 timer 的 Mode 可以透過修改 timer 的控制暫存器, 例如 TCCR?A, TCCR?B,    注意以 ATmega328 為例, TCCR?A 和 TCCR?B 要合起來用, 此處的 A, B 與 channel A, channel B 無關!!

(3)每個 timer 通常有比較暫存器(Compare Register), 當 TCNT? 值與該些比較暫存器相同時可以做某事,
   不一定是對 CPU 產生中斷! Arduino 每個 timer 有兩個比較暫存器, 分別命名 OCR?A 和 OCR?B,
  其中 ? 是 0, 1, 2 分別對應到 timer0, timer1, 和 timer2 這三個計時器.

你可以先偷看 analogWrite( ) 的程序碼:
    在你 Arduino IDE 下的 hardware\arduino\cores\arduino\wiring_analog.c
很簡單, 真正請 timer 幫忙只做三件事: a.找出對應的 port, b.設定控制暫存器, c.填入 analog的值到比較暫存器!
不過你會發現看不太懂, 因為還不知道硬體 timer 控制 PWM 運作方式與原理!
不想看 datasheet 可以參考這:
http://letsmakerobots.com/conten … mers-and-interrupts

以Arduino UNO 的 timer1為例, 在 mode 5 (Fast PWM, 8 bit), 此時, TCNT1 從 0 數到 255, 然後又加 1 就變0, …
通常從 255 (此 mode 的最大值)又加 1 變為 0 之時會產生 OVF 中斷(TIMSK1的TOIE1要 set), 不過這與 PWM 無關!
PWM 不是用 Interrupt  中斷請求做的, 不必麻煩 CPU, CPU 只要下命令給 timer, timer 就會照命令執行PWM工作 !!
    PWM 是利用每個 timer 上的兩個”匹配符合輸出”暫存器(Compare Match Output) COM?A 和 COM?B;
(注意雖是 Compare Match Output, 但暫存器名稱是 COMxy 不是 CMOxy 喔 !)
在timer1 的 mode 5, 又稱 Fast PWM mode, (不過請注意 Arduino 的 init( ) 設定只有 timer0 用這, 另外 timer1 和 timer2 不是用這 mode),
這時可以把 1 到 254 之間的值放入 OCR1A 或 OCR1B 以便控制 pin 9 或 pin 10
的 PWM duty cycle, 1 到 254 分別對應到 (1+1)/256, .., (254+1)/256 的 duty cycle.

會 +1 是硬體電路設計上的關係, data sheet 上說:
   Note that fast PWM holds the output high one cycle longer than the compare register value.
在 TCNT1 等於 0  之時, COM1A and/or COM1B 會輸出(當然要 TCCR1A 內的 COM1A1 and/or COM1B1 有set),
然後在 TCNT1 等於 OCR1A 則關閉 COM1A, 當 TCNT1 等於 OCR1B 則關閉 COM1B,
注意沒有立即關閉, 是延遲一個 tick 才關閉 ! 所以才會多加1, 因為一個循環是 256, 不是 255,如果不延遲加 1, 則輸出 val 是 254 時變成 254/256, 還差一點點, 所以犧牲 1/256, 就是沒有 1/256佔空比 !!

   由於 Arduino 的 init( )把 timer1 的 Prescaler 設定為 64,
(參考在你 Arduino IDE 內的   hardware\arduino\cores\arduino\wiring.c )
且把 timer1 設定為 8-bit phase correct pwm mode, 所以其頻率是 490.196Hz, 不是 976.5625Hz;
所謂的 8-bit phase correct pwm mode, 意思是 TCNT? 從 0 數到 255, 接著又從 255 倒著數回 0,
那何時把 COM1A and/or COM1B 的輸出打開或關閉呢?

根據 datasheet, 在從 0 往上數, 碰到 OCR1A 時把 COM1A 關閉,
後從 255 往回數, 數到 OCR1A 時把 COM1A 打開(有電); 對於 OCR1B 和 COM1B 也是這樣!
這使得 duty cycle (佔空比) 更準確, 也就是 val 1 ~ 254 分別對應到 1/255 到 254/255 的 duty cycle.
但是 Frequency 則不是除以 256, 是要除以 255 再除以 2, 於是: (注意是 255, 不是 256喔!)
Frequency = 16 MHz / 64 / 255 / 2 = 490.196Hz;

timer 2 也是在 init( )被設為 Prescaler 64 的 phase correct pwm (8-bit);
但是, timer0 雖然 Prescaler 也設 64, 但 PWM 是用 Fast PWM mode,
不使用 phase correct mode 是為了避免影響維護 millis( ) 的中斷 timer0 Overflow Interrupt,
即 ISR(TIMER0_OVF_vect) 這中斷處理程序, 否則 millis( ) 和 micros( ) 以及 delay() 都會受到影響 !!
因此 , timer0 控制的 PWM Frequency 976.5625Hz,
    16 MHz / 64 / 256 = 976.5625Hz
注意用 timer0 控制的pin 5, pin 6 之 PWM 的 duty cycle 無法是 1/256, 它是 0 再來就 2/256了!
結論:

timer0 控制 pin 5, pin 6, PWM 頻率 976.5625Hz, duty cycle可以 2/256 ~ 255/256 (對應 1 到254);
timer1 控制 pin 9, pin 10, PWM 頻率 490.196Hz, duty cycle 可以 1/255 ~ 254/255(對應 1 到254);
timer2 控制 pin 11, pin 3, PWM 頻率 與 duty cycle 跟 timer1 控制的相同 !!

Q: 那 PWM 的 Frequency 可不可以更改?
A: 可以, 偷改 timer 的 Prescaler 就可以達到更改 Frequency 的目的 !
但是, 千萬不要更改 timer0 的 Prescaler, 否則 millis( ) 和 micros( ) 以及 delay() 都會受到影響 !!!
以下是以 timer1 控制的 pin 9, pin 10 為例(注意兩個 pin 的頻率相同!)
在你的 setup( ) { 內, 寫如下兩句即可:
      int fff = 3;  // 可以是 1, 2, 3, 4, 5
      TCCR1B = TCCR1B & 0xF8 | fff;
其中 fff 與對應頻率如下:
  fff   Prescaler   Frequency
   1           1        31372.549 Hz
   2           8          3921.569
   3         64            490.196   <–DEFAULT
   4       256           122.549
   5    1024               30.637 Hz

至於 timer2 控制的 pin 11 和 pin 3,
則在 setup( ) { 內寫:
     TCCR2B = TCCR2B & 0xF8 | ?;
此處的 ? 可以有七種:
   ?  Prescaler   Frequency
   1         1       31372.549 Hz
   2         8         3921.569
   3            32          980.392
   4        64         490.196   <–DEFAULT
   5      128         245.098
   6      256         122.549
   7    1024           30.637 Hz

如果你堅持要改 timer0 的 Prescaler, 以更改 pin 5, pin 6 的 PWM 頻率:
(注意 millis( ) 和 micros( ) 以及 delay() 都會受到影響 !! )
則在 setup( ) { 內寫:
     TCCR0B = TCCR0B & 0xF8 | ?;
此處的 ? 可以有五種:
   ?  Prescaler   Frequency
   1          1       362500 Hz
   2          8           7812.5
   3        64             976.5625   <–DEFAULT
   4      256             244.140625
   5    1024               61.03515625 Hz

參考:
http://playground.arduino.cc/Main/TimerPWMCheatsheet
http://www.atmel.com/Images/doc8161.pdf