Author Archives: slime

🔥 Surge in Web Server Attacks Targeting .env, .aws, and .git — API Keys & Database Passwords Exposed

Web servers worldwide are experiencing a surge in automated attacks targeting hidden folders such as .env, .aws, and .git. These attacks aim to steal sensitive data including API keys, database passwords, and cloud credentials, often due to misconfigured servers or careless deployment.


🚨 What Attackers Are Trying to Access

Automated attack bots scrape servers for sensitive files like:

GET /.env
GET /.aws/credentials
GET /.git/config
GET /.vscode/settings.json
GET /.npmrc
GET /config/database.yml
  • Database login information
  • AWS access keys
  • Git repository endpoints
  • Package publishing tokens

One exposed file is enough to compromise an entire system.


💣 Real-World Security Impact

  • .env leak → DB credentials stolen → full data dump
  • .aws/credentials leak → unauthorized access to S3 / Lambda / CloudWatch
  • .git exposure → source code, internal endpoints, and tokens leaked
  • .npmrc leak → malicious package uploads under your identity

🔒 How to Protect Your Server Immediately

1️⃣ Move hidden folders outside the web root

/var/www/html/.env
/var/www/html/.aws/
/var/www/html/.git/

2️⃣ Block dotfiles in Nginx / Apache

Nginx:

location ~ /\. {
    deny all;
    return 404;
}

Apache:

<FilesMatch "^\.">
    Require all denied
</FilesMatch>

3️⃣ Never commit .env files

Use environment variables, Docker Secrets, or CI/CD Secrets.

4️⃣ Monitor logs for suspicious access attempts

/.env
/.git
/.aws/credentials

Block repeated offenders and consider adding automated alerts.


⚠️ Final Warning

If a sensitive file is accessible from the web, assume it is already leaked.

Attackers check hidden folders before anything else. Protect .env, .aws, .git, and all dotfiles immediately.


PC/Mac CapCut 해외 사용자에게 텍스트 음성변환에 한국어 안보이면?

Mac 이나 PC 에서 CapCut 을 쓰다가 보면 유튭 설명 영상에서는 텍스트를 음성으로 변환하는 기능에서 위의 그림처럼 한국어가 보이는데 실제로 보면 영어를 포함해 불어, 스페인어, 중국어는 보이는데 한국어가 안보는 경우가 있습니다. 대충 원인은 감이 왔지만 저는 Vrew 에서 음성을 만들어 썼기 때문에 고치지는 않았습니다. 어제 제가 추측한 문제가 맞는지 실험을 해봤습니다. 일단 한국 IP 를 얻을수 있는 VPN 서비스가 필요합니다. 무료로는 SoftEther VPN 이 있고 그외 유료 VPN 을 써도 됩니다. 저는 유료를 CyberGhost 를 씁니다. (추천 안합니다. 이유는 따로 물어보세요) 처음에는 원래 쓰던 CapCut 을 그냥두고 VPN 을 통해 한국 IP 만 연결해 주고 캡컷을 다시 실행하면 한국어가 보일줄 알았지만 그것은 아니었습니다. 일단 캡컷을 지웁니다. 그리고 VPN 으로 한국 IP  에 접속하고요. 새로 캡컷을 다운로드 합니다. 설치 끝날 때까지 VPN 은 계속 켜놓습니다. 연결 상태에서 캡컷을 실행해 보면 한국어가 뜹니다. 그 이후에는 VPN 을 끊어버려도 한국어는 계속 작동합니다. 해결을 했지만 사실 캡컷이 제공하는 한국어 음성변환은 품질이 별로입니다. (저는 Pro 구독자입니다) 

MacOS 용 사이버고스트 VPN


윈도즈용 SoftEther VPN

블랙핑크 로제의 보컬의 특징

 

블랙핑크 로제(Rosé)의 보컬은 독특하고 감성적인 음색으로, 그녀만의 매력을 잘 표현합니다. 로제의 목소리는 블랙핑크 노래에서 매우 중요한 역할을 하며, 전 세계 팬들에게 깊은 인상을 주고 있습니다. 그녀의 보컬 특징은 다음과 같습니다:

1. 감성적인 음색

• 로제의 목소리는 맑고 서정적이면서도 약간 허스키한 톤을 가지고 있어 매우 감정적이고 따뜻하게 들립니다. 이 허스키한 음색은 그녀의 보컬을 더 개성 있고 감성적으로 만듭니다. 노래의 감정선을 잘 표현하여 듣는 이들에게 강한 감정적 울림을 줍니다.

2. 맑은 고음

