LINUX.ORG.RU

Сообщения grem

 

Текстовые редакторы с возможностью сравнения файлов

 , ,

Существуют ли для Linux текстовые редакторы со сравнением уже открытых во вкладках текстовых файлов с визуализацией отличий (пусть через плагин, можно без объединения), запускаемым посредством клавиатурного сочетания? Отдельных софтин навалом: kompare, meld, diffuse, vdiff. Но это отдельные приложения. Есть Komodo Edit, но он выводит результат в виде «diff».

Из известных мне подобных редакторов для windows - Notepad++, RJ TextEd. Там можно вовремя работы с текстовыми файлами в любой момент ткнув shortcut узнать «что же я натворил, братцы?».

Для Linux существует notepadqq, который позиционируется как «замена» Notepadd++, только плагинов к нему что-то пока не видно. Из Gedit можно было как-то вызывать Meld, но при этом второй файл всё равно нужно было открывать через файловый диалог (или нет?). Примерно такое же поведение, емнип, было у Kate из KDE3 и KDE4, а в Kate из Plasma5 непонятно как встроить запуск Kompare.

В Atom compare выглядит крайне странно (inline?). Как обстоят дела в VS Code для произвольных текстовых файлов?

grem
()

Очень сильно отличие производительности исполняемого файла в Linux (gcc) и Windows (mingw64)

 ,

К вопросу о «кроссплатформенной» разработке.

Есть такой фрагмент кода (сильно порезанный кусок, можно ещё сильнее порезать, но на нём демонстрируется проблема):

// g++ -Ofast -ffast-math

#include <cstdio>
#include <cstdlib>
#include <cmath>

int main() {
    const int N = 1200;
    double* A;
    double* B;
    double C;
    int m;
    
    A = new double[N*N];
    B = new double[N]; 
    
    //srand(time(0));
    //srand( (unsigned)time( NULL ) );
    
    for (int i  = 0; i < N; i++) {
        for (int j =  0; j < N; j++) {
            A[N*i+j] = (double)rand() / ((double)10000);
        }
        B[i] = 0.0;
    }

    // Сильно порезанный фрагмент кода:    
    for (int k = 0; k < N-1; k++ )  {
        m = (k + 1);
        
        for (int i = k + 1; i < N; i++ )   {
            if ( fabs(A[N*(i) + (k)]) > fabs(A[N*(m-1) + k]) ) m = (i + 1);
        }
        B[k] = m;
        
        if ( (m + 1) != k ) B[N-1] = -B[N-1];
        
        C = A[N*(m-1) + k];
        A[N*(m-1) + k] = A[N*k + k];
        A[N*k + k] = C;
        
        if (C == 0) continue;
        
        for (int i = k + 1; i < N; i++ ) A[N*i + k] = -A[N*i + k]/C;
        
        for (int j = k + 1; j < N; j++ )  {
            C = A[N*(m-1)+ j];
            A[N*(m-1) + j] = A[N*k + j];
            A[N*k + j] = C;
            if ( C != 0 )  {
                // дольше всего выполняется этот блок цикла:
                for (int i = k + 1; i < N; i++ )  {
                    A[N*i + j] = A[N*i + j] + A[N*i + k]*C;
                }
            }    
        }
    }
    
    delete [] A;
    delete [] B; 
    
    return 0;
}

Суть проблемы в том, что собранный с одинаковыми опциями этот кусок выполняется на моём железе в Linux за 2.7 сек (gcc 4.8.4), а в Windows7 (mingw64 4.9.3, tdm-gcc 4.9.2) за 8.4 (т.е. разница ~3 раза). Ни на одном другом примере я такого проседания не наблюдал (разве что TDM-GCC генерит в некоторых случаях код заметно быстрее чем MinGW64, но не в этом случае). Понятно, что в этом блоке, который третий по вложенности цикл

for (int i = k + 1; i < N; i++ ) {
    A[N*i + j] = A[N*i + j] + A[N*i + k]*С;
}
не самое эффективное обращение к элементам, так как часто приходится прыгать между элементами, но что есть, то есть - такой алгоритм попался. Но даже если просто оставить прибавление действительного числа «С», то в Linux это ускорит выполнение на 0.5 сек (насколько ускорит в Windows не проверял).

Сталкивался ли кто с подобным поведением MinGW64, TDM-GCCd в плане сильного проседания производительности? Какие ещё ключи компилятора могут заметно ускорить выполнение этого фрагмента?

grem
()

Подбор модулей памяти для ноутбука

 ,

