LINUX.ORG.RU

Сообщения hotpil

 

sort чисел в экспоненциальном формате

Есть такой файл two.dat:

    25e-1  36e-2
    31e-2  -2e-2
    17e-3  14e-2
    18e-1  58e-3

Команда sort -g two.dat правильно сортирует его по первой колонке.

Но мне нужна сортировка по второй колонке. По идее, должно быть sort -g -k2 two.dat. С целыми числами именно так и работает. Но конкретно этот файл у меня не сортируется. С опцией --debug вывод следующий:

    31e-2  -2e-2
           _____
________________
    18e-1  58e-3
           _____
________________
    17e-3  14e-2
           _____
________________
    25e-1  36e-2
           _____
________________

Если я правильно понимаю их разметку, вторая колонка выделяется правильно. Но сортировки нет. Что это? Баг или я что-то очевидное пропустил? Версия sort 8.26

 ,

hotpil
()

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

С помощью статьи в арчвики пытался сконфигурировать раскладку. Поторопился и скопировал оттуда строчку

$ localectl --no-convert set-x11-keymap ru,us pc104 ,dvorak grp:alt_shift_toggle 
Осознание того, что такое dvorak пришло с перезагрузкой.

В попытке вернуть все как было, сделал

$ localectl --no-convert set-x11-keymap ru,us pc104 , grp:alt_shift_toggle

И вот теперь вообще крах. Установился какой-то неизвестный лайоут, я даже пароль ввести не могу.

Как вернуть все как было?

 ,

hotpil
()

Найти строки, содержащие числа

Хочу из файла вытащить все строки, содержащие натуральные числа, но не в начале строки. Пробую так:

grep -E '[^^][1-9]?[0-9]+' file.txt
Но это все равно выводит строчки, начинающиеся с двухзначных или более чисел, хотя не выводит строки, в начале которых стоит одна цифра. Почему так получается и как это исправить? Вроде явно же указал, что первый символ — не начало строки, должно работать.

 ,

hotpil
()

grep переменную из файла

Нужно из файла получить имена всех переменных, заключенных в ${}, например слово CODE из ${CODE}. Наивный вариант grep -o \$\{*\} , не работает, хотя я не понимаю, почему, вроде спецсимволы заэкранированы. Как исправить?

 ,

hotpil
()

md5 как пароль

Есть такая идея «сохранения» паролей. Берем осмысленное предложение и вычисляем от него md5 сумму, которую используем в качестве пароля. Предложение легко запомнить, а утилита для вычисления есть в любом дистрибутиве. Насколько безопасен такой способ?

 ,

hotpil
()

gcc внешнее связывание

Пусть программа состоит из 3х файлов:

//file1.c
#include <stdio.h>

int x;

void f1()
{
	printf("in f1 x= %d\n", x);
}
//file2.c
#include <stdio.h>

int x;

void f2()
{
	printf("in f2 x= %d\n", x);
}
//main.c
void f1();
void f2();

int x = 3;

int main()
{
	f1();
	f2();
}

Как я понимаю, в соответсвии со стандартом, переменные, объявленные в начале файла, обладают внутренним связыванием (internal linkage). То есть этот код компилироваться не должен. Чтобы было правильно, нужно ставить перед int x слово extern, а ровно в одном .c файле должно встретиться определение int x. Но gcc данный код спокойно компилирует, даже с -Wall -Wpedantic . Значение x печатается в обоих случаях 3.

Это какая-то особенность gcc? Или я что-то не так понял в определении связывания?

 ,

hotpil
()

getint из K&R

Не могу понять одну вещь из примера в знаменитом K&R:

int getint(int *pn)
{
    int c, sign;

    while (isspace(c = getch()))   /* skip white space */
            ;

    if (!isdigit(c) && c != EOF && c != '+' && c != '-') {
            ungetch(c);  /* it is not a number */
            return 0;
    }
    sign = (c == '-') ? -1 : 1;
    if (c == '+' || c == '-')
            c = getch();
    for (*pn = 0; isdigit(c); c = getch())
            *pn = 10 * *pn + (c - '0');
    *pn *= sign;
    if (c != EOF)
            ungetch(c);
    return c;
}

Как работает это (c - '0')? Без него функция не правильно работает, но в чем смысл этого вычитания?

 

hotpil
()

Число с плавающей точкой без E

Как наиболее коротким способом прочитать в С число с плавающей точкой, но без буквы е? Например, -12.34+08 вместо традиционного -12.34e8? Я в общем могу написать свой аналог функции atof, но может есть способ по лучше? Какой-нибудь хитрый спецификатор или подходящая функция?

 

hotpil
()

Оптимальная структура данных

Имеется таблица из трех колонок. Первая — просто номер строки. Во второй и третьей — целые числа. Пример:

1 3 2

2 4 3

3 4 2

4 5 3

5 6 3

и т.д. Пары чисел, образованные второй и третьей колонками, не повторяются. Но по отдельности могут повторяться, как в примере. Нужно по номеру строки получать числа из колонок и наоборот: по заданной паре найти номер строки. Какая структура данных лучше всего для этого подходит? Наивным вариантом был бы массив пар, тогда a[i].up, a[i].low давали бы числа во второй и третьей колонках из строки i. Но в этом случае неудобно искать в обратную сторону, то есть по паре получать индекс.

 

hotpil
()

поиск автоматом

Во многих менеджерах при нажатии на клавишу курсор перемещается на файл или директорию, имя которой начинается с соответствующей буквы. В mc тоже можно так делать, но когда нажато Alt + S. Иначе поподаешь в ненужную (мне) командную строку внизу. Есть ли способ изменить это поведение? То есть нажимаешь на, например, букву «k» и курсор перемещается к файлам, начинающимся с «k»?

 

