Dart & Flutter에 관해 잘못된 정보가 너무 많이 퍼지고 있기 때문에 명확히 해야 할 필요성을 느낍니다. 사리:

- 전략 변경은 없습니다.
- 팀 규모에는 변화가 없습니다. 일부 DevOps 역할이 새로운 위치로 이동합니다.
- 2024년 로드맵은 계속됩니다.

이제 제품 이야기로 돌아오겠습니다!

 

플러터 계속 갈것인가? 

 

당분한은 계속 될것이다. 

다양한 플랫폼에서 강력하게

반응형

'IT & Programming > Dart and Flutter' 카테고리의 다른 글

[flutter] base64 encodeing  (0) 2024.03.26
flutter 비만도 계산기 3.0 에서 실행  (0) 2024.02.28

m2 맥북프로 좋은데 무거워

해비한 작업을 자주 하는것도 아니고, 베터리 오래가고 가벼운 것 이 필요한데 아이패드 는 단순 뷰어 이상 활용이 힘들고

그램 같은것도 생각해봤는데 연결성 연속성을 생각하면 그냥 맥북에어 한번 사면 또 몇년은 쓰니까 지르자

 

2024 코팅머신 맥북에어 m3 

https://link.coupang.com/a/bzOCGn

Apple 2024 맥북 에어 13 M3, 스페이스그레이, M3 8코어, 8코어 GPU, 256GB, 8GB, 30W, 한글

 

 

여의도 가서 살까? 하다가 쿠팡으로 그나마 저렴하고 빠르다.

반응형
import 'dart:convert';

final rawString = 'id@id.com:password';
Codec<String, String> stringToBase64 = utf8.fuse(base64);
String token = stringToBase64.encode(rawString);

 

base64 인코딩 

반응형

 

1. 헤놀로지의 시작

4년전 팀프로젝트 공유 목적으로 사용하던 2베이 시놀로지 잘 사용했는데 

도커를 이용해서 2개의 서비스를 사용하면서부터 너무 느렸다. 

당시 사용자가 6~8명

 

그리하여 버린 부품으로 만든 헤놀로지가 시작되었다. 

당시 우분투를 사용할 까도 했는데 간편하게 사용하기엔 시놀로지 인터페이스가 편했다.

나름 보안적인? 부분도 관리하기 쉽고 

 

2. 치명적인 단점

오래된 부품들 , 불용부품들을 이용해서 만들었더니 

몇번의 사망 - 부활을 했다. 

 

-우선 Power 사망 

400W 묻지마 파워 사망 

재활용 하기전에 이미 3년이상 사용했던 파워인데 24시간 사용하다 보니 콘덴서가 터졌다.

 

-메인보드 불량

처음에는 ddr3 8기가 4개 풀뱅크였는데 

2개가 인식불량이 발생했다. 

8기가만 해도 충분해서 2개는 빼고 사용

 

-메인보드 불량2 

어느날 보니 헤놀로지 접속이 불가능했다.

메인보드 내장 렌이 사망했다.

775 중고 보드를 구해도 이미 수명이 다한 놈들이여서

렌카드 구해서 수명연장

 

3. 헤놀로지를 끝내고 시놀로지를 갔다가 다시 헤놀

인텔 i7-4770 시피유를 사용했는데 나스용으로는 만족스러웠다.

처음 설치할때 이후 업데이트도 불필요했으며 

내부망에서만 동작하도로 외부인터넷 차단상태라 나름 보안에도 문제 없었으며 

 

오래된 부품활용해서 사용하다보니 중간 중간 사망하는 경우가 있었다.

그때마다 집에 남는 부품 하나둘 각출해서 수명을 연장했었는데

 

프로젝트 회비? 공금이 남아서 시놀로지4베이를 구입했다.

나름 정품이니 좋겠다 했는데 

 

8명의 클라이언트가 사용하기엔 다소 부족했다.

도커를 돌리기엔 4기가 램도 문제가 있었으며

CPU컴퓨팅 파워가 워낙 저전력 모드라 형상관리 , 레드마인 , 등을 돌리기엔 부족했다.

 

고성능의 시놀로지를 구입하면 해결되지만 비용이... 

 

기존에 사용하던 4770을 다시 사용하자는 의견이 있었는데 , 사실 사용하기엔 부족함이 없었으나

보드가 오늘 내일 하고 , 사용하던 하드 디스크도 이미 수명한계를 한참은 지난 불용품들이였다.

 

