Mojave에서 pygame이 제대로 수행안되는 현상 해결하기
20 Mar 2019 | MAC OSMojave에서 pygame의 충돌
Sierra에서는 아무런 문제가 없었는데 Mojave로 업그레이드한 뒤 python3의 pygame이 제대로 호환되지 않는 문제가 있습니다.
이는 brew를 이용해서 설치한 python3에서 발생하는 문제이기 때문에, 공식 홈페이지를 통해 python3를 다운로드하면 해결이 됩니다.
Sierra에서는 아무런 문제가 없었는데 Mojave로 업그레이드한 뒤 python3의 pygame이 제대로 호환되지 않는 문제가 있습니다.
이는 brew를 이용해서 설치한 python3에서 발생하는 문제이기 때문에, 공식 홈페이지를 통해 python3를 다운로드하면 해결이 됩니다.
다음 예제는 숫자를 오름차순으로 정렬하는 예제입니다.
List<Integer> list = new ArrayList<>();
list.add(5);
list.add(3);
list.add(7);
list.add(6);
list.add(10);
list.add(4);
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
if (o1 < o2) {
return -1;
} else if (o1 > o2) {
return 1;
}
return 0;
}
});
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
데이터 타입이 단순한 Integer 형태이기 때문에 비교하는 구문을 아래와 같이 수정할 수도 있습니다.
List<Integer> list = new ArrayList<>();
list.add(5);
list.add(3);
list.add(7);
list.add(6);
list.add(10);
list.add(4);
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return (o1 - o2);
}
});
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
또한 Java에서 제공하는 대부분의 데이터 타입들은 compareTo 인터페이스를 구현해놓았기 때문에 아래와 같은 코드도 사용가능합니다.
List<Integer> list = new ArrayList<>();
list.add(5);
list.add(3);
list.add(7);
list.add(6);
list.add(10);
list.add(4);
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
});
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
가장 간편한건 아래의 예제와 같이 Comparable 인터페이스를 구현하는 방법입니다.
public class Data implements Comparable {
private final int value;
public Data(int value) {
this.value = value;
}
public final int getValue() {
return this.value;
}
@Override
public int compareTo(Object o) {
return getValue() - ((Data) o).getValue();
}
}
이 경우는 아래와 같이 Collections.sort() 메소드에 별도의 매개변수없이 간편하게 정렬을 할 수 있습니다.
List<Data> list = new ArrayList<>(); list.add(new Data(3)); list.add(new Data(5)); list.add(new Data(4)); list.add(new Data(2)); Collections.sort(list);
public void refresh(String path) {
mList.clear();
File directory = new File(path);
File[] files = directory.listFiles();
for (int i = 0; i < files.length; i++) {
mList.add(files[i]);
}
Comparator<File> cmpAsc = (o1, o2) -> o1.getName().compareTo(o2.getName());
Collections.sort(mList, cmpAsc);
notifyDataSetChanged();
}
각도는 12시 방향을 원점으로 해서 반시계 방향으로 구했습니다.
void sort() {
Collections.sort(childList, (o1, o2) -> {
int px = left() + width() / 2;
int py = top + height() / 2;
int cx1 = o1.left() + o1.width() / 2;
int cy1 = o1.top() + o1.height() / 2;
int cx2 = o2.left() + o2.width() / 2;
int cy2 = o2.top() + o2.height() / 2;
int dx1 = cx1 - px;
int dy1 = cy1 - py;
int dx2 = cx2 - px;
int dy2 = cy2 - py;
double degree1 = Math.atan2(dx1, dy1);
double degree2 = Math.atan2(dx2, dy2);
if (degree1 < degree2) {
return -1;
} else if (degree1 > degree2) {
return 1;
} else {
return 0;
}
});
}
void addLogViewerFragment() {
logViewerFragment = new LogViewerFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.logviewer_layout, logViewerFragment).commit();
}
void removeLogviewerFragment() {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.remove(logViewerFragment).commit();
logViewerFragment = null;
}
apk를 빌드할 때 모든 CPU 타입이 아닌, 원하는 타입에 대한 바이너리만 빌드할 수 있게 해주는 build.gradle 설정입니다.
전체 apk 용량도 줄어들기 떄문에 빌드 및 설치 시간도 단축이 됩니다.
프로젝트가 아닌 모듈의 build.gradle 파일 설정입니다.
android {
...
splits {
abi {
enable true
reset()
include "arm64-v8a", "armeabi-v7a"
universalApk false
}
}
}
여러 프로그램들을 설치하다보면 apt update 목록에 원하지도 않는 목록들이 추가되서 너덜너덜해지는 경우가 생깁니다. 그 중에 어떤 목록은 더 이상 유효하지 않아서 지우고 싶은 경우도 생기구요.
/etc/apt 위치에 가면 해당 서버들의 리스트를 가져올 수 있습니다.