• 로제는 고음에서 특히 맑고 깨끗한 소리를 낼 수 있는 능력이 뛰어납니다. 고음이 힘차면서도 부드럽게 이어지며, 목소리의 깊이를 더합니다. 블랙핑크 곡에서 후렴구나 클라이맥스 부분에서 그녀의 고음이 돋보이는 경우가 많습니다.

3. 독특한 발음과 딕션

• 로제는 호주에서 자라서 영어가 모국어인 덕분에 영어 가사에서도 자연스러운 발음과 유려한 딕션을 자랑합니다. 한국어 가사에서도 특유의 발음 스타일이 반영되어 있어 그녀의 목소리가 더욱 독특하게 들립니다.

4. 강렬한 감정 표현

• 로제는 노래에서 감정의 변화와 깊이를 잘 표현합니다. 발라드나 감성적인 노래에서 슬픔이나 고독함 같은 감정을 강하게 드러낼 수 있으며, 댄스곡에서도 강렬한 에너지를 전달할 수 있는 보컬 스타일을 가지고 있습니다. 이러한 감정 표현 능력은 그녀의 솔로곡인 “On The Ground”나 “Gone”에서 특히 두드러집니다.

5. 유연한 보컬 컨트롤

• 로제는 자신만의 보컬 스타일을 잘 유지하면서도 다양한 장르에서 유연하게 보컬을 조절할 수 있는 능력이 있습니다. 블랙핑크의 곡들은 힙합, EDM, 팝, 발라드 등 다양한 장르를 포함하는데, 로제는 각 장르에 맞게 목소리의 텍스처와 강약을 조절하며 자연스럽게 소화해냅니다.

6. 탄탄한 라이브 실력

• 로제는 무대 위에서도 안정된 라이브 실력을 보여주며, 춤을 추면서도 흔들리지 않는 보컬로 공연을 진행할 수 있는 능력이 있습니다. 라이브 공연에서 그녀의 보컬은 음원과 큰 차이가 없을 정도로 안정적이며, 특히 감정적인 곡에서는 라이브로 듣는 것이 더 매력적입니다.

로제의 보컬은 블랙핑크의 음악에 감성적 깊이와 독특한 개성을 더해주며, 그녀의 솔로 활동에서도 큰 강점으로 작용하고 있습니다.

인디 해커, 1인 개발자 사업가

인디 해커(indie hacker) 또는 1인 개발 사업은 혼자서 독립적으로 소프트웨어나 서비스를 개발하고, 이를 통해 수익을 창출하는 형태의 창업을 의미합니다. 일반적으로 스타트업과 달리, 외부 투자 없이 자기 자금이나 작은 규모의 자원을 활용해 자립하는 것이 특징입니다.


인디 해커가 되는 과정은 보통 다음과 같은 단계를 거칩니다:


1. 아이디어 선정: 사용자의 문제를 해결할 수 있는 독창적인 아이디어를 찾습니다.

2. 개발: 혼자서 코딩, 디자인, 배포 등 모든 개발 과정을 직접 수행합니다.

3. 런칭: 제품을 웹사이트, 앱스토어, 또는 소셜미디어 등을 통해 공개하고 홍보합니다.

4. 마케팅 및 판매: 초기 사용자를 확보하고, 꾸준한 피드백을 통해 제품을 개선하면서 수익을 창출할 수 있는 방법을 찾습니다.

5. 유지 및 확장: 수익 모델이 안정화되면 계속해서 제품을 관리하거나 확장할지, 또는 새로운 아이디어를 개발할지 결정합니다.


대표적인 예로 SaaS(서비스형 소프트웨어), 모바일 애플리케이션, 디지털 제품(예: 온라인 강의, 이북) 등을 많이 개발합니다.


인디 해커 활동의 장점으로는 유연한 일정 관리, 창의적인 통제권, 그리고 작은 규모에서도 큰 성공을 이룰 가능성이 있습니다.


2011 iMac 에서 Plex 서버

 할아버지 2011 아이맥을 Plex 서버로 돌리고 있는데 기가비트 이더넷에 꼽고 이 아이맥의 내장 하드에서 다른 기가비트 이더넷으로 연결한 컴으로 파일 복사를 하면 100MB/s 이 쉽게 나옵니다만 아이맥의 외장 하드로 부터 복사를 하면 40MB/s 언저리도 겨우 나옵니다… 이 아이맥의 UBS2 의 최대속도가 480Mbps 라… 기가비트 이더넷은 개살구임. 물론 10Gb Thunderbolt 포트가 있지만 Mini DP 형태의 썬더볼트 지원 외장하드 케이스는 구하기도 힘들고 재고가 있다해도 배보다 배꼽이 커지지요. UBS2 외장 하드로도 Plex 서버로 쓰는데는 충분함.