얼마전 구입했던 시놀로지를 팀원이 인수하기로 하고 그 돈으로 저렴한 pc 구입하고 남는돈으로 

저녁도 먹고 다시 헤놀로지를 장만했다.

 

그리하여 이번엔 신품으로 가자

라이젠5 5600G / 32G Ram / 600w 파워 / NVMe 500G (캐쉬) / 4테라 NAS용 하드 2개 / 10g dual 렌카드

 

 

사실 도커가 메인이라면 우분투를 OS로 설치 하고 나머지를 가상으로 돌리는것이 현명하겠지만

나름 검증된 헤놀로지 를 사용해서 만족스러운 시스템을 구성했다.

 

소규모 팀 5~8명이 동시에 사용하기엔 충분했다. 

집에서 사용하기엔 전력사용량 이나 소음 , 등으로 비추천하지만 

세미 프로젝트 공용으로 사용하기엔 추천

 

성능은 : 내부망 2.5G 스위칭 허브에 물려있다. 아직 10G 허브가 없어서 

파일 공유 능력은 190 ~ 200 정도 성능이고 

도커에서 돌아가는 형상관리 , 테스트 서비스들 아주 빠릿빠릿하다. 

 

4.끝으로

정리하자면 헤놀로지 의 성능은 가성비 최고다. 24시간 서버로 사용하는 장비다 보니

내구성이 팍팍 줄어든다. 쿨링에 신경을 쓰고 , 너무 저렴하고 , 묻지마 제품보단 나름 이름있는 제품으로 

구성하면 만족도 높을것이다.  그리고 정품이 아니라는 찝찝함....은 덤 

반응형

비만도 계산기 

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'BMI Demo',
      theme: ThemeData(
        primarySwatch: Colors.green,
      ),
      home: BmiMain(),
    );
  }
}

class BmiMain extends StatefulWidget {
  const BmiMain({super.key});

  @override
  State<BmiMain> createState() => _BmiMainState();
}

class _BmiMainState extends State<BmiMain> {
  final _formKey = GlobalKey<FormState>();
  final _heightController = TextEditingController();
  final _weightController = TextEditingController();

  @override
  void dispose(){
    _heightController.dispose();
    _weightController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('비만도 계산기'),
      ),
      body: Container(
        padding: const EdgeInsets.all(16.8),
        child: Form(
          key: _formKey ,
          child: Column(
            children: [
              TextFormField(
                decoration: InputDecoration(
                border: OutlineInputBorder(),
                  hintText: '키',
              ),
                controller: _heightController,
                keyboardType: TextInputType.number,
                validator:(value){
                  if(value!.trim().isEmpty){
                    return '키를 입력하세요';
                  }
                  return null;
                }
              ),
              SizedBox(
                height: 16.8,
              ),
              TextFormField(
                decoration: InputDecoration(
                  border: OutlineInputBorder(),
                  hintText: '몸무게',
                ),
                controller: _weightController,
                keyboardType: TextInputType.number,
                validator:(value){
                  if(value!.trim().isEmpty){
                    return '몸무게를 입력하세요';
                  }
                  return null;
                }
              ),
              Container(
                margin: EdgeInsets.only(top: 16.8),
                alignment: Alignment.centerRight,
                child: ElevatedButton(
                  onPressed: (){
                    if (_formKey.currentState!.validate()){
                      //검증처리
                      Navigator.push(
                        context,
                        MaterialPageRoute(builder: (context)=> BmiResult(
                        double.parse(_heightController.text.trim()),
                        double.parse(_weightController.text.trim()))),
                      );
                    }
                  },
                  child: Text('결과'),
                ),
              )
            ],
          ),

        ),
      ),
    );
  }
}

class BmiResult extends StatelessWidget {

  final double height; // 키
  final double weight; // 몸무게

  BmiResult(this.height, this.weight); // 생성자

