LINUX.ORG.RU

Сообщения eugine_kosenko

 

Почему не уменьшается время в мультипоточной программе?

Вот такая программа:

#include <thread>
#include <vector>
#include <iostream>

using namespace std;

clock_t etime[128];
vector<unsigned> idx[128];

void eval(unsigned n, unsigned m, unsigned i) {
  etime[i] = clock();
  for (unsigned j = i; j < n; j += m) {
    idx[i].push_back(j);
  }
  etime[i] = clock() - etime[i];
}

int main(int argc, char **argv) {
  unsigned M = atoi(argv[1]);

  for (unsigned i = 0; i < M; i += 1) {
    eval(250000, M, i);
  }

  for (unsigned i = 0; i < M; i += 1) {
    cout << "seq " << etime[i] << endl;
  }
  
  vector<thread> threads;
  for (unsigned i = 0; i < M; i += 1) {
    threads.push_back(thread(eval, 250000, M, i));
  }

  for (auto &th : threads) {
    th.join();
  }
  
  for (unsigned i = 0; i < M; i += 1) {
    cout << "par " << etime[i] << endl;
  }
  
  return 0;
}

По идее, чем больше параметр (число потоков), тем меньше должно быть время выполнения одного потока. На практике получаем, что не так:

$ ./test 1`
seq 7737
par 8529

$ ./test 4
seq 2756
seq 2615
seq 1810
seq 1675
par 12601
par 18108
par 18546
par 15692

Что может быть не так? Может, тут неприменим clock?

 

eugine_kosenko
()

Можно ли читать тексты с помощью DVD-проигрывателя или игровой консоли?

Имеется ввиду DVD-проигрыватель вообще и BBK DV414SI, в частности. Аналогично, любая игровая консоль, в частности, Sony PS2.

Формат текстового файла неважен, скажем, для определенности, txt, html, pdf, fb2, djvu --- они все несложно преобразуются друг в друга.

Смысл в том, чтобы слить с нормального компа на DVD/флэшку набор текстов, и потом иметь возможность читать их с экрана телевизора с помощью упомянутых устройств.

Интересуют именно тексты, а не аудио/видео-книги, о которых так ярко и красочно рассказал Гугль.

Понимаю, что извращение, но условия того требуют. Интересует не обсуждение вопроса «нужно или не нужно?», а конкретный ответ на вопрос «возможно ли в принципе, на каких устройствах и как именно?»

 

eugine_kosenko
()

Ошибка обращенных карточек в Anki 2.0.32?

Сейчас использую Anki 1.2.11. Узнал, что желательно обновиться до последней версии 2.0.32: документация на сайте для нее, разделяемые колоды --- тоже.

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

Похоже, ошибка в Anki версии 2.0.32? Или я что-то не так делаю? Проявляется ли это поведение еще у кого-нибудь? И вообще, какую версию посоветуете взять для работы?

 

eugine_kosenko
()

Как объединить значения для стандартных полей Recoll?

Мне понадобилось добавить к стандартным полям Recoll значения, не заданные в метаданных документа. Допустим, есть такой документ:

  <html>
    <head>
      <meta name="author" content="Kosenko" />
      <meta name="m:author" content="Maverik" />
      <title>An Example</title>
     </head>
    <body>
      Example
    </body>
  </html>

Здесь поле author является стандартным, а m:author --- пользовательским. Чтобы задать это поле, в fields указывается:

  [prefixes]
  m:author=XYMA

  [stored]
  m:author=

Предположим также, что это результат обработки, например, pdf-файла, исправлять который я не хочу или не могу. Мне нужно добавить значение Constructor к полю author и значение Eugine к полю m:author. Для этого в recoll.conf помещается объявление вида:

  [~/study/recoll/metadata/trial]
  metadatacmds = ; author = echo "Constructor"; m:author = echo "Eugine";

Логично ожидать, что теперь после индексации приведенного документа в поле author будет записано «Kosenko - Constructor». а в поле m:author --- значение «Maverik - Eugine». Однако оказывается, что поле «m:author» приняло ожидаемое значение, а поле author --- нет. В нем прописывается только внутреннее значение Kosenko, полученное в результате обработки самого документа. Внешнее значение, заданное командой metadatacmds, не добавляется.

Интересно, что если добавить в документ еще один метатэг, например, так:

  <meta name="author" content="Constructor" />

то это значение добавляется к полю, но без дефиса-разделителя: «Kosenko Constructor». Это поведение одинаково как для стандартных, так и для пользовательских полей. А вот если к полю m:author добавить еще одно внешнее значение, скажем, так:

  [~/study/recoll/metadata/trial]
  metadatacmds = ; m:author = echo "Eugine"; m:author = echo "Creator";

то последнее значение в последовательности просто перекрывает все предыдущие.

Пока что я спасаюсь тем, что использую только поле m:author (собственно, по описанной причине и потребовалось еще одно поле для автора), а поле author объявляю его синонимом. Наоборот не получается --- при индексации синоним m:author вначале приводится к каноническому имени author, а затем все происходит так же, как и раньше. В результате все значения объединяются как надо, но: во-первых, поле author в таком случае вообще не заполняется, а во-вторых, искусственное имя для стандартного атрибута --- это некрасиво.

Непонятно, в чем тут принципиальное отличие в значениях стандартных и пользовательских полей, и можно ли его преодолеть, не ковыряясь в исходниках?

 

eugine_kosenko
()

Можно ли преобразовать кодировку описания коммитов Git?

В свое время я имел неосторожность при коммитах в Git-репозитории создавать описание кириллицей в кодировке CP1251. После перезода на UTF-8 читать журналы Git стало совершенно невозможно. Таких коммитов очень много, а репозитории достаточно ценные.

Насколько я понял, информация в каталоге .git/logs содержит только журналы действий пользователя, и к описанию коммитов никакого отношения не имеет. В частности, прямое перекодирование файлов .git/logs/HEAD и .git/logs/refs/master никакого эффекта не дало.

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

Посему вопрос: может ли эта проблема быть решена другим способом? Есть ли инструменты для решения подобных задач?

 

eugine_kosenko
()

Как подружить Vim и Fish?

Так получилось, что использую в качестве редактора Vim, а в качестве командной оболочки --- Fish.

Если в Vim набрать команду вида

:r!ls

То возникает ошибка типа

Illegal command name '(ls)'

fish: (ls) > /tmp/.private/maverik/vJRqErQ/0

В принципе, понятно --- Fish не воспринимает круглые скобки, как изоляцию команды. По идее, скобки для Fish вообще не нужны.

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

Пока что обошел проблему заданием переменной sh=«/bin/bash» в Vim, но хотелось бы получить гладкую интеграцию.

Может ли кто подсказать, где копать, чтобы изменить формат команды при вызовах типа указанного?

 , ,

eugine_kosenko
()

FOSS-средства анализа читаемости текста

Не знаю, как в нынешних версиях, а вот еще в Word времен 2000 довелось увидеть некий инструмент, позволяющий проанализировать качество текста на предмет читаемости. Речь идет не только об отстутствии орфографических и грамматических ошибок, но и о грамотном использовании синонимов, общем словарном запасе, учете зубодробительных сочетаний звуков и т. п.

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

Так вот, интересно, как вообще называются подобные анализаторы? И есть ли что-то общепризнанное (ну или вообще хоть что-то) в мире FOSS? Интересуюсь не спора ради, а эффективности для.

 , ,

eugine_kosenko
()

HTTP-запрос для получения только заголовка без содержимого

Имеется некий абстрактный url вида http(s)://a.b.c/get-me. Интересует, как получить тип и размер этого ресурса, не выкачивая при этом сам ресурс. В принципе, это значения Content-Type и Content-Length в заголовке ответа, которых (я думаю, пока) будет достаточно.

Беда однако в том, что при простой выборке по url мне, кроме заголовков, будет возвращен и сам ресурс, чего мне на первом этапе не нужно. Ибо запрашиваемый файл может быть очень большого размера. Кроме того, нет смысла выбирать ресурс, если он не подойдет мне по типу.

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

Может ли кто подсказать (правильное) решение?

 , ,

eugine_kosenko
()

Проблемы с удалением твитов через Twitter API

Стоит задача удалить из профиля Twitter около 3000 спамовых твитов. Все твиты созданы в один день, я могу даже построить их список. При этом они странно устроены, например, поиск по пользователю и дате их не находит ни через сайт ни через API, хотя в ленте этого пользователя они видны и на сайте и через API.

Но дело даже не совсем в этом. Я освоил Twitter API настолько, что успешно могу создать новый твит с помощью statuses/update, то есть, видимых проблем с авторизацией доступа я не вижу. Однако при попытке удалить такой свежесозданный твит по идентификатору с помощью statuses/destroy через тот же самый интерфейс приводит к ошибке

{"errors":[{"message":"Your credentials do not allow access to this resource","code":220}]}

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

Правда, не совсем понятно, в документации по statuses/destroy указывается, что id твита нужно задавать в url, и одновременно там же приводится необходимость задать id уничтожаемого твита как параметр. Я пробовал разные комбинации, но все завершаются с одним и тем же результатом.

Может быть, я использую для уничтожения не тот метод, и какой в таком случае нужно использовать? Может ли кто объяснить, что я еще делаю не так?

 ,

eugine_kosenko
()

Как разрезать книгу для прошивки?

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

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

Вопрос: как обеспечить такую верстку текста?

Понятно, что TeX мне в руки и вперед. Но есть ли какие-нибудь стандартные решения без сложного освоения? Может быть, есть специальный софт для этого?

 ,

eugine_kosenko
()

[haskell] Record Syntax для вложенных типов (что изменилось?)

Возвращаясь к этой теме:

http://www.linux.org.ru/forum/development/4354508

Стандартного модуля Data.Accessor в 7.0.3 я почему-то не нашел, доку по нему тоже, нашел только вот это:

http://haskell.org/haskellwiki/Record_access

Получается, что стандартные аксессоры выкинули?

 

eugine_kosenko
()

[haskell] Множества как монады

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

 

eugine_kosenko
()

Haskell Cafe на русском?

Есть ли русскоязычный аналог HC, или вся активность сосредоточена в ЖЖ? Интересует возможность получить ответы на, возможно, глупые вопросы от новичка.

eugine_kosenko
()

[haskell] Перебор значений для упорядоченных дискретных типов

Пусть для некого типа а определены

first :: Maybe a

last :: Maybe a

succ :: a -> Maybe а

pred :: а -> Maybe a

Очевидно, что этот тип автоматически реализует Ord и Ix. Непонятно, почему эти определения не включены в Ix?

 

eugine_kosenko
()

[haskell] Record Syntax для вложенных типов

data D1 a = D1 { v :: a }

data D2 a = D2 { d1 :: D1 a }

setV :: a -> D2 -> D2

setV u d2 = d2 { d1 = (d1 d2) { v = u }}

Это правильно? И можно ли это сделать проще?

 

eugine_kosenko
()

[haskell] Числа как конструкторы типов

Разрешены ли определения вида:

data Rank = 7 | 8 | 9 | 10 | J | Q | K | A

или с использованием синтаксического сахара:

data Tricks = 0..10

?

 

eugine_kosenko
()

[haskell] Мемоизация в базу данных

Существуют ли стандартные решения по мемоизации во внешнюю базу данных? Насколько они сложны из-за использования ввода-вывода? Допустимо ли в таких случаях использовать unsafePerformIO?

 

eugine_kosenko
()

div поверх flash в FireFox 3

Я понимаю, что "ничего не поделаешь", но вот статья:

http://flash-ripper.com/archives/001231.php

Обидно, но в IE работает, а в фоксе -- нет. И это не единственная статья, видел еще примеры, но ни один не заработал. Вот пример, как это не работает у меня:

http://ofprodiv.aroks.net/

Что я делаю не так?

>>>

eugine_kosenko
()

Снова о табличной верстке

Имеется вот такой код (http://test.aroks.com.ua/layout.html):

<table style="width: 20em;">
  <tbody>
    <tr>
      <td style="width: 100%;">
        <input style="width: 100%;">
      </td>
      <td style="width: 10px;">
        O
      </td>
    </tr>
  </tbody>
</table>

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

На слоях попробовал сделать так (http://test.aroks.com.ua/layout2.html):

<div style="width: 20em;">
  <div style="width: 10px; float: right;">O</div>
  <input style="width: 95%;">
</div>

Тут сложность в том, что ширина левой ячейки должна быть привязана к
ширине всей строки, но как это сделать -- непонятно. Если задать
ширину левой ячейки в процентах (как показано), то при изменении
ширины строки появляется зазор между ячейками, а при уменьшении
дизайн вообще может "сложиться". По сути, нужно что-то вроде

<input style="width: 100%-10px;">

В принципе, можно сделать так, что будет задаваться ширина левой
ячейки, но тогда ширина всей строки должна будет задаваться через нее
(типа "обтягивающего" контейнера).

Пока что есть два варианта -- верстать на таблицах или поддерживать
соотношение ширин левой ячейки и строки через JS при ресайзинге.
Пример растет из DOJO Toolkit, там сделано через таблицы, я при
создании виджетов пока на скорую руку повтыкал триггеров на JS. С
одной стороны, таблицы заведомо медленнее слоев, с другой -- не
думаю, что код JS быстрее нативной обработки таблиц. 

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

>>>

eugine_kosenko
()

Google 10100

Google предлагает 10 миллионов долларов за идеи

Корпорация Google, празднующая в этом месяце 10 летний юбилей, объявила о старте проекта "10100", в рамках которого собирается потратить 10 миллионов долларов на воплощение идей, способных изменить мир. Об этом сообщает Computerworld.

Google предлагает всем желающим заявить о своих идеях на сайте проекта до 20 октября. Заявки принимаются на 25 языках. Из общего числа заявок Google выберет 100 наиболее достойных, по мнению компании, идей. Затем пользователям Интернета будет предложено проголосовать за понравившиеся им идеи. По итогам голосования будет составлен шорт-лист из 20 претендентов. Специальная комиссия выберет из этого списка 5 финалистов, воплощение чьих идей будет профинансировано Google.

Представители Google сообщили, что за 10 лет существования компании они убедились в том, что перспективные замыслы могут прийти из самых неожиданных источников. Например, идея создания сервиса Google News появилась, когда один из инженеров компании после событий 9 сентября 2001 года осознал необходимость инструмента, который позволил бы аккумулировать новости со всего мира.

Google отмечает, что для участи в проекте "10100" принимаются идеи различного масштаба и не обязательно связанные с технологиями. В качестве примера компания называет устройство Hippo Water Roller облегчающее транспортировку воды.

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

>>>

eugine_kosenko
()

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