LINUX.ORG.RU

Сообщения bryak

 

Как опмитизировать такой кусок кода?

Форум — Development
var temp_str = ""
if(opsos.size == 4) {
    temp_str = opsos[2]
} else {
    val phone_size = 10
    for(i in 0..phone_size-opsos[0].toInt()) {
        temp_str += "#"
    }
}

 

bryak
()

firefox как запретить suspend tab?

Форум — Desktop

Очень неудобно, когда открываешь броузер и все табы, кроме текущего, являются suspend, перехожу на любой из них и они начинают рефрешиться. Как запретить firefox’у это делать?

 , ,

bryak
()

Вопросы про авторизацию и push messages

Форум — Development

Хочу спросить общие вопросы, чтобы понимать общие моменты. Я делаю приложение, у которого будет авторизация по номеру телефона и верификация. Бекенд будет на djangorest. Я думал сделать так:

  1. человек отправляет запрос на верификацию
  2. ему приходит смс с кодом
  3. человек вбивает код и бекенд чекает валидный ли код
  4. если валидный - формирует токен и передает этот токен клиенту
  5. клиент сохраняет этот токен и каждый раз, когда выполняет какие-то запросы к бекенду, сервер аутентификации чекает этот токен

Так же в приложении будут push messages. Они реально нужны. Отсюда возникают вполне закономерные вопросы:

Верификация:

  1. поиск платформы, которая сможет верифицировать юзеров с помощью смс
  2. выбор платформы из всех существующих

Прайс firebase: 10к юзеров бесплатно в месяц, за авторизацию +10к юзеров придется заплатить $600 т.е $0.06 верификация

Прайс twilio: $0.0075 за каждую смс

По идее twilio дешевле, чем firebase. Но тут есть несколько вопросов по всем этим платформам

  1. возможно ли в firebase сделать так, чтобы я только делал верификацию юзеров при реге, а потом я им выдавал токен и авторизовывал их у себя на бекенде?

  2. если я использую twilio для верификации, смогу ли я использовать push message в firebase? Или юзеры должны обязательно авторизоваться в firebase, чтобы принимать push message?

  3. Можно ли как-то организовать push message без участия firebase? Т.е, допустим, аплекейшен подписывается на на какую-то ветку rabbitmq, слушает ее и как только туда прилетает message «адресованный» ей - она этот message показывает как push message

 , ,

bryak
()

есть что-то типа хуков?

Форум — Admin

У меня есть измененный конфиг docker’a. При обновлении пакетов, конфиг докера меняется на дефолтный. Думаю, может есть какая-то система хуков в дебиане, чтобы если обновляется какой-то пакет, внутри хука выполнить команду(sed), чтобы зареплейсить строку конфига

 

bryak
()

верификация с помощью смс

Форум — Development
  1. какие сервисы кто использует?
  2. есть ли у данных сервисов семплы под kotlin?
  3. С firebase не понятно. Там до 10к верификаций в месяц бесплатно или всего 10к бесплатно?

 , ,

bryak
()

как взять код страны?

Форум — Development

т.е если Украина - +3, если Россия - +7 и тд

 ,

bryak
()

class this. не работает пример из книги

Форум — Development

в книге написано:

 Если вы привыкли использовать одно имя, то добавьте this

class WildCat(name: String, weight: Int, breed: String){
    val this.name = name
    var this.weight = weight
    val this.breed = breed
}

Делаю:

package com.example.socialkotlin
import android.graphics.Color.*
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import java.util.concurrent.Executors
import kotlin.system.*
import kotlinx.android.synthetic.main.content_main.*
// import kotlinx.coroutines.*
import kotlinx.coroutines.delay
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
// import kotlinx.coroutines.CommonPool
import kotlinx.coroutines.async
import kotlinx.coroutines.AbstractCoroutine
import kotlinx.coroutines.asCoroutineDispatcher
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.CoroutineScope

import java.util.concurrent.*
import kotlinx.coroutines.channels.*
import kotlinx.coroutines.channels.actor


class WildCat(name: String, weight: Int, breed: String){
    val this.name = name
    var this.weight = weight
    val this.breed = breed
}

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        Log.d("TAG", "----------------------------")

        
        val test = WildCat("zzzz", 12, "zzzz1")
        Log.d("TAG", test.name.toString())
        
        super.onCreate(savedInstanceState)
        setContentView(R.layout.content_main)
        text_id.setText("zzz2")
        // text_id.setText(getWarmth(c).toString())
    }

}