  @override
  Widget build(BuildContext context) {
    final bmi = weight / ((height / 100) * (height / 100));
    print('bmi : $bmi');

    return Scaffold(
      appBar: AppBar(
        title: Text('비만도 계산기'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(_calcBmi(bmi),
              style: TextStyle(fontSize: 36),
            ),
            SizedBox(
              height: 16,
            ),
            _buildIcon(bmi),

          ],
        ),
      ),
    );
  }

  String _calcBmi(double bmi) {
    var result = '저체중';
    if (bmi >= 35) {
      result = '고도비만';
    } else if (bmi >= 30) {
      result = '2 단계 비만';
    } else if (bmi >= 25) {
      result = '1 단계 비만';
    } else if (bmi >= 23) {
      result = '과체중';
    } else if (bmi >= 18.5) {
      result = '정상';
    }
    return result;
  }

  Widget _buildIcon(double bmi) {
    if (bmi >= 23) {
      return Icon(
        Icons.sentiment_very_dissatisfied,
        color: Colors.red,
        size: 100,
      );
    } else if (bmi >= 18.5) {
      return Icon(
        Icons.sentiment_satisfied,
        color: Colors.green,
        size: 100,
      );
    } else {
      return Icon(
        Icons.sentiment_dissatisfied,
        color: Colors.orange,
        size: 100,
      );
    }
  }
}

 

반응형

'IT & Programming > Dart and Flutter' 카테고리의 다른 글

[Flutter] 2024년 어떻게? 계속될것인가?  (0) 2024.05.03
[flutter] base64 encodeing  (0) 2024.03.26

1. 장치관리자를 실행합니다.

 

2.휴먼 인터페이스 장치

3.Bluetooth HID 장치

전원관리 들어가서 체크 끄기

4.Bluetooth 저에너지 GATT 준수 HID장치 속성

전원들어가서 체크 끄기

 

5. 리부팅후 사용해본다. 

 

잘 사용하던 노트북 마우스가 끊겨서 답답했다.

배터리 수준확인해보면 70%로 아직 남아 있는데 뭐가 문제일까?

 

드라이버도 업데이트 해봐도 같은 증상이다.

 

[저전력 모드] 에서 회복할때 문제가 있는듯하다.

 

휴먼인터페이스 장치들의 저전력 관리를 끄면 좋아지긴하는데 키보드 마우스 배터리는 이전보다 빨리 소모된다.

반응형

'IT & Programming' 카테고리의 다른 글

2024 맥북에어 M3  (0) 2024.04.30
결국 다시 헤놀로지  (0) 2024.03.03
정보보안기사/산업기사 답안 2023년 4회  (0) 2023.10.08
정보보호 관련 국내외자격  (0) 2023.09.22
DAC / 오인페 연결후 부팅문제  (0) 2023.08.07
산업기사      
문항 답안    
1 2 42 1
2 4 43 4
3 3 44 1
4 3 45 1
5 1 46 2
6 2 47 2
7 4 48 2
8 2 49 2
9 1 50 1
10 3 51 2
11 3 52 2
12 2 53 4
13 2 54 2
14 2 55 3
15 3 56 2
16 2 57 2
17 4 58 2
18 3 59 3
19 1 60 4
20 2 61 3
21 3 62 1
22 4 63 4
23 4 64 4
24 4 65 4
25 3 66 2
26 2 67 4
27 2 68 4
28 1 69 4
29 2 70 4
30 1 71 4
31 3 72 4
32 2 73 2
33 4 74 3
34 2 75 1
35 4 76 4
36 2 77 2
37 2 78 4
38 3 79 4
39 1 80 2
40 1    
41 1    

 

정보보안기사        
문항 답안        
1 3 42 3 83 2
2 2 43 2 84 2
3 4 44 3 85 2
4 3 45 1 86 1
5 3 46 1 87 4
6 3 47 2 88 3
7 3 48 1 89 3
8 4 49 3 90 3
9 4 50 1 91 3
10 3 51 1 92 4
11 4 52 4 93 3
12 3 53 1 94 2
13 1 54 4 95 3
14 1 55 3 96 2
15 2 56 2 97 2
16 2 57 4 98 3
17 2 58 3 99 3
18 2 59 4 100 3
19 3 60 3    
20 3 61 4    
21 2 62 3    
22 3 63 1    
23 4 64 4    
24 1 65 4    
25 2 66 4    
26 4 67 4    
27 2 68 4    
28 1 69 1    
29 4 70 3    
30 1 71 4    
31 2 72 3    
32 3 73 2    
33 3 74 4    
34 2 75 1    
35 4 76 3    
36 4 77 3    
37 2 78 4    
38 1 79 3    
39 4 80 1    
40 3 81 1    
41 2 82 2    
           
반응형

'IT & Programming' 카테고리의 다른 글

