2026/04/15

오늘의 이야기


#billcorea #운동동아리관리앱
🏸 Schneedle, um aplicativo obrigatório para clubes de badminton!
👉 Match Play – Grave pontuações e encontre oponentes 🎉
Perfeito para qualquer lugar, sozinho, com amigos ou em um clube! 🤝
Se você gosta de badminton, definitivamente experimente

Acesse o aplicativo 👉 https://play.google.com/store/apps/details?id=com.billcorea.matchplay




오늘의 이야기


#스하리1000명프로젝트,
Soms is het moeilijk om met buitenlandse werknemers te praten, toch?
Ik heb een eenvoudige app gemaakt die helpt! Jij schrijft in jouw taal, en anderen zien het in hun taal.
Het vertaalt automatisch op basis van instellingen.
Superhandig voor makkelijke chats. Neem eens een kijkje als je de kans krijgt!
https://play.google.com/store/apps/details?id=com.billcoreatech.multichat416




오늘의 이야기

코디아 AI 디자인: 스크린샷을 편집 가능한 피그마 디자인으로 무분별하게 변형

이미지 변환




• 코디아 AI 디자인은 사용자가 스크린샷을 완전히 편집 가능한 피그마 UI 디자인으로 쉽게 변환할 수 있게 해주는 강력한 도구로, 디자인 워크플로우를 혁신합니다.

• 고급 AI 시각 모델을 사용하여 이미지를 향상시키고 UI 디자인에 맞게 조정하여 모든 페이지 요소를 정확하게 캡처할 수 있습니다.

• 이 도구는 UI 구조를 정확하게 재구성하여 리스트뷰와 컨테이너와 같은 요소를 구별하여 사실적인 설계 복제를 수행합니다.

• 전문적인 폰트 인식을 자랑하여 디자인의 독창적인 스타일과 가독성을 유지합니다.

• 코디아 AI 디자인은 여러 언어를 지원하여 다양한 청중에게 다재다능하고 적응력 있는 디자인을 보장합니다.

• 스크린샷은 확장 가능한 벡터 그래픽(SVG)으로 변환될 수 있어, 디자인이 임의의 해상도 또는 디바이스에 적응 가능하게 된다.

• 생성된 설계는 후속 AI 코드 생성을 위해 최적화되어 개발로의 원활한 전환을 촉진합니다.

https://www.figma.com/community/plugin/1329812760871373657/codia-ai-design-screenshot-to-editable-figma-design














오늘의 이야기

안드로이드 개발자용 제미니 프로 도입: 강력한 텍스트와 이미지 추론 기능을 공개합니다.

궁남지



• 안드로이드 개발자들은 이제 텍스트와 이미지 입력을 모두 처리할 수 있는 구글의 강력한 기초 모델인 제미니 프로에 접근할 수 있게 되었다. 제미니 프로는 제미니 API를 통해 이용할 수 있으며 구글 AI SDK를 활용해 안드로이드 앱에 쉽게 통합할 수 있어 개발 간소화와 비용 절감 효과가 있다.

• 구글 AI 스튜디오는 개발자가 프롬프트를 생성하고 API 키를 생성하며 아이디어를 AI 앱으로 변환할 수 있는 사용자 친화적인 인터페이스를 제공한다. 개발자들은 또한 안드로이드 스튜디오의 새로운 프로젝트 템플릿을 활용하여 제미니 API를 빠르게 시작할 수 있으며, 강화된 코드 완료 및 보풀 검사의 혜택을 받을 수 있다.

• 제미니 프로를 통해 안드로이드 개발자들은 고급 텍스트 및 이미지 추론 기능을 활용하는 AI 기반 기능과 앱을 구축할 수 있어 혁신과 창의성의 새로운 가능성을 열어줍니다.

https://android-developers.googleblog.com/2023/12/leverage-generative-ai-in-your-android-apps.html?utm_source=email&utm_medium=newsletter&utm_campaign=Android-AI-December23&m=1

Leverage Gemini in your Android apps

News and insights on the Android platform, developer tools, and events.

android-developers.googleblog.com





오늘의 이야기


#스하리1000명프로젝트,
Иногда сложно разговаривать с иностранными работниками, правда?
Я сделал простое приложение, которое помогает! Вы пишете на своем языке, а другие видят это на своем.
Он автоматически переводит в зависимости от настроек.
Очень удобно для легкого общения. Посмотрите, когда будет возможность!
https://play.google.com/store/apps/details?id=com.billcoreatech.multichat416




