# cat /sys/class/net/eth0/operstate up # macb e000b000.ethernet eth0: Link is Down # cat operstate down # macb e000b000.ethernet eth0: Link is Up - 1Gbps/Full - flow control off # cat operstate up
// This will set the socket file to have a uid and gid of whatever the // current user is. 0770 will be set for the file permissions (though on some // systems the sticky bit gets set, resulting in 1770. serv, err := uds.NewServer(socketAddr, cred.UID.Int(), cred.GID.Int(), 0770) if err != nil { panic(err) }
fmt.Println("Listening on socket: ", socketAddr)
// This listens for a client connecting and returns the connection object. for conn := range serv.Conn() { conn := conn
// We spinoff handling of this connection to its own goroutine and // go back to listening for another connection. go func() { // We are checking the client's user ID to make sure its the same // user ID or we reject it. Cred objects give you the user's // uid/gid/pid for filtering. if conn.Cred.UID.Int() != cred.UID.Int() { log.Printf("unauthorized user uid %d attempted a connection", conn.Cred.UID.Int()) conn.Close() return } // Write to the stream every 10 seconds until the connection closes. for { if _, err := conn.Write([]byte(fmt.Sprintf("%s\n", time.Now().UTC()))); err != nil { conn.Close() } time.Sleep(10 * time.Second) } }() } }
package main
import ( "flag" "fmt" "io" "os"
"github.com/johnsiilver/golib/ipc/uds" )
var ( addr = flag.String("addr", "", "The path to the unix socket to dial") )
func main() { flag.Parse()
if *addr == "" { fmt.Println("did not pass --addr") os.Exit(1) }
// Connects to the server at socketAddr that must have the file uid/gid of // our current user and one of the os.FileMode specified. client, err := uds.NewClient(*addr, cred.UID.Int(), cred.GID.Int(), []os.FileMode{0770, 1770}) if err != nil { fmt.Println(err) os.Exit(1) }
// client implements io.ReadWriteCloser and this will print to the screen // whatever the server sends until the connection is closed. io.Copy(os.Stdout, client) }
// SafeCounter is safe to use concurrently. type SafeCounter struct { mu sync.Mutex v map[string]int }
// Inc increments the counter for the given key. func (c *SafeCounter) Inc(key string) { c.mu.Lock() // Lock so only one goroutine at a time can access the map c.v. c.v[key]++ c.mu.Unlock() }
// Value returns the current value of the counter for the given key. func (c *SafeCounter) Value(key string) int { c.mu.Lock() // Lock so only one goroutine at a time can access the map c.v. defer c.mu.Unlock() return c.v[key] }
func main() { c := SafeCounter{v: make(map[string]int)} for i := 0; i < 1000; i++ { go c.Inc("somekey") }
func (*Mutex) Lock ¶ func (m *Mutex) Lock() Lock locks m. If the lock is already in use, the calling goroutine blocks until the mutex is available.
func (*Mutex) TryLock ¶ added in go1.18 func (m *Mutex) TryLock() bool TryLock tries to lock m and reports whether it succeeded.
Note that while correct uses of TryLock do exist, they are rare, and use of TryLock is often a sign of a deeper problem in a particular use of mutexes.
func (*Mutex) Unlock ¶ func (m *Mutex) Unlock() Unlock unlocks m. It is a run-time error if m is not locked on entry to Unlock.
A locked Mutex is not associated with a particular goroutine. It is allowed for one goroutine to lock a Mutex and then arrange for another goroutine to unlock it.
부속서 Ⅱ와 Ⅲ에는 멸종위기종 외에도 앵무새류, 육지거북류 등 일명 '예비' 멸종위기종이 포함된다. 이들은 엄격한 거래 규제가 없으면 멸종위기에 처할 수 있기 때문에 사전 신고 후 상업, 학술, 연구 목적으로 거래할 수 있으며, 부속서 Ⅲ의 경우 규제가 조금 더 느슨한 편이다.
각 부속서에 속하는 생물 목록은 CITES 공식 홈페이지나 환경부 웹사이트에서 '국제적 멸종위기종'을 검색해 확인할 수 있다.
즉, 위에 기재된 초록뺨비늘앵무고, 신고 제외대상이다. (2021.12.06) 라고 보면 될 듯.
Thegreen-cheeked parakeet(Pyrrhura molinae), known as thegreen-cheeked conureinaviculture, is a species of bird in subfamilyArinaeof the familyPsittacidae, the African and New World parrots.[3]It is found in Argentina, Bolivia, Brazil, and Paraguay.
썬 코뉴어 앵무 (Sun Conure) 황금빛 태양을 닮았다고 해서 '썬코뉴어 앵무', '태양앵무' 라고 불립니다! 학명은 Aratinga solstitialis 입니다 ! (아라팅아,,솔스디셜리스...영어는 언제나 어렵습니다..^^) 썬코뉴어는 코뉴어 앵무(Pyrrhure molinae)랑 다른 학명을 사용하고있습니다. Aratinga 종의 코뉴어들은 젠다이 코뉴어, 난데이 코뉴어, 블루 크라운 코뉴어, 레드막코뉴어 등이 속해 있습니다.
임원도 아니고 임직원 임금 반납 14년중 7차례했다고(14*12=168 개월 중 7차례. 2년에 한달치 급여. 적은건 아니지만..)
그 와중에 임금 인상분을 전부 반납이라는게 웃기다. 성의를 보이려면 최소한
임원급들 전원 임금 자체를 50% 삭감한다거나 했으면 모를까. (혹은 최저임금 제외하고 전부 반납)
그리고 적자라면서 매년 인센티브는 받아가면서 그거 이야기도 없고. 그러니 싸늘할 수 밖에
한국전력. 창사이래 최대규모 자구노력 추진
□ (임금 반납) 한전 및 전력그룹사는 그동안 국가나 회사가 어려울 때마다 자발적으로 임금 반납*을 시행해왔으며, 그 일환으로 지난해에도 경영진과 1직급 이상 간부의 성과급 및 임금을 반납하였음* 2008년부터 2022년까지 총 7차례에 걸쳐 자발적으로 임직원 임금 반납 금년에도 사상 초유의 재무위기 극복에 책임있는 자세로 앞장서고 국민고통을 분담하기 위해 임직원의 임금 인상분을 반납하기로 결정하였으며, 반납한 임금 인상분은 취약계층 지원에 활용할 계획임 ○ 우선, 국민과 고통을 분담하는 차원에서 한전과 전력그룹사는 2직급 이상 임직원의 임금 인상분을 전부 반납하고, 한전은 추가로 3직급 직원의 임금 인상분의 50%를 반납 하기로 하였음 ※ 성과급은 경영평가 결과가 확정되는 6월경 1직급 이상은 전액,2직급 직원은 50% 반납할 계획 ○ 여기에 더해 전 직원의 동참도 추진 하기로 하였음. 다만, 노동조합원인직원의 동참은 노조와의 합의가 필요한 만큼, 이날 한전은 노조도동참해 줄 것을 공식 요청했다고 밝힘