!--

패스트 캠퍼스에서 강의 몇 개를 구입했는데, 해외 사이트에 비해 만족감이 낮다. 이유는 내가 싫어하는 마케팅을 한다.

 

할인해서 구입했더니, https://www.fastcampus.co.kr/event_online_payback/ 페이백 이벤트를 했고,

페이백 이벤트가 끝나니 https://www.fastcampus.co.kr/event_online_zeropad/?utm_source=channelio&utm_medium=banner&utm_campaign=event_online_payback&utm_content=191202

아이패드 포함 이벤트를 한다. 따져보면 빠른 사람이 더 이익인 것은 맞는데. 나 같은 경우 강의를 2개 구입했기 때문에 6만원 정도 손해다. 해외 사이트에서 얻은 내용과 다르다면 6만원이 아니라 600만원도 아깝지 않을텐데 거의 같은 내용으로 구성되어 있었다. 뭐, 이런 건 부차적인 것이다. 다른 회사 시키지 않고 자회사가 "여러분에게만 기간한정"의 늬앙스를 주는 이벤트는 많이 하는 회사 중에 흥한 곳은 단 한 곳도 못 봤다. 물론, 최초가 될 수도 있겠으나. 기다리면 계속 싸질 것이라는 것은 자명하다.

 

지금 당장의 매출이 정말 중요한가 보다. 상업 솔루션은 어쩔 수 없는 듯. 패스트 캠퍼스 온라인 강의는 마케팅 방식 빼고 모든게 마음에 든다.

 

이렇게 적어두는 것은 내가 만든 제품은 기간한정 할인 이벤트를 하지 않고 기존 구매자가 계속 해서 만족할 수 있도록 애플 마케팅을 할 것임을 다짐하려고 써 둔다.

 

이제 정말 작은 것에도 신경을 써야 겠다.

구글 지수트 서비스 목록

G Suite 상태 대시보드

이 페이지에는 다음 Google 서비스의 성능 정보가 표시됩니다. 달리 언급이 없는 경우 이 상태 정보는 G Suite를 사용하는 기업용 서비스뿐만 아니라 일반 서비스에도 적용됩니다.

언제든지 아래에 나열된 서비스의 현재 상태를 여기에서 확인할 수 있습니다. 추가 정보가 필요하거나 문제를 신고하려면 G Suite 고객센터를 방문하거나 G Suite 알려진 문제 페이지를 참조하세요.

G Suite 서비스 수준 계약  기술 지원 서비스 가이드라인이 적용되는 제품:

현재 상태

 

  Gmail

 

  Google 캘린더

 

  Google 드라이브

 

  Google 문서

 

  Google 스프레드시트

 

  Google 프레젠테이션

 

  Google 사이트 도구

 

  Google 그룹스

 

  Google 행아웃

 

  행아웃 채팅

 

  행아웃 미팅

 

  Google Vault

 

  Google+

 

  Google 설문지

 

  Google Cloud Search

 

  Google Keep

 

  Google Tasks

 

  Google Voice

 

 

G Suite 서비스 수준 계약, 클라우드 ID 서비스 수준 계약, 기술 지원 서비스 가이드라인이 적용되는 제품:

현재 상태

 

  관리 콘솔

 

 

G Suite 서비스 수준 계약이 적용되지 않는 제품:

현재 상태

 

  Google 애널리틱스

 

  App Maker

 

  Google 지도

 

  Blogger

 

  Google Sync for Mobile

 

  클래스룸

 

  Google Realtime API

 

 

 RSS 피드

따로 언급되지 않은 경우 모든 시간은 현지 시간대에 맞게 표시됩니다.

 문제 없음  서비스 문제  서비스 중단

'Blog History' 카테고리의 다른 글

개 발 일 지 035  (0) 2019.12.04
개 발 일 지 034  (1) 2019.12.04
개 발 일 지 032  (0) 2019.11.26
개 발 일 지 031  (0) 2019.11.26
개 발 일 지 030  (0) 2019.11.25

https://colab.research.google.com/github/tensorflow/docs/blob/master/site/en/tutorials/quickstart/beginner.ipynb?hl=ko

(venv) (base) j:\AI>deactivate
(base) j:\AI>.\venv\Scripts\activate

(venv) (base) j:\AI>pip install --upgrade tensorflow
Collecting tensorflow
  Downloading https://files.pythonhosted.org/packages/54/5f/e1b2d83b808f978f51b7ce109315154da3a3d4151aa59686002681f2e109/tensorflow-2.0.0-cp37-cp37m-win_amd64.whl (48.1MB)
     |███████▌                        | 11.1MB 1.3MB/s eta 0:00:29  

 

--------------------------------------------------------------------------- ModuleNotFoundError Traceback (most recent call last) <ipython-input-2-64156d691fe5> in <module> ----> 1 import tensorflow as tf ModuleNotFoundError: No module named 'tensorflow'

 


(venv) (base) j:\AI>jupyter notebook
[I 02:46:29.893 NotebookApp] The port 8888 is already in use, trying another port.
[I 02:46:29.894 NotebookApp] The port 8889 is already in use, trying another port.
[I 02:46:29.995 NotebookApp] JupyterLab extension loaded from J:\Anaconda3\lib\site-packages\jupyterlab
[I 02:46:29.996 NotebookApp] JupyterLab application directory is J:\Anaconda3\share\jupyter\lab
[I 02:46:30.041 NotebookApp] Serving notebooks from local directory: j:\AI
[I 02:46:30.041 NotebookApp] The Jupyter Notebook is running at:
[I 02:46:30.042 NotebookApp] http://localhost:8890/?token=170a7f76196b6eee0b173ea61c2cff69e4fe980b73e5a456
[I 02:46:30.044 NotebookApp]  or http://127.0.0.1:8890/?token=170a7f76196b6eee0b173ea61c2cff69e4fe980b73e5a456
[I 02:46:30.045 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 02:46:30.165 NotebookApp]

    To access the notebook, open this file in a browser:
        file:///C:/Users/joe/AppData/Roaming/jupyter/runtime/nbserver-46908-open.html
    Or copy and paste one of these URLs:
        http://localhost:8890/?token=170a7f76196b6eee0b173ea61c2cff69e4fe980b73e5a456
     or http://127.0.0.1:8890/?token=170a7f76196b6eee0b173ea61c2cff69e4fe980b73e5a456
[I 02:46:46.732 NotebookApp] Creating new notebook in
[I 02:46:47.969 NotebookApp] Kernel started: 89448ba3-29ae-43e7-a188-e19883fe88ea

 

 

--------------------------------------------------------------------------- ModuleNotFoundError Traceback (most recent call last) <ipython-input-1-64156d691fe5> in <module> ----> 1 import tensorflow as tf ModuleNotFoundError: No module named 'tensorflow'

 

 

(venv) (base) j:\AI>pip install --upgrade tensorflow
Requirement already up-to-date: tensorflow in j:\ai\venv\lib\site-packages (2.0.0)
Requirement already satisfied, skipping upgrade: gast==0.2.2 in j:\ai\venv\lib\site-packages (from tensorflow) (0.2.2)
Requirement already satisfied, skipping upgrade: wrapt>=1.11.1 in j:\anaconda3\lib\site-packages (from tensorflow) (1.11.2)
Requirement already satisfied, skipping upgrade: opt-einsum>=2.3.2 in j:\ai\venv\lib\site-packages (from tensorflow) (3.1.0)
Requirement already satisfied, skipping upgrade: keras-preprocessing>=1.0.5 in j:\ai\venv\lib\site-packages (from tensorflow) (1.1.0)
Requirement already satisfied, skipping upgrade: protobuf>=3.6.1 in j:\ai\venv\lib\site-packages (from tensorflow) (3.10.0)
Requirement already satisfied, skipping upgrade: termcolor>=1.1.0 in j:\ai\venv\lib\site-packages (from tensorflow) (1.1.0)
Requirement already satisfied, skipping upgrade: grpcio>=1.8.6 in j:\ai\venv\lib\site-packages (from tensorflow) (1.25.0)
Requirement already satisfied, skipping upgrade: absl-py>=0.7.0 in j:\ai\venv\lib\site-packages (from tensorflow) (0.8.1)
Requirement already satisfied, skipping upgrade: tensorflow-estimator<2.1.0,>=2.0.0 in j:\ai\venv\lib\site-packages (from tensorflow) (2.0.1)
Requirement already satisfied, skipping upgrade: astor>=0.6.0 in j:\ai\venv\lib\site-packages (from tensorflow) (0.8.0)
Requirement already satisfied, skipping upgrade: six>=1.10.0 in j:\anaconda3\lib\site-packages (from tensorflow) (1.13.0)
Requirement already satisfied, skipping upgrade: wheel>=0.26 in j:\ai\venv\lib\site-packages (from tensorflow) (0.33.6)
Requirement already satisfied, skipping upgrade: tensorboard<2.1.0,>=2.0.0 in j:\ai\venv\lib\site-packages (from tensorflow) (2.0.1)
Requirement already satisfied, skipping upgrade: google-pasta>=0.1.6 in j:\ai\venv\lib\site-packages (from tensorflow) (0.1.8)
Requirement already satisfied, skipping upgrade: numpy<2.0,>=1.16.0 in j:\anaconda3\lib\site-packages (from tensorflow) (1.17.3)
Requirement already satisfied, skipping upgrade: keras-applications>=1.0.8 in j:\ai\venv\lib\site-packages (from tensorflow) (1.0.8)
Requirement already satisfied, skipping upgrade: setuptools in j:\ai\venv\lib\site-packages (from protobuf>=3.6.1->tensorflow) (42.0.1)
Requirement already satisfied, skipping upgrade: google-auth-oauthlib<0.5,>=0.4.1 in j:\ai\venv\lib\site-packages (from tensorboard<2.1.0,>=2.0.0->tensorflow) (0.4.1)
Requirement already satisfied, skipping upgrade: werkzeug>=0.11.15 in j:\anaconda3\lib\site-packages (from tensorboard<2.1.0,>=2.0.0->tensorflow) (0.16.0)
Requirement already satisfied, skipping upgrade: markdown>=2.6.8 in j:\ai\venv\lib\site-packages (from tensorboard<2.1.0,>=2.0.0->tensorflow) (3.1.1)
Requirement already satisfied, skipping upgrade: google-auth<2,>=1.6.3 in j:\ai\venv\lib\site-packages (from tensorboard<2.1.0,>=2.0.0->tensorflow) (1.7.1)
Requirement already satisfied, skipping upgrade: h5py in j:\anaconda3\lib\site-packages (from keras-applications>=1.0.8->tensorflow) (2.9.0)
Requirement already satisfied, skipping upgrade: requests-oauthlib>=0.7.0 in j:\ai\venv\lib\site-packages (from google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.1.0,>=2.0.0->tensorflow) (1.3.0)
Requirement already satisfied, skipping upgrade: cachetools<3.2,>=2.0.0 in j:\ai\venv\lib\site-packages (from google-auth<2,>=1.6.3->tensorboard<2.1.0,>=2.0.0->tensorflow) (3.1.1)
Requirement already satisfied, skipping upgrade: pyasn1-modules>=0.2.1 in j:\ai\venv\lib\site-packages (from google-auth<2,>=1.6.3->tensorboard<2.1.0,>=2.0.0->tensorflow) (0.2.7)
Requirement already satisfied, skipping upgrade: rsa<4.1,>=3.1.4 in j:\ai\venv\lib\site-packages (from google-auth<2,>=1.6.3->tensorboard<2.1.0,>=2.0.0->tensorflow) (4.0)
Requirement already satisfied, skipping upgrade: requests>=2.0.0 in j:\anaconda3\lib\site-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.1.0,>=2.0.0->tensorflow) (2.22.0)
Requirement already satisfied, skipping upgrade: oauthlib>=3.0.0 in j:\ai\venv\lib\site-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.1.0,>=2.0.0->tensorflow) (3.1.0)
Requirement already satisfied, skipping upgrade: pyasn1<0.5.0,>=0.4.6 in j:\ai\venv\lib\site-packages (from pyasn1-modules>=0.2.1->google-auth<2,>=1.6.3->tensorboard<2.1.0,>=2.0.0->tensorflow) (0.4.8)
Requirement already satisfied, skipping upgrade: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in j:\anaconda3\lib\site-packages (from requests>=2.0.0->requests-oauthlib>=0.7.0->google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.1.0,>=2.0.0->tensorflow) (1.24.2)
Requirement already satisfied, skipping upgrade: certifi>=2017.4.17 in j:\anaconda3\lib\site-packages (from requests>=2.0.0->requests-oauthlib>=0.7.0->google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.1.0,>=2.0.0->tensorflow) (2019.9.11)
Requirement already satisfied, skipping upgrade: chardet<3.1.0,>=3.0.2 in j:\anaconda3\lib\site-packages (from requests>=2.0.0->requests-oauthlib>=0.7.0->google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.1.0,>=2.0.0->tensorflow) (3.0.4)
Requirement already satisfied, skipping upgrade: idna<2.9,>=2.5 in j:\anaconda3\lib\site-packages (from requests>=2.0.0->requests-oauthlib>=0.7.0->google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.1.0,>=2.0.0->tensorflow) (2.8)

(venv) (base) j:\AI>python -c "import tensorflow as tf;print(tf.reduce_sum(tf.random.normal([1000, 1000])))"
2019-11-26 02:48:42.169374: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
tf.Tensor(2040.7914, shape=(), dtype=float32)

 

 

python3 했더니 Microsoft store 로 넘어감. 3.7 버전이 있음. 게다가 받다가 지속 오류도 해결책도 없음ㅋㅋㅋ

 

ㅋㅋㅋ 언제 제대로 통합되려나 블로그에서 다들 고생하네. anaconda도 결국 텐서랑 다른 회사라 그런가 봄.

나중에 구글이 만든거 있으면 써야 하겠지만 아나콘다가 그걸 하려는 "움직임"이니 아나콘다 포스팅을 최우선으로 생각해야함.

 

 

https://www.tensorflow.org/install/pip?hl=ko

 

Install TensorFlow with pip  |  TensorFlow

TensorFlow 2 packages are available tensorflow —Latest stable release for CPU-only tensorflow-gpu —Latest stable release with GPU support (Ubuntu and Windows) tf-nightly —Preview build (unstable). Ubuntu and Windows include GPU support. Older versions of T

www.tensorflow.org

 

https://docs.anaconda.com/anaconda/user-guide/tasks/tensorflow/

 

TensorFlow — Anaconda documentation

TensorFlow Anaconda makes it easy to install TensorFlow, enabling your data science, machine learning, and artificial intelligence workflows. This page shows how to install TensorFlow with the conda package manager included in Anaconda and Miniconda. Tenso

docs.anaconda.com

(base) PS C:\Users\joe> j:
(base) PS J:\> cd ai
(base) PS J:\ai> conda create -n tf tensorflow
Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: J:\Anaconda3\envs\tf

  added / updated specs:
    - tensorflow


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    _tflow_select-2.3.0        |              mkl           3 KB
    absl-py-0.8.1              |           py37_0         162 KB
    astor-0.8.0                |           py37_0          47 KB
    gast-0.2.2                 |           py37_0         155 KB
    google-pasta-0.1.8         |             py_0          43 KB
    grpcio-1.16.1              |   py37h351948d_1         850 KB
    keras-applications-1.0.8   |             py_0          33 KB
    keras-preprocessing-1.1.0  |             py_1          36 KB
    libmklml-2019.0.5          |                0        17.4 MB
    libprotobuf-3.10.1         |       h7bd577a_0         2.3 MB
    markdown-3.1.1             |           py37_0         132 KB

 

 

(base) PS J:\ai> conda activate tf-gpu                                                                                  (tf-gpu) PS J:\ai>     

 

 

 

(tf-gpu) PS J:\ai> python -c "import tensorflow as tf;print(tf.reduce_sum(tf.random.normal([1000, 1000])))"             2019-11-26 03:03:21.854070: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_100.dll
2019-11-26 03:03:24.622058: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library nvcuda.dll
2019-11-26 03:03:24.789283: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1618] Found device 0 with properties:
name: GeForce GTX 1050 major: 6 minor: 1 memoryClockRate(GHz): 1.544
pciBusID: 0000:09:00.0
2019-11-26 03:03:24.799864: I tensorflow/stream_executor/platform/default/dlopen_checker_stub.cc:25] GPU libraries are statically linked, skip dlopen check.
2019-11-26 03:03:24.808384: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1746] Adding visible gpu devices: 0
2019-11-26 03:03:24.813627: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2
2019-11-26 03:03:24.824682: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1618] Found device 0 with properties:
name: GeForce GTX 1050 major: 6 minor: 1 memoryClockRate(GHz): 1.544
pciBusID: 0000:09:00.0
2019-11-26 03:03:24.835336: I tensorflow/stream_executor/platform/default/dlopen_checker_stub.cc:25] GPU libraries are statically linked, skip dlopen check.
2019-11-26 03:03:24.845828: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1746] Adding visible gpu devices: 0
2019-11-26 03:03:25.924409: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1159] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-11-26 03:03:25.931410: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1165]      0
2019-11-26 03:03:25.936123: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1178] 0:   N
2019-11-26 03:03:25.941687: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1304] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 1340 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1050, pci bus id: 0000:09:00.0, compute capability: 6.1)
tf.Tensor(-753.7468, shape=(), dtype=float32)

 

 

 

 

(tf-gpu) PS J:\ai> python                                                                                               Python 3.7.5 (default, Oct 31 2019, 15:18:51) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
2019-11-26 03:04:57.218292: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_100.dll

 

 

 

powershell 실행 후 

(base) PS C:\Users\joe> conda activate tf-gpu                                                                           (tf-gpu) PS C:\Users\joe> python                                                                                        Python 3.7.5 (default, Oct 31 2019, 15:18:51) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
2019-11-26 03:20:09.553228: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_100.dll
>>>           

 

Ctrl+Z로 들어가서 conda install jupter로 또 설치해 주면

 

- DEBUG menuinst_win32:__init__(199): Menu: name: 'Anaconda${PY_VER} ${PLATFORM}', prefix: 'J:\Anaconda3\envs\tf-gpu', env_name: 'tf-gpu', mode: 'user', used_mode: 'user'
DEBUG menuinst_win32:create(323): Shortcut cmd is J:\Anaconda3\python.exe, args are ['J:\\Anaconda3\\cwp.py', 'J:\\Anaconda3\\envs\\tf-gpu', 'J:\\Anaconda3\\envs\\tf-gpu\\python.exe', 'J:\\Anaconda3\\envs\\tf-gpu\\Scripts\\jupyter-notebook-script.py', '"%USERPROFILE%/"']
done
(tf-gpu) PS C:\Users\joe> jupyter                                                                                                            usage: jupyter [-h] [--version] [--config-dir] [--data-dir] [--runtime-dir]
               [--paths] [--json]
               [subcommand]
jupyter: error: one of the arguments --version subcommand --config-dir --data-dir --runtime-dir --paths is required
(tf-gpu) PS C:\Users\joe> jupyter-notebook.exe                                                                                               [I 03:23:32.823 NotebookApp] The port 8888 is already in use, trying another port.
[I 03:23:32.824 NotebookApp] The port 8889 is already in use, trying another port.
[I 03:23:32.825 NotebookApp] The port 8890 is already in use, trying another port.
[I 03:23:32.826 NotebookApp] The port 8891 is already in use, trying another port.
[I 03:23:32.827 NotebookApp] The port 8892 is already in use, trying another port.
[I 03:23:32.842 NotebookApp] Serving notebooks from local directory: C:\Users\joe
[I 03:23:32.842 NotebookApp] The Jupyter Notebook is running at:
[I 03:23:32.842 NotebookApp] http://localhost:8885/?token=10b1fc0f61009ba912020010a7d5e4e6bbf8b1cbe4150bda
[I 03:23:32.843 NotebookApp]  or http://127.0.0.1:8885/?token=10b1fc0f61009ba912020010a7d5e4e6bbf8b1cbe4150bda
[I 03:23:32.843 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 03:23:32.978 NotebookApp]

    To access the notebook, open this file in a browser:
        file:///C:/Users/joe/AppData/Roaming/jupyter/runtime/nbserver-48628-open.html
    Or copy and paste one of these URLs:
        http://localhost:8885/?token=10b1fc0f61009ba912020010a7d5e4e6bbf8b1cbe4150bda
     or http://127.0.0.1:8885/?token=10b1fc0f61009ba912020010a7d5e4e6bbf8b1cbe4150bda
[I 03:23:39.939 NotebookApp] Kernel started: 1d586540-b64f-4613-9299-ad68c7b7fd96
2019-11-26 03:23:41.799195: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_100.dll

 

import tensorflow as tf 에 에러가 없다. 이제 conda 패키지 매니저가 지원하는 패키지는 모두 설치할 수 있고 python 3.7.5와의 궁합도 잘 맞을 것 같다.

 

