2026/04/19
오늘의 이야기
#스하리1000명프로젝트
오늘 내가 만든앱 하나 알려주고 싶어, 이 앱은 알림수집기 라고 이름을 붙였는 데,
내 폰에 표시 되는 알림을 읽어서 내가 지정한 단어가 들어 있고, 지출기록을 남겨야 하는 알림이
있으면 수집하고, 카카오톡으로 친구에게 전달해 주는 기능을 구현해 줄꺼야. 📲
이번 패치에서는 하루 한번 지정한 시간에 나에게 알림(노티) 하도록 기능을 추가 했어. 🙏
한번 써보고 불편한 거 있으면 말해줘.
앱 바로가기
👉 https://play.google.com/store/apps/details?id=com.nari.notify2kakao
오늘의 이야기
#스하리1000명프로젝트
오늘 내가 만든앱 하나 알려주고 싶어, 이 앱은 알림수집기 라고 이름을 붙였는 데,
내 폰에 표시 되는 알림을 읽어서 내가 지정한 단어가 들어 있고, 지출기록을 남겨야 하는 알림이
있으면 수집하고, 카카오톡으로 친구에게 전달해 주는 기능을 구현해 줄꺼야. 📲
이번 패치에서는 하루 한번 지정한 시간에 나에게 알림(노티) 하도록 기능을 추가 했어. 🙏
한번 써보고 불편한 거 있으면 말해줘.
앱 바로가기
👉 https://play.google.com/store/apps/details?id=com.nari.notify2kakao
오늘의 이야기
**디젤 차량의 DPF 재생 방법과 유지 관리 팁**
**DPF란 무엇인가요?**
디젤 차량에는 DPF(Diesel Particulate Filter)라는 매연 필터가 장착되어 있습니다. 이 필터는 디젤 엔진에서 나오는 미세 입자를 걸러내어 배출가스를 줄이는 역할을 합니다. 그러나 DPF가 지속적으로 입자를 모으다 보면 점점 막혀서 성능이 떨어지기 때문에 주기적으로 재생(클리닝)해야 합니다.
**DPF 재생이란?**
DPF 재생은 높은 온도로 필터 내부의 입자를 태워서 제거하는 과정을 말합니다. 차량이 고속 주행과 같은 특정 조건을 만족할 때 엔진이 충분한 열을 발생시키며 재생이 이루어집니다. 일반적으로 **고속도로에서 60km 이상 주행**하거나, **자동변속기 2단 이상에서 엔진 회전수를 1,500 ~ 2,000rpm으로 25분 이상 주행**하면 재생이 이루어집니다.
**DPF 재생 주기**
DPF 재생 주기는 차량의 주행 조건과 운전 습관에 따라 달라질 수 있습니다. 일반적으로 **200~500km** 주행 후에 재생이 이루어집니다. 고속도로 주행과 같은 일정한 속도로 주행할 때 재생 주기가 길어질 수 있으며, 시내 주행과 같이 자주 멈추고 서는 경우 재생 주기가 짧아질 수 있습니다.
**DPF 성능을 유지하는 방법**
1. **고속 주행**: 주기적으로 고속도로에서 60km 이상 주행을 하면 DPF가 효율적으로 재생될 수 있습니다.
2. **고급 연료 사용**: 저품질 연료는 더 많은 재를 발생시킬 수 있으므로, 고급 연료를 사용하는 것이 좋습니다.
3. **정기적인 차량 점검**: 주기적으로 차량을 점검하고 DPF 상태를 확인하면 성능 저하를 예방할 수 있습니다.
4. **엔진 오일 교환**: 오염된 엔진 오일이 DPF에 영향을 미칠 수 있으므로, 적절한 주기마다 엔진 오일을 교환하는 것이 중요합니다.
5. **적절한 운전 습관**: 급가속과 급제동을 피하고, 일정한 속도로 주행하는 습관을 가지면 DPF의 성능을 유지하는 데 도움이 됩니다.
이렇게 DPF 재생을 통해 차량의 성능을 유지하고 배출가스를 줄일 수 있습니다. 정기적으로 점검하고, 적절한 주행 조건을 유지하여 DPF의 성능을 향상시켜 보세요!
오늘의 이야기
AI 기반 Figma 워크플로우 자동화 시스템 구축
• 본 시스템은 Figma 파일의 다수 댓글을 일일이 확인하는 데 드는 시간을 절약하기 위해, Make.com과 Google Gemini AI를 활용하여 Figma 댓글을 자동으로 분류하고 Google Docs에 구조화된 요약본을 생성하는 자동화 시스템을 구축하였습니다.
• 구체적으로, Make.com을 통해 Figma의 댓글을 가져와 불필요한 정보를 제거한 후, Google Gemini AI의 'Gemini 1.0 Pro' 모델을 이용하여 댓글을 최대 4개의 카테고리로 분류하고 각 카테고리별 요약 및 댓글 예시를 포함하는 요약 문서를 15초 이내에 생성합니다.
• 자동화된 요약 보고서는 설정된 시간 간격에 따라 자동 생성되며, Google Docs에 저장 후 Slack 알림을 통해 팀원들과 공유되어 협업 효율을 높입니다. 다만, AI의 응답 정확도를 고려하여 생성된 요약본은 검토가 필요하며, 댓글이 많은 파일에는 자동화 실행 주기를 설정하여 최신 정보를 유지하는 것이 좋습니다.
https://news.hada.io/topic?id=19432
AI로 Figma 워크플로우 자동화하기 | GeekNews
문제점 : 다양한 팀 구성원들이 Figma 파일에 남긴 수많은 댓글을 일일이 확인하고 분류하여 유용한 인사이트로 요약하는 데 많은 시간이 소요됨해결책 : AI를 활용하여 Figma 댓글을 자동으로 분류
news.hada.io
오늘의 이야기
피카 AI: 특징과 업데이트에 대한 종합적인 개요
• 피카 AI는 밈부터 영화적 걸작에 이르기까지 다양한 비디오 콘텐츠를 만들기 위해 설계된 무료 AI 비디오 생성기 플랫폼으로, 매끄럽고 직관적인 사용자 경험을 제공합니다.
• 최근 업데이트로는 성능과 효율성, 기능이 강화된 피카 2.1과 동영상 생성 속도를 3배 높이는 동시에 신용 사용량을 7배 줄이고 고품질 출력을 유지하는 터보 모델이 있다.
• 피카 2.0은 장면 재료를 도입해 캐릭터, 객체, 설정의 이미지를 업로드해 동영상을 개인화할 수 있으며, 정밀하고 유동적인 서사 생성을 위해 타의 추종을 불허하는 텍스트 정렬을 할 수 있다.
• 피카 1.5는 애니메이션에서 사실감을 높이고 피카펙트를 도입해 포케 잇, 필 잇, 찢어 잇, 레비테이트 잇, 디퍼테이테이션 잇, 아이팝 잇, 짜잔 잇, 디플레이트, 크럼블, 디졸브 등 창의적인 효과를 제공해 역동적인 시각적 요소를 더했다.
• 피카 1.5는 빅 스크린 샷도 특징으로, 불렛 타임, 버티고, 돌리 레프트, 크레인 다운 등 전문가 수준의 영화 카메라 컨트롤을 제공해 영상 제작 품질을 높였다.
• 피카 1.5의 새로운 움직임은 부드럽고 사실적인 캐릭터 움직임을 만들 수 있게 하여 장면에 유동성과 사실성을 더하는 반면, 개선된 사실성은 애니메이션 전반에 걸쳐 핵심 초점이다.
• 피카는 피카 2.0에서 다양한 비디오 템플릿을 제공하여 비디오 생성을 단순화하고 피카디션은 실제 영상과 상상력 요소를 혼합하여 사용자가 새로운 사용자를 위해 15개의 무료 세대가 있는 모든 비디오에 무엇이든 삽입할 수 있습니다.
https://pikartai.com/
Pika AI - Free AI Video Generator
pikartai.com
오늘의 이야기
Jetpack Compose를 사용하여 채팅 앱에 음성 입력 기능 추가하기
안녕하세요, 여러분! 오늘은 Jetpack Compose를 사용하여 안드로이드 채팅 앱에 음성 입력 기능을 추가하는 방법에 대해 알아보겠습니다. 음성 입력 기능은 사용자가 텍스트를 입력하는 대신 음성을 통해 메시지를 입력할 수 있도록 도와줍니다.
1. 프로젝트 설정
우선, 프로젝트의 build.gradle 파일에 필요한 의존성을 추가합니다:
dependencies {
implementation "androidx.core:core-ktx:1.7.0"
implementation "androidx.compose.ui:ui:1.0.5"
implementation "androidx.compose.material:material:1.0.5"
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.4.0"
implementation "androidx.activity:activity-compose:1.4.0"
}2. 음성 입력 컴포넌트 구현
이제 SpeechRecognizer를 사용하여 음성 입력을 처리하고, 이를 Jetpack Compose UI와 연동해보겠습니다.
import android.Manifest
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.speech.RecognizerIntent
import android.speech.SpeechRecognizer
import androidx.activity.ComponentActivity
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.foundation.layout.*
import androidx.compose.material.*
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import androidx.core.app.ActivityCompat
import com.example.myapplication.ui.theme.MyApplicationTheme
import java.util.*
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MyApplicationTheme {
Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colors.background) {
ChatScreen()
}
}
}
}
}
@Composable
fun ChatScreen() {
var message by remember { mutableStateOf("") }
val context = LocalContext.current as Activity
// Request microphone permission
val requestPermissionLauncher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.RequestPermission(),
onResult = { isGranted: Boolean ->
if (isGranted) {
// Permission granted
} else {
// Permission denied
}
}
)
LaunchedEffect(Unit) {
requestPermissionLauncher.launch(Manifest.permission.RECORD_AUDIO)
}
val speechRecognizer = remember { SpeechRecognizer.createSpeechRecognizer(context) }
val recognizerIntent = remember {
Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH).apply {
putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM)
putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault())
}
}
val speechResultLauncher = rememberLauncherForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
val matches = result.data?.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS)
matches?.let {
message = it[0]
}
}
}
Column(
modifier = Modifier
.fillMaxSize()
.padding(16.dp),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
TextField(
value = message,
onValueChange = { message = it },
modifier = Modifier.fillMaxWidth(),
placeholder = { Text("Enter your message") }
)
Spacer(modifier = Modifier.height(16.dp))
Button(onClick = {
speechResultLauncher.launch(recognizerIntent)
}) {
Text("Start Voice Input")
}
}
}3. 매니페스트 파일 수정
음성 입력을 사용하려면 매니페스트 파일에 RECORD_AUDIO 권한을 추가해야 합니다:
<uses-permission android:name="android.permission.RECORD_AUDIO"/>결론
이제 Jetpack Compose를 사용하여 채팅 앱에 음성 입력 기능을 성공적으로 추가할 수 있습니다. 음성 인식을 통해 더 편리한 채팅 경험을 제공할 수 있게 되었습니다. 필요에 따라 음성 인식 결과를 처리하는 추가적인 로직을 구현하여 사용자의 음성 입력을 더 정교하게 처리할 수 있습니다.
오늘의 이야기
#스치니1000프로젝트 #재미 #행운기원 #Compose #Firebase
🎯 야 너 토요일마다 로또 확인하냐?
나도 맨날 “혹시나~” 하면서 봤거든 ㅋㅋ
근데 이제는 그냥 안 해
AI한테 맡겼어 🤖✨
그것도 구글 Gemini로다가!
그래서 앱 하나 만들었지
👉 “로또 예상번호 by Gemini” 🎱
AI가 분석해서 번호 딱! 뽑아줌
그냥 보고 참고만 하면 됨
재미로 해도 좋고…
혹시 모르는 거잖아? 😏
https://play.google.com/store/apps/details?id=com.billcorea.gptlotto1127
오늘의 이야기
#스하리1000명프로젝트,
In Korea verloren? Selbst wenn Sie kein Koreanisch sprechen, hilft Ihnen diese App dabei, sich problemlos fortzubewegen.
Sprechen Sie einfach Ihre Sprache – es übersetzt, sucht und zeigt Ergebnisse in Ihrer Sprache an.
Ideal für Reisende! Unterstützt mehr als 10 Sprachen, darunter Englisch, Japanisch, Chinesisch, Vietnamesisch und mehr.
Probieren Sie es jetzt aus!
https://play.google.com/store/apps/details?id=com.billcoreatech.opdgang1127
2026/04/18
오늘의 이야기
#billcorea #운동동아리관리앱
🏸スチーニーたち、バドミントン同好会必須アプリ登場!
👉マッチプレイ - スコア記録&試合相手を探す🎉
一人で、友達、同好会どこでもぴったりです! 🤝
バドミントン好きならぜひ使ってみてください
アプリショートカット👉 https://play.google.com/store/apps/details?id=com.billcorea.matchplay
오늘의 이야기
MS 코파일럿, 월 200달러 챗GPT 고급 AI 기능 무료 제공
• 마이크로소프트(MS)가 자사의 코파일럿에 오픈AI의 고급 AI 모델인 o1을 활용한 '씽크 디퍼' 기능을 무료로 제공한다고 발표했습니다. 기존에 챗GPT 프로에서 월 200달러에 제공되던 o1 모델을 코파일럿 사용자라면 누구나 무료로 이용할 수 있게 함으로써, 고성능 AI 접근성을 대폭 높였습니다.
• 씽크 디퍼는 몇 초간 분석 및 검색을 거쳐 심층적인 답변을 제공하며, 기후 변화 분석, 역사적 사건 해석, 프로그래밍 코드 작성 등 복잡한 작업에도 강점을 보입니다. 이는 단순하고 짧은 답변에 집중했던 기존 코파일럿과는 다른 접근 방식이며, 2023년 10월까지의 데이터를 기반으로 동작합니다.
• 현재 MS는 씽크 디퍼의 유료화 계획을 밝히지 않았으나, 오픈AI가 더욱 발전된 o3 모델을 출시한 점을 고려할 때, AI 업계의 빠른 기술 발전 속도와 향후 서비스 정책 변화 가능성을 주목해야 합니다.
https://www.cio.com/article/3813934/ms-%EC%9B%94-200%EB%8B%AC%EB%9F%AC-%EC%B1%97gpt-%EA%B3%A0%EA%B8%89-ai-%EA%B8%B0%EB%8A%A5-%EC%9C%88%EB%8F%84%EC%9A%B0-%EC%82%AC%EC%9A%A9%EC%9E%90%EC%97%90-%EB%AC%B4%EB%A3%8C-%EC%A0%9C.html?amp=1
MS “월 200달러 챗GPT 고급 AI 기능, 윈도우 사용자에 무료 제공”
MS가 코파일럿의 새로운 ‘씽크 디퍼(Think Deeper)’ 기능을 통해 오픈AI의 o1 모델을 무료로 제공한다.
www.cio.com
오늘의 이야기
jQuery 배열 복사 방법
- slice() 메서드 사용:
javascript
var originalArray = [1, 2, 3, 4];
var copiedArray = originalArray.slice();
- concat() 메서드 사용:
javascript
var originalArray = [1, 2, 3, 4];
var copiedArray = [].concat(originalArray);
- Array.from() 메서드 사용:
javascript
var originalArray = [1, 2, 3, 4];
var copiedArray = Array.from(originalArray);
- 스프레드 연산자 사용 (ES6):
javascript
var originalArray = [1, 2, 3, 4];
var copiedArray = [...originalArray];
jQuery를 사용한 배열 요소 이름과 갯수 확인
var originalArray = ['apple', 'banana', 'cherry', 'date'];
// 요소 이름 출력
originalArray.forEach(function(element) {
console.log(element);
});
// 요소 갯수 출력
console.log('Array length:', originalArray.length);
jQuery를 사용한 객체 배열의 이름과 값 확인
var originalArray = [
{ name: 'apple', color: 'red' },
{ name: 'banana', color: 'yellow' },
{ name: 'cherry', color: 'red' },
{ name: 'date', color: 'brown' }
];
// 객체 배열의 이름과 값 출력
originalArray.forEach(function(element) {
console.log('Name: ' + element.name + ', Color: ' + element.color);
});
객체 배열의 속성 이름을 모를 때
var originalArray = [
{ name: 'apple', color: 'red' },
{ name: 'banana', color: 'yellow' },
{ name: 'cherry', color: 'red' },
{ name: 'date', color: 'brown' }
];
// 모든 키와 값 출력
originalArray.forEach(function(element) {
Object.keys(element).forEach(function(key) {
console.log(key + ': ' + element[key]);
});
console.log('---'); // 각 객체 사이에 구분선 추가
});오늘의 이야기
개발자들을 위한 퍼플렉시티 AI 활용법: 효율적인 검색과 정보 요약 ai가 그린 이미지 • 퍼플렉시티 AI는 출처가 명확한 요약된 답변을 제공하는 AI 기반 검색 엔진으로, 기존 검색 엔진의 한계를 극복하고 개...
-
이전 글에서 정리할 것처럼 java에서 kotlin으로 이전을 했습니다. 그러고 나서 보기 시작했는 데, DefaultSharedPrefernces의 사용할 수 없는 환경으로 변경이 된 것을 알게 되었습니다. 이전 prefs = Prefere...