Перекопал кучку форумов и отзывов на сайтах по продаже комплектующих, но всё же не совсем понял, как подобрать модули памяти для ноутбука

Samsung np-sf511-s01ru (выпущен в 2011 году).

и какой всё же максимальный объём оперативки у него доступен?

По ссылке приведённой выше в ответах на вопросы пишут, что максимальный объём - 6 Гб (4 Гб + 2 Гб), при этом в описаниях сохранившихся в онлайн-магазинах указано, что 8 Гб. С частотами, задержками и напряжением всё понятно.

В различных обсуждениях часто упоминается, что старые ноутбуки могут не поддерживать банки памяти выше 256 Мб, т.е. 4 Гб модуль должен состоять из 16 банков. При этом есть ещё такая штука как ранк памяти и тут ограничения могут накладываться со стороны чипсета. Здесь, емнип, стоит чипсет Intel HM65. Всего 2 слота под память, занятые в текущий момент планками

2GB 1Rx8 PC3-10600S-09-11-B2
Samsung M471B2873GB0-CH9

и

2GB 1Rx8 PC3-10600S-09-10-ZZZ
Samsung M471B5773CHS-CH9

С лицевой стороны у них по 4 модуля памяти, с обратной, скорее всего тоже (не проверял). То есть стоит одноранковая память с объёмом банков, предположительно, не превышающих 256 Мб

В ноутбуке стоит процессор (то есть встроенный в него контроллер) Intel Core i3 2310M поддерживает до 16 Гб.

Вохможно ли, что максимальный объём поддерживаемой памяти для данного чипсета будет равен 6 Гб если хотя бы одна из планок будет двухранковой, и будет равен 8 Гб, если обе планки будут одноранковые?

Может ли кто подтвердить на примере своего нотубука с таким же чипсетом, что для чипсета Intel HM65 нужны модули памяти с банками не больше 256 мб? То есть для 4 Гб планки должно быть 16 модулей памяти (по 8 с каждой стороны).

P.S. Сейчас там стоит Gentoo, но я его не обновлял с 2012 года.

grem
()

Visual Studio 2017

 ,

Подозрительно, что до сих пор не видно темы о сабже, в частности, Community Edition. В новой версии появилась такая штука как

Linux development with C++
Description: Create and debug applications running in a Linux environment.

То есть под Linux сама IDE ещё не работает, но уже есть какие-то инструменты для разработки под него.

Забавно, что для оффлайновой установки в Windows нужна полностью обновлённая Windows. Предыдущие оффлайновые iso-шки Community Edition 2013, 2015 (с обнолениями) отличились тем, что с них нельзя было произвести установку ... в офлайновом режиме (весь интернет наполнен болью из-за этого факта): система тоже должна была полностью быть обновлена, т.к. без каких-то сертификатов установщик не видит кучу файлов на образе диска.

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

grem
()

Очистка памяти после создания двумерного «непрерывного в памяти» массива

 , , , ,

«Я познаю мир», это главный тэг этой записи.

Допустим, хочется в C99 (в С++ такой способ тоже сработает) хочется создать двумерный массив в «непрерывной!» области памяти, чтобы в дальнейшем обращаться к его элементам как a[i][j]:

#include <stdio.h>
#include <stdlib.h>

int main()
{
int n = 12;

double (*a)[n] = (double (*)[n])malloc(n * n *  sizeof(double))

a[11][0] = 40.0;
printf("a[11][0] = %4.2f\n", a[11][0]);
// выход за границу массива с заползанием в следующий блок:
a[10][12] = 50.0;
printf("a[11][0] = %4.2f\n", a[11][0]);
printf("a[10][12] = %4.2f\n", a[10][12]);

return 0;
}

Подскажите, кто-нибудь, пожалуйста, как при помощи free() очистить память выделенного таким образом массива?

P.S. Казалось бы, что при создании подобного массива можно было бы описать его так:

#include <stdio.h>
#include <stdlib.h>

int main()
{
int n = 12;

// при присваивании, не выходя за границу массива, можно перезаписывать другие элементы:
double (*b)[1] = (double (*)[1])malloc (n * n * sizeof(double));
b[11][0] = 40.0;
printf("\nb[11][0] = %4.2f\n", b[11][0]);
// перезаписывает значение b[11][0]:
b[5][6] = 50.0;
printf("b[11][0] = %4.2f\n", b[11][0]);
printf("b[5][6] = %4.2f\n", b[5][6]);

return 0;
}

grem
()

