Pull to refresh
96
Борис Егоров@JIghtuse

Пользователь

9
Subscribers
Send message
sum ведь реализовать надо, а не использовать готовый.
Да, я ошибся, речь вообще шла об ntp и о надёжности не гуглового сервиса. systemd по умолчанию использует серверы Google, народ обсуждал, на что бы переехать другое. Как оказалось, pool.ntp.org не рекомендуют ставить стандартным сервером — это меня удивило, а упоминание Google просто в голове отложилось.

github.com/systemd/systemd/issues/437
Google где-то писал, что эти адреса не для внешнего использования, они не рассчитаны на какую-либо нагрузку. А один из открытых проектов (dnsmasq?) использует их по умолчанию, поэтому нагрузка на них всегда есть.
Ах да, там что-то всё в кучу намешано. Что ж, будем ждать и того, и другого.
На geektimes уже было упоминание, странно, что в «похожих» нет: geektimes.ru/post/241274
Да, так тоже можно, и выглядит проще.
На эту тему у Пелевина есть занятная книга, S.N.U.F.F. Особенно анекдот в начале напомнил. Рекомендую ознакомиться.
Позабавил факт, что скрипты адаптируются под систему и тащат соответствующие файлы:
В Linux осуществлялась отправка содержимого /etc/passwd, .bash_history, .mysql_history, .pgsql_history, файлов из директории .ssh, настроек remina, Filezilla и Psi+, а также текстовых файлов, в именах которых имеются слова pass и access, и любых shell-скриптов.
(opennet).

Интересно, можно ли нагенерить на лету случайных скриптов, чтобы у чуваков место на диске кончилось…
Как бы ни расстраивала политика Mozilla в последнее время, браузера удобнее для себя ещё не нашёл.
На reddit порекомендовали песочницу firejail, решил попробовать. Пакет есть как минимум для Debian Stretch; из коробки поддерживает firefox, thunderbird, chromium, midori, vlc. Вроде пока устраивает.

Кто-нибудь пользуется этой песочницей или аналогами? Какие преимущества/недостатки?
Нужен бот, который будет искать такие вопросы и отвечать «Darude — Sandstorm».
Единственный комментарий по теме поста. Поддерживаю.
Вот вариант без функции, наиболее близок к вашему коду:
Скрытый текст
use std::path::{Path, PathBuf};

struct Model {
    u: f32,
}

impl Model {
    fn new(texture_path: &str) -> Model {
        let buf = PathBuf::from(texture_path);
        let texture_path = format!("{}/{}{}",
                                   buf.parent().unwrap().to_str().unwrap(),
                                   buf.file_stem().unwrap().to_str().unwrap(),
                                   "_diffuse.tga");

        println!("path: {:?}", texture_path);
        // outputs 'path: "/tmp/models/african_head_diffuse.tga"'
        Model{ u: 1.0 }
    }
}

fn main() {
    let model = Model::new("/tmp/models/african_head.obj");
}


На мой взгляд, здесь несколько недостатков:

  • Используются непортируемые разделители директорий /
  • Менее очевидно, что в Model::new передаётся именно путь до файла
  • Меньшая гибкость — когда генерация имени вынесена в отдельную функцию, её легче повторно использовать и менять.
А, теперь я понял, для чего вам конкатенация.

Тогда вот вариант с использованием format! и PathBuf (на gist тоже обновил, ссылка выше):

Скрытый текст
use std::path::{Path, PathBuf};

struct Model {
    u: f32,
}

fn texture_fname(path: &Path) -> PathBuf {
    let fullname = format!("{}{}", path.file_stem().unwrap().to_str().unwrap(), "_diffuse");

    let mut buf = PathBuf::from(path);
    buf.set_file_name(fullname);
    buf.set_extension("tga");
    buf
}

impl Model {
    fn new(texture_path: &Path) -> Model {
        let texture_path = texture_fname(texture_path);

        println!("path: {:?}", texture_path.as_path());
        // outputs 'path: "/tmp/models/african_head_diffuse.tga"'
        Model{ u: 1.0 }
    }
}

fn main() {
    let model = Model::new(Path::new("/tmp/models/african_head.obj"));
}


