LINUX.ORG.RU

Сообщения TDrive

 

systemd timers, запуск пропусков

 

Пытаюсь перейти с cron на systemd timers ибо там есть расписание по секундам. Столкнулся с разной работой таймеров в ubuntu и gentoo

Написал пример сервиса:

~/.config/systemd/user/check.service:

[Unit]
Description=Check

[Service]
Type=oneshot
ExecStart=/usr/bin/date
StandardOutput=append:/tmp/check-user.log
StandardError=append:/tmp/check-user.log

~/.config/systemd/user/check.timer:

[Unit]
Description=Check

[Timer]
OnCalendar=*-*-* *:*:00
AccuracySec=1us
Persistent=false

[Install]
WantedBy=default.target

Мне не нужен запуск пропусков расписания по этому Persistent=false

В результате на проде c Ubuntu 24.04 cтартуем таймер, дожидаемся когда он 1 раз отработает, потом делаем systemctl --user restart check.timer и в момент рестарта он запускает сервис ещё раз.

В gentoo на локальной машине такого нету, можно спокойно выключать и он не запускается при включении.

В убунту systemd 255 (255.4-1ubuntu8.12), в генте systemd 257 (257.10)

Это можно как то исправить? В чём вообще прикол запускать задачи при рестарте с Persistent=false?

TDrive
()

Rust, sdl3, обработка событий в треде

 ,

Задача сделать так, чтобы все события клавиатуры обрабатывались в своём цикле в отдельном треде. Сделать без треда у меня получилось, когда добавляю тред начинается какой то ад с владением над переменными и полная консоль ошибок.

Вот код:

Cargo.toml

[package]
name = "test"
version = "0.0.1-alpha.0"
edition = "2018"

[dependencies]
sdl3 = { version = "0.14.26", features = ["build-from-source"]}
gl = "0.14.0"

[dev-dependencies]

main.rs

use std::sync::{Arc, Mutex};
use std::thread;

fn main() {
  let mut win = test::win::init("Test", 1920, 1080);

  gl::load_with(|s| win.video_subsystem.gl_get_proc_address(s).unwrap() as *const _);

  let offset_x = Arc::new(Mutex::new(0));

  let a_clone_offset_x = Arc::clone(&offset_x);
  win.key_handlers.insert("A".to_string(), Box::new(move || {
    *a_clone_offset_x.lock().unwrap() -= 1;
    println!("{:?}", a_clone_offset_x);
  }));
  
  let d_clone_offset_x = Arc::clone(&offset_x);
  win.key_handlers.insert("D".to_string(), Box::new(move || {
    *d_clone_offset_x.lock().unwrap() += 1;
    println!("{:?}", d_clone_offset_x);
  }));

  // thread::spawn(move || {
    win.handle_events();
  // });

  loop {};
}

win.rs

use sdl3::{Sdl, VideoSubsystem, EventPump};
use sdl3::video::{GLProfile, GLContext, Window};
use std::collections::HashMap;

pub struct Win {
  pub sdl_context: Sdl, 
  pub video_subsystem: VideoSubsystem,
  pub window: Window,
  pub gl_context: GLContext, 
  pub event_pump: EventPump,
  pub key_handlers: HashMap<String, Box<dyn Fn() -> () >>,
}

pub fn init(title: &str, width: u32, height: u32) -> Win {
  let sdl_context = sdl3::init().unwrap();
  let video_subsystem = sdl_context.video().unwrap();
  let gl_attr = video_subsystem.gl_attr();

  gl_attr.set_context_profile(GLProfile::Core);
  gl_attr.set_context_flags().debug().set();
  gl_attr.set_context_version(3, 3);
  gl_attr.set_multisample_buffers(1);
  gl_attr.set_multisample_samples(4);

  let window = video_subsystem.window(title, width, height)
    .position_centered()
    .resizable()
    // .maximized()
    // .fullscreen()
    .opengl()
    .build()
    .unwrap();

  let gl_context = window.gl_create_context().unwrap();
  let event_pump = sdl_context.event_pump().unwrap();
  let key_handlers = HashMap::new();

  Win {sdl_context, video_subsystem, window, gl_context, event_pump, key_handlers}
}