Информатика в школе. Программирование.

 , ,

Не нашёл явно схожей темы, но всё равно интересно. Каким языкам программирования сейчас обучают ваших ребёнка/детей (или детей ваших знакомых/друзей)в школе? Интересны так же диалект языка, используемый компилятор/транслятор, город или хотя бы регион. В крайнем случае, что там сейчас вообще изучают? Поменялось ли что-нибудь за последние лет 10?

P.S. Учите ли вы своего ребёнка программированию сами? Это на случай, если вдруг получилось его заинтересовать.

grem
()

Cantera 2.3.0

 , ,

19 января 2017, 3 недели назад, было объявлено о выходе новой версии Cantera (2.3.0) - open-source набора объектно-ориентированных библиотек и инструментов для решения задач затрагивающих химическую кинетику, термодинамику и/или процессы переноса.

Набор библиотек Cantera написан на C++ и имеет интерфейсы для написания приложений на языках программирования C++, Fortran 90, Python, Matlab.

Полный список изменений в новой версии
Руководство и документация к библиотекам

grem
()

70 лет МФТИ

 , физтех

Поздравляю всех причастных, сочувствующих и пострадавших.

grem
()

Подскажите шрифт

 

Подскажите, что за шрифт используется здесь: https://forums.pcbsd.org/thread-15719.html

grem
()

(Debian/Ubuntu/Mint) Вручную установленные пакеты (попытка 2)

 , , ,

Так как предыдущая тема уже давно помещена в архив, то создам новую.

Может кто-нибудь проверить для Ubuntu/Mint, похож ли вывод следующих команд на что-то адекватное в плане вывода списка пакетов установленных самим пользователем вручную?

$ zgrep "Package:" /var/log/installer/initial-status.gz | cut -d" " -f2 | sort > initpkgs.txt
$ apt-mark showmanual | sort > markedpkgs.txt
$ grep -f initpkgs.txt -vFx markedpkgs.txt

если grep в последней команде не нравится, то можно и diff (порядок файлов для него другой)

$ diff --suppress-common-lines markedpkgs.txt initpkgs.txt | grep "<" | cut -d" " -f2

Для Debian, похоже, нужно мотреть файл /var/log/installer/status

Также интересно, включаются ли сюда пакеты вручную поставленные через dpkg -i?

grem
()

OpenOffice 4.1.3

 , ,

12 октября объявлено о выходе обновления OpenOffice версии 4.1.3. В рассылке где-то упоминалось о выходе в конце этого года или начале следующего 4.1.4 и, наконец, о планах выпуска в следующем году 4.2.0, если чего вдруг не случится.

Release Notes.
Список исправленных ошибок, блокировавших выпуск обновления (это только release_blockers).
«Пресс»-релиз.

Буду ждать ebuild.

grem
()

CentOS Offline Update

 , ,

По какой-то причине репозитории большинства дистрибутивов и базы пакетов в них устроены таким образом, чтобы усложнить обновление системы изолированной от сети. В большинстве случаев база представляет собой набор файлов, не все из которых ещё и нужны для получения информации об обновлениях, и часто для оффлайн обновления предлагают создать локальный репозиторий/зеркало и обновляться из него, предварительно скачав десяток-другой гигабайтов никому не нужных пакетов. Это, например, меня не устраивает, особенно после использования Gentoo, где процедура оффлайн обновления очень простая.

Порывшись в <любимый_поисковик> я так и не нашёл устраивающих меня руководств по оффлайн-обновлению CentOS (плохо искал? возможно, что где-то это уже есть). Неужели ни для кого не актуально? В итоге опытным путём, посредством ковыряния live образа CentOS 7, выяснил, что для обновления локальной базы достаточно скачать всего несколько файлов, создать ещё пару: cachecookie, mirrorlist.txt - без них Yum будет ругаться, что база повреждена. Итак, предположим, что имеем свежеустановленную систему со стандартным набором ftp репозиториев base, extras, updates. При желании можно расширить bash-скрипт на epel или другие репозитории.

#!/bin/bash

MIRROR=ftp://mirror.yandex.ru/centos/7.2.1511

mkdir -p ./local_repo/x86_64/7
cd ./local_repo/x86_64/7