결국 다시 헤놀로지  (0) 2024.03.03
블루투스 마우스 끊길때  (0) 2023.10.27
정보보호 관련 국내외자격  (0) 2023.09.22
DAC / 오인페 연결후 부팅문제  (0) 2023.08.07
타오나스 시놀로지 7.1 설치하기  (0) 2023.07.14

8(정보보호 관련 국내외자격) 규칙 제8조 제1호의 규정에 따른 규칙 별표 1 비고 4호의 "정보보호와 밀접한 관계가 있는 국내 또는 외국의 기술자격으로 과학기술정보통신부장관이 정하는 자격"이란 다음 각 호의 자격을 말한다.

1. 정보보안기사, 정보보안산업기사

2. 정보보호전문가(SIS: Specialist for Information Security)

3. 정보보호관리체계(ISMS: Information Security Management System) 인증심사원

4. 개인정보보호관리체계(PIMS: Personal Information Security Management System) 인증심사원

5. 정보시스템감리사

6. 공인정보시스템보호전문가(CISSP: Certified Information Systems Security Professional)

7. 공인정보시스템감사사(CISA: Certified Information Systems Auditor)

 

 

반응형

부팅하고 장비 연결하면 잘되는데

연결해두고 부팅할려고하면 전원버튼 먹통이라면

 

파워 전원상태 확인부터 해봅시다.

 

5볼트 전원이 불량하면 부팅 불량이 나타납니다.

바이오스에서 전원상태 확인해서 12V , 5V 전원이 정상적인지 부족한지 확인하고 

부족하면 파워 교환해야합니다.

 

 

반응형

 

헤놀로지 설치를 했습니다.

 

기존에 사용하던 타오나스(중국발 헤놀로지) 6.2 -> 7.1 작업을 하였습니다.

오래된 하드는 불용처리하고

요즘 저렴해진 SSD를 메인으로 설치

하드는 사용시간이 오래되서 다시 구입해서 세팅

 

예전엔 설치 과정이 복잡했는데 요즘 부트로더가 정말 좋아져서 한번에 설치했습니다.

 

설치방법은 서버포럼 - Xpenology (svrforum.com) 서버포럼 설명대로 하면 쉽게 할 수 있습니다.

 

서버포럼 - Xpenology

서버포럼은 개인 홈서버 구축, NAS, 헤놀로지, IT 정보, 기타 많은갤러리 등 정보 공유 커뮤니티입니다

svrforum.com

 

 

리얼 시놀로지가 2대가 있어서 이 장비는 백업용입니다. 

외부 접속은 차단이고 내부접속 용도로만 사용합니다.

 

 

 

반응형

 

nav_host_fragment  unresolved reference

navController = findNavController(R.id.nav_host_fragment)

 

 

안드로이드 버튼 임포트 에러날떼

build.grade(app) 수정

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'kotlin-android'
    id 'kotlin-android-extensions'
}
반응형

phpMyAdmin -403 - Forbidden: Access is denied.

 

우선 설치된 위치의 접근권한을 확인한다. 

반응형

킹룬 KP3s Pro 순정펌웨어 1.01.0712 버전

v1.01.0712.22-20230403T204758Z-001.zip
0.99MB

The Stock Firmware for the KINGROON KP3S Pro.

Please remember to flash all the files together when cross version. 

(Will be available soon)

 

아래 링크는 킹룬에서 공유한 링크

https://drive.google.com/drive/folders/1GXqhWnNIWlagyWxKp9KEcQ9L1U0MqaRf

반응형