impl Win {
  pub fn handle_events(&mut self) {
    let event_pump = &mut self.event_pump;

    loop {
      use sdl3::event::Event;
      use sdl3::event::Event::KeyDown;
      use sdl3::keyboard::Keycode::*;
      
      let event = event_pump.wait_event();
      
      // println!("{:?}", event);

      match event {
        Event::Quit {..} => std::process::exit(123),
        KeyDown { keycode: Some(A), .. } => self.key_handlers["A"](),
        KeyDown { keycode: Some(D), .. } => self.key_handlers["D"](),
        _ => {}
      }
    }
  }
}

Если в main.rs добавить тред вокруг win.handle_events(); получаю вот это

error[E0277]: `*mut sdl3_sys::generated::video::SDL_GLContextState` cannot be sent between threads safely
   --> src/main.rs:23:17
    |
23  |     thread::spawn(move || {
    |     ------------- ^------
    |     |             |
    |  ___|_____________within this `{closure@src/main.rs:23:17: 23:24}`
    | |   |
    | |   required by a bound introduced by this call
24  | |     win.handle_events();
25  | |   });
    | |___^ `*mut sdl3_sys::generated::video::SDL_GLContextState` cannot be sent between threads safely
    |
    = help: within `{closure@src/main.rs:23:17: 23:24}`, the trait `Send` is not implemented for `*mut sdl3_sys::generated::video::SDL_GLContextState`
note: required because it appears within the type `sdl3::video::GLContext`
   --> /home/archer/.asdf/installs/rust/1.84.1/registry/src/index.crates.io-6f17d22bba15001f/sdl3-0.14.26/src/sdl3/video.rs:519:12
    |