오늘의 이야기


#스하리1000명프로젝트,
迷失在韓國?即使您不會說韓語,這個應用程式也可以幫助您輕鬆出行。
只需說出您的語言即可 - 它會翻譯、搜尋並以您的語言顯示結果。
非常適合旅行者!支援英語、日語、中文、越南語等10多種語言。
現在就試試吧!
https://play.google.com/store/apps/details?id=com.billcoreatech.opdgang1127




2026/04/14

오늘의 이야기

Python을 이용한 Firebase Realtime Database 생성  Android Studio를 통한 데이터 읽기


앱 개발자로 살아보기



안녕하세요! 오늘은 Python을 사용해 Excel 데이터를 Firebase Realtime Database에 업로드하고, Android Studio를 통해 해당 데이터를 읽어오는 방법을 소개하려고 합니다.  과정에서 발생할  있는 주요 오류와 대처 방안도 함께 살펴보겠습니다.


Python을 이용한 Firebase Realtime Database 생성


1. 라이브러리 설치


먼저 필요한 라이브러리를 설치합니다.



sh




pip install openpyxl firebase-admin




2. Firebase 초기화  Excel 파일 읽기


다음 코드를 작성하여 Excel 파일을 읽고 Firebase에 데이터를 업로드합니다.



python




import openpyxl
import firebase_admin
from firebase_admin import credentials, db

# Firebase 초기화
cred = credentials.Certificate("serviceAccountKey.json")
firebase_admin.initialize_app(cred, {
'databaseURL': 'https://your-database-name.firebaseio.com/'
})

# Excel 파일 읽기
workbook = openpyxl.load_workbook('your_excel_file.xlsx')
sheet = workbook.active

# 데이터 Firebase에 업로드
for row in sheet.iter_rows(min_row=2, values_only=True): # 첫 번째 행은 헤더로 간주
data = {
'column1': row[0],
'column2': row[1],
# 필요한 만큼 추가
}
db.reference('path/to/your/data').push(data)

print("데이터가 성공적으로 Firebase에 저장되었습니다.")




Android Studio에서 Firebase 데이터 읽기


1. Gradle 설정


build.gradle 파일에 Firebase 의존성을 추가합니다.



gradle




dependencies {
implementation 'com.google.firebase:firebase-database:20.0.4'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1'
}




2. ViewModel 정의  LiveData 설정


다음 코드를 작성하여 ViewModel에서 Firebase 데이터를 읽고 LiveData에 저장합니다.



kotlin




class MyViewModel : ViewModel() {
private val database = FirebaseDatabase.getInstance().reference

private val _data = MutableLiveData<List<Record>>()
val data: LiveData<List<Record>> get() = _data

init {
fetchDataFromFirebase()
}

private fun fetchDataFromFirebase() {
database.child("path/to/data").addChildEventListener(object : ChildEventListener {
override fun onChildAdded(snapshot: DataSnapshot, previousChildName: String?) {
val recordList = _data.value?.toMutableList() ?: mutableListOf()
val record = snapshot.getValue(Record::class.java)
record?.let { recordList.add(it) }
_data.value = recordList
}
override fun onCancelled(error: DatabaseError) {}
override fun onChildChanged(snapshot: DataSnapshot, previousChildName: String?) {}
override fun onChildMoved(snapshot: DataSnapshot, previousChildName: String?) {}
override fun onChildRemoved(snapshot: DataSnapshot) {}
})
}
}




3. Activity에서 LiveData 관찰


Activity에서 ViewModel과 LiveData를 관찰하여 UI를 업데이트합니다.



kotlin




class MainActivity : AppCompatActivity() {
private val myViewModel: MyViewModel by viewModels()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

myViewModel.data.observe(this, Observer { recordList ->
// UI 업데이트
for (record in recordList) {
println("Field1: ${record.field1}")
println("Field2: ${record.field2}")
println("Field3: ${record.field3}")
println("Field4: ${record.field4}")
println("Field5: ${record.field5}")
println("Field6: ${record.field6}")
}
})
}
}




오류  대처 방안



  1. Firebase Realtime Database 연결 강제 종료

    • 오류: Firebase Database connection was forcefully killed by the server.

    • 원인: 데이터베이스가 다른 지역에 위치.

    • 해결: 데이터베이스 URL을 올바르게 설정.



  2. Firebase 데이터 클래스  생성자 오류

    • 오류: Class does not define a no-argument constructor.

    • 해결: 데이터 클래스에  생성자 추가.


    • kotlin




      data class Record(
      val field1: String? = null,
      val field2: String? = null,
      // 필요한 필드 추가
      ) {
      constructor() : this(null, null, null, null, null, null)
      }







