Pull to refresh
23
0
Семён Солдатенко @SamSol

User

Send message
Мешает хотя бы то, что асинхронная задача может закончится после вызова onSaveInstanceState.
Есть суховатое руководство developer.android.com/training/basics/data-storage/index.html
Вкратце предлагают на выбор:
— хранить данные в SharedPreferences
— в файлах
— в SQL базе данных (android.database.sqlite)
Напомнило мне один недавний случай. Диалог с одним разработчиком… (вольный пересказ):
Я: Следуй REST. Регистрация нового клиента — POST на /users, редактирование старого — PUT на /users/42

ОН: Да нафига такие сложности, я уже сделал POST, если в базе есть юзер с таким id то это обновление, а если нет, то регистрация нового. Все же просто.

Я: REST уже описан, а твой подход, назовем его «Как сказал Вася», неизвестен никому, даже тебе. Как ты будешь работать с заявками на сервере? Что тебе придется придумывать в «Как сказал Вася» чтобы работать с заявками. Кто это будет документировать?

ОН: Ну в заявках я буду использовать REST!

Я: Ок. Какая из систем проще, та, в которой везде используется REST, или та, в которой где-то используется REST, а где-то «Как сказал Вася»?

ОН: Я всё равно считаю, что мой подход проще!

Я: ?!

Мне кажется с языком не всё в порядке
(link (name forward)  (J1 J2) (A2 A3) (K3 K3))

link и name — имена функций. forward, J2, A3 и вторая K3 — вроде как константы или какие-то литералы. А чем являются J1, A2 и первая K3? И как их отличить от имен функций? Такие «шероховатости» в языке могут принести столько проблем, что поседеете.
Давно использую. Туннель 6in4 из домашнего роутера в Huricane Electric. Отладочный сервер с несколькими ipv6 адресами с разными JavaEE серверами на разных ip адресах. Miredoo, в офисе и других местах. DynDNS, чтобы не запоминать адреса.
Это не так хорошо, как если бы провайдер выдал мне /64 ipv6 адрес, но очень близко к этому.
Еще нужно чтобы toMap создавал LinkedHashMap, иначе элементы в произвольном порядке возвращаются
items.stream().collect(
        Collectors.toMap(item -> item.get("name"), v -> v, (v0, v1) -> v0, LinkedHashMap::new)
).values();
А на питоне придумалось только это:
items = [
    {'name':'a', 'val':4},
    {'name':'a', 'val':5},
    {'name':'b', 'val':6},
    {'name':'a', 'val':7},
    {'name':'b', 'val':3}
]

expected = [
    {'name':'a', 'val':4},
    {'name':'b', 'val':6},
]

result = []
for item in items:
    if item['name'] in [r['name'] for r in result]:
        continue
    result.append(item)

assert expected == result
О, интересная задачка, спасибо!

А вот решение на груви:
def items = [
        [name: 'a', val: 4],
        [name: 'a', val: 5],
        [name: 'b', val: 6],
        [name: 'a', val: 7],
        [name: 'b', val: 3]
]

def expected = [
        [name: 'a', val: 4],
        [name: 'b', val: 6],
]

def result = items.groupBy { it.name }.collect { it.value.first() }

assert expected == result
А, вот еще идея.
Взять количество строк, взять случайные номера строк, и выполнить такой запрос:
SELECT id FROM (
	SELECT id, rank() OVER (ORDER BY id) as row_number FROM ttbl
) AS X
WHERE X.row_number IN (707, 32220, 102503)
Из любопытства попробовал взять с запасом случайных id и выбрать по ним из базы.
Профит: простой SQL, и не сложный код.
Вот решение на groovy:
@GrabConfig(systemClassLoader=true)
@Grab('postgresql:postgresql:9.0-801.jdbc4')
import groovy.sql.Sql

def sql = Sql.newInstance('jdbc:postgresql://localhost/test', 'postgres', '123', 'org.postgresql.Driver')
def random = new Random()

def t0 = System.currentTimeMillis()
def v = []
def (min, max) = sql.firstRow("select min(id), max(id) from ttbl")
def nums = (0..100).collect { (min + random.nextInt(max - min + 1)) as String }
def strNums = nums.join(',')

sql.eachRow("select id from ttbl where id in ($strNums)".toString()) {
    v += it.id
}
println v
def t1 = System.currentTimeMillis()
println "Time: ${t1 - t0}"


Недостаток этого решения, может ничего не найти, особенно на сильно разряженных таблицах.
Мне понравилось. Кратко и прямолинейно! Даже new Thead(...).start, а потом invokeLater в этой статье оправдано (для ясности). Еще бы в конце упомянуть SwingWorker.
Как это меня обманули? Что, все-таки есть команда «просто забрать»?
git "просто забери" origin/master
Увы, снова обманули.
Вот удобные сокращения к гиту:
alias s='git status'
alias k='gitk --all'
alias gl='git log --graph --decorate --pretty=oneline --abbrev-commit --color -n30'
alias gu='git remote -v update'
Что значит «просто забрать»?
То есть практического применения у этой конструкции нет?
Какая практическая задача решается «инстанциированием для определённого набора типов»?
Я обновился на айпаде и он перестал синхронизовывать фотки, а откатиться назад нельзя.
Чё, нормально. Спасибо им.
А зачем вам вообще понадобился светодиодный мост?
У меня ssh.exe идущий с mingw не заработал по IPv6, пришлось переключиться на plink. Дописал в файл ~/.profile следующее:
GIT_SSH=plink
export GIT_SSH

Information

Rating
Does not participate
Location
Новосибирск, Новосибирская обл., Россия
Date of birth
Registered
Activity