반응형
반응형

소규모 농업자도 사이버 공격에서 자유롭지 않다. 스위스의 한 낙농업자가 랜섬웨어 공격으로 인해 소 한 마리를 폐사한 것으로 알려졌다. 컴퓨터가 마비돼 소의 중요한 생체 데이터를 확인할 수 없었기 때문이다. 
 
스위스 매체 루체너 차이퉁(Luzerner Zeitung)은 스위스 주크주의 낙농업자 비탈 버처는 최근 착유 로봇과 연결된 컴퓨터 시스템이 사이버 공격을 당했다고 최근 보도했다. 이 공격으로 결국 버처의 소 한 마리가 폐사했다고 매체는 전했다. 

처음에 버처는 젖소의 착유 데이터가 더 이상 수신되지 않아 정전을 의심했다. 그러던 중 착유 시스템 제조업체로부터 해킹을 당했다는 경고를 받았다. 공격에는 버처의 착유 데이터를 잠그는 랜섬웨어가 포함돼 있었고, 공격자는 암호 해독을 위해 1만 달러(약 1,378만 원)를 요구했다. 

처음에 버처는 공격자의 몸값 요구에 응해야 할지 고민했다. 하지만 주크 호수의 북쪽 한편에서 낙농장을 운영하는 버처에게는 우유 생산량에 대한 데이터가 긴급한 정보는 아니었다. 또한 착유 로봇은 정전 시에도 컴퓨터나 네트워크 연결 없이도 작동하기 때문에 착유 작업에는 문제가 없었다. 

하지만 버처는 컴퓨터 시스템을 통해 동물의 생체 데이터를 수신한다. 소가 임신했을 때는 이런 데이터가 특히 중요하다. 버처의 동물 중 한 마리가 자궁 속에 죽은 송아지를 품고 있었고, 버처는 컴퓨터가 작동하지 않아 이런 응급 상황을 제때 인지하지 못했다. 버처는 스위스 언론과의 인터뷰에서 "어미를 구하기 위해 모든 노력을 다했지만 결국 포기해야만 했다"라고 말했다. 

버처는 사이버 공격으로 인한 피해를 약 6,000 스위스 프랑(약 961만 원)으로 추산했다. 주로 수의사 비용과 새로운 컴퓨터 구매에 들어간 비용이다. 공격자에게 몸값을 지불하지는 않은 것으로 알려졌다.

 

https://www.itworld.co.kr/news/346910

반응형
반응형

1. Creating a List

To conjure a list into being:

# A list of mystical elements
elements = ['Earth', 'Air', 'Fire', 'Water']

2. Appending to a List

To append a new element to the end of a list:

elements.append('Aether')

3. Inserting into a List

To insert an element at a specific position in the list:

# Insert 'Spirit' at index 1
elements.insert(1, 'Spirit')

4. Removing from a List

To remove an element by value from the list:

elements.remove('Earth')  # Removes the first occurrence of 'Earth'

5. Popping an Element from a List

To remove and return an element at a given index (default is the last item):

last_element = elements.pop()  # Removes and returns the last element

6. Finding the Index of an Element

To find the index of the first occurrence of an element:

index_of_air = elements.index('Air')

7. List Slicing

To slice a list, obtaining a sub-list:

# Get elements from index 1 to 3
sub_elements = elements[1:4]

8. List Comprehension

To create a new list by applying an expression to each element of an existing one:

# Create a new list with lengths of each element
lengths = [len(element) for element in elements]

9. Sorting a List

To sort a list in ascending order (in-place):

elements.sort()

10. Reversing a List

To reverse the elements of a list in-place:

elements.reverse()

 

 
반응형
반응형

 

1. Basic GET Request

To fetch data from an API endpoint using a GET request:

import requests
response = requests.get('https://api.example.com/data')
data = response.json()  # Assuming the response is JSON
print(data)

2. GET Request with Query Parameters

To send a GET request with query parameters:

import requests
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://api.example.com/search', params=params)
data = response.json()
print(data)

3. Handling HTTP Errors

To handle possible HTTP errors gracefully:

import requests
response = requests.get('https://api.example.com/data')
try:
    response.raise_for_status()  # Raises an HTTPError if the status is 4xx, 5xx
    data = response.json()
    print(data)
except requests.exceptions.HTTPError as err:
    print(f'HTTP Error: {err}')

