glot.io
C언어 외에도 다양한 언어를 지원한다. 간만에 가보니 종류가 더 늘은 것 같다. 요새 핫한 Dart, Rust, Typescript 등도 있음.
![]() |
| 편집기와 실행 화면. 그자리에서 컴파일된다. 입력 데이터도 별도로 지정가능 |
저장 기능(공유를 위한 public, 혼자 보기 위한 private 둘 다 지원)도 있고, 간단한 테스트나 공부하는 용도로 좋음
행정안전부와 KISA에서 2021년에 발간한 유익한 문서
행안부 홈페이지 링크:
이 영상을 보다가 소개가 나와서 알게 되었다.
대충 훑어보니 진짜로 유익한 내용이 많이 들어있음.
기본만 지켜도 어이없이 털리는 일은 없을 것이다.
당장 밥벌이 판도가 바뀐다는 것은 아님.
C/C++ 그동안 오래 쓰기도 했고 보안 관련 이슈들 때문에 당장은 아니더라도 언젠가는 넘어갈 때를 맞이해야 할듯
매뉴얼대로만 만들어도 문제는 안생기겠지만 휴먼 에러 및 나태함 등으로 인해 생길 수 있는 문제들은 원천부터 막아버리자는 건가
다음 주자는 RUST가 유력하다고 한다.
실제로 주변에 RUST를 사용해서 제품을 만드는 사람도 있기도 하고
namespace는 직역하면 이름공간이 될 텐데 어느 강의에서 단순히 이름공간이라고 부르면 와닿지 않으니, 의역해서 "소속"이라고 부르는 건 어떻냐는 얘기가 나왔다.
용도를 생각해보면 그냥 "네임스페이스"라고 그대로 부르거나
이름공간이라고 할 거면 소속이라고 부르는 것도 개발자들 간 소통에도 좋을 것 같긴 하다.
용어사전에도 없던 소속 이라는 말은 갑자기 어디서 나오고 무슨 의미냐고 따지면 그건 할 말 없음.
SASM (SimpleASM) - Simple open source crossplatform IDE for NASM, MASM, GAS, FASM assembly languages.
우리 중 이걸 사슴이라고 읽는 사람이 있으려나?
아무튼 어셈 공부 시 IDE 상에서 간편하게 돌려볼 수 있다.
써보니 빠르고 편하고 괜찮음. 추천
| SASM 홈페이지 화면 |
GitHub: https://github.com/Dman95/SASM
PRINT_STRING이 있는 라인에서 이런 에러가 났다.
error: impossible combination of address sizes
%include "io64.inc"
section .text
global CMAIN
CMAIN:
;write your code here
PRINT_STRING msg
xor rax, rax
ret
section .data
msg db 'Hello World', 0x00
빌드옵션을 확인해보니 x86 mode로 되어있었다.
내 CPU가 64비트라 x64 모드로 해야 했었던 것 같음.
아래 화면처럼 바꿔주니 성공
1. 드라이브 임포트 및 마운트
QX82라는 경량형 자바스크립트 게임개발 엔진이 나왔다.
80년대 컴퓨터에서 플레이하던 복고풍 그래픽을 구현할 때 유용해 보임.
소개는 다음과 같음:
QX82 is a tiny Javascript engine that lets you create games and experiences inspired by the look and feel of a retro 80s computer. It's not an emulator or a fantasy console: it's just a Javascript library.
It's open source. You can download it from the GitHub repo.
데이터셋에서 미니배치를 불러올 때 예제코드대로 했더니 .next()함수에서 에러가 발생dataiter1 = iter(train_loader1)images1, labels1 = dataiter1.next()print(images1.size()) # 배치 사이즈 확인
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-12-53a15405132b> in <cell line: 2>() 1 dataiter1 = iter(train_loader1) ----> 2 images1, labels1 = dataiter1.next() 3 print(images1.size()) # 배치 사이즈 확인
AttributeError: '_SingleProcessDataLoaderIter' object has no attribute 'next'최신 버전에서는 객체의 next() 함수로 쓰는 게 아니라 그냥 next() 안에 인자로 넣어줘야 했음
dataiter1.next() 를 아래 코드처럼 next(dataiter1) 로 수정했더니 해결
//============================================================================================
#include <windows.h>
#include <stdio.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
HWND hWndMain;
LPCTSTR lpszClass=TEXT("StopWatch");
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
,LPSTR lpszCmdParam,int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst=hInstance;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=WndProc;
WndClass.lpszClassName=lpszClass;
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&WndClass);
hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,300,220,
NULL,(HMENU)NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdShow);
while (GetMessage(&Message,NULL,0,0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return (int)Message.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
HFONT font, oldfont;
static int min, sec, undercomma; // 분, 초, 0.01초
switch (iMessage) {
case WM_CREATE:
hWndMain=hWnd;
CreateWindow(TEXT("button"),TEXT("START"),WS_CHILD|WS_VISIBLE|
BS_PUSHBUTTON,20,150,80,30,hWnd,(HMENU)0,g_hInst,NULL);
CreateWindow(TEXT("button"),TEXT("STOP"),WS_CHILD|WS_VISIBLE|
BS_PUSHBUTTON,105,150,80,30,hWnd,(HMENU)1,g_hInst,NULL);
CreateWindow(TEXT("button"),TEXT("EXIT"),WS_CHILD|WS_VISIBLE|
BS_PUSHBUTTON,190,150,80,30,hWnd,(HMENU)2,g_hInst,NULL);
return 0;
case WM_TIMER:
undercomma+=5;
if(undercomma >= 100) { sec++; undercomma=0; }
if(sec >= 60) { min++; sec=0; }
InvalidateRect(hWnd, NULL, TRUE);
return 0;
case WM_PAINT:
char szTxt[16];
hdc=BeginPaint(hWnd, &ps);
font=CreateFont(60,0,0,0,0,0,0,0,HANGEUL_CHARSET,0,0,0,0,"돋움");
oldfont=(HFONT)SelectObject(hdc,font);
sprintf(szTxt, "%02d:%02d.%02d",min, sec, undercomma);
TextOut(hdc, 20, 40, szTxt, strlen(szTxt));
SelectObject(hdc,oldfont);
DeleteObject(font);
EndPaint(hWnd, &ps);
return 0;
case WM_COMMAND:
switch(LOWORD(wParam)) {
case 0: // START button clicked
min = 0;
sec = 0;
undercomma = 0;
SetTimer(hWnd, 3355, 50, NULL);
break;
case 1: // STOP button clicked
KillTimer(hWnd, 3355);
break;
case 2: // EXIT button clicked
PostQuitMessage(0);
break;
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}