Pull to refresh
-21
0.1
Илья Поколев @pin2t

Программист

Send message
Именно. Города растут, и потребляют все больше энергии на обогрев/освещение/транспорт. Естественно они греют воздух внутри города.
Все равно это относительно недавняя движуха, по сравнению с возрастом популярных Java фреймворков, JavaScript, Ruby и прочих.
До этого был прибит.
ну С# он к винде почти прибит гвоздями, а винда не то чтобы очень популярная платформа для хостинга веб-приложений. Скорее для десктопа. А Java везде.
Вот именно. Плюс из-за этого ещё ругают Java мол многословный язык. А вот разработчики Spark доказали что можно и на Java писать лаконично и понятно, если просто не писать всякую лишнюю ерунду. У них на сайте есть примерчик REST API с использованием Sql2o, вообще нормально получается по-моему.
Разработчики Spark прям молодцы, как минимум пишут код на Java, а не на аннотациях вперемешку с XML-ем. Хороший фреймворк.
Вы хоть в Java коде
new Person()

напишите, а то tom-то так и не создался
Нет, ни одного. И в связи с этим собственно и вопрос, а собирается ли Павел делать TON?
Эти исходники с весны лежат в сети, изменений никаких пора. Павел же написал, любая официальная информация по TON только на сайте telegram.org, все остальное не настоящее.
Вы попробуйте потратить хотябы 2000. Чтобы потратить 12000 надо тренироваться много лет каждый день, начиная с 2000.

Обычному среднестатистическому человеку очень сложно будет потратить даже 2000, очень сложно. Потратить 12000 он просто не сможет никак, ни физически, ни психолоически.
Проблема логистики тут как раз основная. Чтобы построить что-то где-то надо материалы, техника и люди. Все это можно привезти по железной дороге, это самый дешевый метод доставки грузов по суше, самый дешевый. Независимо от тягового локомотива, просто потому что дорога ровная. При налчиии уже существующей железной дороги провести переллельно высоковольтную линию в сто раз проще чем без дороги.
Так и в варианте с жденериками куча повторов, например
fieldHashMap = restClient.fiedsMapForRequest2(1234)
                headersHashMap = restClient.headers()

Но это не главное, главное что в buildRequest передается функция которую надо вызвать, и список параметров которые надо передать. Это просто непонятный сложный вызов функции.
Если бы buildRequest возвращал Request и не выполнял его сразу, а например куда-то складывал для последующего выполнения — это имело бы смысл. Но для простого вызова функции так усложнять незачем, по-моему.
Я бы вообще второй catch убрал. Я про общую идею, исключения я просто скопировал. Там и с корутинами лажа вообщем-то
Такая кажущаяся общей функция на самом деле нифига не общая и не решает никаких задач. вы также туда передаете api::request1 и api::request2 и параметры к ним, просто в очень непонятном и причудливом виде.
Надо просто сделать класс TokenApi, который будет вызывать эти же функции но добавлять токен
class TokenApi(private val api: Api, private val prefs: SharedPreferences) {

    suspend fun request1(last: Long, autoView: Boolean): Answer1 {
        val res = api.request1(last, autoView, headers())
        saveToken(res)
        return res?.body()
    }

    suspend fun request2(id: Long): Answer2 {
        val res =  api.request2(id, headers())
        saveToken(res)
        return res?.body()
    }
    private val TOKEN_KEY = "Token"
    private val ID_KEY = "ID"
    fun headers(): Map<String, String> {
        return mapOf(
            TOKEN_KEY to prefs.getString(Constants.Preferences.SP_TOKEN_KEY, ""),
            ID_KEY to prefs.getLong(Constants.Preferences.SP_ID, -1).toString()
        )
    }

    fun saveToken(res) {
        val newToken = res?.headers()?.get(TOKEN_KEY)
        val newID = res?.headers()?.get(ID_KEY)?.toLong()
        if (newToken.notNull() && newID.notNull()) {
            prefs.edit()
                .putString(TOKEN_KEY, newToken)
                .putLong(ID_KEY, newID)
                .apply()
        }
    }
}

...


try {
    val tApi = new TokenApi(api, prefs)
    val answer1 = tApi.request1(1, false)
    val answer2 = tApi.request2(1234)
} catch (e: Exception) {
       viewState.showError(e.message.toString())
} catch (e: InterruptedException) {
        viewState.showError(e.message.toString())
} finally {
        viewState.hideProgress()
}

Вот и все, проще и понятнее чем мудреж с дженериками
Тихий ужас у вас в коде. Почему
val answer1 = restClient.buildRequest<Answer1> {
            

возвращает Answer?, логично чтобы buildRequest возвращал Request, не?
Я совсем не разбираюсь в ж/д экономике, мне просто кажется что в Советском Союзе и России строили/строят контактные сети, отому что это самый дешевый вариант в долгосрочной перспективе
Ну тоесть контактная сеть все-таки есть, вместе с питающими подстанциями, вольтдобавочными трансформаторами и увеличенным сечением.
Конечно все это надо делать. Я просто имел в виду, что при наличии ж/д это все сделать намного проще, чем прокладывать линию электропередачи где-нить в лесу в горах.
Да, думаете их кк-то по-другому строят.
В целом то что поезд ходит по 5 раз в день туда/сюда это хорошо, техника работает, а не простаивает. Есть только сомнения, будут ли успевать заряжаться батареи в таком режиме.
Ну а коли уж государство за все платит тут да, можно делать что угодно. Купить пять локомотивов на батареях, например, которые будут 60% времени стоять и заряжать батареи, вместо одного дизельного, который ходит постоянно.
Интересно, почему Вы думаете что руководство австрийских ж/д не умеет считать?

Я — так не думаю. Уверен, руководство ж/д определенно хорошо умеет считать.
Строительство целой железной дороги под один состав это тоже подтверждает.

Information

Rating
4,208-th
Location
Магнитогорск, Челябинская обл., Россия
Registered
Activity

Specialization

Backend Developer
Git
PostgreSQL
OOP
Linux
Docker
Java
REST
Golang
English