걍 다 묶어서 패키지로 만들지... 20년 동안 지켜봐도(내가 8살 때는 리눅스 안했었으니) 아직도 마음에 들지 않는 리눅스 패키지 매니저 처럼(레드헷 계열이던 데비안 계열이던) 똑같은 길을 아나콘다가 걷는 것 같다.

 

요즘엔 폴더를 예쁘게 컨스트럭팅 하지는 않으니 주피터 한번 더 까는 것도 ㄱㅊ.

 

내가 만드는 것도 아니라 소스 정리 보다는 이론을 정확하게 하는게 더 중요한 상태.

 

내 스타일과 맞지 않아서 정립된 후 쓰려고 했는데 이제 슬 들어가야 한다. AI로.

 

'Blog History' 카테고리의 다른 글

개 발 일 지 034  (1) 2019.12.04
개 발 일 지 033  (0) 2019.11.26
개 발 일 지 031  (0) 2019.11.26
개 발 일 지 030  (0) 2019.11.25
개 발 일 지 029  (0) 2019.11.24

https://www.tensorflow.org/install/pip?hl=ko




pip3 install -U pip virtualenv



.

.

.

conda install pip3 


Collecting package metadata (current_repodata.json): done

Solving environment: failed with initial frozen solve. Retrying with flexible solve.

Collecting package metadata (repodata.json): done

Solving environment: failed with initial frozen solve. Retrying with flexible solve.


PackagesNotFoundError: The following packages are not available from current channels:


  - pip3


Current channels:


  - https://repo.anaconda.com/pkgs/main/win-64

  - https://repo.anaconda.com/pkgs/main/noarch

  - https://repo.anaconda.com/pkgs/r/win-64

  - https://repo.anaconda.com/pkgs/r/noarch

  - https://repo.anaconda.com/pkgs/msys2/win-64

  - https://repo.anaconda.com/pkgs/msys2/noarch



그냥 pip로 virtualenv 설치


(base) j:\AI>virtualenv --system-site-packages -p python3 ./venv

The path python3 (from --python=python3) does not exist


(base) j:\AI>virtualenv --system-site-packages -p python ./venv





텐서플로우 설치링크 - 내가 보는 동영상 강의는 제대로 안 되어 있음. 이것도 오래됨.


https://tensorflow.blog/%EC%9C%88%EB%8F%84%EC%9A%B0%EC%A6%88%EC%97%90-%EC%95%84%EB%82%98%EC%BD%98%EB%8B%A4-%ED%85%90%EC%84%9C%ED%94%8C%EB%A1%9C%EC%9A%B0-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/



아나콘다 설치

브라우저로 아나콘다 다운로드 페이지에 접속합니다.

C0.anaconda

파이썬 2.7과 3.7 버전의 Windows용 설치 파일이 있습니다. Windows용 텐서플로 바이너리 패키지는 현재 파이썬 3.5, 3.6, 3.7버전을 지원하므로 아나콘다의 파이썬 3.7 버전을 설치해야 합니다. 텐서플로의 바이너리는 64비트용이므로 만약 사용하는 컴퓨터가 32비트라면 텐서플로 소스를 직접 컴파일하여 설치해야 합니다. 텐서플로는 공식적으로 Windows에서 직접 소스를 컴파일하는 것을 지원하지 않습니다. 사용하는 Windows 컴퓨터가 32비트인지 64비트인지 확인하려면 여기를 참고하세요.

텐서플로 1.6버전부터 CPU 버전 바이너리는 AVX(고급 벡터 확장) 명령을 지원하도록 컴파일되어 있습니다. 만약 AVX를 지원하지 않는 CPU를 사용한다면 텐서플로 1.5 버전을 사용해야 합니다(아래 설명). 사용하고 있는 CPU가 AVX 명령을 지원하는지 확인하려면 여기를 참고하세요.

또는 인텔의 프로세서 유틸리티를 사용할 수도 있습니다. 이 프로그램을 다운받아 설치하고 실행하면 다음과 같은 화면을 볼 수 있습니다. 두 번째 탭에서 Advanced Vector Extensions에 ‘예’라고 표시되면 AVX 명령을 지원하는 CPU입니다.

캡처10

이제 AVX를 지원하는 64비트 컴퓨터가 준비되었다고 가정하고 아나콘다의 파이썬 3.7 버전 64비트 인스톨러를 다운받습니다.

C1.anaconda_download

아나콘다 인스톨러 설치는 보통의 Windows 설치 프로그램과 비슷합니다. 설치 과정을 마치면 시작버튼에 아나콘다 폴더가 추가됩니다.

install_anaconda-c5439

이 다음부터는 Anaconda Prompt에서 명령행 인터페이스를 사용해서 진행하겠습니다.

install_anaconda-4213b

콘다 및 파이썬 패키지 업데이트

Anaconda Prompt에 들어오면 conda 패키지 관리자를 사용할 수 있습니다. 먼저 conda 자체를 업데이트합니다.

>conda update -n base conda

다음엔 설치된 파이썬 패키지를 모두 최신 버전으로 업데이트합니다.

>conda update --all

텐서플로 설치

아나콘다 배포판에는 텐서플로 최신 버전이 늦게 포함되므로 파이썬 기본 패키지 관리자인 pip로 텐서플로를 설치합니다.

>pip install tensorflow

만약 AVX를 지원하지 않는 CPU를 사용하고 있다면 다음과 같이 1.5 버전을 설치합니다.

>pip install tensorflow==1.5.0

텐서플로 1.9.0 버전부터는 콘다를 사용하여 텐서플로를 설치하는 것이 권장됩니다. MKL-DNN 라이브러리에 최적화되어 있어서 CPU만을 사용하는 경우 보다 나은 성능을 기대할 수 있습니다.(콘다 패키지는 최신 텐서플로를 지원하지 않을 수 있습니다)

>conda install tensorflow

install_anaconda-1b720

설치가 완료된 후 IPython 쉘을 실행하여 tensorflow 모듈을 임포트합니다. 아무런 메세지가 뜨지 않으면 정상적으로 설치에 성공한 것입니다(텐서플로를 임포트할 때 h5py 패키지에서 경고문구가 뜰 수 있습니다. 이는 h5py 패키지의 버그로 향후 버전에서 개선될 것 같습니다. 실제 텐서플로를 사용하는데는 문제가 없으므로 무시하고 진행하면 됩니다).

>ipython
...
In [1]: import tensorflow as tf
In [2]:

install_anaconda-35971

IPython 쉘을 종료하려면 exit 명령을 입력합니다. 데이터 분석을 위해 IPython 쉘도 좋지만 이보다 코드와 실행 결과를 함께 관리할 수 있는 주피터 노트북을 사용하도록 하겠습니다. 주피터 노트북은 로컬 컴퓨터에서 실행되는 웹 서버 프로그램과 비슷합니다. 브라우저로 코드를 실행하면 IPython 커널에게 실행을 명령하고 그 결과를 브라우저로 전달해 줍니다. 주피터 노트북을 실행하려면 아나콘다 프롬프트에서 jupyter notebook 명령을 사용합니다.

>jupyter notebook

주피터 노트북이 실행되면 자동으로 기본 브라우저가 실행되어 주피터 노트북 서버에 접속합니다. 로컬 컴퓨터의 주피터 노트북 서버 주소는 http://localhost:8888/ 입니다. 주피터 노트북을 실행한 현재 폴더를 기본 홈 페이지로 설정됩니다. 이 폴더 하위에 파이썬 주피터 노트북을 만들고 실행할 수 있습니다.

install_anaconda-4b594

Documents 폴더로 들어가서 새로운 파이썬 노트북을 만들어 보겠습니다. 오른쪽 위에 있는 New 버튼을 누르면 새로운 파이썬 3 주피터 노트북을 생성할 수 있습니다.

install_anaconda-b1bc1

새로운 브라우저 탭이 열리면서 Untitled 노트북이 생성됩니다. 첫번째 코드 셀(cell)에 IPython 쉘에서 했던 것처럼 import tensorflow as tf를 입력하고 Shift+엔터 키를 입력합니다. 아무런 메세지가 나오지 않으면 텐서플로를 주피터 노트북에서 사용할 수 있도록 설치에 성공한 것입니다.

install_anaconda-2d827


'Blog History' 카테고리의 다른 글

개 발 일 지 033  (0) 2019.11.26
개 발 일 지 032  (0) 2019.11.26
개 발 일 지 030  (0) 2019.11.25
개 발 일 지 029  (0) 2019.11.24
개 발 일 지 028  (0) 2019.11.24

!-- sqlite3

  NSLog(@"DB_LOCATION %@", [[[NSFileManager defaultManager]URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]lastObject]);

/Users/junhoha/Library/Developer/CoreSimulator/Devices/A2DE2EEB-1397-412C-9FDB-FF9BFDCE8FEB/data/Containers/Data/Application/FF679A2B-5AE9-46B9-A1F5-2F7B776F6764/Documents/


!-- Sort

https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/SortDescriptors/SortDescriptors.html#//apple_ref/doc/uid/10000174-BCICJDHA

Incompatible pointer types initializing 'NSMutableArray *' with an expression of type 'NSArray *'

'autorelease' is unavailable: not available in automatic reference counting mode

https://simyungk.tistory.com/18

Array copy
copiedList= [[NSMutableArray alloc] initWithArray:sortedArray copyItems:YES ];

copiedList=[[[NSMutableArray alloc] initWithArray:sortedArray copyItems:YES ] retain];

copiedList=[NSMutableArray arrayWithArray:sortedArray];


!-- 구글의 모든 제품 목록 

https://about.google/intl/ALL_kr/products/


!-- inner join outer join

https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

!-- 몽고 DB, realm 램 인수

https://www.zdnet.co.kr/view/?no=20190426105604

https://www.zdnet.co.kr/view/?no=20191031170252

써 보자

Welcome to Realm Cloud
Create your first cloud instance by clicking the "Create New Instance" button.
Follow the arrow!

We love your feedback!
Thank you for using Realm Cloud! We really appreciate to get feedback about your experience using Realm Cloud and what you would like us to improve. You can always send us an email or participate in our forums.



Create New Instance
Instance name
testdb001
Instance id
testdb001
 Looking good!
Region

https://testdb001.us1.cloud.realm.io

Your instance is ready

testdb001.us1.cloud.realm.io
Realm Cloud gives your Realm Database a syncing object server in the cloud. Although this instance link is ready to use in any project, we recommend starting with our demo apps documented below.

Build a demo project
Our ToDo demo app is the best way to try Realm Cloud. You can quickly try it out with our step-by-step instructions — just copy your app link from above, and choose an OS:

If you have any issues, questions or comments visit our Forums.

https://docs.realm.io/sync/getting-started-1/step-1-my-first-realm-app

https://github.com/realm/my-first-realm-app

sudo gem install cocoapods

pod isntall

참 편하긴 하네.

!-- 아나콘다 제품 편리하네.

https://anaconda.org/gallery
갤러리도 잼남.

 

anaconda mac install

python numpy

3.7 version

jupyter notebook server

folder 생성

new python3

hello python.ipynb

print('hello world') - run



!-- 데이터 베이스 변경
db 칼럼 추가 
데이터 모델 변경
db insert sql 부분 변경