wget -nc -P "./base" $MIRROR/os/x86_64/repodata/repomd.xml
wget -nc -P "./base" $MIRROR/os/x86_64/repodata/*-x86_64-comps.xml.gz
wget -nc -P "./base" $MIRROR/os/x86_64/repodata/*-primary.sqlite.bz2

wget -nc -P "./extras" $MIRROR/extras/x86_64/repodata/repomd.xml
wget -nc -P "./extras" $MIRROR/extras/x86_64/repodata/*-primary.sqlite.bz2

wget -nc -P "./updates" $MIRROR/updates/x86_64/repodata/repomd.xml
wget -nc -P "./updates" $MIRROR/updates/x86_64/repodata/*-primary.sqlite.bz2

for item in base extras updates; do mkdir ./$item/gen && \
    bunzip2 -k ./$item/*.bz2 && \
    mv ./$item/*.sqlite ./$item/gen/primary_db.sqlite; done

for item in base extras updates; do touch ./$item/cachecookie; done

echo $MIRROR/os/x86_64/ > ./base/mirrorlist.txt
echo $MIRROR/extras/x86_64/ > ./extras/mirrorlist.txt
echo $MIRROR/updates/x86_64/ > ./updates/mirrorlist.txt

Скрипт создаст стуктуру каталогов со всеми необходимыми файлами для дальнейшего получения информации о пакетах, которые предстоит обновить или установить. Притащив полученную директорию на обновляемую машину и закинув её содержимое в «/var/cache/yum/x86_64/7/» (сразу после установки у CentOS база вообще отсутствует) можно спокойно получать список ссылок на пакеты, которые нужно обновить или установить, включая их зависимости. Циклов можно было сделать чуть меньше, а что-то в цикл запихнуть, но во время отладки так было проще.

Затем получаем список ссылок на скачивание пакетов:

# yum list updates | tail -n +3 | cut -d" " -f1 | xargs yumdownloader --urls --resolve | tail -n +4
или в файл
# yum list updates | tail -n +3 | cut -d" " -f1 | xargs yumdownloader --urls --resolve | tail -n +4 > pkgs_urls_list.txt

Но так скачаются все пакеты в один каталог, а нужно распихивать их потом в /var/cache/yum/.../<имя репозитория>/packages поэтому лучше создать отдельные файлы со ссылками для каждого репозитория. Получить список пакетов для обновления из каждого репозитория в отдельности можно командой, например для extras

# yum repository-packages extras list updates

или только названия пакетов

# yum repo-pkgs extras list updates | tail -n +4 | cut -d" " -f1

или получить список ссылок:

# yum repo-pkgs extras list updates | tail -n +4 | cut -d" " -f1 | xargs yumdownloader --urls --resolve | grep tp://

Получить список ссылок для скачивания отдельного пакета с его зависимостями можно командой

yumdownloader --urls --resolve имя_пакета | grep tp://

Остаётся только принести пакеты на обновляемый компьютер, разложить их по соответсвующим «/var/cache/yum/x86_64/7/имя_репозитория/packages» и обновить систему.

grem
()

Debian 8.6

 

17 сентября объявлено о выпуске обновления стабильной ветки Debian до версии 8.6. Обновиться пока можно по сети, образы CD и DVD будут доступны позже.

Источник: https://www.debian.org/News/2016/20160917

grem
()

Что если один из дисков в LVM помрёт?

 , ,

В gentoo wiki пишут

If a physical volume needs to be removed from a volume group, the data first needs to be moved away from the physical volume. With the pvmove command, all data on a physical volume is moved to other physical volumes within the same volume group.

Если физический том должен быть удален из группы томов, то вначале нужно переместить с физического тома данные. С помощью команды pvmove все данные на физическом томе перемещаются на другие физические тома в той же группе томов.

Можно ли вообще будет воспользоваться данными с первого физического тома LVM, если HDD второго физического тома перестанет, например, определятся системой? То есть, допустим, что хочется вытащить данные с первого, при почившем втором.

grem
()

Снова о редакторах markdown с функцией предпросмотра

 ,

Хотел вести заметки по работе в формате markdown, но чтобы при этом редактор поддерживал опцию предпросмотра, был кроссплатформенный, поддерживал подсветку кода (необязательно, достаточно просто выделения блока), экспорт в PDF и самое важное, чтобы он поддерживал использование в разметке верхнего и нижнего индекса, что, емнип, выходит за рамки стандартного синтаксиса Markdown. Бесплатным, разумеется, ибо «Ничто не дается нам так дешево и не ценится нами так дорого,как ХАЛЯВА!» (автора фразы не знаю).

Пересмотрел несколько, практически идеальным оказался южнокорейский Haroodpad. Что помешало стать ему идеальным? Небольшая, но раздражающая вещь - при очередном сохранении любит он добавлять в файл дополнительные пустые строки, и так через раз. Особенно раздражает, когда он начинает вставлять их между ячейками таблиц, из-за чего выглядят они уже в предпросмотре не как таблицы. Экспорта в PDF пока нет, можно отправить на печать в файл, в этом случае могут проявляться некоторые недочёты отображения. Можно экспортировать в html.

ReText - расширение Extra, насколько я понял, используется по умолчанию. Но получить от него отображение верхнего и нижнего индекса мне не удалось. Подскажите, если знаете, какое встроенное или внешнее расширение нужно для этого подключить, если таковое имеется для отображение индексов?

MdCharm - Поддерживает верхний индекс, нижний не получилось отобразить. НО! Хотя в настройках и выбрана по умолчанию кодировка UTF8, сам он не может нормально отобразить кодировку при открытии сохранённого им же файла.

Remarkable - аналогично, не смог добиться от него отображения индексов. Сам он очень минималистичный на вид, настроек, кажется, нет.

Brackets + MarkdownPreview-master - похоже, что поддерживает только стандартный формат.

Markdownpad2 - для оффтопика. В бесплатной версии не отключается передача анонимной статистики, не отключается автообновление и нельзя выбрать движок «Markdown(Extra)». Всё это и ещё какие-то плюшки есть в версии Pro.

Неужели всё так плохо и для указанных выше целей придётся использовать OpenOffice или LaTeX? Второй немного напрягает тем, что при экспорте и прочих обработках генерятся несколько дополнительных файлов. Но оба варианта несколько жирноваты для простых заметок.

grem
()

распознавание схожести файлов при архивировании

 , ,

Из-за «печальки», что SDL-версия (то есть нативная для Linux) fceux не поддерживает работу с 7z-архивами, я решил, «а ну и ладно, перепакую подборку в поддерживаемый zip». Перепаковал и ... подборка с кучей zip-архивов она стала занимать 300 Мб, вместо 27 Мб в 7z-архивах. Что как-то не очень :(

Оказалось, что 7z распознаёт схожие файлы и при достаточном размере словаря очень хорошо это дело сжимает посредством LZMA. Разные rom-файлы одной игры могут слабо отличаться, но самих файлов может быть несколько десятков.

Всё что смог найти - один из найденных примеров рассматривает сжатие драйверов. Там упоминается, что для подобного сжатия нужно, чтобы файлы влазили в словарь. Winrar 4 поддерживает максимальный размер словаря 4 Мб, winrar 5 поддеривает до 1024 Мб словарь, но так сильно сжать winrar'om всё равно не получилось, хотя и вышло меньше чем перепаковка zip архивами - 276 Мб.

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

grem
()

возрождение NES от Nintendo

 ,

Nintendo решила выпустить уменьшенную копию NES: Nintendo Entertainment System: NES Classic Edition (или Nintendo Classic Mini: Nintendo Entertainment System в европейском варианте). Установка картриджей не поддерживается, игры вшиты.

источник

grem
()

LightZone 4.1.6

 , ,

Снова лень писать полноценную мини-новость, да и обновление мелкое.

27 июня обновился LightZone до версии 4.1.6, changelog прилагается. Из изменений

  • добавлены 5 вспомогательных «сеток» для инструмента кадрирования (Rule of Third, Golden Triangles, Golden Ratio, Fibonacci Spiral и Diagonal);
  • обновлена используемая версия DCRaw (v9.27);
  • добавлены новые тоновые кривых для ряда фотоаппаратов;
  • распараллелены некоторые JAI OpImage, что ускоряет открытие изображение в режиме редактирования;
  • кнопки увеличения теперь доступны в режимах кадрирования(crop)/вращения(rotate)

Для Ubuntu/Mint доступны пакеты в ppa-репозитории, для остальных дистрибутивов есть файл с исходниками.

grem
()

Linux Mint 18

 , ,

ISO-образы Linux Mint 18 Cinnamon (версии 3.0) и MATE доступны для загрузки и потихоньку появляются на зеркалах. Основан на Ubuntu 16.04 LTS. Новость писать лень.

grem
()

Опция добавления собранного пакета в set вместо world

 , ,

Хочется странного, а именно опции emerge, которая по завершению сборки пакета добавляла бы его в указанный существующий set, а не /var/lib/portage/world. Всё потому, что на текущий момент мой world выглялит так:


Насколько была б полезна такая фича кому-нибудь ещё? Стоит ли создавать фич-реквест или он уже даже есть?

grem
()