hotpil
()

Указатели в С и вообще

В чем принципиальная необходимость использования указателей? Почему нельзя обращаться к переменной в динамической памяти по ее имени, а не по адресу?

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

Это действительно так, С переиспользует указатели, там где без них можно было бы обойтись? Или есть какие-то детали работы с памятью, которые я упускаю?

 ,

hotpil
()

debian adjtime

Вот этого файла /etc/adjtime нет в моем Debian Stretch. А хотелось бы установить часы на локальное время, в соответсвии с https://wiki.debian.org/DateTime. Куда дели файл?

 ,

hotpil
()

Fortran странно складывает числа

Есть большой и длинный код, а в нем фрагмент:


function conv_check_2() result(diff_max)
	use globals
	implicit none
	real(8) diff_max
	real(8) :: diff, t1, t2, t3, t4	

	do i=2, nx-1		
		t1 = -get_n1(i, I_tilde(i))*A_emission
		t2 =  I_tilde(i)*(get_n0(i, I_tilde(i))*B01 - get_n1(i, I_tilde(i))*B10) 
		t3 = V01(i)*get_n0(i, I_tilde(i))*v_dens_e(i) 
		t4 = -V10(i)*get_n1(i, I_tilde(i))*v_dens_e(i)			
		diff =  t1 +t2 + t3 + t4
		write(*, '(5es16.8e3)') t1, t2, t3, t4,  diff

<...>

Последняя строчка выдает следующее: -4.47171865E+010 4.45362655E+010 1.80922022E+008 -1.04464889E+003 7.98239194E-006

То есть сумма намного меньше одного. Если те же самые числа сложить отдельно, используя тот же компилятор, то в сумме получается 6.51351074E+002. Что, ясное дело, и есть правильный ответ. Проверял gdb, действительно t1, t2, t3, t4 равны тому, чему и должны быть равны, а сумма их и вправду меньше одного. Как такое в принципе возможно? Почему одна и та же сумма, посчитанная в разных местах, равна разным числам? Я уже даже не представляю, куда смотреть в поисках ошибки.

 

hotpil
()

«Правило» программирования от Роба Пайка

Известный товарищ Роб Пайк сформулировал не менее известные правила, которые вроде должны помогать в программировании. Наиболее загадочным для меня представляется последнее: «Data dominates. If you've chosen the right data structures and organized things well, the algorithms will almost always be self-evident. Data structures, not algorithms, are central to programming.»

Что, действительно так? Как это выглядит на деле? Можно ли привести примеры, в которых данные хорошо/плохо организованы?

 ,

hotpil
()

xterm и мышь

При нажатии на кнопки/колесико мыши в xterm'e кнопки не действуют, зато появляются загадочные символы. Причем интересно, что каждый раз разные.Например, при нажатии на левую кнопку JR#JR OR#OR PR#PR и т.п.)) Доступ к этому терминалу по ssh, потому что кластер. Что это такое и как с этим бороться?

 , ,

hotpil
()

обзор директорий bash

Вот такая штука позволяет пройтись по всем директориям:

for i in */; do
Но как?? Не может же он перебирать все возможные сочитания до слэша. Или есть какое-то соглашение, что последовательности в for связаны с файлами, лежащими в текущей директории?

 

hotpil
()

CPU регулировка частоты

Имеется ноутбук MSI X340 и на нем Xubuntu 15.10. Ноут сильно греется, батарейка разряжается быстро, поэтому возникло подозрение насчет регулировки частоты процессора. Я так понял, по умолчанию там должен работать intel_pstate драйвер, потому что ядро 4.2. Но cpupower его не видит. Вот вывод frequency-info:

analyzing CPU 0:
no or unknown cpufreq driver is active on this CPU
boost state support:
Supported: no
Active: no
Видимо, все это вообще не работает. Может кто подскажет, куда копать?

 , ,

hotpil
()

gtk и firefox: темная тема

Имею xubuntu 15.10. Вопрос, впрочем, общего характера. Если в xfce выставить темную тему, то в firefox'e некоторые поля становятся черными, а в них - серенькие или в лучшем случае белые буквы. Можно ли заставить firefox игнорировать тему gtk2-3? Чтобы у него все было светлое, хотя сама тема --- темная.

В интернетах нашел только вот это: http://askubuntu.com/questions/8336/how-can-one-make-firefox-ignore-my-gtk-theme-entirely Но оба предложенных там совета у меня не сработали.

 ,

hotpil
()

latex индексы

Ужасно выглядят индексы в латехе в некоторых случаях. Попробуйте, например,

y=e^{-\chi_L}
У меня индекс L не отличить от произведения $\chi L$. Как это исправить?

 

hotpil
()

mc extensions

Пытаюсь научить mc открывать файлы .tex texmaker'ом. В mc.ext добавил

# TeX
shell/i/.tex
Open=/usr/lib/mc/ext.d/doc.sh open tex
Изменил также в файле /usr/lib/mc/ext.d/doc.sh функцию do_open_action, добавив туда:

tex)
(texmaker "${MC_EXT_FILENAME}" > /dev/null 2>&1 &)
;;
[\code]

Все в общем работает, при нажатии на Enter открывается файл в texmaker. Но сам texmaker запускается не в фоне, окно mc становится недоступным. Хотя вроде ему же ясно написано "&". Почему так и как сделать правильно?

 ,

hotpil
()

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