메타의 Threads

메타의 Threads 가 작년 7월 5일에 오픈했고, 다음날인가 내 첫 포스팅… 반년이상 눈팅만하다 최근에 눈에 띄이는 글들에 댓글을 조금 달고 있는데… 형태는 비슷하지만 트위터와는 결이 다름. 일단 얼마전까지 유행했던 Clubhouse. 요즘 그 곳을 언급하는 사람 거의 없고 페북이나 X 에서 Threads 를 더 언급함. 잠깐 유행이 될지, X, 인스타, 페북처럼 큰 자리를 잡을지는 아직은 나는 관망중. My 1st posting on Theread: https://www.threads.net/@sexydeveloper/post/CuX5ngusHr2?xmt=AQGzrKUfDJkBejgz0_KzvXSN-DtDzLRrI51ILeM3b6upLw

iOS error – Canvas area exceeds the maximum limit (width * height > 16,777,216)

웹에서 그림을 그리기 위해 캔버스 개체를 생성하는데 FHD (1920×1080) 로 캔버스를 생성해 만든 앱이 iOS 의 사파리나 크롬, 앳지에서 올려보면 Canvas area exceeds the maximum limit (width * height > 16,777,216) 이런 에러를 개발자 모드에서 보이며 실행 안됨. 근데 1920×1080 = 2,073,600 로 제한을 넘어가지 않는데도 이 에러가 난다는 심오한 문제? 눈치챘겠지만 레티나 디스플레이 때문임. 해상도가 높다보니 window 개체의 device pixel ratio 속성이 3 이야 그러니 물리적으로 (1920×3) x (1080×3) = 18,662,400 를 논리적 1920×1080 짜리 캔버스로 생성하려고 하니 에러가 남. 구글링해보면 몇가지 방법이 (생성형 AI 들은 앞에 설명한 내용을 내가 써주기 전까지 제대로 모름) 있는데, 일반적으로 iOS 제한 픽셀 / (1920×3) x (1080×3) = 0.89… 이 비율로 캔버스를 생성하고 그려진 내용을 이 비율로 zoom out 시켜서 표시… 열라 귀찮긴한데… 여하튼 그렇게 해야 표시됨. 돈받고 하니 하지 안 그럼 모르고 있을 일이지 않을까? ㅋ 

Streptosquarus Shape Count

 

A bacteria called streptosquarus comes in very peculiar shapes. The streptosquarus is flat with no perceived thickness. (It is essentially two-dimensional.) It is composed of an integer number of unit squares.

In addition, all the squares in the streptosquarus must be touching at least one other square of the bacteria along edges. 

Write a program that takes a positive integer from the user and returns the number of possible different streptosquarus shapes of that size. Notice that there is only one streptosquarus of sizes one and two, but there are two of size three, five of size four, and 12 of size five.

모든 가능한 스트렙토스쿼러스의 형태를 생성하고, 회전과 대칭에 의한 중복을 제거하여 유일한 형태의 수를 계산해야 합니다. 회전과 대칭을 확인하는 로직을 추가하여 중복을 제거하는 것이 핵심입니다.

이 알고리즘은 크기가 커질수록 매우 느려질 수 있으므로, 크기가 5를 초과하는 경우에는 실행 시간을 고려해야 합니다.

from collections import deque


def generate_streptosquarus(n):
if n == 1:
return 1

# All possible moves from a square
moves = [(0, 1), (1, 0), (0, -1), (-1, 0)]

# Generate all possible shapes by adding a square to each exposed edge
def generate_shapes(current_shape):
new_shapes = set()
for x, y in current_shape:
for dx, dy in moves:
new_pos = (x + dx, y + dy)
if new_pos not in current_shape:
new_shape = current_shape | {new_pos}
new_shapes.add(frozenset(new_shape))
return new_shapes

# Normalize shapes by rotating and flipping to remove duplicates
def normalize(shape):
# Convert frozenset to a sorted list of tuples to allow rotations and flips
shape = sorted(shape)

def rotate(shape):
return sorted((y, -x) for x, y in shape)

def flip(shape):
return sorted((-x, y) for x, y in shape)

# Generate all unique rotations and flips of the shape
unique_transforms = {tuple(shape)}
for _ in range(3): # Rotate three more times
shape = rotate(shape)
unique_transforms.add(tuple(shape))

# Flip the shape and get all its rotations
shape = flip(shape)
unique_transforms.add(tuple(shape))
for _ in range(3): # Rotate three more times
shape = rotate(shape)
unique_transforms.add(tuple(shape))

# Normalize to ensure all shapes start from (0, 0)
def normalize_shape(transform):
min_x = min(x for x, y in transform)
min_y = min(y for x, y in transform)
return tuple((x - min_x, y - min_y) for x, y in transform)

