개요


사람 인력을 뽑을 때 필요한 사항을 기록하기 위함


내용


대인관계가 그렇듯 너무 사무적으로 접근하지는 말자

- 전화와 즉시 회사소개 - 일소개 - 가능여부 이렇게 사무적으로 접근하지는 말자

- 전화 목적및 간단한 회사 소개 이후 주변 니즈환기 이후 대화를 이끌어 가도록 하자

( 물론 용건만... 을 원하는 분들은 요점만 빠르게 ... )


반드시 이력서 및 경력 증명서를 받도록 하자

- 오늘 필요한 사람이 아닐지라도 향후에 필요한 사람이 될 수도 있다.



인력관리용 프로그램을 활용

- 인력에 대한 주기적인 관리 / 메모

- 생일 등 기념일 전화 => 상대방에게 기억이 남음


전화하는 시간

- 왠만하면 퇴근이후 17 ~ 21 시 사이가 적절

- 일하는 시간은 상대적으로 무성의 하게 받음.

- 하지만 일이 종료된 시점에서는 여유가 생겨서 좋아라 함


기타


- 좀 더 좋은 내용이 있음 추가 예정

- 댓글 환영 합니다. ^_^



작업 전



작업 후


개요


위와 같이 이미지와 그 내부에 글자를 쓰고자 할 때 매번 포토샵 같은 프로그램에 들어가서 작업하려면 귀차니즘이 발동하기 때문에 힘든데 이럴때를 위해 만든 유틸성 자바 프로그램의 소스를 공유하고자 합니다. 좀 더 응용하면 더 좋은 프로그램이 나올수도 있겠네요


동작방법


자바최신 버전 설치(1.7이상 권장) 후 실행하시면 됩니다. (자바 프로그램에 대한 설명은 생략하겠습니다. main에 예제까지 넣었으니 ㅜㅜ )




소스 간단 설명


TEXT 드로잉

텍스트의 크기정보 GET

배경의 width를 텍스트에 맞춰 resize 이후 텍스트를 이미지 위에 overlay

배경 이미지 CROP 및 이미지 생성


소스