!-- 영상강좌 유무료 사이트
1. https://www.edx.org/ : 세계 유명 대학의 Computer Science 강좌를 들을 수 있음
2. 모두의연구소(http://www.modulabs.co.kr/, 새단장중)
3. Coursera(Data Science 추천)
4. K-Mooc(유튜브 채널 있음)
5. 왼손코딩(유튜브 채널) : Python
6. 생활코딩(https://opentutorials.org/course/1)
7. 동빈나 : 알고리즘, 입사문제풀이
8. 인프런(https://www.inflearn.com/)
9. 구름EDU
10. UDACITY
11. codecademy
12. codeschool
13. KOCW(http://www.kocw.net)
14. 코딩도장(https://dojang.io/) : Python, C
15. 클래스101
16. 패스트캠퍼스
2. 알고리즘 사이트
1. https://www.hackerrank.com/
2. http://dovelet.com
3. http://www.koistudy.net/
4. www.acmicpc.com
5. https://algospot.com
6. 백준 알고리즘
7. 코딩도장(http://codingdojang.com/)
8. 매일프로그래밍(https://mailprogramming.com/)
9. Codility, LeetCode
10. https://dmoj.ca/problems/
11. goormlevel
13. topcoder
14. https://projecteuler.net
15. http://codeup.kr
16. http://codeforces.com/
17. codewars
18. https://codingcompetitions.withgoogle.com/codejam/archive
19. oj.uz
20. http://codingfun.net/
21. https://atcoder.jp/
22. 프로그래머스
23. leetcode
3. 제보사이트
1. www.dafit.me : 데이터사이언스 연습문제은행 사이트
2. Kaggle(https://www.kaggle.com/)
3.소프트웨어야 놀자(https://www.playsw.or.kr/main)
4. edwith(https://www.edwith.org/boost-course/intro)
5. 삼성전자 주니어 소프트웨어 아카데미(https://www.juniorsw.com/Academy/Story?CategoryID=6)
6. 글로벌 비영리 기관 위민 후 코드(https://www.womenwhocode.com/resources)

출처: <https://www.facebook.com/groups/1722427378043847/permalink/2559241694362407/

정리 잘하시는 페친님


'Blog History' 카테고리의 다른 글

개 발 일 지 032  (0) 2019.11.26
개 발 일 지 031  (0) 2019.11.26
개 발 일 지 029  (0) 2019.11.24
개 발 일 지 028  (0) 2019.11.24
개 발 일 지 027  (0) 2019.11.20

gelic_wl_set_encodeext

 

static const iw_handler gelic_wl_wext_handler[] =

{

IW_HANDLER(SIOCGIWNAME, gelic_wl_get_name),

IW_HANDLER(SIOCGIWRANGE, gelic_wl_get_range),

IW_HANDLER(SIOCSIWSCAN, gelic_wl_set_scan),

IW_HANDLER(SIOCGIWSCAN, gelic_wl_get_scan),

IW_HANDLER(SIOCSIWAUTH, gelic_wl_set_auth),

IW_HANDLER(SIOCGIWAUTH, gelic_wl_get_auth),

IW_HANDLER(SIOCSIWESSID, gelic_wl_set_essid),

IW_HANDLER(SIOCGIWESSID, gelic_wl_get_essid),

IW_HANDLER(SIOCSIWENCODE, gelic_wl_set_encode),

IW_HANDLER(SIOCGIWENCODE, gelic_wl_get_encode),

IW_HANDLER(SIOCSIWAP, gelic_wl_set_ap),

IW_HANDLER(SIOCGIWAP, gelic_wl_get_ap),

IW_HANDLER(SIOCSIWENCODEEXT, gelic_wl_set_encodeext),

IW_HANDLER(SIOCGIWENCODEEXT, gelic_wl_get_encodeext),

IW_HANDLER(SIOCSIWMODE, gelic_wl_set_mode),

IW_HANDLER(SIOCGIWMODE, gelic_wl_get_mode),

IW_HANDLER(SIOCGIWNICKN, gelic_wl_get_nick),

};

 

 

 

 

 

 

O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\net\wireless\wext-compat.c

    1507          [IW_IOCTL_IDX(SIOCSIWENCODEEXT)]= (iw_handler) cfg80211_wext_siwencodeext,

1 match in O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\net\wireless\wext-compat.c

O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\net\wireless\wext-core.c

     238          [IW_IOCTL_IDX(SIOCSIWENCODEEXT)] = {

     812                  if (cmd == SIOCSIWENCODEEXT) {

 

 

static int ioctl_standard_iw_point

ioctl_standard_call

compat_standard_call

 

 

 

O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\staging\rtl8723bs\os_dep\ioctl_cfg80211.c

    1783  static int rtw_cfg80211_set_key_mgt(struct security_priv *psecuritypriv, u32 key_mgt)

    2214                  ret = rtw_cfg80211_set_key_mgt(psecuritypriv, sme->crypto.akm_suites[0]);

2 matches in O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\staging\rtl8723bs\os_dep\ioctl_cfg80211.c

O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\net\wireless\wext-compat.c

    1031  static int cfg80211_set_key_mgt(struct wireless_dev *wdev, u32 key_mgt)

    1074                  return cfg80211_set_key_mgt(wdev, data->value);

2 matches in O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\net\wireless\wext-compat.c

TOTAL:    4 matches in 2 files  (36713 other files without matches are not listed)

 

 

 

O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\net\ethernet\toshiba\ps3_gelic_wireless.c

    1906          pr_debug("%s: psk=%s\n", __func__,

1 match in O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\net\ethernet\toshiba\ps3_gelic_wireless.c

TOTAL:    1 match in 1 file  (36714 other files without matches are not listed)

 

 

/* SIOC{S,G}IWENCODEEXT */

static int gelic_wl_set_encodeext(struct net_device *netdev,

  struct iw_request_info *info,

  union iwreq_data *data, char *extra)

{

struct gelic_wl_info *wl = port_wl(netdev_priv(netdev));

struct iw_point *enc = &data->encoding;

struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;

__u16 alg;

__u16 flags;

unsigned long irqflag;

int key_index;

int ret = 0;

 

 

 

 

O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\net\ethernet\toshiba\ps3_gelic_wireless.c

    1207          struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;

    1234          if (!enc->length && (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY)) {

    1297          struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;

    1305          max_key_len = enc->length - sizeof(struct iw_encode_ext);

    1323          memset(ext, 0, sizeof(struct iw_encode_ext));

7 matches in O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\net\ethernet\toshiba\ps3_gelic_wireless.c

O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\net\wireless\atmel\atmel.c

    1835          struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;

    1850          if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) {

    1895          struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;

5 matches in O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\net\wireless\atmel\atmel.c

O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\net\wireless\cisco\airo.c

    6453          struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;

    6479          if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) {

    6559          struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;

5 matches in O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\net\wireless\cisco\airo.c

O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\net\wireless\intel\ipw2x00\ipw2200.c

    6765          struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;

    6771                          if (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY)

3 matches in O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\net\wireless\intel\ipw2x00\ipw2200.c

O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\net\wireless\intel\ipw2x00\libipw_wx.c

     522          struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;

     541          if (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) {

     643          if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) {

     682          struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;

     698          if (!(ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) &&

     726                          ext->ext_flags |= IW_ENCODE_EXT_TX_SEQ_VALID;

8 matches in O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\net\wireless\intel\ipw2x00\libipw_wx.c

O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\net\wireless\intersil\hostap\hostap_ioctl.c

    3203          struct iw_encode_ext *ext = (struct iw_encode_ext *) extra;

    3315           * TODO: if ext_flags does not have IW_ENCODE_EXT_RX_SEQ_VALID, the

    3317           * TODO: if ext_flags has IW_ENCODE_EXT_TX_SEQ_VALID, next TX seq#

    3320          if ((!(ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) || ext->key_len > 0)

    3330          if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) {

    3380          struct iw_encode_ext *ext = (struct iw_encode_ext *) extra;

    3429                                  ext->ext_flags |= IW_ENCODE_EXT_TX_SEQ_VALID;

9 matches in O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\net\wireless\intersil\hostap\hostap_ioctl.c

O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\net\wireless\intersil\orinoco\wext.c

     726          struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;

     751          if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) {

     785                          if (ext->ext_flags & IW_ENCODE_EXT_RX_SEQ_VALID)

     793                                   ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY,

     820          struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;

7 matches in O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\net\wireless\intersil\orinoco\wext.c

O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\net\wireless\intersil\prism54\isl_ioctl.c

    1544          struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;

    1568          if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) {

    1653          struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;

5 matches in O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\net\wireless\intersil\prism54\isl_ioctl.c

O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\staging\ks7010\ks_wlan_net.c

    1538          struct iw_encode_ext *enc;

    1543          enc = (struct iw_encode_ext *)extra;

    1560          if (enc->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) {

    1563          } else if (enc->ext_flags & IW_ENCODE_EXT_RX_SEQ_VALID) {

    1638           * struct iw_encode_ext *enc;

    1639           * enc = (struct iw_encode_ext *)extra;

6 matches in O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\staging\ks7010\ks_wlan_net.c

O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\staging\rtl8188eu\os_dep\ioctl_linux.c

    1862          struct iw_encode_ext *pext = (struct iw_encode_ext *)extra;

    1897          if (pext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY)

    1904              (pext->ext_flags & IW_ENCODE_EXT_GROUP_KEY))

    1909          if (pext->ext_flags & IW_ENCODE_EXT_RX_SEQ_VALID)

5 matches in O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\staging\rtl8188eu\os_dep\ioctl_linux.c

O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\staging\rtl8192e\rtllib_wx.c

     529          struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;

     547          if (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) {

     644          if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) {

4 matches in O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\staging\rtl8192e\rtllib_wx.c

O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\staging\rtl8192e\rtl8192e\rtl_wx.c

     896                  struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;

     914                  group = ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY;

3 matches in O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\staging\rtl8192e\rtl8192e\rtl_wx.c

O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\staging\rtl8192u\r8192U_wx.c

     737                  struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;

     750                  group = ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY;

3 matches in O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\staging\rtl8192u\r8192U_wx.c

O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\staging\rtl8192u\ieee80211\ieee80211_wx.c

     512          struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;

     530          if (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) {

     630          if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) {

     676          struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;

     692          if (!(ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) &&

     719                          ext->ext_flags |= IW_ENCODE_EXT_TX_SEQ_VALID;

8 matches in O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\staging\rtl8192u\ieee80211\ieee80211_wx.c

O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\staging\rtl8712\rtl871x_ioctl_linux.c

    1763          struct iw_encode_ext *pext = (struct iw_encode_ext *)extra;

    1793          if (pext->ext_flags & IW_ENCODE_EXT_GROUP_KEY)

    1795          if (pext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY)

    1798          if (pext->ext_flags & IW_ENCODE_EXT_RX_SEQ_VALID)

5 matches in O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\staging\rtl8712\rtl871x_ioctl_linux.c

O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\staging\rtl8723bs\os_dep\ioctl_linux.c

    2143          struct iw_encode_ext *pext = (struct iw_encode_ext *)extra;

    2182          if (pext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY)

    2189                  ((pext->ext_flags & IW_ENCODE_EXT_GROUP_KEY)

    2196          if (pext->ext_flags & IW_ENCODE_EXT_RX_SEQ_VALID)

5 matches in O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\staging\rtl8723bs\os_dep\ioctl_linux.c

O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\net\wireless\wext-compat.c

     632          struct iw_encode_ext *ext = (struct iw_encode_ext *) extra;

     704          if (ext->ext_flags & IW_ENCODE_EXT_RX_SEQ_VALID) {

     711                          !(ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY),

     713                          ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY,

5 matches in O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\net\wireless\wext-compat.c

O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\net\wireless\wext-core.c

     241                  .min_tokens        = sizeof(struct iw_encode_ext),

     242                  .max_tokens        = sizeof(struct iw_encode_ext) +

     248                  .min_tokens        = sizeof(struct iw_encode_ext),

     249                  .max_tokens        = sizeof(struct iw_encode_ext) +

     813                          struct iw_encode_ext *ee = (void *) extra;

5 matches in O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\net\wireless\wext-core.c

TOTAL:    98 matches in 18 files  (36697 other files without matches are not listed)

 

 

 

 

 

case WLAN_AKM_SUITE_PSK:

if (params->crypto.wpa_versions &

    NL80211_WPA_VERSION_1) {

bss_config->protocol = PROTOCOL_WPA;

bss_config->key_mgmt = KEY_MGMT_PSK;

}

if (params->crypto.wpa_versions &

    NL80211_WPA_VERSION_2) {

bss_config->protocol |= PROTOCOL_WPA2;

bss_config->key_mgmt = KEY_MGMT_PSK;

}

 

 

 

 

O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\net\wireless\wext-compat.c

    1036                          IW_AUTH_KEY_MGMT_PSK))

    1045          if (key_mgt & IW_AUTH_KEY_MGMT_PSK) {

 

 

static int cfg80211_set_key_mgt(struct wireless_dev *wdev, u32 key_mgt)

{

int nr_akm_suites = 0;

 

if (key_mgt & ~(IW_AUTH_KEY_MGMT_802_1X |

IW_AUTH_KEY_MGMT_PSK))

return -EINVAL;

 

if (key_mgt & IW_AUTH_KEY_MGMT_802_1X) {

wdev->wext.connect.crypto.akm_suites[nr_akm_suites] =

WLAN_AKM_SUITE_8021X;

nr_akm_suites++;

}

 

if (key_mgt & IW_AUTH_KEY_MGMT_PSK) {

wdev->wext.connect.crypto.akm_suites[nr_akm_suites] =

WLAN_AKM_SUITE_PSK;

nr_akm_suites++;

}

 

wdev->wext.connect.crypto.n_akm_suites = nr_akm_suites;

 

return 0;

}

 

 

 

O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\staging\rtl8723bs\core\rtw_ieee80211.c

u8 WPA_AUTH_KEY_MGMT_PSK_OVER_802_1X[] = { 0x00, 0x50, 0xf2, 2 };

 

 

 

 

O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\staging\ks7010\ks_wlan_net.c

case IW_AUTH_KEY_MGMT:        /* 3 */

switch (value) {

case IW_AUTH_KEY_MGMT_802_1X:

case IW_AUTH_KEY_MGMT_PSK:

case 0:        /* NONE or 802_1X_NO_WPA */

case 4:        /* WPA_NONE */

priv->wpa.key_mgmt_suite = value;

 

 

O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\net\wireless\rndis_wlan.c

 

static int rndis_akm_suite_to_key_mgmt(u32 akm_suite)

{

switch (akm_suite) {

default:

return RNDIS_WLAN_KEY_MGMT_NONE;

case WLAN_AKM_SUITE_8021X:

return RNDIS_WLAN_KEY_MGMT_802_1X;

case WLAN_AKM_SUITE_PSK:

return RNDIS_WLAN_KEY_MGMT_PSK;

}

}

 

 

O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\net\ethernet\toshiba\ps3_gelic_wireless.c

 

     890                  if (param->value & IW_AUTH_KEY_MGMT_PSK)

 

 

case IW_AUTH_KEY_MGMT:

if (param->value & IW_AUTH_KEY_MGMT_PSK)

break;

 

 

 

 

O:\linux-4.19.2.tar\linux-4.19.2\linux-4.19.2\drivers\staging\ks7010\ks_hostif.c

case IW_AUTH_KEY_MGMT_PSK:

buf = (priv->wpa.version == IW_AUTH_WPA_VERSION_WPA2) ?

KEY_MGMT_ID_WPA2_PSK : KEY_MGMT_ID_WPA_PSK;

 

 

 

 

 

 

 

 

Wi-Fi 비번 해킹 힘들구먼.

 

 

 

 

 

'Blog History' 카테고리의 다른 글

개 발 일 지 031  (0) 2019.11.26
개 발 일 지 030  (0) 2019.11.25
개 발 일 지 028  (0) 2019.11.24
개 발 일 지 027  (0) 2019.11.20
개 발 일 지 026  (0) 2019.11.20

 개발 능력 향상을 위해서는 잉여력을 쌓아야 한다. 잉여력 쌓는 중.

 

                      https://www.youtube.com/watch?v=L6rFjSPoUys 본인이 사회적 찐따였고 많은 실패를 했다는 것도 솔직하게 이야기 하

고, 항상 도전적 영상으로 아이들에게 많은 호응을 끌어낸 (나와 와이프는 별로 안 좋아함) 유투버인데 1억이나 기부했네. 운영비던 기부단체 비리던 뭐든 기부라는 단어 자체가 가지는 힘은 무척크다. 잡스가 그런 말을 했었지. 좋아하지 않더라도 "무시"하지는 못할 것이라고.

 

=============

 

https://www.qoo10.com/gmkt.inc/Goods/Goods.aspx 대한민국이 살아남기 위해서는 병원, KT 중심으로 뭉치던지. 삼성/LG 통합하던지, 혹은 쇄국 정책만이 답이라는 생각이 든다.

 

 

=============

페북에 무슨 생각을 하냐고 써 있길래 간만에 글 적으려는데, 뭘 체크해야 한다. 뉴스피드랑 내 스토리 구분 못하겠다. 찾기도 귀찮다. 세상이 너무 어렵고, 난 더 어려운 것을 누가 시켜서 만들고, 할 수 있기에 더 어려운 말을 만들어 낸다. 다들 서로 죽으라고 거리에 내모는 것을 왜 그렇게 어렵게 말하는지... 편하게 살면서 힘든 것은 다른 사람들이 다 해주고 난 나름의 논리로 그 사람들과는 다른 사람인데 멋있게 힘든 척 해보고 싶은 것인지. 지켜 보다보면 참, 재미있기도 하다. 미안한 마음은 있나보다 하는 생각도 든다. 히틀러가 이해되는 요즘 에너지를 받아 현실과 동떨어지지 않으려고 그 돋보기 초점을 극소수에게 맞추려고 노력한다. 편할 수 있지만 어머니께 죄송해서, 큰 것을 이루기 위해 절벽, 벼랑에 자신을 계속해서 몰아댄다. 트리거는 어머니께서 돌아가시거나 내가 이렇게 자신감 충만함이 하드웨어 노후로 소프트웨어(생각)가 꺽일 때일 듯 싶다. 아무것도 모른체 죽는 것도 좋겠지만 이 정도면 충분한 복선을 깐 것 같아 스스로 만족스럽다. 현실만큼 확실한 증거도 없지. 인스타에는 행복함만 기록하자며 늘 다짐한다.

 

=============

 

적는 김에 하나 더 써 본다. 쓰면 좋아요도 없는데 좀 지켜보면, 그 대로 세상이 바뀌더라곸ㅋㅋ. 요새 자칭 상류 사회 사람들 좀 만나고 있는데 무슨 4~5년 간 딱, 한 번 보고는 ㅈㄴ 친한 척, 알면 무슨 대단한 척 하는 것을 본다. 최근 인스타에 얼굴 올린 사람들은 지속적으로 최소 4년 이상 만난 사람들이다. 10년 본 사람들도 이제 사진 올리기 시작했다. KBS 출연 사진도 한 번 출연했다고 올린거 아니고 4년 간 해당 분들 지속적으로 만나면서 지내며, 사진 한 번 올린 적 없었다. 잡지에 계속해서 글 기고 할 때도 예명으로 활동했지 아는 사람만 알고, 자랑한 적 없었다. 요새 내가 인스타 한다고 사진 찍지 말라고 하는 사람들 좀 보는데 자기가 못 생긴거 정말 모르고 지 멋에 사나보다 싶다. 흠... 전혀... 난 연예인 만나도 사진 찍자고 안했었다. 그 어린 나이에 많이 만날 기회가 있어도, 늘 악수를 청했다. 남을 이용할 생각 없다. 지가 잘나야지ㅡㅡ; 하긴, 그렇게 잘 이용하는 사람들 좀 보긴 했는데 난 다른 사진 찍어서 복수 해야 겠다는 생각보다. 말년에 심판 받게 해야지 하는 생각이 먼저 들더라. 유명한 저자가 간 부서는 정치판이 되었다는 소식을 들었고, 어줍잖은 강의를 솔직하게 말은 못하고 꾸미고 꾸며, 해당 기술 분야 전체를 싸구려 노동판으로 만들려는 사람도 본다. 다 죄짓는 거다. 고차원적인 죄 지으면 저돌적으로 나오는 사람이 없을거라 생각하는 것 자체가 난 더 무섭다. 미래 사회 영화 안보고 사는지 원... 넷플릭스 강추한다. 그리고 어른들이 우리를 이해 못했듯이 요즘 애들은 생각이 또 다르다. 자기 만족 시대.

'Blog History' 카테고리의 다른 글

개 발 일 지 030  (0) 2019.11.25
개 발 일 지 029  (0) 2019.11.24
개 발 일 지 027  (0) 2019.11.20
개 발 일 지 026  (0) 2019.11.20
개 발 일 지 025  (0) 2019.11.20

!-- 멘토링 하는 친구에게 한 풀이 중...

- 고위직 자녀분 멘토링 가끔씩 한다.  몇 년 되었다...(중앙 정보 까지는 아니고 국가 기관의...)

 

 

Declarations and Initializations

Floating Point Issues

Complicated Declarations

Const

Typedef

Bitwise Operators

Memory Allocation

Arrays

Functions

Structures, Unions, Enums

 

-> interface는 자체적으로 객체를 생성(new)할 수 없습니다.

-> 1은 숫자이기때문에 변수명으로 사용이 불가능합니다.

 

 

 

1. 결과값 : Foo를 인스턴스 해서 Object로 캐스팅 후 저장했다가 Foo로 다시 캐스팅하여 Foo 형식에 저장. i는 변함없이 3

Q2

A. float[] f= new float[3];이 되어야 하는데 변수와 ( ) 때문에 error.

B. new float[] 때문에 error. 생성되는 배열의 개수 명시해야함.

F. float f4[] = new float[] { 1.0f. 2.0f. 3.0f}; 에서

{ 1.0f. 2.0f. 3.0f};부분은 오타입니다.

{ 1.0f, 2.0f, 3.0f};이 정상입니다. (.이 아니라 ,입니다)

 

3.i++ > --j i > --j ; i++; 과 같은 효과

if(1>9) while(2<5)

if(2>8) while(3<5)

if(3>7) while(4<5)

if(4>6) while(5<5) do while빠져나옴. i=5, j=6;

 

Q4

3line에서 생성된 Demo objectgarbage collection자격(대상)이 되는 시점. Demod가 가르키고, takeDemo에서 d(이하 td)가 같이 가르키고 있다가 tdnull(연결 끊김)해서 다른 Demo가르킴. 3line에서 생성된 것은 계속 d가 가르키고 있어서 garbage collection일어나지 않음. 답은 E "이 코드를 수행하는 인스턴스가(전체가) 가비지 컬렉션 대상이 되었을 때"

d라는 변수는 클래스 변수인데, d변수에 대한 처리가 아무것도 없군요. 메소드에서도 d의 복사본만 넘길 뿐이죠. 메소드 안에서 demonull처리한다고 dnull이 되거나 하는것은 아니죠.

결국 이 클래스 자체의 인스턴스가 gabage collection되기 전까진 dgc처리되지 않습니다.

자바에서는 call by reference 없습니다. 오로지 call by value 있을 뿐이죠. 확실히 call by reference 없지만, 효과는 비슷하게 하기 위해서 object typeobject 주소를 넘겨줍니다. 그래서 objectproperty 바꿀 있지만, 역시 주소는 바꿀 없습니다. , 새로운 객체를 가리키게 없습니다.

takeDemo() method에서 파라미터 demo 는 새로운 지역변수입니다. 대신 주소값을 넘겨받았기 때문에 property는 바꿀 수 있지만,

 

9. demo = null;

10. demo = new Demo();

 

이 두줄처럼 한다고 새로운 object(주소를) 가리키는 아닙니다.

메소드가 끝나면 사라져 버리지요.(지역변수이기 때문에)

그러나 property 바꾸면 그것은 유지가 됩니다.

왜냐면 변수가 여전히 같은 객체를 가리키기 때문이죠.

 

void test() {

String s = " AAA";

print(s);

}

void print(String s) {

s = "awfawef";

}

 

이런다고 test() methods 값이 변하는 것은 아닙니다.

그러나,

void test() {

int[] s = new int[1];

s[0] = 1;

print(s);

}

void print(int[] s) {

s[0] = 2;

}

이렇게 하면 s[0] 값이 2 바뀝니다.

왜냐면 배열은 object이기 때문이고 property 바꾸었기 때문이죠.

void print(int[] s){

s = new int[2];

}

만약에 위처럼 했다면 배열은 바뀌지 않았을 겁니다.

 

 

Q6.

A. 메모리는 Runtime.gc()의 호출로 인해 갱신된다.(gc는 요청을 할 수 있지만 즉각 갱신되지 않고 시스템이 알아서 한다.)

B. 만약 객체들이 살아있는 쓰레드들로부터 접근이 가능하다면, 그것들은 수집 되지않는다.(정답)

C. finalize()메소드를 가진 객체는 절대로 수집이 되지않는다.

D. finalize()메소드를 가진 객체는 프로그램 수행이 끝나기 전에 항상 finalize()메소드를 호출한다.

 

7.

A. 명시하지 않았을 때 default(friendly)

B. classB의 생성자는 매개변수 없음 (정답)

C. 생성자는 this()를 포함한다. -본인생성자는 포함할 필요없음

D. 생성자는 super()를 포함 - A상속받았기 때문에 부모의 생성자 호출(정답)

 

8. 3번과 비슷

if (1>10) , 9, while (2<5)

if (2>9), 8, while(3<5)

if (3>9), 7, while(4<5)

if (4>9), 6, while(5<5) i=5, j=6

 

9.

A. Assertions(검증)class-by-class기반에서 가능 혹은 불가능하다.(?? 정답)

B. Conditional 컴파일은 클래스를 초 스피드로 테스트할때 사용한다. (???)

C. 검증은 메소드내의 인자들(argument)이 적절한가(validity)를 체크하는 appropriate.(조건에 맞는지 검증)

D. 프로그래머는 assertion(검증)실패 시 return 문장을 실행하거나 exception(예외)를 던지게 선택할 수 있다.(assertion 실패시 String 형태로만 출력)

 

10. 클래스가 같은 패키지에 있는 다른 클래스의 멤버로 접근하고자 할 때, 가장 제한적인 접근제한자는 무엇인가?

public (모두 접근) protected(같은 패키지, 다른패키지면서 상속받은클래스) default (같은 패키지 만 - O ) private (클래스 내에서만)

 

11. if를 비롯해 while과 같은 조건문에서는 true, false값만 들어갈 수 있다. x=y는 대입문으로 x1(int)값이 들어가기 때문에 실행불가.

 

12. 결과는 main에서 aMethod()를 호출하면 Excption()을 던지고서는 finally블록을 실행한다. 그리고 Exception을 캐취해서 exception출력을 하고, 마지막으로 finished를 정상출력한 후 끝낸다.

 

13. line 2(int k=4)와 같은것은 interface내의 멤버변수는 public static final이 생략되어있다. 정답은 A,B,C

 

Q14.

패키지 = 디렉토리또는 폴더의 개념

public : 모든 패키지로부터 접근가능

default(friendly) : 다른패키지에선 접근불가능

protected : 상속받은 다른패키지의 클래스에서도 접근이 가능

 

Test2.java:4: x is not public in test1.Test1; cannot be accessed from outside package

System.out.println("x = " + x);

원인 :: static int x이면 이것은 default 접근제한자(friendly라고도함) 가집니다. 접근제한자부분을 써줄때 그부분에 아무것도 안쓰면 default접근제한자로 선언된것이고 접근의 범위는 같은 패키지안에서만 가능하죠. 그런데 package test2 다른패키지이므로 접근할때 오류가뜹니다(test 24line). 오류내용인즉 접근할 없다고 하는거죠

 

Q15. classA를 상속받은 클래스에서 올바른 (메소드)정의 2가지.

*오버로딩 : 메소드 명 똑같이, 매개변수 갯수가 다르거나 데이터 형이 다르거나.. 나머지는 상관없음.

*오버라이딩 : 메소드 명 똑같이, 반환형 같이, 매개변수 똑같이, 접근제한자 똑같거나 넓어짐.

A. 오버라이딩

B. 매개변수 같으면 오버라이딩인데 접근제한자 좁아짐(protectedprivate)

C. 오버로딩(매개변수 다르고 이름은 같음)

D. 오버라이딩인데 반환형이 다름.

E. 오버라이딩인데 static이 붙어서 문제가 생김

 

Q16.

for( 초기화 ; 조건 ; 후처리 )

{

구문;

}

초기화 -> 조건 -> 구문 -> 후처리 순으로 처리가 되는데

A -> B -> D -> C -> B -> D -> C -> B 이 순으로 처리가 됩니다. 차근차근 따라가 보세요. ''

foo('A') foo('B')&&(0<2) foo('D') foo('C') foo('B')&&(1<2) foo('D') foo('C') foo('B')&&(2<2) (A B D C B D C B)

for (A; B; C) {

D;

}

위의 형태를 예로 들겠습니다. 수행순서는 다음과 같습니다.

1. 첫번째 인자인 A는 무조건 수행한다.

2. 두번째 인자인 B를 수행한다.(조건확인)

3. B가 참이면 D를 수행하고 세번째 인자인 C를 수행한다. 만일 B가 거짓이면 for 문을 빠져나온다.

4. 두번째 인자인 B를 수행한다.(조건확인)

5. B가 참이면 D를 수행하고 세번째 인자인 C를 수행한다. 만일 B가 거짓이면 for 문을 빠져나온다.

 

17. asset 조건:String에서 String“Exception in thread "main" java.lang.AssertionError:[String] at Test.main(Test.java:3)

C 답이면 String 에서 true 출력한다.

 

Q18. 배열을 생성(new float[10];)하면 자동으로 초기화 한다. float0.0으로 초기화.

 

Q19.

지역변수에서는 static 제한자를 사용할수가 없습니다.

사용할 수 있는 곳은 멤버 필드나, 메소드, 내부 클래스입니다.

 

Q20. 6번라인에 넣었을 때 에러나는 문장은...

A. 매개변수가 같으므로 오버라이딩 - 반환형이 다르다.(floatvoid)

B. 메소드 명 같고 매개변수 다름(오버로딩)

C. 매개변수 같고 반환형 같고, 접근제한자 같음(오버라이딩)

D. B와 같은 이유로 오버로딩

 

21. if( true/false ) 가능... boolboolean형으로 if(bool=false)에서 false값 가짐 2번라인 실행안함. 4번도 false여서 실행안함. 6번은 if(!bool) 이 참이어서 "c"출력

 

22. 참인것은? (혼란스러움)

A. catch(X x)는 서브클래스 Xcatch할 수 있다.

B. Error classRuntimeException이다(Error)

C. Errorthrow하는 어떤 문장이라도 try block로 싸 주어야 한다.(Error는 싸 줄 필요 없다)

D. Exceptionthrow하는 어떤 문이라도 try block로 싸 주어야 한다.(throw하는 문을 호출해도 메소드에 throws를 사용하면 try~catch를 다른 메소드에 넘길 수 있다.)

E. RuntimeExceptionthrow하는 어떤 문이라도 try block로 싸 주어야 한다.(D와 동일)

 

Q23.

A. 어서션은 부작용이 없다.

B. Assertion(검증)표현하는 values는 어떤 기본형이라도 가능하다.(assert 조건문:String 으로 제한)

C. ?

D. assertion의 결과로 AssertionErrorthrown하는감싸진 메소드로 다루어져야한다.(X)

 

24.생성자의 경우 패키지의 접근제한자와 동일해야 한다. 그렇지 않으면 클래스 생성 자체가 불가능하다고 에러가 난다.

A. Compilation fails at line 5.

 

Q25.

코드 주의: TestSuper(int i){} 생성자 명시 default 생성자 만들지 않음. TestSubTestSuper 상속(extends)

new TestSub() 시 생성자가 실행될 때 따로 명시하지 않으면 부모(TestSuper)default생성자를 호출한다. 그러나 TestSuper에는 디폴트 생성자가 없으니 에러가 난다.

 

!-- 요건 주요한 내용이라 스크랩

 

 

Control Instructions

Expressions

 

 

C Preprocessor

Pointers

 

Strings

 

Input / Output

Command Line Arguments

 

 

 

 

Variable Number of Arguments

 

Library Functions

 

 

 

출처: <http://www.indiabix.com/c-programming/questions-and-answers/>

 

 

union 뭐에 써 먹냐고요?

장길석

http://forum.falinux.com/zbxe/index.php?document_srl=557139

2011.10.07 22:30:31 (*.138.143.120)

26142

C 언어를 사용하신다면 struct는 아마도 대부분 사용하실 것이라고 생각됩니다. 그런데 의외로 사용하지 않는 것이 있는데 바로 union입니다. 흠~ 이유가 뭘까? 아마도 struct 보다는 사용하는 경우의 수가 적기 때문이 아닐까 생각합니다. 그런데 문제는 사용할 꺼리가 적다 보니 잊혀져 버리는 것 같아요. 아무리 멋진 자동차도 쳐다 보지 않고 내팽게쳐 준다면 녹이 슬고 말겠죠.

 

union이 그런 것이 아닐까 생각됩니다. 사용하면 편한데, 사용하는 경우가 적다 보니 잊혀져서 사용하지 못하는. 그러나 아예 잊혀지기 전에 잠시 둘러 보죠.

 

저 같은 겨우 union을 시리얼 통신이나 TCP/IP 통신에서 가끔 사용합니다. 혹시, 이런 경우 있지 않나요? 시리얼로 한 바이트씩 정수 값을 받아 들이는 경우 말이죠.

 

  • 상대방이 보내려는 정수 값 : 0x12345678
  • 상대방이 하나 씩 보낸 순서 : 0x12, 0x34, 0x56, 0x78

이럴 때 union을 사용하면 편한데, 대부분 버퍼로 받아서는 직접 계산을 하더군요.

 

n_size = buff[3] * 256 * 256 * 256 + buff[2] * 256 * 256 + buff[1] * 256 + buff[0]

 

또는 비트를 shift 하기도 하지만, 어찌되었든 같은 방법입니다. 그러나 union을 사용하면 매우 간단해 집니다.

#include <stdio.h>

typedef unsigned char   byte;
typedef unsigned int    u32;

typedef struct {

byte    b1, b2, b3, b4;

} size_byte_t;

typedef union {

u32         size;
    size_byte_t bytes;
} size_data_t;

int main( void){

size_data_t s_size;
   
    // 시리얼로 4개의 바이트를 buff[]로 받았다면

s_size.bytes.b1 = buff[0];
    s_size.bytes.b2 = buff[1];
    s_size.bytes.b3 = buff[2];
    s_size.bytes.b4 = buff[3];

printf( "data size =%x\n", s_size.size);

return 0;
}

struct와 union의 차이점

struct는 변수를 하나의 묶음으로 만들어 줍니다. 묶음 하나에 들어 가도 변수는 다른 변수와 같이 들어 갈뿐 자기 자리가 있습니다. 즉, 사탕 4개를 struct라는 주머니에 넣는다면, 사탕은 모두 주머니 안에 들어가도 각각의 사탕은 자기가 차지하는 공간이 있습니다. 그러나 union은 큰 놈 안에 작은 놈이 포개지듯이 들어 갑니다.

 

 

그래서 아래와 같이 선언하면 struct로 선언된 struct_byte_t의 크기는 4byte 이지만, union으로 선언된 union_byte_t는 변수가 4개라도 byte 한 개 짜리입니다. 즉, b1, b2, b3, b4 이름만 다른 변수 4개만 있을 뿐 실제 모두 같은 바이트의 주소를 가르키게 됩니다.

typedef unsigned char   byte;
typedef unsigned int    u32;

typedef struct {

byte    b1, b2, b3, b4;

} struct_byte_t;

typedef union {

byte    b1, b2, b3, b4;

} union_byte_t;

자, 그렇다면 위의 예제가 그림처럼 이해가 되시나요? ^^

 

 

typedef struct {

byte    b1, b2, b3, b4;

} size_byte_t;

typedef union {

u32         size;
    size_byte_t bytes;
} size_data_t;

 

 

 

그래서 메모리에는 아래와 같이 포개지는 꼴이 됩니다.

 

 

이런 메모리 구성으로 b1에 값을 넣으면 size 변수의 최 하위 바이트 값이 변경됩니다. size 변수의 최 상위 바이트 값을 변경하려면 b4를 이용하면 되겠지요.

 

이해를 돕기 위해 예제 하나를 더 올립니다.

 

#include <stdio.h>

typedef unsigned char   byte;
typedef unsigned int    u32;

typedef struct {

byte    b1;
    byte    b2;
    byte    b3;
    byte    b4;

} size_byte_t;

typedef union {

u32         size;
    size_byte_t bytes;
} size_data_t;

int main( void){

size_data_t s_size;

s_size.size = 0x12345678;

printf( "b1=%2x  b2=%2x  b3=%2x  b4=%2x\n", s_size.bytes.b1, s_size.bytes.b2, s_size.bytes.b3, s_size.bytes.b4);

return 0;
}

어떤 값이 출력될까요?

 

참고로 char buff[255]와 같이 크기가 정해진 버퍼와도 union을 이용하여 묶어서 사용하면 앞서 정수 값을 계산할 필요도 없어 집니다. 이 예 말고도 리틀엔디언 정수 값을 빅 엔디언으로 바꿀 때도 사용할 수 있구요. 결론으로 짧게 말씀 드린다면, 어떤 고정 크기의 변수에서 특정 부분을 수정하거나 읽어 들일 때 사용하면 편합니다.

 

출처: <http://forum.falinux.com/zbxe/index.php?document_srl=557139&mid=lecture_tip>

 

 

 

 

    void (    )(int);

 

 

 

 

 

void (*func)(int)

*signal(int signo)

 

 

 

void (*signal(int signo,void (*func)(int))) (int);

 

*T = *signal(int signo,void (*func)(int)) 치환

void (*T) (int);

반환형이 없고(void), 하나의 int 형 인수를 가지는 함수를 가리킬 수 있는 포인터 => 함수 포인터

 

*S = void (*func)(int)

 

반환형이 없고(void), 하나의 int 형 인수를 가지는 함수를 가리킬 수 있는 포인터 => 함수 포인터

 

 

*signal(int signo, *S)

 

int 함수포인터 *s를 인자로 하는 함수를 가리킬 수 잇는 포인터 => 함수 포인터

 

 

 

 

signal 함수 선언의 뜻은?

 

void (*signal(int signo,void (*func)(int)))(int);

 

예제를 void (*a)(int), a= signal(int signo, void (*handler)(int)) 두개로 나누어 봅시다.

 

그러면 a는 함수의 리턴벨류를 의미하며 <integer형을 argument로 하고 return 값이 없는 함수 포인터 a> 라 할수 있습니다.

 

근데 signal이란 놈은 <integer 하나, integer를 인자로 하고 리턴값이 없는 handler라는 이름의 함수 포인터 하나를 인자로 하는 signal이라는 이름의 함수>입니다.

 

둘을 결합하면 결국,

 

a = <integer형을 인자로 하고 return값이 없는 함수포인터를 리턴값으로 가지며 (integer 하나), (integer를 인자로 하고 리턴값이 없는 handler라는 이름의 함수포인터 하나)를 인자로 하는 signal이라는 이름의 함수 >입니다.

 

2. signal 가르키는 함수 포인터 선언은?

 

위와 같이 선언자체와 리턴 값을 둘로 나누어 봅시다.

 

void (*) (int) -> return value;

(* signal)(int, void (*) (int)); -> return value 제외한 함수 포인터

 

둘을 합하면

void (* (* signal)(int, void (*) (int)) ) (int)

같이 됩니다.

 

이것은 signal과 같은 함수를 가르킬 수 있는 함수 포인터입니다.

 

 

 

 

Let's making English culture to read English documents for upgrading your ablity of coding quickly.

 

답변
추천해요3
추천자 목록
^ - Circumflex (서컴플렉스) 
! - Exclamation Point (엑스클러메이션 포인트) 
" - Quotation Mark (쿼테이션 마크) 
# - Crosshatch (크로스해치), Sharp(샵), Pound Sign(파운드 사인) 
$ - Dollar Sign (달러사인) 
% - Percent Sign (퍼센트사인) 
@ - At Sign (앳 사인, 혹은 앳), Commercial At(커머셜 앳) 
& - Ampersand (앰퍼샌드) 
' - Apostrophe (어파스트로피) 
* - Asterisk (애스터리스크) 
- - Hyphen (하이픈), Dash (대시) 
. - Period (피리어드), Full Stop (풀스탑) 
/ - Slash (슬래시), Virgule (버귤) 
\ - Back Slash (백슬래시) 
- Won sign (원사인) 
: - Colon (콜론) 
; - Semicolon (세미콜론) 
` - Grave (그레이브) 
{ - Left Brace (레프트 브레이스) 
} - Right Brace (라이트 브레이스) 
[ - Left Bracket (레프트 브래킷) 
] - Right Bracket (라이트 브래킷) 
( - Left Parenthesis (레프트 퍼렌씨시스) 
) - Right Parenthesis (라이트 퍼렌씨시스) 
| - Vertical Bar (버티컬바) 
~ - Tilde (틸드) 
= - Equal Sign (이퀄사인) 
+ - Plus Sign (플러스사인) 
- - Minus Sign (마이너스사인) 
_ - Underscore (언더스코어), Underline (언더라인) 
< - Less Than Sign (레스댄 사인), Left Angle Bracket(레프트 앵글브래킷) 
> - Greater Than Sign (그레이터댄 사인), Right Angle Bracket (라이트 앵글브래킷)

출처: <http://tip.daum.net/question/39482504


 

https://money.cnn.com/pf/best-jobs/2013/snapshots/7.html

 

Software Developer - Best Jobs in America 2013

CNNMoney/PayScale.com's top 100 careers with big growth, great pay and satisfying work.

money.cnn.com

 

 

/* object type (public) */

typedef union {

  struct _ooc_vtbl_object  const *_CONST__ __vptr;

  struct _ooc_vtbl_object _CONST_*_CONST_  __iptr;

} t_object;

 

/* object virtual table type (private) */

struct _ooc_vtbl_object {

  struct _ooc_type_info const*_CONST_ info;

  size_t offset;

};

 

/* object class type (private) */

struct _ooc_class_object {

  struct _ooc_vtbl_object const*const __vptr;

  t_object (*const object) (void);

  void (*const _object)  (t_object *const);

};

 

/* object RTTI (private) */

struct _ooc_type_info {

  char const*const name;

  struct _ooc_class_object const*_CONST_ class;

  t_object const*_CONST_ obj;

  struct _ooc_type_info const*_CONST_ super;

  size_t _CONST_ extraSuper;

  size_t _CONST_ extraOffset[_OBJECT_MAXEXTRASUPER_];

};

'Blog History' 카테고리의 다른 글

개 발 일 지 029  (0) 2019.11.24
개 발 일 지 028  (0) 2019.11.24
개 발 일 지 026  (0) 2019.11.20
개 발 일 지 025  (0) 2019.11.20
개 발 일 지 024  (0) 2019.11.18

!-- 내가 완!전! 좋아하는 시인


喜也(희야) 이희숙 
1964년 12월 20일 
(음력 1963년 11월 22일) 
경남 합천 출생 
2002년 문예사조 등단 
글벗문학회 회원 
독도수호대 정회원 
대구 거주 
행복을 경영할 줄 아는 여자 

제16회 전국문화사진공모전 초대작가 (달서구문화원)

출처: <http://poemlove.co.kr/m/bbs/board.php?bo_table=tb02&wr_id=3849

!-- 다시는 펀딩북 출판 안하리 했던 마음이 요즘 조금 녹고 있음
아래는 관련 공지 글 초고


[비전공자를 위한 프로그래밍] 목차는 아래와 같습니다. 8월 31일까지 작업되어 진행 상황 공유용으로 출판사로는 전달했습니다. 출판사 전문가분의 의견을 듣고자 위함입니다. 현재 Chapter 6을 집필 중입니다. 마무리 후 Chapter 7까지 고려중이며, 초안 집필이 끝난 후에는 하나의 개념으로 설명 가능한 용어들을 모두 통합/통합한 이유를 적고 불필요한 내용들을 모두 더더욱 압축하는 작업을 거치려고 합니다. 안경을 압축하듯이 제 역할은 유지한 체, 내용은 압축하여 줄인 다음 가볍고 오래도록 볼 수 있는 서적이 되고자 합니다. 내용이 필요 없을 때 즈음되면 개정판을 내려고 합니다. 작업 순서는 제가 내용을 쓰고 SW업체 대표분이 내용을 이해하여 다시 씁니다. 그다음 국어국문학 작가분이 알아듣기 어려운 문장을 퇴고하고 교정합니다. 물론, 출판사 교정은 거칩니다. 교정 담당하실 분의 업무 스트레스는 많이 내려갈 거라 생각합니다.
[개발자가 알아야 할 비화]는 표지 디자인 및 내지 디자인, 문서를 보기 좋게 변환하는 작업이 진행 중입니다. - 디자인 작업이 이렇게 광범위할 줄 몰랐습니다. 견적서 받아보고 디자인 작업 비용이 비싸다고 했던 제가 너무 부끄럽더군요 - 집필 중 국내 유명 IT 교육센터 담당자 분과 내용 관련해서 이야기할 시간이 있었습니다. 너무 위험하지 않겠냐는 피드백을 주셨습니다. 걱정 안 해도 될 이유를 일일이 ,  오래도록 설명하고 나니 고개를 끄덕이십니다. 참... 진실을 말하는데 걱정 안 해도 될 세상이 어서 빨리 왔으면 하는 생각이 들었습니다. 비화는 펀딩 말고 사실 분을 위해. 5만 원에 값을 책정했고 책에 인쇄될 거라고 하니, 요즘 누가 5만 원에 책을 사냐면서 성화셨습니다. 그러나 한 권 보내 달라고 하더군요. 회사 윗분께 드린다고 ^^; 수익금은 [함께하는 사랑밭]에 기부토록 하겠습니다. 큰 기업들의 회사 시스템도 좋은 방향성을 가지게 해 주고, 대한민국 IT도 깨끗하게 만들며 어려운 한국의 아이들을 돕는 데까지... 정말 괜찮은 일을 하고 있는 것 같습니다.
[C&JAVA]는 펜딩 상태입니다. JVM 소스 분석이 들어가는데 고도의 집중 시간 없이 진행하기는 어려운 부분입니다. 게다가 담당하고 있는 업무의 가짓수가 많아진 이유입니다. 첫권은 인쇄 프로세스를 탔고, 두 번째권은 마무리 단계라 세 번째 권에 대한 온전한 집중은 9월 말이 되어서야 가능할 것 같습니다. 기획 출판에 계약서가 9월 말로 되어 있어서 9월 말에 무릎 보호대를 작용해야 할 것 같습니다.(무릎 꿇기 用) 책이 많이 늦는다면 우선 환불을 진행하고 책은 무료로 보내 드리는 방법을 고려하고 있습니다. 독자분과의 약속도 중요하지만 제 IT 커리어도 달려 있어서 앞으로 이 업(業)으로 밥 먹고 살아야 하는데, 개떡 같은 책 내면 망하니까요 ^^
애까지 있는 아빠가 업데이트에 비루한 단어를 선택해서 죄송합니다. 다만, 저의 솔직한 생각이 구어체 용어를 타고 정확한 느낌으로 전달되었으면 하는 바람입니다.
이제 결실의 계절 9월입니다. 여기 제주는 어젯밤 기온, 또 새벽 산책을 나가보니 날씨가 많이 차가워졌습니니다. 무엇보다 중요한 것은 건강이니 환절기 감기 조심하시기 바랍니다.
이상 보고를 마칩니다.
하준호 드림.

- 아 래 -
Chapter 1. 프로그래밍이 뭐야?
프로그래밍 개념 잡기
프로그래밍을 해보자 <쉘(shell) 프로그래밍>
단어장 1
Chapter 2. 프로그램을 실행시켜 보자
Visual Studio 설치 (C/C++)
Path 설정
컴파일(Compile)/링크(Link)
C/C++ 프로그래밍
컴파일 과정
단어장 2
JDK / Eclipse 설치 (JAVA)
Path 설정
컴파일(Compile)/링크(Link)
JAVA 프로그래밍
Chapter 3. 포인터
기본개념
포인터 연산자
리틀 엔디안, 빅 엔디안
다중 포인터
배열 포인터
포인터 배열
동적 할당
함수 포인터
손 코딩 & 발 코딩
책에서 표현하는 방법
벤 다이어 그램
Chapter 4. Programming paradigm
프로그래밍에서 중요한 것
코딩능력
성실성
디자인 패턴
책임감
자료구조, 알고리즘
친화력
협동심
쉘 스크립트 작성 능력
배려심
포트폴리오
Chapter 5. Algorithm, Data Structure
알아야 할 용어
알고리즘이란?
디자인 패턴과 수학?
알고리즘을 잘한다는 것은?
절차 지향, 객체지향 프로그래밍?
객체지향이란?
추상화, API란?
스스로 결정하는 DS, ALGO 실력!
DS의 종류
원시 타입(Primitive Type)
배열(Array)
스택(Stack), 큐(Queue)
연결 리스트(LinkedList)
트리(Tree)
힙(Heap)
그래프(Graph)
해시(Hash)
ALGO의 종류
Chapter 6. 프로그래밍 공부 방법
수학을 먼저 공부해야 합니다.
EntryPoint를 찾아야 합니다.
DS(Data Structure)를 알아야 합니다.
원시 타입(Primitive Type) 찾기
배열(Array) 찾기
AOGO(Algorithm)을 짜기 위한 도구를 알아야 합니다.
연산자
산술 연산자
대입 연산자
증가 (++), 감소 (--) 연산자
관계 연산자
비트 연산자
Logical Operator(논리 연산자)
비트 연산자와 논리 연산자의 차이점
shift(이동) 연산자
조건 연산자(?:)와 instanceof 연산자
연산자 우선순위

!-- 비화 출판에 도와주신 많은 분...

싫어했고 싸웠던 사람도 있지만 이제 용서하기로 했다.
그 항의 전화 때문에 또 텀블벅에 까지 항의 했던 것 때문에 텀블벅이랑도 전화 받으라
애기 늦게 데리러 가서 있게된 수많은 아픔도 이제 지워졌겠지.


강경묵 강동준 강성연 강재성 고경민 고세민 고제경 곽소영 구균모 구지운 권령희 권민수 권순호 권혜림 김강준 김경민 김광수 
김다성 김대현 김동억 김동원 김동현 김명준 김문찬 김민규 김민아 김민재 김민지 김보미 김성민 김성원 김성진 김여은 김영래 
김용식 김유준 김윤오 김정수 김종혁 김주완 김진만 김진환 김태호 김하얀 김행주 김현지 김효상 김효준 남기원 남도영 남미진 
류철원 문상수 문윤기 박다솔 박미소 박병호 박상현 박성용 박순호 박완희 박정환 박종률 박준영 박지하 박현수 박현우 박혜연 
박화미 배가현 배영성 변가람 송나해 신동현 신소영 신혜원 안석준 안소현 안진훈 양현철 엄준영 오승환 오윤재 오청균 옥윤청 
우승현 우지원 원순규 유성곤 유승희 유은지 유지아 유진웅 윤상필 윤여정 윤현정 윤현호 이강욱 이건우 이경준 이동엽 이미희 
이선아 이성주 이소정 이슬비 이승규 이승주 이승표 이애지 이예신 이용출 이우람 이원주 이윤식 이은지 이장묵 이재석 이재원 
이재현 이정우 이정임 이종혁 이준호 이지홍 이태균 이한솔 이현우 이혜연 이효원 임상혁 임은지 임은진 장미영 장성호 장용석 
전재훈 정시진 정신호 정윤수 정재영 정조은 정형석 정혜인 정희원 조영기 조용일 조우석 조우재 조윤수 조은비 조재문 조창훈 
조현철 진승기 차상원 차호 천은지 최가원 최경재 최영순 최원석 최유진 최정인 최한겸 최호윤 하승철 한예인 허용학 홍성철 
홍장미 황동환 황설희 황정아 황주은 황준우 황혜정

!-- Embedded

벗어 날 수 없는...

BLOCK DIAGRAM

 

 

XU4 is fully software compatible with XU3 !

But XU4 is more compact, more affordable and more expandable.

 

What's different from XU3.

Pros

- Gbit Ethernet

- More Stable Dual USB 3.0 host ports

- More compact PCB size

- More IO ports (I2S/I2C/GPIO)

 

Cons

- No USB OTG

- No DP

- No Audio CODEC

- No Power Monitoring Sensors

 

 

BOARD DETAIL

 

 

 

PCB DETAIL

 

 

 

 

 

 

출처: <http://www.hardkernel.com/main/products/prdt_info.php?g_code=G143452239825&tab_idx=2>

 

//        CInternetSession*    pSession = NULL;

//    CHttpConnection*    pHttpConnect = NULL;

//    CHttpFile*            pHttpFile = NULL;

//    CString                url = _T("/hash");

//

//    try{

//       

//        //// HTTP 메소드별로 사용 가능

//        pSession = new CInternetSession;

//

//                CString strServerName = L"http://211.57.201.145";

//

//                pHttpConnect = pSession->GetHttpConnection(strServerName, (INTERNET_PORT)1377, NULL, NULL);

//

//        if(pHttpConnect == NULL) throw CString(_T("http connection failed!!!"));

//

//                pHttpFile = pHttpConnect->OpenRequest(CHttpConnection::HTTP_VERB_GET, url);

//

//                //pHttpFile->AddRequestHeaders(_T("HTTP/1.1\r\nAccept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, */*\r\nAccept-Language: ko\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB6.4; CNS_UA; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; CNS_UA)\r\nAccept-Encoding: gzip, deflate\r\nProxy-Connection: Keep-Alive\r\n"));

//

//

////pHttpFile->AddRequestHeaders(_T("POST v1/voice/tts.bin HTTP/1.1\r\n"));

//////pHttpFile->AddRequestHeaders(_T("Host: openapi.naverlove.com\r\n"));

////pHttpFile->AddRequestHeaders(_T("User-Agent: curl/7.43.0\r\n"));

////pHttpFile->AddRequestHeaders(_T("Accept: */*\r\n"));

////pHttpFile->AddRequestHeaders(_T("Content-Type: application/x-www-form-urlencoded\r\n"));

//////pHttpFile->AddRequestHeaders(_T("X-Naver-Client-Id: 123456789123456789\r\n"));

//////pHttpFile->AddRequestHeaders(_T("X-Naver-Client-Secret: 12345678\r\n"));

//

////CString strHeaders = CString(_T("Content-Type: application/x-www-form-urlencoded"));

//

////pFile-&gt;AddRequestHeaders(strHeaders);

//

//

////pFile->AddRequestHeaders("Accept: image/png,*/*;q=0.5");

////

////pFile->AddRequestHeaders("Accept-Language: zh-cn,zh;q=0.5");

////

////pFile->AddRequestHeaders("Accept-Encoding: gzip,deflate");

////

////pFile->AddRequestHeaders("Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7");

////

////pFile->AddRequestHeaders("Keep-Alive: 300");

////

////pFile->AddRequestHeaders("Connection: keep-alive");

////

////pFile->AddRequestHeaders("Cookie: Key=somevalue;domain=abc.com") ;

//

////pHttpFile->SendRequest();

//

//                    CString strLine;

//

//                pHttpFile = (CHttpFile *)pSession->OpenURL(_T("http://211.57.201.145:1337/hash"));                

//                  pHttpFile->ReadString(strLine);

//    //           pHttpFile->Close();

////cout << strLine << endl;

//        MessageBox(strLine ,L"Msgbox",MB_OK);

//       

//                //pHttpFile->QueryInfoStatusCode(dwRet);

//

//        // GET 방법으로 간단하게

//       

//        //pSession = new CInternetSession;

//       

//

//

//      //try {

//      //            // INTERNET_FLAG_RELOAD prevents page output being cached; potentially inaccurate

//      //            pFile = (CHttpFile*)session.OpenURL("http://www.mywebsite.com/Gui4UnexAuth.aspx", 0,

//      //                                                INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_RELOAD);

//      //            pFile->ReadString(strLine);

//      //            pFile->Close();

//      //      } catch(CInternetException* e) {

//      //            e->Delete();

//      //      }

//

//      //  delete pFile;

//

//     

//    }

//    catch(CInternetException *m_pEx)

//    {

//     //   m_pEx->ReprotError();

//        m_pEx->Delete();

//    }

//

//    // result값 확인

//    DWORD m_dwStatusCode;

//    pHttpFile->QueryInfoStatusCode(m_dwStatusCode);

//

//        cout << m_dwStatusCode << endl;

//

//    // 객체 delete 부분

//    if(pHttpFile)

//    {

//        delete pHttpFile;

//        pHttpFile = NULL;

//    }

//    if(pHttpConnect)

//    {

//        delete pHttpConnect;

//        pHttpConnect = NULL;

//    }

//    if(pSession)

//    {

//        pSession->Close();

//        delete pSession;

//        pSession = NULL;

//    }

//

//

//

//        //MessageBox(L"Done",L"Msgbox",MB_OK);

//        cout << "done" << endl;

'Blog History' 카테고리의 다른 글

개 발 일 지 028  (0) 2019.11.24
개 발 일 지 027  (0) 2019.11.20
개 발 일 지 025  (0) 2019.11.20
개 발 일 지 024  (0) 2019.11.18
개 발 일 지 023  (0) 2019.11.18


!-- 소팅

NSSortDescriptor *sortDescriptor;

sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"keyValueYouWantToSort"

NSMutableArray *sortedArray = [mList sortedArrayUsingDescriptors:@[sortDescriptor]];
tableViewApator = sortedArray;
[yourTableView reloadData]; //  NSMutableArray *tableViewApator

!-- 어제  또 하나의 앱을 스토어에 올렸다. 애플과의 풀 원문을 공개된 것은 거의 없어서, 포스팅 해 본다.
도움 되시길... 참, 날짜를 지운 이유는 애플 대응에 대한 정보를 이렇게 제공하는 것 조차 지피지기로 생각해 보면
달갑지 않을 것 같은데 하나의 정보라도 빼는게 좋을 듯. 다른 분께 어느 정도까지만  도움되라는 의미로 
날짜는 크게 필요 없다고 생각되기 때문. 앱스토어 뿐 아니라 플레이 스토어 아마존 스토어 등 여러 군데 퍼브리싱 한
경험 + 대기업, 중소기업, 스타트업, 개인 퍼브리싱 등 경험으로 볼 때 애플이 가장 깐깐한 것 같다. 이미 올려진 앱이
있는 기업이면 심사 1일, 처음이고 홈페이지도 제대로 되어 있지 않은 경우 심사가 2달까지도 갔었던 듯.
 개발자 모두 화이팅! 


Apple의 메시지
Hi Junho,

Thank you for your reply. We appreciate your efforts to comply with the App Store Review Guidelines, and we look forward to reviewing your resubmitted app.

Best regards,

App Store Review

Hi,

Thank you for your response. I will resubmit.

Thank you.

Warmest Regards,
Junho.

Apple의 메시지

Hi,

Thank you for your response. The new build of the app should be resubmitted for use to continue the review.

Best Regards,

App Store Review

Is there anything I can help you with more? :)

warmest Regards,
Junho.

Hi Junho,

Thank you for your reply. We appreciate your efforts to comply with the App Store Review Guidelines, and we look forward to reviewing your resubmitted app.

Best regards,

App Store Review

Hi,

"ReSwift" was used for changing the screen only. Therefore We've removed ReSwift that is working correctly except the Achieve function of Xcode.

Thank you.
Best regards
Junho.

Apple의 메시지
Hi,

Thank you for your response. What are you using the “ReSwift” library for in the app?

Best Regards,

App Store Review

I appreciate your advice. We remove all if the module to prevent user interaction before/after network connecting and Removing cloud kit. The user can play whenever GameCenter is connected or not. And We support only ARM64+ because of the related library titled "ReSwift," which cannot support ARMv7. Please see the version of the 0.10 binary.

Thank you.
Best regards
Junho.

Apple의 메시지

We discovered one or more bugs in your app when reviewed on iPhone running iOS 13.1.2 on Wi-Fi.

Specifically, the app freezes at startup.

Next Steps

To resolve this issue, please run your app on a device to identify any issues, then revise and resubmit your app for review.

If we misunderstood the intended behavior of your app, please reply to this message in Resolution Center to provide information on how these features were intended to work.

For new apps, uninstall all previous versions of your app from a device, then install and follow the steps to reproduce the issue. For updates, install the new version as an update to the previous version, then follow the steps to reproduce the issue.

Resources

For information about testing your app and preparing it for review, please see Technical Note TN2431: App Testing Guide.

For a networking overview, please review About Networking.


앱스토어 메세지

I appreciate your advice. We remove the module to prevent user interaction before network connecting. First of all, the user can play whenever GameCenter is connected or not. After 6th version is ready to test, we will test it again.

Thank you.
Best regards
Junho.

Apple의 메시지

We discovered one or more bugs in your app when reviewed on iPad running iOS 12.4 on Wi-Fi.

Specifically, the app freezes after startup.

Next Steps

To resolve this issue, please run your app on a device to identify any issues, then revise and resubmit your app for review.

If we misunderstood the intended behavior of your app, please reply to this message in Resolution Center to provide information on how these features were intended to work.

For new apps, uninstall all previous versions of your app from a device, then install and follow the steps to reproduce the issue. For updates, install the new version as an update to the previous version, then follow the steps to reproduce the issue.

Resources

For information about testing your app and preparing it for review, please see Technical Note TN2431: App Testing Guide.

For a networking overview, please review About Networking.



Please see attached screenshot for details.



'Blog History' 카테고리의 다른 글

개 발 일 지 027  (0) 2019.11.20
개 발 일 지 026  (0) 2019.11.20
개 발 일 지 024  (0) 2019.11.18
개 발 일 지 023  (0) 2019.11.18
개 발 일 지 022  (0) 2019.11.17

!-- 무서웡

광고 식별자

이 앱에서 광고 식별자(IDFA)를 사용합니까?
광고 식별자(IDFA)는 각 iOS 기기의 고유한 ID로서 타깃 광고를 게재할 수 있는 유일한 방법입니다. 사용자는 자신의 iOS 기기에서 타깃 광고를 제한하도록 선택할 수 있습니다.




아니요
광고 식별자(IDFA) 사용에 대해 올바른 답변을 선택했는지 확인하십시오. 앱에 IDFA가 포함되어 있고 아니요를 선택한 경우에는 해당 바이너리가 영구적으로 거부되며 다른 바이너리를 제출해야 합니다.



!-- MAC에서 아스텔 앤 컨 파일 이동 잘 된다. 

https://www.android.com/filetransfer/
요거 깔긴 해야 함.

!-- 안드로이드 스튜디오 결국 깐다.
https://developer.android.com/studio/?gclid=EAIaIQobChMIwvCysvHy5QIVU6SWCh2-2wqPEAAYASAAEgJkcvD_BwE

소스 탐색 때문에 ㅠㅠ 개발 안할거임... 

!-- 개발자라 별 필요 없다지만 이제 어느 정도는 알아야 할 나이라...

From <http://outstanding.kr/%EC%9D%B8%ED%84%B0%EB%84%B7-%EB%B9%84%EC%A6%88%EB%8B%88%EC%8A%A4-%EB%AA%A8%EB%8D%B8%EC%9D%98-%EB%AA%A8%EB%93%A0-%EA%B2%83/


광고, 부분 유료화, 수수료, 일회성 판매, 구독 등 고민 하던 내용을 잘 정리하셨네.







유료화에 대한 고민. 이 고민에서 나온 인터페이스가 본인과 연결된다면 연봉 상승의 이유가 되겠지.

인터넷기업 창업자가 사업을 하면서
가장 많이 듣는 게 “비즈니스 모델이 무엇이냐”는
질문일 것입니다.
 
사실 수익화란 ‘먹고사니즘’을 해결하고
기업의 영속성을 보장한다는 측면에서 
중요성이 크고
 
특히 인터넷산업의 경우 
최첨단이라는 이미지가 강해
더욱 호기심을 자극하리라 보는데요.
 
인터넷 비즈니스 모델을 쉽게 분류하자면
크게 세 가지로 나눌 수 있습니다.
 
바로 유료화/부분유료화, 광고, 수수료입니다.
 
그러면 구체적으로 어떤 게 있는지
하나하나 살펴볼까요? 
 
(정리=아웃스탠딩)
 
유료화 모델
 
일반재화에 관한 거래처럼
서비스 및 용역 제공에 대해
대가를 받는 것입니다.
 
안착하기까지 굉장히 어려우나
만약 일정 고객층 및 팬덤을 형성한다면
안정적인 수익을 얻을 수 있죠.
 
*일회성
 

(사진=애플)
 
패키지형 소프트웨어가 대표적입니다.
 
한번의 결제로 라이센스를 받아
장기간, 혹은 무한정 쓰는 것이죠. 
 
쇼핑몰 자체 상품판매, 외주작업 또한 
여기에 속한다고 할 수 있습니다.
 
*정기구독
 

(사진=가비아)
 
요즘 들어서는 일회성보다는 
구독 모델이 더욱 대중화됐는데요.
 
온라인게임, 온라인뉴스, 
스트리밍 서비스, 서버 인프라 임대, 
SaaS(온라인 기반 서비스형 소프트웨어)에
월간 이용료를 부과하는 식입니다.
 
그리고 전자상거래 분야에서는
화장품, 꽃 등 큐레이션 배송상품이
섭스크리션으로 처리되기도 하죠.
 
인터넷 및 클라우드 환경의 발전과
고수익 창출에 대한 집념이
이를 구현하지 않았나 싶습니다.
 
부분유료화 모델
 
일회성이든, 정기적이든
서비스를 사용하는 데 무조건 돈을 내야 한다면
독점적 위치가 아닌 이상
이용률 확장에 어려움을 겪기 마련입니다.
 
그래서 구상된 게 부분유료화인데요.
 
기본적으로 대부분 기능을 오픈하되
핵심기능에 대해서만 유료화를 하는 것이죠.
 
흔히 핵심기능을
‘페인포인트(불편함)’로 설정합니다.
 
불편함을 해소하고 싶으면 
돈을 내라는 의미죠.
 
물론 강도에 따라 이용자의 불만은
정비례하기 마련입니다.
 
*부분유료화 – 핵심자원 및 아이템
 

(사진=엔씨소프트)
 
가장 대표적으로는
핵심자원 및 아이템에 대한
결제를 들 수 있습니다.
 
이는 게임 분야에서
광범위하게 활용되는데요.
 
핵심자원 및 아이템이 없어도
게임을 즐길 수 있지만
만약 갖고 있다면
자신의 캐릭터가 다른 이용자보다
우위에 설 수 있도록 도와주죠.
 
*부분유료화 – 콘텐츠 활용범위
 

(사진=레진엔터테인먼트)
 
이 또한 게임 분야에서 많이 쓰이고
웹툰, 동영상 등 스토리 연속성을 지닌
엔터테인먼트 분야에서도 쓰이곤 합니다.
 
어디부터 어디까지는 공짜로 볼 수 있는데
어디부터 어디까지는 돈을 내라는 것이죠.
 
*부분유료화 – 플레이시간
 

(사진=선데이토즈)
 
크게 다르지 않습니다.
 
플레이시간을 한정적으로 설정하고
추가 요청분에 대해 과금합니다.
 
‘카카오 게임하기’의 하트를 생각하면
이해하기 쉬우리라 생각합니다.
 
*기부모델 
 

(사진=아프리카TV)
 
다른 부분유료화 상품과는 다르게
모든 기능을 100% 오픈하고 
이용자로부터 자발적 기부를 받는 것입니다. 
 
어떻게 보면 그다지 합리적이지 않은
비즈니스 모델이라 할 수 있는데요. 
 
예상 외로 창작자에 대한 팬덤과 소통 니즈,
편리한 결제환경에 힘입어 꽤 각광받고 있습니다. 
 
다음 뉴스펀딩, 아프리카TV 별풍선 등이 
좋은 예시입니다. 
 
광고 모델
 
TV, 라디오처럼 인터넷도
하나의 미디어라 가정을 하고
이용자 활동공간 및 시야반경에
광고를 싣는 것입니다.
 
수익발생은 바로 이뤄지지만
가장 부익부 빈익빈이 큰 모델입니다.
 
구글과 네이버처럼
특정 시장을 장악한 업체는
떵떵거리며 돈을 벌 수 있는 반면
중소 버티컬 사이트들은
인건비조차 맞추기 어렵죠.
 
*검색광고
 

(사진=네이버)
 
가장 큰 시장을 형성하고 있고
가장 수익성이 검증된 광고상품입니다.
 
통상 검색엔진 및 오픈마켓 사이트
검색결과 최상단에 붙곤 하는데요.
 
이용자의 의도와 상품이
상당히 일치돼 효율이 높다는 점,
 
클릭당 과금이 이뤄진다는 점,
 
경매방식으로
노출순서가 결정된다는 점 등에 힘입어
나날이 시장 규모가 커지고 있습니다. 
 
*디스플레이광고
 

(사진=네이버)
 
이미지 형태로
특정 공간을 차지하고 있는,
가장 일반적인 형태의 광고상품입니다.
 
이용자 의도와 상품이
일치되지 않는다는 점에서
성장이 예상보다 더딘 동시에
가장 많은 비판을 받고 있는데요. 
 
그래서인지 검색광고와 비교해
상당히 큰 수익격차를 보이고 있습니다.
 
*이메일광고
 

(사진=아웃스탠딩)
 
아마 모든 광고상품 중에서
가장 많은 욕을 먹고 있는 상품일 것입니다.
 
말 그대로 이메일로
광고를 노출하는 것인데
사생활 영역에 침투한다는 점에서
불쾌감이 매우 크죠.
 
*리워드광고
 

(사진=캐시슬라이드)
 
지난 3~4년간 모바일시장 개화에 맞춰
무섭게 성장한 광고상품이죠.
 
이용자가 앱다운로드, 앱실행 등
특정 액션을 할 때마다 보상을 해주는데요.
 
“돈 벌기 위해 광고를 하는 것인데
돈 주고 광고를 하는 게 말이 되냐”는
비판이 존재하지만
 
“1인당 평균 모객비용보다
1인당 평균 과금비용이 높으면 된다”는
반론에 따라 여전히 활용되는 듯 합니다.
 
*피드형 광고
 

(사진=아웃스탠딩)
 
페이스북, 트위터, 카카오스토리 등
이른바 소셜네트워크서비스 중에서
뉴스피드 중간에 끼어있는 광고입니다.
 
최근 페이스북이 고도화된
데이터 분석 및 입찰시스템을 통해
효과를 크게 올림으로써
엄청나게 각광받고 있죠.
 
공시 및 업계 복수 관계자에 따르면
이미 전세계적으로 매출 10조원을 넘었으며
국내에서도 매출 1000억원을 넘었다고 하니
앞으로 향방에 참 기대됩니다.
 
*콘텐츠형 광고
 

(사진=버즈피드)
 
쉽게 말해 홍보기사라 보면 됩니다.
 
콘텐츠 수준을 크게 높이고
유저 인터페이스와 적절히 매칭시킴으로써
광고 특유의 거부감을 줄이고
소셜네트워크상 공유가 잘 이뤄지도록
설계를 하는 게 핵심입니다.
 
해외에서는 버즈피드와 같은
콘텐츠 큐레이션 업체 중심으로
빠르게 확산되고 있으며
국내에서도 여러 뉴미디어 및
광고 에이전시 업체가 시도하고 있습니다.
 
하지만 성장성에 대해서는
이견이 분분하죠.
 
*동영상광고
 

(사진=유튜브)
 
동영상 플랫폼 이용 시
TV광고와 마찬가지로
콘텐츠 틀기 직전, 혹은 콘텐츠 중간에
광고가 나오는 것입니다.
 
효과는 일단 둘째치고
스트리밍 서비스 확산에 따라
트래픽이 폭증할 것인 만큼
앞으로 전망이 좋다고 볼 수 있습니다.
 
수수료 모델
 
수요자와 공급자를 연결해주고
중간에서 수수료를 떼는 모델입니다.
 
거간꾼이라 할 수 있죠.
 
거래액을 나누는 형태라
수익성은 광고보다 좋은 반면
 
방대한 이용률,
플랫폼과 콘텐츠 간의 협업구조가
담보되지 않는다면
성과를 보기 힘들 수도 있습니다.
 
*이커머스 중개
 

(사진=지마켓)
 
네이버 지식쇼핑, 지마켓, 옥션,
티켓몬스터, 쿠팡, 배달의민족 등이
여기에 해당합니다.
 
백화점 혹은 시장처럼
외부 판매자를 플랫폼에 입점시키고
거래가 일어났을 때 8~20% 가량
수수료를 떼는 식이죠.
 
*콘텐츠 및 서비스 중개
 

(사진=구글플레이)
 
구글플레이, 애플 앱스토어,
카카오 게임하기, 카카오 페이지,
네이버 엔스토어, 우버가 대표적입니다.
 
콘텐츠 및 서비스에 대한 거래가 일어났을 때
최대 30%까지 수수료를 떼는 식이죠.
 
*광고 중개
 

(사진=카울리)
 
광고랩사, 광고대행사, 광고 네트워크 업체도
분업화된 시스템 속에서
광고비 일부를 수수료로 가져갑니다.
 
*결제 중개
 

(사진=다날)
 
결제업체 또한 보유하고 있는 솔루션을
일회성, 혹은 구독모델로 팔기보다는
거래액 일부를 수수료로 떼어갑니다.
 
돈의 흐름 중간에 있다는 점을
활용하는 게 아닐까 생각됩니다.




!-- 또 다른


From <http://yslab.kr/35>  

IT업계 수익모델 총정리
8개월 전 by 웹기획자 조영수
그 동안의 경험을 바탕으로 IT업계의 수익모델을 간단하게 정리해봤습니다.
신규사업을 기획하거나 현재 운영중인 서비스의 새로운 수익모델(BM)을 찾을 때 참고하시기 바랍니다. 




B2C

광고 
트래픽을 기반으로 광고주와 사용자를 연결하는 형태

 디스플레이 광고  노출 당 과금   네이버
 키워드 광고  클릭 당 과금   네이버 
 동영상 광고  노출 당 과금  판도라TV 
 채용 광고  위치 당 과금  잡코리아 

상품 판매 
상품 제작자 or 도소매 업자들이 자사 서비스를 통해 상품을 직접 판매하는 형태

 종합 몰  상품 판매수익  GS SHOP
 소셜커머스  상품 판매수익  쿠팡, 티몬, 위메프
 도서  도서 판매수익  YES24
 의류  의류 판매수익  멋남
 여행  여행상품 판매수익  하나투어
 교육  교육콘텐츠 판매수익  메가스터디 
 차량  렌터카 판매수익  금호렌터카 
 이미지  이미지 판매수익  아사달 

중개 수수료 (플랫폼) 
구매자와 판매자를 한 곳에서 거래할 수 있도록 지원하는 형태

 상품 중개 (오픈마켓)  판매액의 6~12%   11번가
 상품 중개 (소셜커머스)  판매액의 8~25%  티켓몬스터
 지불 중개 (PG사)  거래액의 2~4%  이니시스
 여행상품 중개  판매수수료  인터파크투어
 호텔 중개  판매액의 7~20%  호텔엔조이 
 펜션 중개   판매액의 10~18%  민박넷
 레포트 중개  판매수수료  해피캠퍼스 
 유료 앱 중개  판매액의 30%   앱스토어 

라이선스 
사용자들이 서비스를 이용한 양, 빈도, 시간 등에 따라 요금을 지불하는 형태

 음악 라이선스  월정액, MP3 다운로드   멜론
 게임 라이선스  월정액  월드오브워크래프트 
 서버임대 라이선스  월정액, 서버구매   카페24 
 웹호스팅 라이선스  월정액  카페24
 그룹웨어 라이선스  월정액  팀오피스
 회원 라이선스  유료회원   랭키닷컴
 프로그램 라이선스  구매  포토샵

사이버머니 
실제화폐는 아니지만 사이버 공간에서 사용할 수 있는 돈을 구매하는 형태

 별풍선  별풍선10개 1,000원  아프리카TV 
 도토리  도토리1개 100원  싸이월드 
 파일 다운로드  캐시10,000개 10,000원  파일노리 


B2B

광고 플랫폼 
광고주를 직접 모집하고 제휴사를 통해 광고를 배포하는 형태

 디스플레이/키워드 광고  제휴사 광고매출의 10~20%  구글 애드센스
 모바일 광고  제휴사 광고매출의 10~20%  애드몹 
 모바일 광고 (자체 서비스)  회원과 수익쉐어  애드라떼
콘텐츠 제공 
저작권이 해결 된 콘텐츠를 기업에게 제공하는 형태

 뉴스  콘텐츠 제공비  아시아경제
 방송 콘텐츠  콘텐츠 제공비  iMBC
 여행 콘텐츠  콘텐츠 제공비  하나투어
 지도 API  정해진 트래픽을 초과하면 과금   구글

정보 중개 (데이터 판매) 
서비스 이용패턴, 구매습관 등의 정보를 수집하여 이를 가공하여 판매하는 형태

 인터넷 순위  유료회원 가입비  랭키닷컴
 트렌드분석  리서치, 컨설팅 의뢰비  코리안클릭
 설문조사  설문조사비   서베이몽키

마케팅 지원 
고객의 목표 달성을 위해 마케팅을 대행하는 형태

 광고대행  광고대행비  NBP (NHN Business Platform)
 블로그 운영  블로그 운영대행비  클렉스
 이메일 광고  타겟맞춤 메일발송비  썬더메일


솔루션 판매 
시장에서 요구하는 솔루션을 기본형태로 구축하고, 고객의 니즈에 맞게 커스터마이징 하는 형태

 쇼핑몰  설치비, 호스팅비, 커스터마이징비  카페24
 소셜커머스 솔루션  설치비, 호스팅비, 커스터마이징비  원데이넷 
 로그분석  설치비, 월 사용료  에이스카운터
 대량메일 솔루션  설치비, 월 사용료  레몬메일
 문자발송 솔루션  설치비, 사용량에 따라 과금  엠포 
 실명인증 솔루션  기본료, 사용량에 따라 과금  아이디체크
 
납품 
고객의 요구에 맞춰 웹서비스를 제작하는 형태

 B2C 성격의 웹&모바일 서비스 제작  상호 계약에 의해 결정  웹에이전시 
 B2B 성격의 웹&모바일 서비스 제작   상호 계약에 의해 결정  SI 
 

아웃스탠딩 자료 (바로가기)

비즈니스 모델 대표유형 예시
유료화/부분유료화  일회성 결제  소프트웨어 라이선스, 상품 판매, SI 용역
 정기구독  온라인 게임, 온라인뉴스, 스트리밍 서비스, 호스팅 임대, 큐레이션 커머스, Saas
 핵심자원 부분유료화  온라인 게임
 콘텐츠 활용범위 부분유료화  온라인게임, 웹툰
 플레이시간 부분유료화  온라인게임, 음원
 기부모델  개인방송, 크라우드 펀딩
광고  검색광고  파워링크, 프리미엄 링크
 디스플레이 광고  네이버 메인광고, 구글 애드센스
 이메일광고  프로모션 광고
 리워드광고  캐시슬라이드, 애드라떼
 피드형 광고  페이스북, 트위터, 카카오스토리
 콘텐츠형 광고  버즈피드, 피키캐스트
 동영상광고  유튜브, 판도라TV
중개  이커머스&O2O 중개  옥션, 지마켓, 티켓몬스터, 쿠팡, 11번가, 배달의민족, 요기요
 콘텐츠 및 서비스 중개  앱스토어, 구글플레이, 우버, 그랩택시


제대로 된 표는 링크 원문에서 보길 바라고
여기선 키워드만 얻어 갔으면 한다.

보통 인터넷 글은 링크 깨지는게 너무 많아서 ㅋ 이것도 소중한 자료가 될 것을 의심치 않는다.

'Blog History' 카테고리의 다른 글

개 발 일 지 026  (0) 2019.11.20
개 발 일 지 025  (0) 2019.11.20
개 발 일 지 023  (0) 2019.11.18
개 발 일 지 022  (0) 2019.11.17
개 발 일 지 021  (0) 2019.11.15

!-- 스터디 https://developer.apple.com/tutorials/swiftui/tutorials

스냅킷 안써도 되어서 좋다. 물론, 스냅킷 좋긴 해도 라이브러리고 최신 기술은
아류들이 자꾸 개선하는 것 보다 한 곳에 통합 관리하는게 좋다.

    // MARK: UISceneSession Lifecycle

    func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
        // Called when a new scene session is being created.
        // Use this method to select a configuration to create the new scene with.
        return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
    }

앱 델리게이트는 요렇

//  UISceneSession.h
//  UIKit
//
//  Copyright © 2019 Apple Inc. All rights reserved.
//

@available(iOS 13.0, *)
open class UISceneConfiguration : NSObject, NSCopying, NSSecureCoding {

쟨 요렇게

UIApplicationSceneManifest

UIApplicationSupportsMultipleScenes

UISceneConfigurations

UIWindowSceneSessionRoleApplication


UISceneConfigurationName
Default Configuration
UISceneDelegateClassName
$(PRODUCT_MODULE_NAME).SceneDelegate






얜 또 이렇게 씬은 또

{
        // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
        // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
        // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).

        // Get the managed object context from the shared persistent container.
        let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

        // Create the SwiftUI view and set the context as the value for the managedObjectContext environment keyPath.
        // Add `@Environment(\.managedObjectContext)` in the views that will need the context.
        let contentView = ContentView().environment(\.managedObjectContext, context)

        // Use a UIHostingController as window root view controller.
        if let windowScene = scene as? UIWindowScene {
            let window = UIWindow(windowScene: windowScene)
            window.rootViewController = UIHostingController(rootView: contentView)
            self.window = window
            window.makeKeyAndVisible()
        }
    }

이렇게 가는 것을 보며, SiwftUI 최종판은 3D 와 애니매이션이 자연스레 결합된 것이겠구나 라는 생가이 들었다.

NS 이름을 여전히 쓰는 것을 보면, 결국 Objective-C 의 잔재가 남는 다는 거고 3D 영역은 C에서 벗어나기가 상당히

어려운 분야다.


뭐, 앱 연동이 되고 3D 앱이던 게임이던 서버/클라이언트 모델이던 메신저던 webRTC 던...
임베디드 운영체제의 제약 덕에 효율적인 "나눔"이 가능했고 하드웨어가 더 발전하더라도
그 효율성은 그대로 것이 좋다.
쓸대없는 통합보다 카테고리라이즈가 잘 된 앱들이 유기적으로 연결되는 것이 사용성에 더 도움이 된다는 뜻이다.
가령 카카오톡과 가가오 스토리는 앱 자체는 나눠져 있는게 더 편하지 않은가?

내가 생각한 방향성이 틀리지는 않았을테지만 flat UI 도 좀 질려가던 차에 잘되었다는 생각이다.


import Foundation
import UIKit
import _SwiftUIKitOverlayShims


@available(iOS 13.0, *)
open class UIWindowScene : UIScene {

    
    open var screen: UIScreen { get }

    open var interfaceOrientation: UIInterfaceOrientation { get }

    open var coordinateSpace: UICoordinateSpace { get }

    open var traitCollection: UITraitCollection { get }

    
    // Restrictions which the system should use when resizing the scene. This property will be NULL on platforms which don't support scene resize, else a mutable object is returned which the client may customize.
    @available(iOS 13.0, *)
    open var sizeRestrictions: UISceneSizeRestrictions? { get }

    
    // The array of all windows associated with this UIWindowScene
    open var windows: [UIWindow] { get }
}

@available(iOS 13.0, *)
public protocol UIWindowSceneDelegate : UISceneDelegate {

    
    optional var window: UIWindow? { get set }

    
    optional func windowScene(_ windowScene: UIWindowScene, didUpdate previousCoordinateSpace: UICoordinateSpace, interfaceOrientation previousInterfaceOrientation: UIInterfaceOrientation, traitCollection previousTraitCollection: UITraitCollection)

    
    // Called when the user activates your application by selecting a shortcut on the home screen,
    // and the window scene is already connected.
    optional func windowScene(_ windowScene: UIWindowScene, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void)

    
    // Called after the user indicates they want to accept a CloudKit sharing invitation in your application
    // and the window scene is already connected.
    // You should use the CKShareMetadata object's shareURL and containerIdentifier to schedule a CKAcceptSharesOperation, then start using
    // the resulting CKShare and its associated record(s), which will appear in the CKContainer's shared database in a zone matching that of the record's owner.
    optional func windowScene(_ windowScene: UIWindowScene, userDidAcceptCloudKitShareWith cloudKitShareMetadata: CKShareMetadata)
}
extension UISceneSession.Role {

    
    @available(iOS 13.0, *)
    public static let windowApplication: UISceneSession.Role

    
    // A session role which defines an interface for a non-main external display
    @available(iOS 13.0, *)
    public static let windowExternalDisplay: UISceneSession.Role
}
extension UIWindowScene {

    
    @available(iOS 13.0, *)
    public enum DismissalAnimation : Int {

        
        case standard

        case commit

        case decline
    }
}

@available(iOS 13.0, *)
open class UIWindowSceneDestructionRequestOptions : UISceneDestructionRequestOptions {

    open var windowDismissalAnimation: UIWindowScene.DismissalAnimation
}

@available(iOS 13.0, *)
open class UISceneSizeRestrictions : NSObject {

    
    open var minimumSize: CGSize

    open var maximumSize: CGSize
}

이래나 저래나 신규 과제는 iOS 13+ 로 타게팅을 해야 겠네.



!-- 명기(名器)


- 스트라디바리우스, 과르니에리, 아마티, 스타인웨이앤선스 등 음악의 세계에서는 명기(名器)가 있고 이들만 고집하는 아티스트들이 있다.
개발자도 많은 툴들을 이용하는데 왜 멀티플랫폼만 하라고 할까?


!-- 에러 해결 keyword
[sourceString dataUsingEncoding:NSUTF8StringEncoding];




upload(multipartFormData: { (multipartFormData) in
if let i = image, let imageData = i.jpegData(compressionQuality: 0.5), let name = imageName {
multipartFormData.append(imageData,
withName: name,
fileName: "swift_file\(arc4random_uniform(100)).jpeg",
mimeType: "image/jpeg"
)


NSCameraUsageDescription
카메라를 사용합니다.
NSPhotoLibraryUsageDescription
앨범을 사용합니다.

+ NSPhotoLibraryAddUsageDescription

https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW73


!-- 사진 여러장

https://github.com/hyperoslo/Gallery



'Blog History' 카테고리의 다른 글

개 발 일 지 025  (0) 2019.11.20
개 발 일 지 024  (0) 2019.11.18
개 발 일 지 022  (0) 2019.11.17
개 발 일 지 021  (0) 2019.11.15
개 발 일 지 020  (0) 2019.11.13

결론 : 타임스탬프는 64비트로 꼭 찍자.

 

2038 문제(2038년 1월이 되면 시간이 다시 초기화 되는 문제) 때문에

 

https://ko.wikipedia.org/wiki/2038%EB%85%84_%EB%AC%B8%EC%A0%9C

& 나무위키

유닉스 시간에 32비트 정수형을 쓰는 모든 컴퓨터의 시계가 UTC 0 기준으로 2038년 1월 19일 3시 14분 7초[1](대한민국 표준시 UTC+9 기준으로 2038년 1월 19일 12시 14분 7초)가 지나는 순간 음수값이 적용돼 1901년 12월 13일 20시 45분 52초나, 자동으로 오류를 감지하고 초기값인 0, 즉 1970년 1월 1일 0시 0분 0초로 돌아가게 되는 버그를 칭한다. 영어론 Year 2038 problem, Unix Millennium bug 등으로 표기한다.

원인은 프로그래머라면 알아야만 하는 오버플로 현상 때문이다.


안드로이드 스마트폰을 가지고 있다면 이 버그를 미리 체험해볼 수 있다. 단, 안드로이드 7.1.2 이하의 기기에서 재현이 되며 안드로이드 8.0 이후부터는 버그 재현이 불가능하다. 만약 안드로이드 7.1.2 버전 이하가 탑재된 기기의 경우 구글 캘린더로 일정을 2038년 1월 19일에 추가해 주면 추가된 날짜가 1970년으로 변한다.

단, 요즘은 7.1 이하의 일부 기기에서도 정상적으로 날짜 추가가 되는걸로 보아, 안드로이드 운영체제 자체의 문제가 아닌 구글 캘린더 자체의 문제로 판단되며, 현재는 구글이 캘린더 앱 자체를 수정한 것으로 보인다. 화웨이와 샤오미의 캘린더는 일정을 2037년 12월 31일까지만 설정할 수 있으며, Samsung Experience 8.1의 캘린더와 LG의 캘린더는 2036년 12월 31일까지 설정이 가능하다.

 

64비트로 

print(UInt64.max)

 

18446744073709551615

int64는

9223372036854775807

 

int64를 365일로 단순 계산하니

 

 

그래프를 그리려고 하니.

Double이 나은 듯.

3.4028235e+38

 

print(Double(UInt64.max))

1.8446744073709552e+19

19자리 보다는 38자리가 낫겠지.

 

64비트에서는 CGFloat과 Double 은 같으니 또 좋고.

'Blog History' 카테고리의 다른 글

개 발 일 지 024  (0) 2019.11.18
개 발 일 지 023  (0) 2019.11.18
개 발 일 지 021  (0) 2019.11.15
개 발 일 지 020  (0) 2019.11.13
개 발 일 지 018  (0) 2019.11.12

!-- 넋두리

아직 주변에 많다.
전설적인 맥 프로그래머 스콧 내스터는 그의 저서에 절차적인 프로그래밍은 함수를 기반으로 하고 데이터는 그 함수 주위를 맴돈다고 했다. 객체 지향에서는 그 반대로 데이터가 중심에 있는 것으로 보고 함수가 데이터 주위를 돈다고 했다.
객체 지향을 제대로 이해하지 못하고 그 다음 단계부터 공부하는 사람들이 잘못 설명하는 이유.
Objective-C도 하지 않고 Swift 나왔으니 달라 붙어 열심히 공부하고 헛소리 하는 강사가 있는 이유.(겸손하기라도 하던가)
어셈블리, 하드웨어 동작 원리도 모르고 그 위에 도는 소프트웨어 이론만 역설하다가 망한 엔지니어가 많은 이유.
OS 의 스케쥴러와 큐를 이해하면 react 를 이해할 수 있고 프레임웍 없이 스스로 구현할 수 있는데 무조건 최신 기술이라며
내부 동작 원리 모르고 울부짖는 개발자...

!-- SWIFT UI

스냅킷 관련해서 브런치에 연제 한 적이 있는데,
private let dateFormatter: DateFormatter = {
    let dateFormatter = DateFormatter()
    dateFormatter.dateStyle = .medium
    dateFormatter.timeStyle = .medium
    return dateFormatter
}()

자동 생성된 이 코드를 보면 이제 iOS에 스냅킷이 들어 간 것 같다.


!-- SQLite3 version은 스위프트에 내장됨.

Latest Release
Version 3.30.1 (2019-10-11). Download Prior Releases
현재 최신 


!-- 한 번 더 읽고 싶은 아티클 
https://medium.com/hashed-kr/homomorphicencryption-blockchain-d783becbaabb
https://www.zdnet.co.kr/view/?no=20181119175602
https://www.zdnet.co.kr/view/?no=20181121114539
http://weekly.chosun.com/client/news/viw.asp?nNewsNumb=002501100014&ctcd=C05
http://imdarc.math.snu.ac.kr/board_apmJ27/3058
http://www.math.snu.ac.kr/~jhcheon/xe2/index.php?mid=page_HsUX68
http://www.math.snu.ac.kr/~jhcheon/xe2/index.php?mid=page_fVCc23
https://blog.naver.com/PostView.nhn?blogId=n_privacy&logNo=221460985974&parentCategoryNo=&categoryNo=45&viewDate=&isShowPopularPosts=true&from=search
https://www.noblesse.com/home/news/magazine/detail.php?no=7520
https://www.boannews.com/media/view.asp?idx=79884&kind=&sub_kind=
http://wiki.hash.kr/index.php/%EB%8F%99%ED%98%95%EC%95%94%ED%98%B8
https://blog.lgcns.com/2045

!-- error: UIStackView before iOS 9.0 [6]

레거시 코드 싫다... 코드 뿐 아니라 다른 사람에게 중요한데 나에게 실은 것도 세상에 많다.


EAP-PEAP   MSCHAPv2


UIImagePickerControllerSourceTypePhotoLibrary
UIImagePickerControllerSourceTypeCamera

!-- swiftUI도 보는 중(IB에서 스냅킷에서 더 진화해서 좋긴 한데 ... 이제 안 바뀌겠지? 게임도 만들어서 짜증인데
행여나 바뀌어도 걍 레거시 코더가 되어야겠다)

This app is not allowed to query for scheme


//
//  ContentView.swift
//
//  Created by Junho HA on 2019/11/15.
//  Copyright © 2019 hajunho.com. All rights reserved.
//

import SwiftUI

struct ContentView: View {
    
    var body: some View {
        Button(action: {
            btnClick()
        }) {
             Text("Open anotherApp")
             }
    }
}

func btnClick() {
    print("onClickBTN")
    guard let s = URL(string : "dple://") else {
        return }
    
    if UIApplication.shared.canOpenURL(s) {
        UIApplication.shared.open(s, options: [:]) { (b ) in
            print(b)
        }
    }
    
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}


LSApplicationQueriesSchemes

dple


생각보다 SwiftUI 괜찮다.

그리고 아이폰 앱에서 다른 앱 실행 코드를 넣어서 테스트 해 보니 잘 되네.


'Blog History' 카테고리의 다른 글

개 발 일 지 023  (0) 2019.11.18
개 발 일 지 022  (0) 2019.11.17
개 발 일 지 020  (0) 2019.11.13
개 발 일 지 018  (0) 2019.11.12
개 발 일 지 017  (0) 2019.11.12

root@ubuntu:~/Downloads/HEAAN-master/HEAAN/src# ls *.cpp
BootContext.cpp     Key.cpp             SchemeAlgo.cpp          StringUtils.cpp
Ciphertext.cpp      Plaintext.cpp       Scheme.cpp              TestScheme.cpp
EvaluatorUtils.cpp  Ring.cpp            SecretKey.cpp           TimeUtils.cpp
HEAAN.cpp           RingMultiplier.cpp  SerializationUtils.cpp
root@ubuntu:~/Downloads/HEAAN-master/HEAAN/src# ls *.cpp | wc -l
15

 

RingMultiplier 빈번히 호출

 

StringUtils

TestScheme

Timeutils

 

 

'Blog History' 카테고리의 다른 글

개 발 일 지 022  (0) 2019.11.17
개 발 일 지 021  (0) 2019.11.15
개 발 일 지 018  (0) 2019.11.12
개 발 일 지 017  (0) 2019.11.12
개 발 일 지 016  (0) 2019.11.11

eddie@ubuntu:~$ sudo -s
[sudo] password for eddie: 
root@ubuntu:~# apt install libgmp3-dev

 

Fetched 11.0 kB in 1min 14s (148 B/s)  
E: Failed to fetch http://us.archive.ubuntu.com/ubuntu/pool/main/g/gmp/libgmp-dev_6.1.2+dfsg-2_amd64.deb  Connection timed out [IP: 91.189.91.24 80]
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

 

그냥 재 실행

 

Preparing to unpack .../libgmp3-dev_2%3a6.1.2+dfsg-2_amd64.deb ...
Unpacking libgmp3-dev (2:6.1.2+dfsg-2) ...
Processing triggers for libc-bin (2.27-3ubuntu1) ...
Setting up libgmpxx4ldbl:amd64 (2:6.1.2+dfsg-2) ...
Setting up libgmp-dev:amd64 (2:6.1.2+dfsg-2) ...
Setting up libgmp3-dev (2:6.1.2+dfsg-2) ...
Processing triggers for libc-bin (2.27-3ubuntu1) ...
root@ubuntu:~# 

 

휴... 우분투 재단에 기부 좀 해야 할 듯...

 

usage: ./configure [ variable=value ]... This configure script generates the file 'makefile' and the file '../include/NTL/config.h', based upon the values assigned to the variables on the command line. ########### Here are the most important variables, and their default values. CXX=g++ # The C++ compiler CXXFLAGS=-g -O2 # C++ complilation flags NATIVE=on # compiles code targeted to current hardware TUNE=generic (or x86)# performance-tuning switch DEF_PREFIX=/usr/local# Default software directory PREFIX=$(DEF_PREFIX) # Directory in which to install NTL library components SHARED=off # Generate a shared library (as well as static) NTL_THREADS=on # compile in thread-safe mode NTL_THREAD_BOOST=on # compile with thread boosting enabled NTL_EXCEPTIONS=off # compile in exception-safe mode NTL_GMP_LIP=on # Switch to enable the use of GMP as primary # long integer package GMP_PREFIX=$(DEF_PREFIX) # Directory in which GMP components are installed NTL_GF2X_LIB=off # Switch to enable the use of the gf2x package # for faster arithmetic over GF(2)[X] GF2X_PREFIX=$(DEF_PREFIX) # Directory in which gf2x components are installed NTL_STD_CXX11=on # Build assuming C++11 features NTL_SAFE_VECTORS=on # build in "safe vector" mode NTL_ENABLE_AVX_FFT=off # implement the small-prime FFT using AVX # instructions...this is experimental at # moment, and may lead to worse performance NTL_AVOID_AVX512=off # avoid using 512-bit AVX registers ########## Here are more detailed description of these variables. ########## Basic compilation variables: CXX=g++ # A C++ compiler, e.g., g++, CC, xlC CXXFLAGS=-g -O2 # Flags for the C++ compiler. # It is highly recommend to avoid things like -O3 and -Ofast. # These may yield incorrect code. NATIVE=on # Flag to target code to current hardware. Setting this flag will pass # -march=native through to the compiler via CXXAUTOFLAGS (if possible). This # is the easiest way to exploit the hardware capabilities of your machine to # their fullest potential. Note that if CXXFLAGS contains an '-march=XXX' # option, then NATIVE will be turned off. TUNE=generic (or x86) # Switch to determine how various performance options get set # auto make runs a performance-tuning wizard # generic should be OK for most platforms # x86 should be well suited for most x86 platforms # More choices may be added in the future. # The default is 'x86' if the configuration script detects that it # is running on an x86 machine; otherwise the default is 'generic'. ########## Installation path: DEF_PREFIX=/usr/local # Default software directory PREFIX=$(DEF_PREFIX) # Set this to the directory in which you want NTL components to be # installed. When 'make install' is executed, the header # files are copied into $(PREFIX)/include/NTL, the library itself is # copied to $(PREFIX)/lib/libntl.a, and the documentation files # are copied into $(PREFIX)/share/doc/NTL. # Unless you have root permissions when running 'make install', # you will have to override the default PREFIX value with the # name of your own local directory. # If you want finer-grained control over where the different # library components are installed, set the variables # INCLUDEDIR, LIBDIR, and DOCDIR (see below). ########## Shared library switch: SHARED=off # Set this to 'on' if you want to generate a shared library, in addition to a # static library. Shared libraries have many advantages, but unfortunately, # their use is rather less portable than that of good, old-fashioned static # libraries. If you set SHARED=on, then the makefile will use a libtool # script. By default, the libtool script used is freshly built when you run # configure. You can use a pre-built libtool command by setting the # configuration variable LIBTOOL. Note that if SHARED=on, then in addition to # using the libtool program, the makefile relies on features specific to GNU # make. ########## thread safety NTL_THREADS=on # Set to 'on' if you want to compile NTL in thread-safe mode. This requires # several C++11 features, including atomic types, mutexes, and thread_local # storage. Your compiler may not yet support these features. Setting this # flag will automatically set the NTL_STD_CXX11 flag (if neither NTL_STD_CXX11 # or NTL_STD_CXX14 is already set). It will also pass -pthread throught to the # compiler via CXXAUTOFLAGS (if possible). # Turning this flag off will also turn off the NTL_THREAD_BOOST flag. ########## thread boosting NTL_THREAD_BOOST=on # Set to 'on' if you want to compile NTL so that is does certain internal # computations using multiple threads. # This feature is a work in progress. # As time goes on, more NTL algorithms are thread boosted. # See BasicThreadPool documentation file for more details. ########## exceptions NTL_EXCEPTIONS=off # Set to 'on' if you want to compile NTL with exceptions enabled. This # requires several C++11 features, including lambdas and the new rules for # exception specifications. Your compiler may not yet support these feautures. # Setting this flag will automatically set the NTL_STD_CXX11 flag (if neither # NTL_STD_CXX11 or NTL_STD_CXX14 is already set). # With exceptions disabled, any error conditions detected by NTL (including # memory allocation errors) will result in an error message and a call to # abort. Also, if compiling in C++11 mode (or later, see NTL_STD_CXX11), with # exceptions disabled, certain move constructors and move assignment operators # will be declared "noexcept". This can lead to greater efficiency (for # example, std::vector's take advantage of this to avoid call to copy # contructors). # With exceptions enabled, most error conditions detected by NTL will result in # an exception being thrown. NTL will also be compiled in a "thread safe" mode # that prevents memory leaks (and other problems). In addition, some move # constructors and move assignment operators may not be declared "noexcept". ########## GMP variables: NTL_GMP_LIP=on # Set to 'off' if you don't want to use GMP, the GNU Multi-Precision package, # as the primary long integer package. # This will lead to significantly slower code, and is not # recommended. GMP_PREFIX=$(DEF_PREFIX) # If GMP was installed in a standard system directory, e.g., /usr/local, # then do not set this variable. # Otherwise, if you want to use GMP and GMP was installed in # a directory , then set GMP_PREFIX=. # This works if the directory /include contains gmp.h # and /lib contains libgmp.a. # For finer-grained control, set the variables GMP_INCDIR and GMP_LIBDIR # instead (see below). ########## GF2X variables: NTL_GF2X_LIB=off # Set to 'on' if you want to use the gf2x library for faster # arithmetic over GF(2)[X] (the NTL class GF2X). # If you set this flag, please note the following. # If you have installed gf2x in a standard "system" location, this is # all you have to do. Otherwise, if gf2x is built, but not installed # in a standard place, you have to set the variable GF2X_PREFIX. GF2X_PREFIX=$(DEF_PREFIX) # If gf2x was installed in a standard system directory, e.g., /usr/local, # then do not set this variable. # Otherwise, if you want to use gf2x and gf2x was installed in # a directory , then set GF2X_PREFIX=. # This works if the directory /include contains gf2x.h # and /lib contains libgf2x.a. # For finer-grained control, set the variables GF2X_INCDIR and GF2X_LIBDIR # instead (see below). ########### Language stadards NTL_STD_CXX11=on # Build assuming C++11 features NTL_STD_CXX14=off # Build assuming C++14 features # Setting one of these may also result in passing pass either -std=c++11 or # -std=c++14 through to the compiler via CXXAUTOFLAGS (if it is necessary and # possible). ############ Safe vector mode NTL_SAFE_VECTORS=on # Build in "safe vector mode" # Build NTL in "safe vector mode", which relaxes the "relocatability" # requirement for NTL vector types. I expect that at some point in the next # couple of years, this will be "on" by default. Setting this flag will # automatically set the NTL_STD_CXX11 flag (if neither NTL_STD_CXX11 or # NTL_STD_CXX14 is already set). See vector documentation file for more # details. ############ AVX FFT NTL_ENABLE_AVX_FFT=off # implement the small-prime FFT using AVX # instructions...this is experimental at # moment, and may lead to worse performance On machines with AVX2/FMA or AVX512, this will implement the small-prime FFT using AVX code. This is still quite experimental, and may lead to worse performance. While the FFT itself can run 2-3 times faster, this comes at the cost of (1) restriction to 50-bit primes (so NTL_SP_NBITS will be set to 50 instead of 60), and (2) the CPU speed may be throttled, slowing down other operations. So far, it seems that the only operations that are faster are arithmetic operations in zz_pX, and only for certain choices of modulus. Arithmetic operations in ZZ_pX, with large modulus, can run slower with AVX than without. ########### Avoid 512-bit AVX registers NTL_AVOID_AVX512=off # avoid using 512-bit AVX registers Even if available, this will avoid the use of 512-bit AVX registers. This affects both Mat operations, as well as the AVX-based FFT (see above). ########### Examples: # If you are happy with all the default values: ./configure # If your C++ compiler is called icpc: ./configure CXX=icpc # If GMP was installed in a non-standard directory, say, $HOME/sw: ./configure GMP_PREFIX=$HOME/sw # If you want to use the options -g and -O for compiling C++, # just execute ./configure "CXXFLAGS=-g -O" # Note the use of quotes to keep the argument in one piece. # If you want to use the gf2x library: ./configure NTL_GF2X_LIB=on ########### ########### A little magic ########### CXXAUTOFLAGS= # This is a variable that is automagically set by the configuration script. # These are C++ compiler flags that are selected depending on the choice of # other configuration options, as well as information gleaned by the # configuration script about the compiler. To do this, the configuration # script attempts to figure out the type of compiler and the default language # standard supported. The types of compiler currently recognized are gcc, # clang, and icc. For these compilers, the automagic should definitely work. # For others, your mileage may vary. The configuration script always prints # out the value it chooses. Currently, the following flags may get passed # through CXXAUTOFLAGS: # # -std=c++11 # -std=c++14 if requested explicitly via NTL_STD_CXX11=on or # NTL_STD_CXX14=on, or implicitly via a request # for a feature that requires C++11 # # -pthread if thread-safety is requested via NTL_THREADS=on # or NTL_THREAD_BOOST=on # # -fp-model precise only for the Intel icc compiler (to prevent # non-value-preserving floating point optimizations) # # If you explicitly set the value of CXXAUTOFLAGS when invoking the # configuration script, then it will not change that value. NOCONTRACT= # Like the CXXAUTOFLAGS variable, this is set automagically by the # configuration script, unless you explicitly provide a value. # It is only used in compiling the source file that implements # the quad_float class. For that file only, NTL requires not only # that the compiler does not perform any non-value-preserving # floating point optimizations, but that is also does not perform # any "contractions" (i.e., emit FMA (fused multiply add) instructions. # Currently, it may be set as follows: # # -ffp-contract=off for gcc (and possibly clang) compilers # # -mno-fused-madd for old gcc compilers that don't support # -ffp-contract=off # -DFP_CONTRACT_OFF for the Intel icc compiler # # The configuation script will make every attempt to ensure that this really # does disable contractions. If it doesn't work, a fallback strategy is used # that should still work (but with a performance penalty). MAKE_PROG=make # To set CXXAUTOFLAGS and NOCONTRACT, the configure script actually needs to # run make. If you wish to use a non-standard make program for this purpose, # set this variable to point to that program. ########### Here is a complete list of the remaining variables, ########### with their default values. These variables are pretty ########### esoteric, and you will probably never change their ########### default values. AR=ar ARFLAGS=ruv RANLIB=ranlib LDFLAGS= LDLIBS=-lm CPPFLAGS= LIBTOOL=undefined LIBTOOL_LINK_FLAGS= LIBDIR=$(PREFIX)/lib INCLUDEDIR=$(PREFIX)/include DOCDIR=$(PREFIX)/share/doc NTL_TLS_HACK=on NTL_DISABLE_MOVE_ASSIGN=on NTL_DISABLE_MOVE=off NTL_LEGACY_NO_NAMESPACE=off NTL_LEGACY_INPUT_ERROR=off NTL_LEGACY_SP_MULMOD=off NTL_UNSIGNED_LONG_LONG_TYPE=undefined NTL_CLEAN_INT=off NTL_CLEAN_PTR=on NTL_RANGE_CHECK=off NTL_X86_FIX=off NTL_NO_X86_FIX=off NTL_NO_INIT_TRANS=on NTL_DISABLE_LONGDOUBLE=off NTL_DISABLE_LONGLONG=off NTL_DISABLE_LL_ASM=off NTL_MAXIMIZE_SP_NBITS=off NTL_SPMM_ULL=off NTL_FFT_BIGTAB=off NTL_FFT_LAZYMUL=off NTL_TBL_REM=off NTL_AVOID_BRANCHING=off NTL_GF2X_NOINLINE=off NTL_GF2X_ALTCODE=off NTL_GF2X_ALTCODE1=off GMP_INCDIR=$(GMP_PREFIX)/include GMP_LIBDIR=$(GMP_PREFIX)/lib GF2X_INCDIR=$(GF2X_PREFIX)/include GF2X_LIBDIR=$(GF2X_PREFIX)/lib ########### Here is a more detailed description of these variables. ########### Further compilation variables: AR=ar # command to make a library ARFLAGS=ruv # arguments for AR RANLIB=ranlib # set to echo if you want to disable it completely LDFLAGS= # arguments for linker for C++ programs LDLIBS=-lm # libraries for linking C++ programs CPPFLAGS= # arguments for the C preprocessor LIBTOOL=undefined # the libtool command -- only needed if SHARED=on # if left undefined, a fresh libtool script will be built LIBTOOL_LINK_FLAGS= # flags to add to command line when building a shared library # mainly used to pass the argument "-no-undefined" on cygwin ########### Details of the compilation process (when SHARED=off) # When a C++ file foo.c is compiled: $(CXX) -I../include $(CPPFLAGS) $(CXXFLAGS) -c foo.c # When a C++ file foo.c is compiled and linked: $(CXX) -I../include $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) \ -o foo foo.c $(LDLIBS) # When the library ntl.a is built $(AR) $(ARFLAGS) ntl.a [ object files ]... $(RANLIB) ntl.a # If the ranlib command does not exist, everything will still function OK. ########### Further installation variables: LIBDIR=$(PREFIX)/lib INCLUDEDIR=$(PREFIX)/include DOCDIR=$(PREFIX)/share/doc # Where to install NTL. # Execution of 'make install' copies header files into $(INCLUDEDIR)/NTL, # copies the library itself to $(LIBDIR)/libntl.a, and copies the # documentation files into $(DOCDIR)/NTL. ########## TLS hack NTL_TLS_HACK=on # when building NTL with NTL_THREADS=on, if the compiler is gcc-compatible, a # "TLS hack" may be used to workaround the fact that many compilers do not # (correctly) implement C++11's thread_local feature. The workaround is to use # gcc's more limited __thread feature, and to emulate thread_local semantics # using pthread routines. # # The configuration script will first check if threads and TLS work with the # hack, and if not, will try setting NTL_TLS_HACK=off. You can also turn off # the hack by setting NTL_TLS_HACK=off. ########## Disabling move semantics NTL_DISABLE_MOVE_ASSIGN=on NTL_DISABLE_MOVE=off # The first flag will disable the generation of move assignment operators for # Vec, Mat, vec_GF2, and GF2X. By implication, move assignment operators # will be disabled as well for many other types (like polynomials). The second # flag will disable move constuctors and move assignment operators for all NTL # types. # These flags are only relevant in C++11 mode. They are meant to deal with # backward compatibility issues for legacy NTL clients that may not deal well # with automatically generated move operations. It turns out that move # semantics can quietly break programs. See # http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3153.htm # However, the default now is just to disable move assignment operators for # those classes where it seems likeliest to cause a problem. This default will # likely be changed in the future, so that no move operations are disabled. ########## Legacy switches NTL_LEGACY_NO_NAMESPACE=off # put NTL components in the global namespace NTL_LEGACY_INPUT_ERROR=off # abort on input errors, instead of just setting the # "fail bit" of the istream object NTL_LEGACY_SP_MULMOD=off # use pre-9.0 interfaces for single-precision MulMod routines. # See discussion in ZZ.txt for details. ########### Basic Configuration Options: NTL_UNSIGNED_LONG_LONG_TYPE=undefined # Name of double-word unsigned integer type. # This is a non-standard type, and is called 'long long' by many # compilers. MS C++ calls it 'unsigned __int64'. # # Note that the new C99 standard defines the type 'unsigned long long' # to be at least 64-bits wide. On 32-bit machines, this is just right. # Although not officially part of the C++ standard (which predates C99), # it is widely supported by C++ compilers, and is likely to be added # to the C++ standard. # # Unfortunately, 64-bit machines usually define 'unsigned long long' # to also be 64-bits wide, which is kind of useless. # However, GCC provides a type __uint128_t which does the job. # # If left undefined, NTL will use some "ifdef magic" to find # the type most suitable for your machine (based on compiler and # word size). NTL_CLEAN_INT=off # Setting this to 'on' disables the use of some non-standard # integer arithmetic which would yield slightly better performance. NTL_CLEAN_PTR=on # Setting this to 'on' disables the use of some non-standard # pointer arithmetic which would yield slightly better performance. # The 'off' setting really just invites undefined behavior without # any measurable performance benefit. NTL_RANGE_CHECK=off # Setting this to 'on' will generate vector subscript range-check code. # Useful for debugging, but it slows things down of course. NTL_X86_FIX=off # Set to 'on' to force the "x86 floating point fix", # overriding the default behavior. # By default, NTL will apply the "fix" if it looks like it is # necessary, and if it knows how to fix it. # The problem addressed here is that x86 processors sometimes # run in a mode where FP registers have more precision than doubles. # This will cause code in quad_float.c some trouble. # NTL can normally automatically detect the problem, and fix it, # so you shouldn't need to worry about this or the next flag. NTL_NO_X86_FIX=off # Set to 'on' to forces no "x86 floating point fix", # overriding the default behavior. NTL_NO_INIT_TRANS=on # When 'off', NTL uses a special code sequence to avoid # copying large objects in return statements. However, if your # compiler optimizes away the return of a *named* local object, # this is not necessary, and setting this flag to 'on' will result # in *slightly* more compact and efficient code. The C++ # standard explicitly allows compilers to perform this optimization, # and with time, more compilers actually do this. # Traditionally, however, most will only avoid copying *temporary* # objects in return statements, and NTL's default code sequence # exploits this fact. NTL_DISABLE_LONGDOUBLE=off # Explicitly disables use of long double arithmetic NTL_DISABLE_LONGLONG=off # Explicitly disables use of long long arithmetic NTL_DISABLE_LL_ASM=off # Explicitly disables use of inline asm as replacement for # long long arithmetic NTL_MAXIMIZE_SP_NBITS=on # Allows for 62-bit single-precision moduli on 64-bit platforms. # By default, such moduli are restricted to 60 bits, which # usually gives *slightly* better performance across a range of # of parameters. ########## Performance Options: NTL_SPMM_ULL=off # Implement the MulModPrecon code using "unsigned long long" # (or specify NTL_UNSIGNED_LONG_LONG_TYPE to override the default). NTL_FFT_BIGTAB=off # Precomputed tables are used to store all the roots of unity # used in FFT computations. NTL_FFT_LAZYMUL=off # When set, a "lazy multiplication" strategy due to David Harvey: # see his paper "FASTER ARITHMETIC FOR NUMBER-THEORETIC TRANSFORMS". NTL_TBL_REM=off # With this flag, some divisions are avoided in the # ZZ_pX multiplication routines. NTL_AVOID_BRANCHING=off # With this option, branches are replaced at several # key points with equivalent code using shifts and masks. # Recommended for use with RISC architectures, especially # ones with deep pipelines and high branch penalities. # This flag is becoming less helpful as newer machines # have much smaller branch penalties, but still may be worth a try. NTL_GF2X_NOINLINE=off # By default, the low-level GF2X multiplication routine in inlined. # This can potentially lead to some trouble on some platforms, # and you can override the default by setting this flag. NTL_GF2X_ALTCODE=off # With this option, the default strategy for implmenting low-level # GF2X multiplication is replaced with an alternative strategy. # This alternative strategy seems to work better on RISC machines # with deep pipelines and high branch penalties (like a powerpc), # but does no better (or even worse) on x86s. NTL_GF2X_ALTCODE1=off # Yet another alternative implementation for GF2X multiplication. ########## More GMP Options: GMP_INCDIR=$(GMP_PREFIX)/include # directory containing gmp.h GMP_LIBDIR=$(GMP_PREFIX)/lib # directory containing libgmp.a ####### More gf2x options: GF2X_INCDIR=$(GF2X_PREFIX)/include # directory containing gf2x.h GF2X_LIBDIR=$(GF2X_PREFIX)/lib # directory containing libgf2x.a

 

 

./configure NTL_GMP_LIP=on

 

make check

 

validating InvMod...
validating RatRecon...

---------------------------------
making SSMulTest
make[1]: Entering directory '/home/eddie/Downloads/ntl-11.3.2/src'
g++ -I../include -I.  -g -O2 -pthread -march=native  -o SSMulTest SSMulTest.cpp ntl.a  -lgmp    -lm #LSTAT
make[1]: Leaving directory '/home/eddie/Downloads/ntl-11.3.2/src'
running SSMulTest
.......................

 

make install

 

root@ubuntu:~/Downloads/ntl-11.3.2/src# make install
mkdir -p -m 755 /usr/local/include
rm -rf /usr/local/include/NTL
mkdir -m 755 /usr/local/include/NTL
cp -p ../include/NTL/*.h /usr/local/include/NTL
chmod -R a+r /usr/local/include/NTL
mkdir -p -m 755 /usr/local/share/doc
rm -rf /usr/local/share/doc/NTL
mkdir -m 755 /usr/local/share/doc/NTL
cp -p ../doc/*.txt /usr/local/share/doc/NTL
cp -p ../doc/*.html /usr/local/share/doc/NTL
cp -p ../doc/*.gif /usr/local/share/doc/NTL
chmod -R a+r /usr/local/share/doc/NTL
mkdir -p -m 755 /usr/local/lib
cp -p ntl.a /usr/local/lib/libntl.a #LSTAT
chmod a+r /usr/local/lib/libntl.a #LSTAT

 

https://github.com/snucrypto/HEAAN

 

snucrypto/HEAAN

Contribute to snucrypto/HEAAN development by creating an account on GitHub.

github.com

root@ubuntu:~/Downloads/HEAAN-master/HEAAN/lib# make all
Building file: ../src/BootContext.cpp
Invoking: GCC C++ Compiler
g++ -I/usr/local/include -O3 -c -std=c++11 -pthread -MMD -MP -MF"src/BootContext.d" -MT"src/BootContext.o" -o "src/BootContext.o" "../src/BootContext.cpp"
Finished building: ../src/BootContext.cpp
 

.

.

.

 

Building target: libHEAAN.a
Invoking: GCC Archiver
ar -r  "libHEAAN.a"  ./src/BootContext.o ./src/Ciphertext.o ./src/EvaluatorUtils.o ./src/Key.o ./src/Plaintext.o ./src/Ring.o ./src/RingMultiplier.o ./src/Scheme.o ./src/SchemeAlgo.o ./src/SecretKey.o ./src/SerializationUtils.o ./src/StringUtils.o ./src/TestScheme.o ./src/TimeUtils.o   
ar: creating libHEAAN.a
Finished building target: libHEAAN.a

.

.

.

 

 

root@ubuntu:~/Downloads/HEAAN-master/HEAAN/run# ./TestHEAAN 
terminate called after throwing an instance of 'std::logic_error'
  what():  basic_string::_M_construct null not valid
Aborted (core dumped)
root@ubuntu:~/Downloads/HEAAN-master/HEAAN/run# vim test.cpp
root@ubuntu:~/Downloads/HEAAN-master/HEAAN/run# ./TestHEAAN Bootstrapping
!!! START TEST BOOTSTRAP !!!
------------------
Start Key generating
Key generated time = 18002.8 ms
------------------
cipher logq before: 40
------------------
Start SubSum
SubSum time = 7453.46 ms
------------------
------------------
Start CoeffToSlot
CoeffToSlot time = 6446.21 ms
------------------
------------------
Start EvalExp
EvalExp time = 13238.2 ms
------------------
------------------
Start SlotToCoeff
SlotToCoeff time = 2407 ms
------------------
cipher logq after: 560
---------------------
mboot: 0 :(0.866957,0.623874)
dboot: 0 :(0.866951,0.623874)
eboot: 0 :(5.4448e-06,-1.48078e-07)
---------------------
---------------------
mboot: 1 :(0.956551,0.868504)
dboot: 1 :(0.956547,0.868509)
eboot: 1 :(4.24834e-06,-4.29542e-06)
---------------------
---------------------
mboot: 2 :(0.0939376,0.165927)
dboot: 2 :(0.0939399,0.165925)
eboot: 2 :(-2.29282e-06,1.67007e-06)
---------------------
---------------------
mboot: 3 :(0.0146836,0.397674)
dboot: 3 :(0.0146788,0.397675)
eboot: 3 :(4.79396e-06,-1.09198e-06)
---------------------
---------------------
mboot: 4 :(0.853298,0.500119)
dboot: 4 :(0.853297,0.500117)
eboot: 4 :(1.58157e-06,2.22571e-06)
---------------------
---------------------
mboot: 5 :(0.367284,0.152005)
dboot: 5 :(0.367281,0.152003)
eboot: 5 :(3.21802e-06,2.44777e-06)
---------------------
---------------------
mboot: 6 :(0.021143,0.946628)
dboot: 6 :(0.0211393,0.946624)
eboot: 6 :(3.76305e-06,3.57804e-06)
---------------------
---------------------
mboot: 7 :(0.500303,0.845017)
dboot: 7 :(0.500305,0.845014)
eboot: 7 :(-2.52736e-06,2.22791e-06)
---------------------
!!! END TEST BOOTSRTAP !!!
root@ubuntu:~/Downloads/HEAAN-master/HEAAN/run# 

 

!-- 0

제목 [Retrica] 프랑스어 CS 대응
회사명 Retrica, Inc.
회사소개 Retrica is a live-filter camera app with over 350M global downloads
(Retrica는 전세계 3억5천만이상 다운로드된 필터카메라 앱입니다.)
회사 홈페이지 http://www.retrica.co
업무 내용 - Customer Service for French. (프랑스어 유저의 CS 대응)
- QA for the language translation in French / (프랑스어 번역 검수)
업무 기간 3개월

12개월 (상황에 따라 변동 가능); 자유로운 업무시간
보수 인터뷰 후 업무시간과 맞춰서 정확한 금액 책정
지원자격 - Native in French ( 프랑스어가 모국어인 사람)
- Communicable in Korean or English (한글 혹은 영어로 소통 가능한 사람)
- Love taking Photos incl. selife (사진 혹은 셀카 찍는 것을 좋아하는 사람)
- knows and loves Retrica (Retrica 앱을 알고, 좋아하는 사람)
업무장소 삼성역
모집기간 2Q

3Q 2017
제출서류/접수방법 hello@retrica.co 으로 이력서 전송
담당자 • 담당자명 Sophie (최수빈)
• 이메일 sophie@retrica.co
• 연락처 010-8968-0855

관심있어 캡쳐

!-- 1

학생들에게 쓴 돈 계산 2019년도 정산(10월 말)

가방, 신발, 지갑,
5만원 x 6 = 30만
5만원 x 6 = 30만
2만원 x 10 = 20만
피자20, 치킨 18, 횟집 44, 80, 40, 80, 60, 2, 30, 60, 9, 11

!-- 2

한양대와 암호 프로젝트 진행...

C:\Users\하준호>cl a.cpp
Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23918 for x86
Copyright (C) Microsoft Corporation. All rights reserved.

a.cpp
F:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xlocale(341): warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc
F:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\exception(359): warning C4577: 'noexcept' used with no exception handling mode specified; termination on exception is not guaranteed. Specify /EHsc
Microsoft (R) Incremental Linker Version 14.00.23918.0
Copyright (C) Microsoft Corporation. All rights reserved.

/out:a.exe
a.obj
LINK : fatal error LNK1104: cannot open file 'libcpmt.lib'

set LIB=F:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib
set LIB=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib\x64;%LIB%

Set LIB=C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10586.0\ucrt\x86;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib\x86;F:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10586.0\um\x86

분석하고 있는 헤더 NTL +

return 0;

 algorithm



 iostream



 iterator



 numeric



 sstream



 fstream



 cassert



 climits



 cstdlib



 cstring



 string



 cstdio



 vector



 cmath



 queue



 deque



 stack



 list



 map



 set



#define foreach(x, v) for (typeof (v).begin() x=(v).begin(); x !=(v).end(); ++x)



#define For(i, a, b) for (int i=(a); i(b); ++i)



#define D(x) cout  #x " is "  x  endl



int main(){



return 0;
i

'Blog History' 카테고리의 다른 글

개 발 일 지 021  (0) 2019.11.15
개 발 일 지 020  (0) 2019.11.13
개 발 일 지 017  (0) 2019.11.12
개 발 일 지 016  (0) 2019.11.11
개 발 일 지 014  (0) 2019.10.15

잠시 밝혀 두지만 내 블로그는 실시간으로 올리는 것이 아니다.

쌓아 둔 글을 시간 날 때 한꺼번에 올리는 식이다.

!--0 기술 면접이 있었다. 면접관 알바가 잦다.

1. 유치원생과 대학생 설명. 설명에서 가장 먼저 고려되어야할 사항은 용어의 명확화 입니다. 내가 쓰는 단어와 상대방이 쓰는 단어의 뜻, 그리고 그 단어에 대하여 서로가 이해하는 부분을 완전히 일치시키지 않으면 이해가 어렵습니다. 이것을 꿰뚫은 답안이 2건 있었습니다. 대학생은 인터넷에서 편히 찾을 수 있는 용어들로 일반적인 설명을 하면 되겠습니다.

2||3. class, object 설명. 메모리에 대한 말이 나와야 합니다. new에 대한 설명이 나오면 정답입니다. 더 나아가 static 키워드까지 나왔으면 가점 입니다.

4. 상속 : 공통적인 부분을 추상화하여 코드양을 줄이면 됩니다. 예제로 든 객체 타입과 추상화 할 때 공통점을 뽑아내는 부분들이 채점 포인트 입니다.

5. 다형성 : 객체 배열, C와 연관 설명(void 포인터), Object 클래스 중 소스에 하나라도 들어 있거나 설명이 있으면 만점 입니다.

6. 인터넷 검색 유도를 위해 만든 설문 입니다. 정답은 모든 것은 API로 설명이 됩니다. 나와 있지 않지만 Instruction Set도 정답입니다. http://www.intel.co.kr/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-2a-manual.pdf

7. 이름을 쓰는 것은 사실 가장 중요한 문항이었습니다. 배우는 단계에서는 잘못 아는 것을 바로 잡으면 더 효과적입니다.. 그러나 배우고 싶지 않은 부분은 제가 도와 드릴 것이 없어요. 그러나 이해 합니다. 왜 이해하는지 제 경험을 말씀해 드리면 학창시절 서울대학, 카이스트 석박사 하시고 영어로 프로그래밍 강의하시던 교수님께 코딩 못한다고 대놓고 말했던 적이 있습니다. 막노동 해서 번 돈으로 IT쪽 유명한 사람들 세미나 들으러 다니던 자존심 때문도 있었지만 결국은 제 인성이 문제였지요. 물론, 그 교수님은 집에도 안 가시고 코딩에 몰두하셔서 나중에는 알고리즘 코딩 분야에 독보적인 분이 되셨습니다. 사실 전, 관심없는 수업 시간에는 좋아하는 프로그래밍 서적을 펴놓고 보며 교수님의 말씀에도 이 수업에는 관심없다던 학생이었고, 두려울게 없던 시절이었습니다. 대신, IT, 임베디드 관련 수업은 타과 청강도 하고 전필도 듣곤 했습니다. 하지만 교수님 사이에 좋지 않은 인성평으로 어떤 교수님은 졸업을 안 시키시려고 전필을 F 주셨지요. 과제는 다 해서 D를 주셔도 될 법도 한데 말이죠. 어떤 교과목은 A+ 3명에 나머지 20명은 전부 F인 과목도 있었으니 이해는 갔습니다. 카이스트 교수님들이 좀 geek한 면이 있으시더라구요. 그러나 졸업을 해야 해서 사정 설명을 드리니 내가 내어주는 산업공학 알고리즘 하나를 3일내에 프로그래밍 해 오면 졸업 시켜주겠다고 해서 48시간동안 물만 먹고 열심히 짜서 겨우 졸업했더랬습니다. 퓨처스 인력중에 자기 과 교수님께도 멋지게 버틸 수 있는 인력이 있다면 저의 학창시절 생각이 나서 정말 좋긴 하겠고, 애착도 많이 갈 것 같습니다. 그러나 살아보니 실력보다 배울려는 자세가 먼저라는 것을 알 수 있었습니다. C, C++, JAVA 등 모든 언어를 하나로 연결시키는 개념을 모르면 스스로 공부하기가 많이 힘이 들고 겉핥기, 테크닉만 배우다가 끝이 날 것입니다. 테크닉이 나쁜 것은 아닙니다. 이해하기 쉽게 해킹으로 따지면 스크립트 키들이라고 보면 되겠습니다.

끝으로, 로테이션이 가능한 기술 분과장 자리를 신설하려고 합니다. 제가 먼저 가르쳐 드리고 기술 전파를 하면 됩니다. 기술 분과장은 계속 바뀔 것이고 2인으로 구성됩니다. 지원자 받습니다.

!--1 double calc = ((total - b) / total);

논리 오류가 났다. real number division error 인데
double calc = ((double)((double)total - (double)b) / (double)total);
드러운 캐스팅 이 후 잘 된다. -> 업 캐스팅 연산으로 해결

!--2 미래 먹거리로 통합 시스템의 DB 로 결국 postgresQL을 선정했다. 운영체제는 당연히 iOS,
RDBMS가 아닌, noSQL로 안 가는 이유는 너무 단순하기도 하고 내가 바로 보는 사업 자체가 NoSQL을
쓸 만큼 큰 건은 없기 때문이다. Dapp 처럼 점 조직으로 나눠야 사회가 제대로 돌아간다는 생각이라...
물론, 나중에 AI로 모든 것을 통합하게 되면 noSQL 쓸 것인데 그것도 아마 나눠서 계산하고 모델만 모으는 것이지.
DB로 통합하는 형태는 아닐거라 생각한다. 

간만에 SQL을 쓰니 구조로 해결 안하고 inner join 만 쌓인다. 

inner join file b on b.num_file=a.numf and b.segnum=a.segfile \
inner join --- c on c.c-----=b.---- and c.----=a.----- \
inner join ------ d on d.-----=a.---- and d.-----=a.------ \
inner join ------ e on e.----=a.----- and e.------=a.-------- \
inner join ---- f on f.-----=a.----- \
where a.------like '%@%%' and a.------ like '%@%%' and a.------ like '%@%%' \
and a.--------- like '%@%%' %@ %@ %@ %@ %@\
order by a.------, a.----- desc, a.-----, a.-------;"

'Blog History' 카테고리의 다른 글

개 발 일 지 020  (0) 2019.11.13
개 발 일 지 018  (0) 2019.11.12
개 발 일 지 016  (0) 2019.11.11
개 발 일 지 014  (0) 2019.10.15
개 발 일 지 013  (0) 2019.10.08

 

모든 프로젝트를 위해서는 결국 DB를 가져야 한다는 사실을 알게 되었다.

 

1.    

2.     라이선스

3.     라이선스 분류

라이선스 분류

The PostgreSQL Licence

PostgreSQL Licence PostgreSQL과 함께 배포되는 라이선스로서, BSD 또는MIT 라이선스와 유사한, 매우 자유로운 라이선스이다

·       버전 :

·       관리기관 : The PostgreSQL Global Development Group

·       라이선스 계열 : BSD

·       웹사이트 바로가기 :

 

주요 내용 한글전문 영문전문 한글/영문비교 법률용어 개발템플릿내용 보기

라이선스 주요내용

라이선스 주요내용

복제, 배포, 수정의 권한 허용

가능

배포시 라이선스 사본 첨부

명시되어있지않음

저작권 고지사항 또는 Attribution 고지사항 유지

가능

배포시 소스코드 제공의무(Reciprocity)와 범위

명시되어있지않음

조합저작물(Lager Work) 작성 및 타 라이선스 배포 허용

가능

수정 시 수정내용 고지

명시되어있지않음

명시적 특허 라이선스의 허용

명시되어있지않음

라이선시가 특허소송 제기 시 라이선스 종료

명시되어있지않음

이름, 상표, 상호에 대한 사용제한

명시되어있지않음

보증의 부인

가능

책임의 제한

가능

주요 특징 및 배포시 의무사항

·       주요 특징 및 배포시 의무사항이 존재하지 않습니다.

 

'Blog History' 카테고리의 다른 글

개 발 일 지 018  (0) 2019.11.12
개 발 일 지 017  (0) 2019.11.12
개 발 일 지 014  (0) 2019.10.15
개 발 일 지 013  (0) 2019.10.08
개 발 일 지 012  (0) 2019.10.07

+ Recent posts