out:

> Task :app:compileDebugKotlin FAILED
e: /home/user/media/source_project/socialkotlin/app/src/main/java/com/example/socialkotlin/MainActivity.kt: (26, 9): Type expected
e: /home/user/media/source_project/socialkotlin/app/src/main/java/com/example/socialkotlin/MainActivity.kt: (27, 9): Type expected
e: /home/user/media/source_project/socialkotlin/app/src/main/java/com/example/socialkotlin/MainActivity.kt: (28, 9): Type expected
e: /home/user/media/source_project/socialkotlin/app/src/main/java/com/example/socialkotlin/MainActivity.kt: (26, 21): Extension property cannot be initialized because it has no backing field
e: /home/user/media/source_project/socialkotlin/app/src/main/java/com/example/socialkotlin/MainActivity.kt: (27, 23): Extension property cannot be initialized because it has no backing field
e: /home/user/media/source_project/socialkotlin/app/src/main/java/com/example/socialkotlin/MainActivity.kt: (28, 22): Extension property cannot be initialized because it has no backing field
e: /home/user/media/source_project/socialkotlin/app/src/main/java/com/example/socialkotlin/MainActivity.kt: (37, 27): Unresolved reference: name

 ,

bryak
()

Не получается set в классе

Форум — Development
class Cat(val name: String, weight_param: Int, breed_param: String) {

    var activities = arrayOf("Play")
    val breed = breed_param.toUpperCase()
    
    var weight = weight_param
        set(value) {
            Log.d("TAG", "in set()")
            if (value > 0) {
                Log.d("TAG", "yes")
                field = value
            }
            else {
                Log.d("TAG", "no")
                field = 0
            }
        }
    
    val weightInGramms: Int
        get() = weight * 1000

    fun sleep() {
        println(if (weight < 3) "сопит!" else "храпит!")
    }
}

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        Log.d("TAG", "----------------------------")

        val cat = Cat("Васька", -3, "Дворовая")
        Log.d("TAG", cat.weightInGramms.toString()) // возвращает 3000
        
        super.onCreate(savedInstanceState)
        setContentView(R.layout.content_main)
        text_id.setText("zzz2")
        // text_id.setText(getWarmth(c).toString())
    }

}

 ,

bryak
()

таймер на андроид(специфический)

Форум — Desktop

Никому не попадался таймер такой специфики: я нажимаю старт - тикает время. Я нажимаю стоп. Далее я нажимаю на кнопку еще раз - тикает в обратном порядке:

старт --> 1, 2, 3, 4, 5
стоп --> 5
старт --> 5, 4, 3, 2, 1

 ,

bryak
()

debian есть ли кастомные ядра?

Форум — Admin

Есть ли для дебиана какие-то скрипты\репы, которые позволяют накладывать какие-то патчи, по типу geek-sources(не знаю живо ли это сейчас)?

 , ,

bryak
()

Как сделать правильно патч?

Форум — Development

Есть сорсы ядра /usr/src/linux-source-4.19, я накладываю патч и он накладывается с ошибками. Я их исправляю. После того, как я пофиксил ошибки, я хочу сделать патч, который я смогу без проблем наложить в следующий раз. Как это правильно сделать. Итак, есть набор действий:

cd /usr/src

1. rm -rf linux-source-4.19
2. tar xJpf linux-source-4.19.tar.xz
3. cp -prf cp -prf /boot/config-"$(uname -r)" .config

cd linux-source-4.19

4. patch -p1 < kernel_gcc_patch/usr/src/kernel_gcc_patch/enable_additional_cpu_optimizations_for_gcc_v9.1+_kernel_v4.13+.patch
5. фиксим ошибки после наложения ядра
6. набор действий, чтобы сделать патч(вопрос топика)

 , ,

bryak
()

kotlin акторы. Помогите собрать пример

Форум — Development
package com.example.socialkotlin
import android.graphics.Color.*
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import java.util.concurrent.Executors
import kotlin.system.*
import kotlinx.android.synthetic.main.content_main.*
// import kotlinx.coroutines.*
import kotlinx.coroutines.delay
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
// import kotlinx.coroutines.CommonPool
import kotlinx.coroutines.async
import kotlinx.coroutines.AbstractCoroutine
import kotlinx.coroutines.asCoroutineDispatcher
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.CoroutineScope