이렇게 하면 Python과 Android Studio를 사용해 Firebase Realtime Database를 효과적으로 관리할  있습니다. 추가적인 질문이나 도움이 필요하시면 언제든지 말씀해 주세요!





오늘의 이야기

Room Database Migration: 칼럼 추가와 데이터 타입 변경


database migration



 


안녕하세요! 이번 포스트에서는 Room 데이터베이스에서 마이그레이션을 통해 칼럼을 추가하고 데이터 타입을 변경하는 방법에 대해 알아보겠습니다.  포스트를 통해 데이터베이스 마이그레이션을 원활하게 처리하는 방법을 배우실  있습니다.


1. 기본적인 칼럼 추가


새로운 칼럼을 추가할 때는 마이그레이션 클래스를 작성하여 ALTER TABLE SQL 명령어를 사용합니다. 예를 들어, new_column이라는 INTEGER 칼럼을 example_table에 추가하는 방법은 다음과 같습니다:



kotlin




import androidx.room.migration.Migration
import androidx.sqlite.db.SupportSQLiteDatabase

val MIGRATION_1_2 = object : Migration(1, 2) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("ALTER TABLE example_table ADD COLUMN new_column INTEGER NOT NULL DEFAULT 0")
}
}




2. Boolean 칼럼 추가


Room에서는 Boolean 타입을 직접 지원하지 않기 때문에, INTEGER 타입을 사용하여 0과 1로 표현합니다. deviceInfo 테이블에 deviceSelected라는 Boolean 칼럼을 추가하는 예제는 다음과 같습니다:



kotlin




val MIGRATION_1_2 = object : Migration(1, 2) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("ALTER TABLE deviceInfo ADD COLUMN deviceSelected INTEGER NOT NULL DEFAULT 0")
}
}




3. 데이터베이스 빌더에 마이그레이션 추가


데이터베이스 빌더에 마이그레이션을 추가하여 데이터베이스 인스턴스를 생성합니다:



kotlin




val db = Room.databaseBuilder(applicationContext, AppDatabase::class.java, "database-name")
.addMigrations(MIGRATION_1_2)
.build()




4. 데이터베이스 버전 업데이트


@Database 어노테이션에서 데이터베이스 버전을 업데이트합니다:



kotlin




@Database(entities = [DeviceInfo::class], version = 2)
abstract class AppDatabase : RoomDatabase() {
abstract fun deviceInfoDao(): DeviceInfoDao
}




5. 전체 마이그레이션 과정 요약


 단계를 통해 데이터베이스 마이그레이션을 원활하게 처리할  있습니다. 새로운 칼럼을 추가하거나 데이터 타입을 변경할 때는 항상 주의 깊게 작업해야 하며, 마이그레이션 로직을 정확하게 작성하는 것이 중요합니다.








오늘의 이야기


#스하리1000명프로젝트

오늘 내가 만든앱 하나 알려주고 싶어, 이 앱은 알림수집기 라고 이름을 붙였는 데,
내 폰에 표시 되는 알림을 읽어서 내가 지정한 단어가 들어 있고, 지출기록을 남겨야 하는 알림이
있으면 수집하고, 카카오톡으로 친구에게 전달해 주는 기능을 구현해 줄꺼야. 📲

이번 패치에서는 하루 한번 지정한 시간에 나에게 알림(노티) 하도록 기능을 추가 했어. 🙏
한번 써보고 불편한 거 있으면 말해줘.

앱 바로가기
👉 https://play.google.com/store/apps/details?id=com.nari.notify2kakao





오늘의 이야기

Python 정규식으로 문자열에서 특정 문자만 남기기

python re.sub



Python에서 정규식을 사용하여 문자열에서 특정 문자만 남기고 나머지를 제거하는 방법을 알아보겠습니다. 예를 들어, 영문자, 숫자, 밑줄(_), 하이픈(-), <, 그리고 공백을 제외한 모든 문자를 제거하는 방법을 살펴보겠습니다.

정규식 치환 예제
다음은 정규식을 사용하여 문자열에서 특정 문자만 남기고 나머지를 제거하는 예제입니다:

Python

import re

text = "Hello, World! 1234 @#$%^&*()_+-<> "