normalized_shapes = set(normalize_shape(transform) for transform in unique_transforms)
return min(normalized_shapes) # Return the smallest normalized shape

# Use a set to store all unique shapes
unique_shapes = set()

# Starting queue with a single square
queue = deque([frozenset([(0, 0)])])
while queue:
shape = queue.popleft()
if len(shape) == n:
norm_shape = normalize(shape)
unique_shapes.add(norm_shape)
else:
for new_shape in generate_shapes(shape):
queue.append(new_shape)

return len(unique_shapes)


# Example usage
def main():
print("Enter a positive integer or 'q' to quit.")
while True:
user_input = input("Enter a integer number or 'q' to quit: ")
if user_input.lower() == 'q':
print("Program has ended.")
break
try:
n = int(user_input)
if n < 1:
print("Warning: Please enter a positive integer.")
elif n > 6:
print("Warning: Calculations for numbers greater than 6 may be slow.")
result = generate_streptosquarus(n)
print(f"Number of possible shapes for a streptosquarus of size {n}: {result}")
except ValueError:
print("Warning: Please enter a valid integer or 'q' to quit.")


if __name__ == "__main__":
main()

플러터 함수 호출 앞에 const 붙이는게 된 이유

위의 플러터 앱 진입점에 있는 main() 함수에서, 예전에는 안 붙이던 MyApp() 앞에 const 가 붙게 되었습니다. 

runApp(const MyApp()); 

이거나

const MyApp({super.key});

이 곳에 const 는 왜 붙이게 되었는가? Flutter에서 const 키워드를 사용하는 것은 최적화와 관련된 중요한 부분입니다. const 키워드를 사용하여 위젯을 선언하면, Flutter는 그 위젯을 위젯 트리에 한 번만 생성하고, 다시 빌드할 필요가 없는 경우 재사용합니다. 이것은 특히 상태가 변하지 않는(static) 위젯에 유용합니다.

이전 버전의 Flutter에서는 const의 사용이 필수적이지 않았습니다. 하지만, Flutter의 성능을 향상시키고, 앱의 메모리 사용량을 줄이기 위해 const 키워드의 사용이 점점 더 권장되었습니다.

const를 사용하는 주요 이점은

메모리 효율성: const로 생성된 객체는 컴파일 시간에 생성되며, 런타임에는 같은 객체를 재사용합니다. 이는 메모리 사용량을 줄이는 데 도움이 됩니다.

성능 향상: const 위젯은 상태가 변하지 않으므로, Flutter 프레임워크가 위젯을 다시 빌드할 필요가 없습니다. 이는 렌더링 성능을 향상시키는 데 도움이 됩니다.

코드 가독성: const를 사용하면 해당 객체가 변경 불가능하다는 것을 명확하게 알 수 있으며, 이는 코드의 가독성과 유지 보수성을 향상시킵니다.

예를 들어, runApp(const MyApp());에서 const MyApp()은 MyApp 위젯이 상태를 가지지 않고, 그 인스턴스가 변경될 필요가 없음을 나타냅니다. 마찬가지로, const MyApp({super.key});는 MyApp의 생성자가 항상 동일한 인스턴스를 반환하도록 보장합니다.

이러한 최적화는 특히 대규모 앱 또는 복잡한 UI를 가진 앱에서 더욱 중요해집니다. 따라서 최신 Flutter 개발에서는 const의 사용이 더욱 강조되고 있습니다. 

#플러터 #Flutter #상수형 #const

UGREEN 1-IN 2-OUT Bidirectional HDMI Switcher 4K 60Hz

오늘 사용해 본 제품은 UGREEN 의 Bidirectional HDMI Switcher 4K 60Hz 제품입니다. 

Bidirectional 이기 때문에 2 in 1 Out, HDMI Splitter 로 쓰거나 1 in 2 Out HDMI Selector 로 쓸수 있습니다.

액스박스와 플레이스테이션에 1개 모니터가 있을 때 하고싶은 게임기를 모니터에 연결하는 것으로 쓸 수 있고요. 

한개의 컴퓨터 출력을 오늘은 왼쪽 모니터, 내일은 오른쪽 모니터에서 보고 싶을 때 이럴 때 사용할 수 있는 것이죠.

저는 한쪽은 맥에 한쪽은 윈도에 연결해서 한개의 모니터로 출력하는데 쓰려고 샀습니다.

전환 속도는 그렇게 빠르지 않아서 라이브 방송에서 쓸만하지는 않겠네요. 캐나다 아마존 현재 가격은 19불입니다.

슬라임의 간단 리뷰 였습니다.