package com.wonsama.wswriter.utils; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Rectangle; import java.awt.RenderingHints; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.io.File; import java.net.URL; import javax.imageio.ImageIO; /** * 입력 텍스트를 이미지로 만들어 준다 * @author parkwon * @since 2017.03.24 */ public class WsImageTextUtil { /** * 테스트용 진입점 * @param args 파라미터 * @since 2017.03.24 */ public static void main(String[] args) { try{ new WsImageTextUtil(); }catch (Exception e) { e.printStackTrace(); } } /** * 생성자 * @since 2017.03.24 */ WsImageTextUtil() throws Exception { // drawText("어머니가 짜장면이 싫다고 하셨어", "/Users/parkwon/Desktop/sample.png"); String[] texts = {"아이폰 7 붉은색 사주세요"}; drawTextWithImage(texts , "/Users/parkwon/Desktop/writes/title.png" , "http://imgnews.naver.com/image/5463/2017/03/21/0000000101_003_20170322105216516.png"); } /** * 텍스트를 이미지로 만들어준다 * @param text 텍스트 * @param fileLoc 파일위치 * @throws Exception 오류 * @since 2017.03.27 */ public void drawText(String text, String fileLoc) throws Exception { Font font = new Font("나눔고딕", Font.PLAIN, 28); Rectangle r = getFontrect(text, font); int width = (int) r.getWidth(); int height = (int) r.getHeight(); BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); Graphics2D g2d = getG2D(img); g2d.setFont(font); FontMetrics fm = g2d.getFontMetrics(); g2d.setColor(Color.BLACK); g2d.drawString(text, 0, fm.getAscent()); g2d.dispose(); // 이미지 파일을 생성한다 ImageIO.write(img, "png", new File(fileLoc)); } /** * 웹 이미지 내부에 텍스트를 포함하여 이미지로 만들어준다 * @param texts 텍스트 문자열 * @param fileLoc 파일위치 * @param backgrondImageURL 웹이미지 주소 * @throws Exception 오류 * @since 2017.03.27 */ public void drawTextWithImage(String[] texts, String fileLoc, String backgrondImageURL) throws Exception { final int FONT_SIZE = 18; final int POS_X = 30; final int POS_Y = 20; BufferedImage img = ImageIO.read(new URL(backgrondImageURL)); Graphics g = img.getGraphics(); Font font = new Font("나눔고딕", Font.PLAIN, FONT_SIZE); // 우선은 첫 라인 정보만 가져온다. 일반적으로 가장 길게 설정하는 것이 맞다고 생각함. Rectangle rect = getFontrect(texts[0], font); int oriWidth = img.getWidth(); int oriHeight = img.getHeight(); double ratio = (rect.getWidth() + POS_X*2) / oriWidth; int newWidth = (int) (rect.getWidth() + POS_X*2); int newHeight = (int) (oriHeight * ratio); // 배경 이미지 RESIZE 처리 img = resizeImage(img, newWidth, newHeight*texts.length); // 텍스트 처리 for(int i=0;i<texts.length;i++){ Graphics2D g2d = getG2D(img); g2d.setFont(font); int x = POS_X; int y = (FONT_SIZE + POS_Y)*(i + 1); // 그림자 처리 drawStringDropshadow(g2d, texts[i], x, y); } g.dispose(); // 배경 이미지 CROP 처리 img = cropImage(img, new Rectangle(0, 0, newWidth, (FONT_SIZE+POS_Y)*texts.length+POS_Y) ); // 이미지 파일을 생성한다 ImageIO.write(img, "png", new File(fileLoc)); } /** * 입력받은 문자열의 사각영역을 반환한다 * @param text 문자열 * @param font 폰트 * @return 사각크기 * @since 2017.03.24 */ private Rectangle getFontrect(String text, Font font){ BufferedImage img = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB); Graphics2D g2d = img.createGraphics(); g2d.setFont(font); FontMetrics fm = g2d.getFontMetrics(); int width = fm.stringWidth(text); int height = fm.getHeight(); g2d.dispose(); return new Rectangle(0, 0, width, height); } /** * 아웃라인 처리 * @param g2d 2D 그래픽스 * @param text 문자열 * @param x X좌표 * @param y Y좌표 * @param cin 내부 색상 * @param cout 외부 색상 * @since 2017.03.27 */ private void drawStringOutline(Graphics2D g2d, String text, int x, int y, Color cin, Color cout){ g2d.setColor(cout); g2d.drawString(text, ShiftWest(x, 1), ShiftNorth(y, 1)); g2d.drawString(text, ShiftWest(x, 1), ShiftSouth(y, 1)); g2d.drawString(text, ShiftEast(x, 1), ShiftNorth(y, 1)); g2d.drawString(text, ShiftEast(x, 1), ShiftSouth(y, 1)); g2d.setColor(cin); g2d.drawString(text, x, y); } /** * 그림자 텍스트를 그려준다 * @param g2d 2D 그래픽스 * @param text 문자열 * @param x X좌표 * @param y Y좌표 * @since 2017.03.27 */ private void drawStringDropshadow(Graphics2D g2d, String text, int x, int y) { g2d.setColor(new Color(20, 20, 20)); g2d.drawString(text, ShiftEast(x, 2), ShiftSouth(y, 2)); g2d.setColor(new Color(220, 220, 220)); g2d.drawString(text, x, y); } /** * 폰트를 회전 처리한다 * @param font 폰트 * @param angle 회전각 0~360 / -를 넣으면 반시계 방향으로 계산 * @return 회전처리 된 폰트 * @since 2017.03.24 */ private Font rotatedFont(Font font, double angle){ // 폰트 회전처리 AffineTransform form = new AffineTransform(); form.rotate(Math.toRadians(angle), 0, 0); return font.deriveFont(form); } /** * 이미지 크롭처리 * @param img 이미지 * @param rect 사각정보 * @return 신규 이미지 * @since 2017.03.24 */ private BufferedImage cropImage(BufferedImage img, Rectangle rect) { BufferedImage dest = img.getSubimage(rect.x, rect.y, rect.width, rect.height); return dest; } /** * 이미지 리사이징 * @param img 이미지 * @param newW 새로운 넓이 * @param newH 새로운 높이 * @return 신규 이미지 * @since 2017.03.24 */ private BufferedImage resizeImage(BufferedImage img, int newW, int newH) { Image tmp = img.getScaledInstance(newW, newH, Image.SCALE_SMOOTH); BufferedImage dimg = new BufferedImage(newW, newH, BufferedImage.TYPE_INT_ARGB); Graphics2D g2d = dimg.createGraphics(); g2d.drawImage(tmp, 0, 0, null); g2d.dispose(); return dimg; } /** * 이미지에서 2D 그래픽스 개체를 얻어온다 * @param img 이미지버퍼 * @return 2D 그래픽스 * @since 2017.03.24 */ private Graphics2D getG2D(BufferedImage img) { Graphics2D g2d = img.createGraphics(); g2d.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY); g2d.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE); g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); return g2d; } /** * 좌표 이동처리 - 위쪽 / 북 * @param p 현 좌표 * @param distance 이동거리 * @return 변경된 좌표 * @since 2017.03.27 */ int ShiftNorth(int p, int distance) { return (p - distance); } /** * 좌표 이동처리 - 아래쪽 / 남 * @param p 현 좌표 * @param distance 이동거리 * @return 변경된 좌표 * @since 2017.03.27 */ int ShiftSouth(int p, int distance) { return (p + distance); } /** * 좌표 이동처리 - 오른쪽 / 동 * @param p 현 좌표 * @param distance 이동거리 * @return 변경된 좌표 * @since 2017.03.27 */ int ShiftEast(int p, int distance) { return (p + distance); } /** * 좌표 이동처리 - 왼쪽 / 서 * @param p 현 좌표 * @param distance 이동거리 * @return 변경된 좌표 * @since 2017.03.27 */ int ShiftWest(int p, int distance) { return (p - distance); } }


다음 보험은 페이스 북의 메신저 대화방을 시작하여 보험 대리인을 대체합니다.





IT 컨설턴트부터 개인 트레이너, 테라피스트, 코치, 사진가 및 유지 보수 엔지니어에 이르기까지 소기업 부문은 광범위하고 확대되고 있습니다.


그러나 중소기업 보험 시장은 개별 사업 유형의 뉘앙스와 일치하지 않는 일반적인 정책에 의해 지배되고있는 것처럼 보입니다.


Chatbot 기술은 우리가 보험을 포함하여 가장 크고 가장 전통적인 산업을보고 참여하는 방식을 재정의하고 있습니다.


콜센터, 웹 사이트 및 모바일 앱은 더 이상 브랜드와 상호 작용할 수있는 유일한 수단이 아닙니다. 봇봇 (Chatbots)은 고객과의 소통을 원하는 비즈니스를 위해 빠르게 필수적으로 부상하고 있습니다.


chatbots를 통한 온라인 채팅은 이전 채널보다 빠르게 성장했습니다. 이제 인공 지능과 자연어 처리를 통해 온라인 채팅은 쿼리에 대한 현장 답변을 원하는 많은 사용자에게 브랜드와 의사 소통하는 데 선호되는 방법이되었습니다.


캘리포니아 주 팔로 알토에 기반을 둔 신생 보험 Next Insurance는 중소 기업이 페이스 북의 메신저 챠트 봇을 통해 견적을하고 보험을 살 수 있도록 보험 찰보를 시작했다.


SmallTalk는 소셜 채널을 통해 중소 기업에 맞춤형 보험 정책을 제공하기 위해 엔터프라이즈 중심의 봇봇 개발자 인 SmallTalk와 파트너 관계를 맺었습니다.


Smalltalk은 기업 고객과 협력하여 봇이 새로운 수익을 창출하거나 비즈니스 프로세스의 효율성을 높일 수있는 분야를 파악할 수 있도록 지원합니다.


회사는 사업주의 요구에 맞게 맞춤형 보험 프로그램을 만들 수있었습니다.


플랫폼을 통해 고객에게 직접 액세스 할 수 있으므로 보험 회사의 수익 증대를 보장하면서 고객의 요구에 맞는 최상의 정책, 가격 및 프로세스를 식별 할 수 있습니다.


2016 년에 일련의 기업가들에 의해 설립 된 Next Insurance는 Ribbit Capital, TLV Partners 및 Zeev Ventures로부터 1 천 3 백만 달러의 자금을 수령했습니다.


다음은 현재 제공되는 보험 서비스가 부적절하다고 생각합니다. 일부는 부적절하게 가격이 매겨 졌거나 "중소기업의 근본적인 필요를 설명하지 못했습니다."라고 말하면서 "중소기업 보험이 무언가 잘못됐다"고 말했습니다.


Next의 공동 설립자이자 CEO 인 Guy Goldstein은 "고객의 70 %가 휴대폰으로 보험을 구입하고 있습니다.


고객이 Facebook Messenger의 대화방을 통해 보험을 구매할 수있게하면 단순성, 투명성 및 손쉬운 액세스가 가능합니다. 우리는 보험이 중소기업 소유자를 위해 일하고 있고 그 반대가 아니라는 것을 확인하고 있습니다. "


출처 : http://www.zdnet.com/article/next-insurance-launches-facebook-messenger-chatbot-to-replace-the-insurance-agent/




설치 및 관련사이트

    NodeJS

        https://nodejs.org/en/

        nodejs : v7.7.4, npm : v4.1.2

    ExpressJS

        https://expressjs.com/

        v4.15.2


시작하기


    링크

        https://expressjs.com/en/starter/installing.html


    작업

        mkdir jwview

        cd jwview

        npm init

            enter 눌러가면서 기본값으로 생성 package.json 생성

        npm install express --save

            express 설치 및 관련 의존성 정보를 package.json에 추가(--save 옵션)


HelloWorld


    작업

        npm init 할때 생성한 main에 일치하는 파일 생성

        index.js 에 아래 소스를 입력


    소스

        var express = require('express')

        var app = express()


        app.get('/', function (req, res) {

        res.send('Hello World!')

        })


        app.listen(3000, function () {

        console.log('Example app listening on port 3000!')

        })

    

    실행

        node index.js


    확인

        http://localhost:3000

            위 링크로 들어가면 Hello World! 라는 문구를 볼 수 있다.


Express Generator ( 익스프레스 생성기 )


    설치

        npm install express-generator -g


    명령어 목록

        express -h

    -h, --help          도움말을 보여준다 

        --version       버전 정보를 보여준다 

    -e, --ejs           ejs 뷰엔진 지원 추가

        --hbs           handlebars 뷰엔진 지원 추가

        --pug           pug 뷰엔진 지원 추가

    -H, --hogan         hogan.js 엔진 지원 추가

    -v, --view <engine> 뷰엔진 지원을 추가한다(ejs|hbs|hjs|jade|pug|twig|vash) (기본은 jade)

    -c, --css <engine>  스타일시트 지원을 추가한다 (less|stylus|compass|sass) (기본은 css )

        --git           .gitignore 에 추가

    -f, --force         강제로 폴더 생성


    예시

        myapp 이라는 이름으로 웹 어플리케이션을 만드려면 

        express --view=pug myapp


    실행

    cd myapp

        debug=myapp:* npm start

        (myapp을 debugging 할것이며, 대상은 *전체, start 스크립트 수행=> package.json에 정의됨)


    폴더구조


        ├── app.js

        ├── bin

        │   └── www

        ├── package.json

        ├── public

        │   ├── images

        │   ├── javascripts

        │   └── stylesheets

        │       └── style.css

        ├── routes

        │   ├── index.js

        │   └── users.js

        └── views

            ├── error.pug

            ├── index.pug

            └── layout.pug


기본 라우팅

http 요청(get, post 등 및 주소 uri)에 따른 처리


app.get('/', function (req, res) {

  res.send('Hello World!')

})


app.post('/', function (req, res) {

  res.send('Got a POST request')

})


get 요청은 주소창을 통해 확인 가능하지만 post 같은 경우는 postman 같은 크롬 확장으로 확인 가능


고정(static) 자원 사용하기


app.use(express.static('public'))


http://localhost:3000/images/kitten.jpg

http://localhost:3000/css/style.css


이후 public 폴더 아래에 존재하는 파일을 위와 같이 사용 가능


app.use(express.static('public'))

app.use(express.static('files'))


위와 같이 하면 1개 이상의 폴더를 지정할 수 있다.


app.use('/static', express.static('public'))


위와 같이 하면 가상경로를 포함하여 지정할 수 있으며 아래와 같이 사용 가능하다.


http://localhost:3000/static/images/kitten.jpg

http://localhost:3000/static/css/style.css


하지만 폴더가 기본적으로 상대적 경로에 존재하므로 아래와 같은 방식으로 보통 사용한다


app.use('/static', express.static(path.join(__dirname, 'public')))


__dirname (현재 경로)에 public 이라는 폴더 경로를 합쳐서 해당 경로를 static 이라는 가상경로에 매칭




Android O 의 새로운 기능알림 알림 채널, 배경 한도, PIP 등



Android O의 새로운 기능 

: 백그라운드 한계, 알림 채널, PIP (picture-in-picture), 자동 채우기, 적응 형 아이콘 및 API 변경 등이 추가되었습니다.


알림 채널. 

사용자는 채널 소개를 통해 알림을보다 효과적으로 제어 할 수 있습니다. 이 채널은 여러 응용 프로그램의 메시지를 그룹화 할 수 있으며 사용자는 채널을 활성화 / 비활성화하거나 잠금 화면에서 중요도, 사운드, 조명, 진동, 가시성 중 하나의 설정을 적용 할 수 있습니다. 알림에는 더 이상 우선 순위가 지정되지 않으며, 알림이 표시되는 방법과 노이즈, 빛 또는 진동과 관련된 채널을 결정하는 새로운 7 가지 중요도가 제공됩니다. 여러 사용자 계정에 채널을 그룹화 할 수 있습니다. 이는 업무용 및 개인용으로 사용되는 장치에서 채널을 관리하는 데 유용합니다.


백그라운드 제한. 

Android O는 배터리 수명과 성능을 향상시키기 위해 더 많은 백그라운드 제한을 도입합니다. 새 제한의 영향을받는 영역은 암시 적 브로드 캐스트, 백그라운드 서비스 및 위치 업데이트입니다. 백그라운드에서 실행중인 서비스는 몇 분 후에 중지됩니다. 이러한 서비스를 사용하는 응용 프로그램은 제한없는 서비스를 시작할 수있는 몇 분 동안 임시 허용 목록에 배치 될 수 있습니다. 이는 우선 순위가 높은 메시지, 브로드 캐스트 수신시 또는 통지에서 보류중인 인 텐트를 실행할 때와 같이 사용자가 볼 수있는 작업을 응용 프로그램이 처리해야하는 경우에 발생합니다.

위치 업데이트와 관련하여 백그라운드에서 실행되는 응용 프로그램은 매 시간마다 이러한 업데이트를 수신합니다. 응용 프로그램은 포 그라운드로 응용 프로그램을 가져 오거나, 포 그라운드 서비스를 사용하거나, Geofencing API를 사용하거나 수동 위치 수신기를 사용하여이 동작을 변경할 수 있습니다.



PIP (Picture-in-picture). 

Android TV에서 이미 사용 가능하며 PIP는 이제 Android로 가져와 다른 활동 내에서 활동을 표시 할 수 있습니다. PIP는 Android N에 도입 된 멀티 윈도우의 특별한 경우이며 특히 동영상 콘텐츠를 재생하는 데 적합합니다.

자동 완성 프레임 워크. Android O는 사용자가 시간을 절약하고 양식 작성 작업을 반복하지 않기 위해 애플리케이션이 데이터 및 자동 완성 양식을 저장하는 데 사용할 수있는 프레임 워크를 도입합니다. 로그인 데이터 또는 신용 카드 정보 사용에 대한 예가 포함됩니다.


적응 형 아이콘. 

다양한 기기의 실행 프로그램은 둥근 모양, 사각형 모양, squircle 모양 등 다른 모양의 아이콘을 표시 할 수 있습니다. Android O는 배경과 전경을위한 두 개의 이미지 레이어와 마스크로 시작 아이콘을 만듭니다. 이 아이콘은 시각 효과를 지원합니다.

멀티 디스플레이. 개발자는 여러 디스플레이가있는 장치에서 활동을 한 디스플레이에서 다른 디스플레이로 이동할 수 있습니다.


자바. 

Android O에는 OpenJDK 8의 java.time과 OpenJDK 7의 java.nio.file 및 java.lang.invoke가 포함되어 있습니다. 일부 벤치 마크에서는 런타임 성능이 최대 2 배 향상되었습니다.

Android O의 다른 개선 사항에는 XML의 글꼴 리소스, 앱의 광역 색상, 고품질 Bluetooth 오디오 코덱, WiFi 인식, 키보드 탐색, WebView 개선 등이 있습니다.


Google은이 Android 미리보기 버전은 완전히 안정적이지 않으며 후속 버전은 다음 달에 발행 될 것입니다. 

Android O 용으로 개발하려면 Android Studio 2.4 Canary가 필요합니다. 

Android의 새 버전은 에뮬레이터 또는 여러 Nexus 및 Pixel 기기에서 테스트 할 수 있습니다.


출처 : https://www.infoq.com/news/2017/03/android-o?utm_campaign=infoq_content&utm_source=infoq&utm_medium=feed&utm_term=global




css 전처리기 sass 대 less 대 stylus  위 3개 중 당신의 선택은 ??


원문 링크 

https://code.tutsplus.com/tutorials/sass-vs-less-vs-stylus-preprocessor-shootout--net-24320


위 글을 읽어보면 사람 취향 타는 거 같은 느낌이다. 


문법 - 괄호를 써도 되고 안써도 되고 / 3개 거의 유사

변수 - @ $ 없거나 / prefix의 차이 정도

포함하기(Nesting) - 모두 동일, css와 비교하면 너무 좋은 기능임

가따쓰기(Mixins) - 한번 정의하여 사용한 것을 다른곳에 재사용하는 기능, sass는 어노테이션으로 지정, 나머지 둘은 그냥 쓰면 됨


그외 상속(Extends), 내포(Import), 연산자(Operator) 등이 존재 하는데 거의 다 비슷한 느낌이다.


그래서 결론은 ??

개발에 있어서 필수 사항은 아니지만 SASS, LESS, STYLUS 등의 전처리를 통해 많은 시간을 절약할 수 있다 합니다.

그리고 다양한 전처리기를 사용해보고 자신에게 맞는 것을 고르라고 하네요


전 개인적으로 less 사용중 훗...



상황 연출 ...


1
factory.setTriggers( aaaTrigger().getObject(),bbbTrigger().getObject() );
cs


와 같이 트리거를 2개 설정 해놓음 하지만 이후 aaa트리거만 사용하기 위해 코드를 아래와 같이 변형


1
factory.setTriggers( aaaTrigger().getObject() );
cs


그리고 수행을 해보면 둘다 2개의 트리거가 동작하는 것을 볼 수 있음 ;;;


그래서 H2 DB에 접속하여 


QRTZ_TRIGGERS 테이블에서 트리거명 조회 이후 아래와 같이 트리거를 제거하면 된다.


1
delete QRTZ_TRIGGERS where TRIGGER_NAME = 'bbbTrigger'
cs


그러면 트리거가 도중에 중단 되는 것을 로그를 통해 확인할 수 있음.



하지만 ... 위와 같이 하면 다시 2개로 트리거를 복구하면 테이블에 해당트리거가 추가가 안됨 ;; 그래서 


1
2
factoryBean.setStartDelay(Long.MAX_VALUE);
factoryBean.setRepeatCount(0);
cs


위와 같이 사용하지 않을 경우에는 시작시간을 최대로 늘리고 반복카운트를 0으로 설정하는 방법을 차선책으로 해봤음.


아니면 job 을 execute 할 때 해당 메소드를 내부에 실행할 대상을 제거하는 방법도 좋은 거 같음. 언젠간 다시 쓸것이니... 


시침과 분침 사이의 각도를 표현


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<script>
/*
    링크
    https://codefights.com/challenge/BMAqHPYhhPdHTd7pz
    문제 
    시침과 분침 사이의 각도를 표현해라
    - 각도는 180을 넘을 수는 없음
    - 시간표현은 HH:MM:SS 로 표현
    예제
    in : 12:00:00
    out : 0
    in : 07:00:00
    out : 150
    in : 11:19:41
    out : 93
*/
    function timeDegrees(t) {
 
        // 시간정보를 나눠서 넣어둠 [0] : 시, [1] : 분, [2] : 초
        p = t.split(':')
 
        // 입력된 시간 기준으로 흐르는 각도의 값  (초침-분침-시침)
        a = (p[2* 720 / 60 - p[1]) / 60 - p[0+ 24
 
        // 12시간 기준으로 
        a %= 12
 
        // 180을 넘을 수 없으므로 예각의 값을 가져온다
        a = a < ? a : 12 - a
 
        // 소숫점 이하 버림 처리
        return a * 30 | 0
    }
</script>
cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<script>
/*
    링크
    https://codefights.com/challenge/SCgGQZE8ogJDTKmDp
    문제 
    입력 받은 배열의 중복을 제거하라 !
    예제
    in : [1,1,2,2,3,3,]
    out : [1,2,3]
    in : [1,1,1]
    out : [1]
*/
    function deDup(a){
        r = []
        for(i in a){
 
            // 참이면 && 구문도 수행
            // 배열 내부의 값을 배열에서 못찾으면 넣어준다
            r.indexOf(x=a[i]) < && r.push(x)
        }
        return r
    }
</script>
cs


비트코인 채굴이란 ?


비트코인 노드를 운영하는 네트워크 참가자들은 채굴자(광부, 마이너)라 불린다. 이들은 최근 거래를 수집해 데이터 블록 형태로 정리하며, 이 과정을 10분마다 반복한다.


그리고 채굴자들은 블록을 발견한 대가로 비트코인을 받아간다.


이더리움 또한 비슷함.


비트코인, 이더리움 둘다 비슷하며 아직은 화폐보단 주식에 가까운것 같다 개인적으로는 하루만에 가격이 ... 훅 올랐다 내렸다 뭐 그리기도 하니...


나도 함 해볼까 ?


2년전 비트코인 채굴 관련 영상을 유투브에서 찾아 봤는데 공장 단위로 PC를 가동하면서 얻는 수익이 어마 어마 함...


전기세 1억에 수익 16억 ... 물론 인건비에 기타 등등의 비용이 들어가긴 하겠지만... 역시 이런 것에 먼저 눈을 뜨신 분들은 엄청난거 같다.


여기서 함정... 채굴은 난이도는 시간이 흐르면 흐를수록 힘들어 지고 있음.


요즘 채굴관련 글을 보면 대중적인 PC 기준 대략 하루에 100원 -_-; 정도를 벌 수 있다고 함. ( 전기세 대비 수지타산이 안맞음 ... )


관련 영상



그리고 유투브에서 bitcoin mining 등과 같은 단어로 검색해 보면 다양한 영상을 볼 수 있을 것이다.





+ Recent posts