# 정규식을 사용하여 영문자, 숫자, 밑줄, 하이픈, <, 공백을 제외한 모든 문자 치환
result = re.sub(r'[^A-Za-z0-9_<\-\s]', '', text)

print(result)  # "Hello World 1234 _-<> "

AI가 생성한 코드입니다. 신중하게 검토하고 사용하세요. FAQ의 자세한 정보.
코드 설명
모듈 임포트: re 모듈을 임포트합니다.
문자열 정의: 예제로 사용할 문자열을 정의합니다.
정규식 패턴: [^A-Za-z0-9_<\-\s] 패턴을 사용하여 영문자, 숫자, 밑줄, 하이픈, <, 공백을 제외한 모든 문자를 빈 문자열로 치환합니다.
[^...]: 대괄호 안에 있는 문자들을 제외한 모든 문자를 매칭합니다.
A-Za-z: 모든 영문자.
0-9: 모든 숫자.
_: 밑줄.
-: 하이픈.
<: < 문자.
\s: 공백 문자.
치환 및 출력: re.sub() 함수를 사용하여 치환하고 결과를 출력합니다.
결론
이 방법을 사용하면 문자열에서 특정 문자만 남기고 나머지를 제거할 수 있습니다. 정규식을 활용하면 다양한 문자열 처리 작업을 효율적으로 수행할 수 있습니다.

이 포스트가 도움이 되길 바랍니다! 다른 질문이 있으면 언제든지 알려주세요. 😊





오늘의 이야기

공공데이터를 사용하여 Python으로 데이터 수집  처리하기

실행결과 예시


 
안녕하세요! 오늘은 공공데이터를 활용하여 Python을 사용해 데이터를 수집하고 처리하는 방법에 대해 소개해드리려고 합니다. 이번 예제에서는 http://apis.data.go.kr/1471000/MdcinGrnIdntfcInfoService01/getMdcinGrnIdntfcInfoList01 API를 사용하여 의약품 정보를 가져오는 과정을 다룹니다.

준비물

  1. Python 설치
  2. requests 라이브러리 설치

먼저, requests 라이브러리를 설치합니다:



sh




pip install requests



API 키 발급

공공데이터 포털에서 API 키를 발급받아야 합니다. 발급받은 키를 활용하여 데이터를 요청합니다.

코드 예제

다음은 API를 호출하고 응답 데이터를 처리하는 Python 예제 코드입니다:



python




import requests

# API URL과 키 설정
api_url = "http://apis.data.go.kr/1471000/MdcinGrnIdntfcInfoService01/getMdcinGrnIdntfcInfoList01"
api_key = "YOUR_API_KEY" # 여기서 API 키를 입력하세요.

# 요청 파라미터 설정
params = {
'serviceKey': api_key,
'numOfRows': 10,
'pageNo': 1,
'type': 'json'
}

# API 호출
response = requests.get(api_url, params=params)

# 응답 상태 확인
if response.status_code == 200:
data = response.json()
# 응답 데이터 처리
items = data.get('body', {}).get('items', [])
for item in items:
print(f"품목명: {item.get('ITEM_NAME')}, 성분명: {item.get('MATERIAL_NAME')}")
else:
print("API 요청 실패:", response.status_code)



주요 단계

  1. API URL 및 키 설정: 발급받은 API 키를 사용하여 요청 URL을 구성합니다.
  2. 요청 파라미터 설정: 필요한 파라미터를 설정하여 API 요청을 준비합니다.
  3. API 호출: requests.get() 메서드를 사용하여 API 호출을 수행합니다.
  4. 응답 상태 확인: 응답 상태 코드를 확인하여 요청이 성공적으로 처리되었는지 확인합니다.
  5. 응답 데이터 처리: 응답 데이터를 JSON 형식으로 파싱하여 필요한 정보를 추출합니다.

이 예제에서는 공공데이터 포털의 API를 사용하여 의약품 정보를 가져오고, 이를 Python으로 처리하는 방법을 보여줍니다. API를 활용하면 다양한 공공데이터를 쉽게 사용할 수 있으니, 여러분도 한번 시도해 보세요!





오늘의 이야기

Python에서 문자열 유사도 검색 방법 문자열 유사도 검색은 두 문자열이 얼마나 유사한지를 판단하는 중요한 작업입니다. 이는 텍스트 마이닝, 자연어 처리, 데이터 정제 등 다양한 분야에서 사용됩니다. 이번 포스트에서는 Python을 사용하여...