Вот здесь ещё несколько вариантов: stackoverflow.com/a/30481077/1145239

Я бы на вашем месте просто сменил расширение или складывал в другую директорию.
Для чего вам вообще склеивать str? Он для этого не предназначен. Его можно сравнить с Сишным char * — просто немодифицируемая последовательность символов.

String предназначен для манипуляции строками. Более того, вам даже он не нужен.

Вы хотите передавать путь до файла в функцию — так и принимайте его! Для манипуляции Path есть тонна удобнейших функций.

std::path::Path usage
use std::path::Path;

struct Model {
    u: f32,
}

impl Model {
    fn new(file_path: &Path) -> Model {
        let texture_path = file_path.with_extension("tga");

        println!("path: {:?}", texture_path);
        // outputs 'path: "/tmp/models/african_head.tga"'
        Model{ u: 1.0 }
    }
}

fn main() {
    let model = Model::new(Path::new("/tmp/models/african_head.obj"));
}


gist mirror
Вы серьезно не понимаете, что время воспитания детей через ограничения информации, которое существовало в прошлом веке и раньше — кончилось

Что характерно, эта техника «воспитания» никогда и не работала. Можно, к примеру, вспомнить о парне по имени Сиддхартха Гаутама, которому до 29 ограничивали поток информации. Но зачем нам знать историю — будем повторять чужие ошибки.
Заголовок напомнил об этом видео:
Скрытый текст

Там упоминается, что в Средние века животных судили наравне с людьми.
Это да — дошёл на Linux до второго уровня и застрял. Теперь только читаю, как расследование у других проходит =)
Недопонял, зачем это здесь, и кому это можно понадобиться, ну да ладно.
Зачем-то ваш скрипт поправил. Мне кажется, стало немного читабельнее.

Скрытый текст
#!/bin/bash

path=./
temp=$path/temp
key_files="name.key masks.key masks2.key primary.key primary2.key header.key"
original_file="$temp/$1"

mkdir -p "$temp"
mkdir -p "$path/keys"

# CR to LF. Конвертируем файл в формат UNIX (Окончания строк LF, вместо CR)
dos2unix -n -q "$1" "$original_file"

# Записываем имена всех ключей во временный файл
grep  -E -o 'Keys\\\w+]' "$original_file" | sed -E 's/Keys\\//; s/]//' > $temp/keysname

while read key
   do
     # Записываем полное содержимое ключа в отдельный файл с его именем
     cat $original_file | sed -e '/./{H;$!d;}' -e "x;/$key]/!d" | sed -n "/$key]/!p" > $temp/$key
    
    # Разделяем ключи (name, primary, masks, header...) и записываем в отдельные файлы в папку с именем ключа 
    mkdir -p "$path/keys/$key"

    for file in $key_files;
     do 
     hex=$(cat $temp/$key | tr -d '\n' | sed -E 's/\\//g; s/ //g; s/\$//g' | grep -E -o "$file\"=hex:(\w{2},?)+?" | sed -E "s/$file\"=hex://; s/,//g" | sed -E 's/\w{2}/\\x&/g')
     echo -e -n "$hex" > "$path/keys/$key/$file"

     # LF to CR ??? 
     # sed 's/$'"/`echo \\\r`/" "$path/keys/$file" > "$path/keys/$file"
    done
done < $temp/keysname

# Очистка временных файлов
rm -rf "$temp"

exit 0


Небольшие пояснения.
  • Не нужно проверять, существует ли директория, если вам нужно её создать — mkdir -p создаст её со всеми поддиректориями и не будет ныть, если всё уже создано.
  • Не нужно и проверять, если вам её нужно удалить — rm -rf не ругается, если ему ничего не дали.
  • Для итерации по списку файлов сойдёт и просто строка, ассоциативный массив на мой взгляд излишен. Да и синтаксис у него страшнее.
  • Зачастую можно обойтись без cat, многие утилиты могут принимать на вход файлы (в этом скрипте осталась ещё пара таких мест)

Пожалуй, вместо sed можно бы использовать скрипт на python или ещё чем-нибудь более человечном.
Keepass + база в своём инстансе Owncloud. Большинство своих паролей даже не знаю.

Information

Rating
Does not participate
Location
Россия
Registered
Activity