- getElementsByClassName() : 많은 element를 가져올때 씀(array를 반환)
- getElementsByTagName() : name을 할당할 수 있음(array를 반환)
- querySelector : element를 CSS selector방식으로 검색할 수 있음 (ex. h1:first-child)
단 하나의 element를 return해줌
⇒ hello란 class 내부에 있는 h1을 가지고 올 수 있다(id도 가능함)
- 첫번째 element만 가져옴
- 조건에 맞는 세개 다 가져오고 싶으면 querySelectorAll
⇒ 세개의 h1이 들어있는 array를 가져다 줌
- querySelector("#hello); 와 getElementById("hello"); 는 같은 일을 하는 것임
하지만 후자는 하위요소 가져오는 것을 못하므로 전자만 쓸거다

 

원하는 값을 불러오는 방법에는 여러가지 있다.

getElementById >> 하나의 값
getElementsByClassName >> 배열
getElementsByTagName . . . >> 배열

위에서 id 빼고는 배열을 가져오기 때문에 title.innerText 와 같은 방법은 사용할 수 없다.

Grab me3
처럼 Id를 가진 태그의 하위 태그를 선택하고 싶을 때 위의 방법으로는 한계가 있다.
이때 사용하는 게 querySelector/querySelectorAll

const title = document.querySelector(".hellos h1"); 와 같이 쓰면
.hellos h1 마치 css 선택자 처럼 원하는 요소를 선택 가능
console.log((title.innerText = "히힛")); 화면에 글자가 히힛으로 바뀐다

** 단 hello라는 class를 가진 h1태그가 여러개인 경우 querySelectorAll을 써야 한다.
선택자가 id인 경우엔 #hello
만약 요소를 특정하지 않고 선택자만 쓰는 경우
>> const title = document.querySelector(".hellos");

반응형

from requests import get

websites=[
"google.com",
"https://httpstat.us/502",
"https://httpstat.us/404",
"https://httpstat.us/300",
"https://httpstat.us/200",
"https://httpstat.us/101"
]
#https://httpstat.us/xxx is service for generating HTTP codes

results={}

for website in websites:
if not website.startswith("https://"):
website = f"https://{website}"
code = get(website).status_code
if code >= 500:
results[website] = "5xx / server error"
elif code >= 400:
results[website] = "4xx / client error"
elif code >= 300:
results[website] = "3xx / redirection "
elif code >= 200:
results[website] = "2xx / successful"
elif code >= 100:
results[website] = "1xx / informational response"

print(results)

반응형

'IT & Programming > python' 카테고리의 다른 글

파이선 자료구조  (0) 2023.03.22

list의 method 종류들을 보면

1. cound(내 list의 특정value가 몇개 있는지 알려준다.)
2. clear(list에있는 모든 value들을 없엔다. list에게 mutate를(modufy) 한것이다.)
3. reverse(list의 value들을 앞뒤 순서 바꿔버린다.)
4. append(list에 value을 추가할 수가 있다.)
5. remove(list에 특정 value을 없엘 수가 있다.)

list에 특정 값을 갖고 싶다고할때 먼저 list를 가리키는 variable에 접근해서 [ ] 대활호를 열고, 원하는 값의 숫자 순서 맞게 순서를 쓰면된다.

주의해야할 점은 pc는 숫자를 0부터 세기 때문에 ex) 만약 list 3번째에(사람이 숫자 세는 방식) 원하느 값이 있다면 숫자 2를(pc가 숫자 세는 방식) 써야한다.

ex)
```python
days_of_week = ["Mon", "Tue", "Wed", "Thur", "Fri"]

print(days_of_week[3])

 

List 리스트 자료형

리스트를 사용하면 1, 3, 5, 7, 9 숫자 모음을
다음과 같이 간단하게 표현할 수 있다.

리스트명 = [요소1, 요소2, 요소3, ...]
example >>> odd = [1, 3, 5, 7, 9]

https://wikidocs.net/14

 

튜플 Tuple 자료형 = 불변 , 순서

리스트는 [ ]으로 둘러싸지만 튜플은 ( )으로 둘러싼다.
리스트는 그 값의 생성, 삭제, 수정이 가능하지만
튜플은 그 값을 바꿀 수 없다.

example >>>>>>
t1 = ()
>>> t2 = (1,)
>>> t3 = (1, 2, 3)
>>> t4 = 1, 2, 3
>>> t5 = ('a', 'b', ('ab', 'cd'))

https://wikidocs.net/15

 

딕셔너리 Dictionary 자료형 = 키

딕셔너리는 Key와 Value를 한 쌍으로 갖는 자료형이다.

example >> {Key1: Value1, Key2: Value2, Key3: Value3, ...}
>>> dic = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}

https://wikidocs.net/16

 

02-5 딕셔너리 자료형

`[추천 동영상 강의]` : [https://www.youtube.com/watch?v=BmXDox6ZFzo](https://www.youtube.com/watch?v=BmXDo…

wikidocs.net

 

Summary of Data Structures
1) Lists
- how to write : [ ]
- properties: mutable, multi-type data
- methods: append # Add elements in the latter part

2) Tuple
- how to write: ()
- properties: not mutable, multi-type data
- methods: restricted

3) Dictionary
- how to write: {key: value}
- properties: mutable, multi-type data

반응형

'IT & Programming > python' 카테고리의 다른 글

http status  (0) 2023.03.22

+ Recent posts