4. Setting Timeout for Requests

To set a timeout for API requests to avoid hanging indefinitely:

import requests
try:
    response = requests.get('https://api.example.com/data', timeout=5)  # Timeout in seconds
    data = response.json()
    print(data)
except requests.exceptions.Timeout:
    print('The request timed out')

5. Using Headers in Requests

To include headers in your request (e.g., for authorization):

import requests
headers = {'Authorization': 'Bearer YOUR_ACCESS_TOKEN'}
response = requests.get('https://api.example.com/protected', headers=headers)
data = response.json()
print(data)

6. POST Request with JSON Payload

To send data to an API endpoint using a POST request with a JSON payload:

import requests
payload = {'key1': 'value1', 'key2': 'value2'}
headers = {'Content-Type': 'application/json'}
response = requests.post('https://api.example.com/submit', json=payload, headers=headers)
print(response.json())

7. Handling Response Encoding

To handle the response encoding properly:

import requests
response = requests.get('https://api.example.com/data')
response.encoding = 'utf-8'  # Set encoding to match the expected response format
data = response.text
print(data)

8. Using Sessions with Requests

To use a session object for making multiple requests to the same host, which can improve performance:

import requests
with requests.Session() as session:
    session.headers.update({'Authorization': 'Bearer YOUR_ACCESS_TOKEN'})
    response = session.get('https://api.example.com/data')
    print(response.json())

9. Handling Redirects

To handle or disable redirects in requests:

import requests
response = requests.get('https://api.example.com/data', allow_redirects=False)
print(response.status_code)

10. Streaming Large Responses

To stream a large response to process it in chunks, rather than loading it all into memory:

import requests
response = requests.get('https://api.example.com/large-data', stream=True)
for chunk in response.iter_content(chunk_size=1024):
    process(chunk)  # Replace 'process' with your actual processing function

 

https://blog.stackademic.com/ultimate-python-cheat-sheet-practical-python-for-everyday-tasks-c267c1394ee8

반응형

'프로그래밍 > Python' 카테고리의 다른 글

[python] TIOBE Index for August 2024, Python 1st  (0) 2024.08.09
[python] Working With Lists  (0) 2024.07.24
[python] Working With Files  (0) 2024.07.24
[python] Pandas cheat sheet  (0) 2024.07.19
[python] 변수 scope, LEGB Rule  (0) 2024.07.15
반응형

1. Reading a File

To read the entire content of a file:

with open('example.txt', 'r') as file:
    content = file.read()
    print(content)

2. Writing to a File

To write text to a file, overwriting existing content:

with open('example.txt', 'w') as file:
    file.write('Hello, Python!')

3. Appending to a File

To add text to the end of an existing file:

with open('example.txt', 'a') as file:
    file.write('\nAppend this line.')

4. Reading Lines into a List

To read a file line by line into a list:

with open('example.txt', 'r') as file:
    lines = file.readlines()
    print(lines)

5. Iterating Over Each Line in a File

To process each line in a file:

with open('example.txt', 'r') as file:
    for line in file:
        print(line.strip())

6. Checking If a File Exists

To check if a file exists before performing file operations:

import os
if os.path.exists('example.txt'):
    print('File exists.')
else:
    print('File does not exist.')

7. Writing Lists to a File

To write each element of a list to a new line in a file:

lines = ['First line', 'Second line', 'Third line']
with open('example.txt', 'w') as file:
    for line in lines:
        file.write(f'{line}\n')

8. Using With Blocks for Multiple Files

To work with multiple files simultaneously using with blocks:

with open('source.txt', 'r') as source, open('destination.txt', 'w') as destination:
    content = source.read()
    destination.write(content)

9. Deleting a File

To safely delete a file if it exists:

import os
if os.path.exists('example.txt'):
    os.remove('example.txt')
    print('File deleted.')
else:
    print('File does not exist.')

10. Reading and Writing Binary Files

To read from and write to a file in binary mode (useful for images, videos, etc.):

# Reading a binary file
with open('image.jpg', 'rb') as file:
    content = file.read()
# Writing to a binary file
with open('copy.jpg', 'wb') as file:
    file.write(content)

https://blog.stackademic.com/ultimate-python-cheat-sheet-practical-python-for-everyday-tasks-c267c1394ee8

반응형