519 | pub struct GLContext {
    |            ^^^^^^^^^
note: required because it appears within the type `Win`
   --> /home/archer/Work/Test/src/win.rs:5:12
    |
5   | pub struct Win {
    |            ^^^
note: required because it's used within this closure
   --> src/main.rs:23:17
    |
23  |   thread::spawn(move || {
    |                 ^^^^^^^
note: required by a bound in `spawn`
   --> /rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58/library/std/src/thread/mod.rs:724:1

error[E0277]: `*mut ()` cannot be sent between threads safely
   --> src/main.rs:23:17
    |
23  |     thread::spawn(move || {
    |     ------------- ^------
    |     |             |
    |  ___|_____________within this `{closure@src/main.rs:23:17: 23:24}`
    | |   |
    | |   required by a bound introduced by this call
24  | |     win.handle_events();
25  | |   });
    | |___^ `*mut ()` cannot be sent between threads safely
    |
    = help: within `{closure@src/main.rs:23:17: 23:24}`, the trait `Send` is not implemented for `*mut ()`
note: required because it appears within the type `PhantomData<*mut ()>`
   --> /rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58/library/core/src/marker.rs:753:12
note: required because it appears within the type `sdl3::sdl::VideoSubsystem`
   --> /home/archer/.asdf/installs/rust/1.84.1/registry/src/index.crates.io-6f17d22bba15001f/sdl3-0.14.26/src/sdl3/sdl.rs:308:12
    |
308 | subsystem!(VideoSubsystem, SDL_INIT_VIDEO, VIDEO_COUNT, nosync);
    |            ^^^^^^^^^^^^^^
note: required because it appears within the type `Win`
   --> /home/archer/Work/Test/src/win.rs:5:12
    |
5   | pub struct Win {
    |            ^^^
note: required because it's used within this closure
   --> src/main.rs:23:17
    |
23  |   thread::spawn(move || {
    |                 ^^^^^^^
note: required by a bound in `spawn`
   --> /rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58/library/std/src/thread/mod.rs:724:1

error[E0277]: `*mut sdl3_sys::generated::video::SDL_Window` cannot be shared between threads safely
   --> src/main.rs:23:17
    |
23  |     thread::spawn(move || {
    |  ___-------------_^
    | |   |
    | |   required by a bound introduced by this call
24  | |     win.handle_events();
25  | |   });
    | |___^ `*mut sdl3_sys::generated::video::SDL_Window` cannot be shared between threads safely
    |
    = help: within `sdl3::video::WindowContext`, the trait `Sync` is not implemented for `*mut sdl3_sys::generated::video::SDL_Window`
note: required because it appears within the type `sdl3::video::WindowContext`
   --> /home/archer/.asdf/installs/rust/1.84.1/registry/src/index.crates.io-6f17d22bba15001f/sdl3-0.14.26/src/sdl3/video.rs:544:12
    |
544 | pub struct WindowContext {
    |            ^^^^^^^^^^^^^
    = note: required for `Arc<sdl3::video::WindowContext>` to implement `Send`
note: required because it appears within the type `sdl3::video::Window`
   --> /home/archer/.asdf/installs/rust/1.84.1/registry/src/index.crates.io-6f17d22bba15001f/sdl3-0.14.26/src/sdl3/video.rs:683:12
    |
683 | pub struct Window {
    |            ^^^^^^
note: required because it appears within the type `Win`
   --> /home/archer/Work/Test/src/win.rs:5:12
    |
5   | pub struct Win {
    |            ^^^
note: required because it's used within this closure
   --> src/main.rs:23:17
    |
23  |   thread::spawn(move || {
    |                 ^^^^^^^
note: required by a bound in `spawn`
   --> /rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58/library/std/src/thread/mod.rs:724:1

error[E0277]: `*mut c_void` cannot be shared between threads safely
   --> src/main.rs:23:17
    |
23  |     thread::spawn(move || {
    |  ___-------------_^
    | |   |
    | |   required by a bound introduced by this call
24  | |     win.handle_events();
25  | |   });
    | |___^ `*mut c_void` cannot be shared between threads safely
    |
    = help: within `sdl3::video::WindowContext`, the trait `Sync` is not implemented for `*mut c_void`
note: required because it appears within the type `sdl3::video::WindowContext`
   --> /home/archer/.asdf/installs/rust/1.84.1/registry/src/index.crates.io-6f17d22bba15001f/sdl3-0.14.26/src/sdl3/video.rs:544:12
    |
544 | pub struct WindowContext {
    |            ^^^^^^^^^^^^^
    = note: required for `Arc<sdl3::video::WindowContext>` to implement `Send`
note: required because it appears within the type `sdl3::video::Window`
   --> /home/archer/.asdf/installs/rust/1.84.1/registry/src/index.crates.io-6f17d22bba15001f/sdl3-0.14.26/src/sdl3/video.rs:683:12
    |
683 | pub struct Window {
    |            ^^^^^^
note: required because it appears within the type `Win`
   --> /home/archer/Work/Test/src/win.rs:5:12
    |
5   | pub struct Win {
    |            ^^^
note: required because it's used within this closure
   --> src/main.rs:23:17
    |
23  |   thread::spawn(move || {
    |                 ^^^^^^^
note: required by a bound in `spawn`
   --> /rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58/library/std/src/thread/mod.rs:724:1

error[E0277]: `*mut sdl3_sys::generated::video::SDL_Window` cannot be sent between threads safely
   --> src/main.rs:23:17
    |
23  |     thread::spawn(move || {
    |  ___-------------_^
    | |   |
    | |   required by a bound introduced by this call
24  | |     win.handle_events();
25  | |   });
    | |___^ `*mut sdl3_sys::generated::video::SDL_Window` cannot be sent between threads safely
    |
    = help: within `sdl3::video::WindowContext`, the trait `Send` is not implemented for `*mut sdl3_sys::generated::video::SDL_Window`
note: required because it appears within the type `sdl3::video::WindowContext`
   --> /home/archer/.asdf/installs/rust/1.84.1/registry/src/index.crates.io-6f17d22bba15001f/sdl3-0.14.26/src/sdl3/video.rs:544:12
    |
544 | pub struct WindowContext {
    |            ^^^^^^^^^^^^^
    = note: required for `Arc<sdl3::video::WindowContext>` to implement `Send`
note: required because it appears within the type `sdl3::video::Window`
   --> /home/archer/.asdf/installs/rust/1.84.1/registry/src/index.crates.io-6f17d22bba15001f/sdl3-0.14.26/src/sdl3/video.rs:683:12
    |
683 | pub struct Window {
    |            ^^^^^^
note: required because it appears within the type `Win`
   --> /home/archer/Work/Test/src/win.rs:5:12
    |
5   | pub struct Win {
    |            ^^^
note: required because it's used within this closure
   --> src/main.rs:23:17
    |
23  |   thread::spawn(move || {
    |                 ^^^^^^^
note: required by a bound in `spawn`
   --> /rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58/library/std/src/thread/mod.rs:724:1

error[E0277]: `*mut c_void` cannot be sent between threads safely
   --> src/main.rs:23:17
    |
23  |     thread::spawn(move || {
    |  ___-------------_^
    | |   |
    | |   required by a bound introduced by this call
24  | |     win.handle_events();
25  | |   });
    | |___^ `*mut c_void` cannot be sent between threads safely
    |
    = help: within `sdl3::video::WindowContext`, the trait `Send` is not implemented for `*mut c_void`
note: required because it appears within the type `sdl3::video::WindowContext`
   --> /home/archer/.asdf/installs/rust/1.84.1/registry/src/index.crates.io-6f17d22bba15001f/sdl3-0.14.26/src/sdl3/video.rs:544:12
    |
544 | pub struct WindowContext {
    |            ^^^^^^^^^^^^^
    = note: required for `Arc<sdl3::video::WindowContext>` to implement `Send`
note: required because it appears within the type `sdl3::video::Window`
   --> /home/archer/.asdf/installs/rust/1.84.1/registry/src/index.crates.io-6f17d22bba15001f/sdl3-0.14.26/src/sdl3/video.rs:683:12
    |
683 | pub struct Window {
    |            ^^^^^^
note: required because it appears within the type `Win`
   --> /home/archer/Work/Test/src/win.rs:5:12
    |
5   | pub struct Win {
    |            ^^^
note: required because it's used within this closure
   --> src/main.rs:23:17
    |
23  |   thread::spawn(move || {
    |                 ^^^^^^^
note: required by a bound in `spawn`
   --> /rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58/library/std/src/thread/mod.rs:724:1

error[E0277]: `*mut ()` cannot be shared between threads safely
   --> src/main.rs:23:17
    |
23  |     thread::spawn(move || {
    |  ___-------------_^
    | |   |
    | |   required by a bound introduced by this call
24  | |     win.handle_events();
25  | |   });
    | |___^ `*mut ()` cannot be shared between threads safely
    |
    = help: within `sdl3::video::WindowContext`, the trait `Sync` is not implemented for `*mut ()`
note: required because it appears within the type `PhantomData<*mut ()>`
   --> /rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58/library/core/src/marker.rs:753:12
note: required because it appears within the type `sdl3::sdl::VideoSubsystem`
   --> /home/archer/.asdf/installs/rust/1.84.1/registry/src/index.crates.io-6f17d22bba15001f/sdl3-0.14.26/src/sdl3/sdl.rs:308:12
    |
308 | subsystem!(VideoSubsystem, SDL_INIT_VIDEO, VIDEO_COUNT, nosync);
    |            ^^^^^^^^^^^^^^
note: required because it appears within the type `sdl3::video::WindowContext`
   --> /home/archer/.asdf/installs/rust/1.84.1/registry/src/index.crates.io-6f17d22bba15001f/sdl3-0.14.26/src/sdl3/video.rs:544:12
    |
544 | pub struct WindowContext {
    |            ^^^^^^^^^^^^^
    = note: required for `Arc<sdl3::video::WindowContext>` to implement `Send`
note: required because it appears within the type `sdl3::video::Window`
   --> /home/archer/.asdf/installs/rust/1.84.1/registry/src/index.crates.io-6f17d22bba15001f/sdl3-0.14.26/src/sdl3/video.rs:683:12
    |
683 | pub struct Window {
    |            ^^^^^^
note: required because it appears within the type `Win`
   --> /home/archer/Work/Test/src/win.rs:5:12
    |
5   | pub struct Win {
    |            ^^^
note: required because it's used within this closure
   --> src/main.rs:23:17
    |
23  |   thread::spawn(move || {
    |                 ^^^^^^^
note: required by a bound in `spawn`
   --> /rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58/library/std/src/thread/mod.rs:724:1

error[E0277]: `(dyn Fn() + 'static)` cannot be sent between threads safely
  --> src/main.rs:23:17
   |
23 |     thread::spawn(move || {
   |  ___-------------_^
   | |   |
   | |   required by a bound introduced by this call
24 | |     win.handle_events();
25 | |   });
   | |___^ `(dyn Fn() + 'static)` cannot be sent between threads safely
   |
   = help: the trait `Send` is not implemented for `(dyn Fn() + 'static)`
   = note: required for `Unique<(dyn Fn() + 'static)>` to implement `Send`
note: required because it appears within the type `Box<(dyn Fn() + 'static)>`
  --> /rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58/library/alloc/src/boxed.rs:233:12
   = note: required because it appears within the type `(String, Box<(dyn Fn() + 'static)>)`
   = note: required for `hashbrown::raw::RawTable<(String, Box<(dyn Fn() + 'static)>)>` to implement `Send`
note: required because it appears within the type `hashbrown::map::HashMap<String, Box<(dyn Fn() + 'static)>, RandomState>`
  --> /rust/deps/hashbrown-0.15.0/src/map.rs:185:12
note: required because it appears within the type `HashMap<String, Box<(dyn Fn() + 'static)>>`
  --> /rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58/library/std/src/collections/hash/map.rs:211:12
note: required because it appears within the type `Win`
  --> /home/archer/Work/Test/src/win.rs:5:12
   |
5  | pub struct Win {
   |            ^^^
note: required because it's used within this closure
  --> src/main.rs:23:17
   |
23 |   thread::spawn(move || {
   |                 ^^^^^^^
note: required by a bound in `spawn`
  --> /rustc/e71f9a9a98b0faf423844bf0ba7438f29dc27d58/library/std/src/thread/mod.rs:724:1
help: use parentheses to call this trait object
   |
25 |   }());
   |    ++

For more information about this error, try `rustc --explain E0277`.
error: could not compile `test` (bin "test") due to 8 previous errors

Подскажите как сделать правильно?

TDrive
()

Тор не поддерживает системы без wayland

 , , ,

https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/40693

Такие дела, походу время для очередной попытки перейти на вейланд.

TDrive
()

Вызывающе неверная информация

 

torvn77: Если модератор признал список_лиц тролями и подтвердил опцию, то что плохого в том, чтобы взять с них соответствующую оплату?
TDrive: Модераторам делать больше нехуй? - удалено Shaman007 по причине 4.2 Вызывающе неверная информация (-7)

Какая тут вызывающе неверная информация? Как вопрос может быть вызывающе неверной инфой?

TDrive
()

Как вам идея сделать ссылки на удаленные сообщения работающими?

 

Невозможно же разобраться что там и за что удалили.)

Просто 3 страницы вот таких нотификаций. Все ссылки ведут на стартовый пост, что бы понять что удалено придется включить удаленные сообщения и перечитать всю тему, это невозможно) Просто игнормровать? Зачем они тогда вообще нужны?

Для упоротых отдельно скажу что я не против удаления постов или модерации в целом.

TDrive
()

Давайте серьезно поговорим об изменениях в правилах ЛОРа.

 

Мы тут обсуждали всю эту историю с бряком, предлагали как подобного можно избежать в будущем, были всякие дельные предложения, упоротые так же были но и дельных хватало.

Все это вилами по воде? Я просто хочу понять для себя, стоит ли об этом вообще думать и что либо предлагать?

UPD: https://github.com/maxcom/lorsource/pull/954/files

TDrive
()

Почему ninja такое говно?

 

Это можно считать криком души, в общем слушайте кул стори.

Решил я значит обновить на своем ноуте генту и в коим то веке решил не переносить систему со старого ноута, а собрать все с 0. Загрузил liveCD, разметка дисков, chroot… все как обычно, выбрал нужный профиль, пересобираю мир… падает на моменте ninja -v -j1 -l0 -C /v.... полез в инет, вычитал что ninja не любит когда нехватает оперативки и следует ограничить MAKEOPTS. Ну ок, ограничил до одного потока, я не тороплюсь, вроде как прошло, но упало при сборке Sushi, это какие то привьюхи для наутилуса, думаю хрен сними, да и наутилус мне нафиг не нужен, поубирал юз флаги что бы суши вообще не требовалось, собираю дальше… опять падает и опять ninja чем то недоволен.

Думаю ок, хрень какая то, пофиг на установкой с 0, не в этот раз, синкнул систему из бекапа, все идеально но надо бы обновить, запустил обновление и….. да ninja падает при сборке, в этот раз уже gnome-shell не хочет собираться.

Самый смак в том что когда билд падает в консоле ты видишь вот такую ошибку ninja: build stopped: subcommand failed. Да как вы могли заметить она очень информативная.

Если скопировать команду и выполнить отдельно то будет вот это

# ninja -v -j1 -l0 -C /var/tmp/portage/gnome-base/gnome-shell-40.1-r1/work/gnome-shell-40.1-build
ninja: Entering directory `/var/tmp/portage/gnome-base/gnome-shell-40.1-r1/work/gnome-shell-40.1-build'
[1/15] x86_64-pc-linux-gnu-gcc  -o src/gnome-shell-portal-helper src/gnome-shell-portal-helper.p/meson-generated_.._.._js_portal-resources.c.o src/gnome-shell-portal-helper.p/gnome-shell-portal-helper.c.o -Wl,--as-needed -Wl,--no-undefined -O2 -pipe -march=native -Wl,-O1 -Wl,--as-needed -Wl,--start-group /usr/lib64/libgio-2.0.so /usr/lib64/libgobject-2.0.so /usr/lib64/libglib-2.0.so /usr/lib64/libgjs.so -Wl,--end-group
FAILED: src/gnome-shell-portal-helper
x86_64-pc-linux-gnu-gcc  -o src/gnome-shell-portal-helper src/gnome-shell-portal-helper.p/meson-generated_.._.._js_portal-resources.c.o src/gnome-shell-portal-helper.p/gnome-shell-portal-helper.c.o -Wl,--as-needed -Wl,--no-undefined -O2 -pipe -march=native -Wl,-O1 -Wl,--as-needed -Wl,--start-group /usr/lib64/libgio-2.0.so /usr/lib64/libgobject-2.0.so /usr/lib64/libglib-2.0.so /usr/lib64/libgjs.so -Wl,--end-group
/usr/lib/gcc/x86_64-pc-linux-gnu/10.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: /usr/lib64/libgjs.so: undefined reference to `sysprof_clock'
/usr/lib/gcc/x86_64-pc-linux-gnu/10.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: /usr/lib64/libgjs.so: undefined reference to `sysprof_clock_init'
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.

Повезло что FAILED: src/gnome-shell-portal-helper подсвечивается красным цветом и теперь все стало понятно(нет)

Кто нибудь может рассказать что это за говнище и почему его вдруг начали использовать? Я за последнии пару дней 6 или 7 раз упирался в ошибки с этим сраным ninja и ни разу не понял что он от меня хочет, как этим говном вообще пользоваться?

TDrive
()

Unix Time показывает неправильное время?

 

Есть такая штука високосная секунда

Так вот эта високосная секунда ни как не учитывается компьютерами, ну как минимум в linux. Не в курсе как это решали раньше но например в 2016 гугл просто размазали её на 20 часов (10 до и 10 после) на своих NTP серверах. И с 1972 года таких секунд уже 27.

Я правильно понимаю что Unix Time отстает от реального времени на 27 секунд и за 45 лет эту проблему так ни кто и не решил и судя по всему ни кто и не собирается?

TDrive
()

chrome://inspect на маке с айфоном

 , ,

собственно как заставить работать сабж на маке и айфоне? или есть ли какой аналог? как люди с маками проверяют сайты на айфонах?

TDrive
()

postgresql, как написать такой запрос?

 

create table log (
  id serial constraint log_pkey primary key, 
  type text, 
  created_at timestamp without time zone
);

insert into log (type, created_at) values 
('on', '2016-10-14 10:10:01'),
('off', '2016-10-14 10:10:02'),
('on', '2016-10-14 10:10:03'),
('on', '2016-10-14 10:10:04'),
('off', '2016-10-14 10:10:05');

Есть способ получить из это что то похожее на:

on                  | off
2016-10-14 10:10:01 | 2016-10-14 10:10:02
2016-10-14 10:10:03 | null
2016-10-14 10:10:04 | 2016-10-14 10:10:05
?

postgresql 9.5

TDrive
()

Тестирование софта при низкой скорости сети.

 , , ,

Надо протестировать определенный софт (клиент и сервер) при работе в условиях низкой скорости сети. Ну так чисто для примера пускай будет 10 кбит/c. Как это все можно организовать на одной машине?

Шейперы настраивать не приходилось по этому не в курсе какие там возможности, в общем пните в нужном направлении.

TDrive
()

треды в линукс

 ,

Есть прога на C которая использует <pthread.h> Когда её запускаешь ps -a показывает только один процесс, а htop показывает кучу процессов (соответствует количеству тредов) у каждого есть pid и тд, и соответственно загружают они все ядра процессора.

Вопрос: Почему ps показывает только один процесс а не все как htop? С каких пор треды создают новые процессы? (да с разморозкой меня)

TDrive
()

удаление цветов из вывода

 

есть софтина которая выводит информацию в консоль в раскрашенном виде, если перенаправить её в файл получаем кучу [1;39;49m, [0m, [0;32; и тд.

есть какая нибудь команда которую можно добавить в конвейер и она очистит вывод от цветов? интересуют именно готовые решения, скриптик и сам написать могу.

TDrive
()

ssh сервер ключей

 

Есть у ssh какой нибудь сервер ключей что бы не руками на каждый сервер ключи раскидывать а управлять доступом из одного места и желательно по группам?

TDrive
()

лямбда и каппа архитектуры

 kappa architecture, lambda architecture

Ну с лямбда архитектурой как мне кажется все более менее понятно. Есть поток данных который направляется на 2 процесса, один процесс стандартно работает с базой, просто добавление данных, второй процесс что то типо умного кеша который меняет свое состояние в зависимости от поступающих данных и отдает его потребителю в реал тайме, в случае падения, деплоя, перезагрузок и тд состояние заново вычисляется по записям в базе.

Но в статьях про лямбда архитектуру говорится что к процессу работающему с базой так же возможны запросы + возможно сравнение данных из процесса с базой с данными в реал-тайм процессе. На фига? Какой в этом смысл?

С каппа архитектурой вообще ничего не понятно, там какая то замута с процессами которые заменяют друг друга при этом в тех же статьях написано что это требуется при изменении бизнес логики приложения, то есть по сути относится к вопросам деплоя и на каком уровне и как работает база не понятно и как приложение восстанавливается после сбоя не понятно и.... в общем может кто нибудь объяснить все это на пальцах для тупых?

TDrive
()

терминал с горизонтальным скролом

 

Подскажите какой нибудь сабж. Гугление ничего внятного не дало, есть какой то Terminator который на java и вроде как уже загнулся, есть возможность в screen задавать ширину но нету горизонтального скрола, есть less но он только для файлов... Не ужели все так печально?

TDrive
()

управление логами

 ,

запарили миллионы разнообразных логов в файлах, решил организовать такую систему:
файлы логов будут не файлами а fifo что бы там ничего не оставалось, сервер логов настроен на нужные папки, рекурсивно обходит их и собирает логи со всех *.log и складывает в бд с индексацией, удалением старых логов и прочей хренью, доступ к логам через веб интерфейс с кнопками для зарание заготовленных запросов и возможностью выводить логи постоянно (watch)

теперь вопросы:

1) какой сервер логов умеет рекурсивно собирать логи из папок? вроде как syslog-ng но в премиум версии и на сайте ни где нету цены, предлагают написать их менеджерам. мне все это надо не для сервера, а просто для своего компа на котором работаю, кто нибудь в курсе какую я там могу услышать цену хотя бы приблизительно? Ну или может другой какой сервер есть который и папки рекурсивно обходить умеет и в базу все складывать.

2) веб интерфейс для логов из базы, че то вообще ничего не нагуглил внятного, а писать самому очень не хочется.

TDrive
()

XCOM 2 для linux урезана

 

общаюсь с другом по поводу выхода xcom2, вот чат:

tdrive, [06.02.16 23:14]
ладно а что по поводу версий игрули для винды и линукса чем линукс версия ограничена?

Товарищ Маршал, [06.02.16 23:15]
(!) Сам не проверял

Товарищ Маршал, [06.02.16 23:16]
Коряво работает импорт персонажей, не импортируются.

Товарищ Маршал, [06.02.16 23:16]
Нетплей не работает

tdrive, [06.02.16 23:16]
мне как бы то же в падлу тратить 1500 р на проверку

tdrive, [06.02.16 23:17]
на лор что ли наш чат запилить?

Товарищ Маршал, [06.02.16 23:17]
Есть торрент

tdrive, [06.02.16 23:17]
торрент это не совсем то

Товарищ Маршал, [06.02.16 23:17]
Спецом не проверял

Товарищ Маршал, [06.02.16 23:17]
Чисто в отзывах

Стас, [06.02.16 23:18]
я чат на лор запилю давай посмотрим че скажут

Товарищ Маршал, [06.02.16 23:18]
Нафига?

tdrive, [06.02.16 23:19]
ну как, что бы подтвердили или опровергли

tdrive, [06.02.16 23:19]
мне просто интересно реально в линуксе версия игры не полная

в общем кто уже купил есть что сказать?

TDrive
()

деплой сервиса с системой инициализации

 ,

Предположим есть cервис написанный на ноде или ror или еще чем нибудь, не важно на чем, главное что этот сервис включает свой сервер. Есть удаленный сервер с пользователем, отдельной папкой в /home/service и всем необходимым для работы этого сервиса. При деплое сервис загружается в /home/service запускается просто командой (например node service.js) и отлично работает.

Хочу что бы при перезагрузке удаленного сервера этот сервис автоматически запускался, то есть его надо как то добавить в систему инициализации сервера, при этом сам скрипт для системы инициализации должен храниться в репозитории вместе с этим сервисом, и соответственно вся магия должна происходить внутри /home/service от пользователя service.

Как это можно сделать?

TDrive
()

fuse в kde

 ,

Поставил кде 4 на потыкать, есть 2 вопроса.

1) Как в Dolphin монтировать файловые системы по ssh? Нашел там «Add Network Folder» с кучей настроек но при попытке подключиться пишет «Unable to connect to server», очевидно что ssh из терминала с теми же настройками работает, что ему может не хватать? И вообще монтирует ли он файловую систему так как это делает gvfs в гноме? Что бы можно было работать с файлами на сервере как с локальными. Попробовал просто в строке адреса Dolphin набрать sftp://user@host, на удивление подключилось, попробовал удаленно открыть текстовый файл в редакторе, пишет адрес до файла /var/tmp/kdecache-user/krun/НепонятныеЦифры-filename. Че это вообще за непонятная хрень и почему она криво но может а «Network Folder» не может?

2) Как в кде принято делать что бы при подключении смартфона на андройде его файловые системы (сам телефон и флешка) монтировались в домашнюю папку без каких либо телодвижений с моей стороны? Собственно вопрос опять же про аналог gvfs в kde.

TDrive
()

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