import java.util.concurrent.*
import kotlinx.coroutines.channels.*
import kotlinx.coroutines.channels.actor



val threadPoolExecutor = Executors.newCachedThreadPool()
// val threadPoolExecutor = Executors.newFixedThreadPool(5)
val threadPool = threadPoolExecutor.asCoroutineDispatcher()

sealed class CounterMsg {
    object IncCounter : CounterMsg() // one-way message to increment counter
    class GetCounter(val response: SendChannel<Int>) : CounterMsg() // a request with channel for reply.
}

fun counterActor() = GlobalScope.actor<CounterMsg>(threadPool) { //(1)
    var counter = 0 //(9) actor state, not shared
    for (msg in channel) { // handle incoming messages
        when (msg) {
            is CounterMsg.IncCounter -> counter++ //(4)
            is CounterMsg.GetCounter -> msg.response.send(counter) //(3)
        }
    }
}

suspend fun getCurrentCount(counter: ActorJob<CounterMsg>): Int { //(8)
    val response = Channel<Int>() //(2)
    counter.send(CounterMsg.GetCounter(response))
    val receive = response.receive()
    println("Counter = $receive")
    return receive
}


class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        Log.d("TAG", "----------------------------")
        
        // val counter = counterActor()
        // GlobalScope.launch(threadPool) {
        //     //(5)
        //     while(getCurrentCount(counter) < 100){
        //         delay(100)
        //         Log.d("TAG", "sending IncCounter message")
        //         counter.send(CounterMsg.IncCounter) //(7)
        //     }
        // }

        // GlobalScope.launch(threadPool) {
        //     //(6)
        //     while (getCurrentCount(counter) < 100) {
        //         delay(200)
        //     }
        // }.join()
        // counter.close() // shutdown the actor

        // GlobalScope.launch {
        //     val channel = basicActor()

        //     channel.send(Message.Increment(1))
        //     channel.send(Message.Increment(2))

        //     val deferred = CompletableDeferred<Int>()

        //     channel.send(Message.GetValue(deferred))

        //     Log.d("TAG", deferred.await().toString()) // prints "3"

        //     channel.close()
        // }

        GlobalScope.launch {
        val counter = counterActor()

        launch(threadPool) { //(5)
            while(getCurrentCount(counter) < 100){
                delay(100)
                println("sending IncCounter message")
                counter.send(CounterMsg.IncCounter) //(7)
            }
        }

        launch(threadPool) { //(6)
        while ( getCurrentCount(counter) < 100) {
            delay(200)
        }
        }.join()
        counter.close() // shutdown the actor
        }
        

        super.onCreate(savedInstanceState)
        setContentView(R.layout.content_main)
        text_id.setText("zzz2")
        // text_id.setText(getWarmth(c).toString())
    }
}

out:

> Task :app:compileDebugKotlin FAILED
e: /home/user/media/source_project/socialkotlin/app/src/main/java/com/example/socialkotlin/MainActivity.kt: (45, 38): Unresolved reference: ActorJob

 , ,

bryak
()

Добавить coroutines в build.gradle

Форум — Development
> Task :app:compileDebugKotlin FAILED
e: /home/user/media/source_project/socialkotlin/app/src/main/java/com/example/socialkotlin/MainActivity.kt: (39, 5): Unresolved reference: GlobalScope
e: /home/user/media/source_project/socialkotlin/app/src/main/java/com/example/socialkotlin/MainActivity.kt: (40, 7): Unresolved reference: delay

Нужно добавить coroutines в build.gradle. Не могу понять, как это правильно сделать

 , , ,

bryak
()

future garage сборники где найти?

Форум — Talks

Есть какие-то сборники направления future garage?

 ,

bryak
()

Как бы слить всю музыку с youtube канала?

Форум — Talks

 ,

bryak
()

вывод информации с примеров в setContentView

Форум — Development

Т.к многие примеры не работают вне контекста андроид приложения, было принято решение разбирать примеры kotlin в контексте андроид приложения. Создал минимальное приложение в андроид студио с mainactivity, которое имеет код

package com.example.socialkotlin