'프로그래밍 > Python' 카테고리의 다른 글

[python] Working With Lists  (0) 2024.07.24
[python] Working With Simple HTTP APIs  (0) 2024.07.24
[python] Pandas cheat sheet  (0) 2024.07.19
[python] 변수 scope, LEGB Rule  (0) 2024.07.15
[python] deepcopy  (0) 2024.07.04
반응형

https://www.itworld.co.kr/numbers/82001/344908

 

아틀라시안이 최근 발표한 2024년 개발자 경험 현황 보고서(State of Developer Experience Report 2024)에 따르면, 많은 기업이 개발자 생산성을 잘 이해하지도, 잘 활성화하지도 못하는 것으로 나타났다. DX(developer experience)에 대한 관심은 증가하고 있지만 개선하려는 노력은 그보다 뒤처지고 있는 것으로 조사됐다.
 

ⓒ Getty Images Bank
2024 개발자 경험 현황 보고서는 미국, 독일, 프랑스, 호주의 엔지니어링 리더 1,250명과 전 세계 개발자 900명을 대상으로 실시한 설문조사를 기반으로 작성됐다. 해당 설문조사는 오늘날 소프트웨어 개발 업무의 원활한 흐름을 유지하는 관행과 마찰을 유발하는 관행을 파악하기 위해 실시됐다. 

생성형 AI와 마이크로서비스 시대의 업무 환경에 대한 인식도 조사했다. 조사 결과, 기업이 개발자 경험을 우선시한다고 생각하는 개발자는 절반 미만이었으며, 개발자 3명 중 2명은 비효율적인 업무로 인해 주당 8시간 이상 손해를 본다고 답했다. 또한 AI 도구를 사용해도 생산성 향상을 크게 체감하지 못하는 개발자도 3명 중 2명꼴이었다. 

엔지니어 리더들이 꼽은 개발자 역할 복잡성의 상위 5가지 원인은 인력 부족, 개발자 역할 확장, 새로운 기술, 도구 간 컨텍스트 전환, 다른 팀과의 협업 등이다. 개발자의 시간 손실에 기여하는 상위 5가지 요인은 기술 부채, 불충분한 문서화, 빌드 프로세스, 심층 작업을 위한 시간 부족, 명확한 방향성 부재 등이 지적됐다. 설문조사에 참여한 거의 모든 엔지니어링 리더(99%)가 개발자 역할이 더 복잡해졌다는 사실을 인정했다. 리더들이 개발자 생산성과 만족도를 향상시킬 수 있다고 생각하는 상위 5가지 사례에는 AI 자동화, 새로운 협업 도구 제공, 위험 감수 및 실험, 의사 결정 간소화, 해커톤 개최가 포함된다. 

그 외 2024 개발자 경험 현황 보고서의 주요 조사 결과는 다음과 같다. 

 

  • 응답자 12%는 향후 2년 내 AI 도구가 개발자의 생산성을 향상시키지 못할 것이라고 답했다.
  • 개발자 생산성 측정에 집중하는 기업은 51%, 개발자 만족도에 집중하는 기업은 49%다.
  • 엔지니어링 리더 41%는 개발자 생산성을 측정하는 도구를 사용해 개발팀 만족도를 평가한다.
  • 38%의 기업이 근무 시간으로 개발자 생산성을 측정한다.

 

반응형
반응형

 

https://www.hani.co.kr/arti/economy/economy_general/1150014.html

 

MS발 먹통 대란에 “빙산의 일각”…취약성 노출한 ‘초연결 세계’

( ☞한겨레 뉴스레터 H:730 구독하기. 검색창에 ’h:730’을 쳐보세요.) 지난 19일(이하 현지시각) 전세계를 강타한 ‘마이크로소프트(MS·엠에스)발 장애 사태’ 이후 ‘인공지능(AI) 클라우드 시대

www.hani.co.kr

 

 

크라우드스트라이크가 알려준 해법은 아래와 같습니다. 혹시 이상이 있다면, 아래 방법을 따라하시면 됩니다.
 

윈도우를 안전 모드로 부팅, 또는 외장 드라이브에 탑재한 윈도우로 부팅
C:\Windows\System32\drivers\CrowdStrike로 이동
C-00000291*.sys 파일 찾아서 삭제
정상적으로 재부팅

반응형

+ Recent posts