import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import androidx.appcompat.app.AppCompatActivity
import com.google.android.material.snackbar.Snackbar
import kotlinx.android.synthetic.main.activity_main.*
import android.util.Log


// class SomeActivity : Activity(), AnkoLogger {
//     private fun someMethod() {
//         info("London is the capital of Great Britain")
//         debug(5) // .toString() method will be executed
//         warn(null) // "null" will be printed
//     }
// }




class MainActivity : AppCompatActivity() {

  override fun onCreate(savedInstanceState: Bundle?) {
    Log.d("TAG", "----------------------message")
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    setSupportActionBar(toolbar)

    fab.setOnClickListener {
      view -> Snackbar.make(
        view,
        "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null
      ).show()
    }
  }

  override fun onCreateOptionsMenu(menu: Menu): Boolean {
    // Inflate the menu; this adds items to the action bar if it is present.
    menuInflater.inflate(R.menu.menu_main, menu)
    return true
  }

  override fun onOptionsItemSelected(item: MenuItem): Boolean {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    return when (item.itemId) {
      R.id.action_settings -> true
      else -> super.onOptionsItemSelected(item)
    }
  }
}

я так понимаю, что информация выводится в

setContentView(R.layout.activity_main)

которая тянет информацию с

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".MainActivity"
    tools:showIn="@layout/activity_main">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!9992"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

Как бы сделать так, чтобы можно было результат работы примеров отображать в setContentView?

 ,

bryak
()

autosuspend systemd

Форум — Desktop

Хочу, чтобы при старте системы при неактивности система уходила в standby

Делаю так:

cat /etc/systemd/sleep.conf

[Sleep]
AllowSuspend=yes
SuspendMode=disk

cat /etc/systemd/logind.conf

[Login]
IdleAction=suspend
IdleActionSec=1min

В итоге при неактивности в 1 минуту ничего не происходит

 , ,

bryak
()

Вопросы по kotlin

Форум — Development

Если умное приведение вам не нужно, то используйте запись с безопасным оператором ?.

val a: Int? = null
a?.toLong()

Функция будет вызвана только в том случае, если значение a отлично от null. Безопасные вызовы можно сцеплять.

Проверяем:

fun main(args: Array<String>) {
  // throw CustomException("Threw custom exception")
  val a: Int? = null
  print(a?.toString())
}

out:

null

 ,

bryak
()

ktlint как сделать force format?

Форум — Development
  1. какой у ktlint файл настроек? Он глобальный или локальный?
  2. как указать force format?

при чем здесь emacs?

Притом, что https://github.com/lassik/emacs-format-all-the-code не умеет в аргументы. И не получится прописать внутри него опцию -F

 , ,

bryak
()

java 1000 тредов. Съедает память

Форум — Development

Взял тестовый сорс из книги, немного его подрихтовал на запуск 1000 тредов. Запустил, меряю ps_mem -p pid и вижу, что потихонечку память процесса увеличивается. Это нормально или где-то тут протекает? :)

// Create a second thread.
class NewThread implements Runnable {
  Thread t;

  NewThread(String name) {
    // Create a new, second thread
    t = new Thread(this, name);
    System.out.println("Child thread: " + t);
  }

  // This is the entry point for the second thread.
  public void run() {
    try {
      // for (int i = 5; i > 0; i--) {
      for (int i = 5;; i--) {
        System.out.println(Thread.currentThread());
        System.out.println("Child Thread: " + i);
        Thread.sleep(500);
      }
    } catch (InterruptedException e) {
      System.out.println("Child interrupted.");
    }
    System.out.println("Exiting child thread.");
  }
}

class HelloWorld {
  public static void main(String[] args) {
    // NewThread nt = new NewThread(); // create a new thread
    // nt.t.start(); // Start the thread

    for(int x = 0; x <= 1000; x++) {
      System.out.println("aaaa");
      NewThread nt = new NewThread("some" + x); // create a new thread
      nt.t.start(); // Start the thread
    }

    try {
      for (int i = 5;; i--) {
        System.out.println("Main Thread: " + i);
        Thread.sleep(1000);
      }
    } catch (InterruptedException e) {
      System.out.println("Main thread interrupted.");
    }
    System.out.println("Main thread exiting.");
  }
}

 ,

bryak
()

RSS подписка на новые темы