LINUX.ORG.RU

Сообщения AlexVR

 

Abstract data type и Си

Задача написать учебный пример по Abstract data type на примере Си.

Что получилось:

stack.h:

// ...
struct Stack_s;
typedef struct Stack_s Stack;
// Old: typedef int Item;
typedef int8_t Item;

// Old: Stack*  stack_create    ();
// Old: void    stack_destroy   (Stack **stack);
// Old: Stack*  stack_clone     (Stack *stack);
Stack*  stack_create    (void);
void    stack_destroy   (Stack *stack);
Stack*  stack_clone     (const Stack *stack);

size_t  stack_size      (const Stack *stack);
int     stack_is_empty  (const Stack *stack);

void    stack_push      (Stack *stack, Item item);
Item    stack_pop       (Stack *stack);
Item    stack_top       (const Stack *stack);
void    stack_clear     (Stack *stack);
// ...

stack.c:

#include "stack.h"

struct Stack_s {
  // Полное описание структуры стека скрыто от пользователя
  // ...
};

// Old: Stack* stack_create() {
Stack* stack_create(void) {
  // Создать стек можно только используя stack_create
  // ...
}

// ...

main.c:

#include <stdio.h>
#include <stack.h>

int main(void) {
  Stack *stack = stack_create();
  
  stack_push(stack, 1);
  stack_push(stack, 2);
  stack_push(stack, 3);
  
  while(!stack_is_empty(stack)) {
    printf("%d\n", stack_pop(stack));
  }
  
// Old: stack_destroy(&stack);
  stack_destroy(stack);
  return 0;
}

Хочется конструктивной (и не очень) критики.

Не смог найти хороших ссылок по именованию и минимальному набору функций (в том числе как удалять «объект»).

З.Ы.: Про GObject, Cello, OOC toolkit, Axel T. Schreiner, Object-Oriented Programming with ANSI-C слыхал

 ,

AlexVR
()

multiplo

Есть такой «свободный» конструктор http://multiplo.org/.

Кто его юзал? И что есть похожего?

 

AlexVR
()

Симпатичный python веб-фреймворк

Есть ряд мелких задач для управления сервером, которые хочется свести в простую Web-морду. Для чего готов написать немного кода. Основные требования:

  • Поддержка аутентификации в LDAP (OpenLDAP).
  • Выполнение подготовленных скриптов от имени вошедшего пользователя.
  • Готовый набор CSS-стилей.
  • Простой способ создания небольших форм.
  • Закладки или глобальное меню для основных групп заданий.

Примеры задач:

  • Управление пользователями и группами LDAP для «админов».
    • Создать пользователя и одноимённую группу.
    • Создать пачку пользователей вида user01, user02, …., user23.
    • Создать группу для проекта и поместить в неё пользователей. Для этой группы автоматом создать директорию на общем файловом ресурсе.
  • Отображение статуса квот в общей файловой системе для текущего пользователя.
  • Управление квотами для «админов».
  • Отобразить очередь заданий текущего пользователя в планировщике задач SLURM.
  • Удалить из очереди SLURM задание.
  • ...

Главное от чего хочется уйти, так это от HTML/CSS вёрстки.

 , ,

AlexVR
()

CentOS vs Scientific Linux, заход №2016.1

Стою перед выбором CentOS 7 или Scientific Linux 7.

Цель: обновление вычислительного кластера.

Как следствие: будут свои ядра для работы с Lustre.

Подход к сохранению версий 7.1/7.2 в SL мне больше по душе чем Rolling у CentOS.

Результат: пока склоняюсь к SL

Хочется услышать за и против от других.

 , ,

AlexVR
()

Определение системы управления версиями

Решил тут подготовить пару слайдов по DVCS для студентов и понял, что не могу выбрать внятное определение «системы управления версиями» и список функций, что бы влезало на слайд обычным текстом в beamer. Кто что может посоветовать?

UPDATE:

Исходный код презентации: https://bitbucket.org/AlexVRud/presarhpc/src/default/Mercurial_intro.tex?file...

 , , , ,

AlexVR
()

static const double в функции

Как избавиться от варнинга в ситуации:

typedef struct Solver_s {
    ...
} Solver;

double Solver_compute_X(Solver * self) {
    static const double alpha = sqrt(M_PI)/27.0; // <--- Warning
    static const double beta  = cos(3.0/17.0);   // <--- Warning
    ...
    return ... alpha ... beta ...;
}

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

 

AlexVR
()

Делать вложенные классы или нет?

Пусть есть некая модель: http://medical.nema.org/dicom/2013/output/chtml/part17/sect_C.5.html

Patient
Study
Series
Waveform
Waveform\MultiplexGroup
Waveform\Chanel
Waveform\Sample
Которую надо представить в виде классов в библиотеке на C++.

Так же планируется задействовать SWIG для предоставления доступа к библиотеке из Python.

Как в данном случае упорядочить и назвать классы:

1:

namespace dicom {
class Patient;
class Study;
class Series;
class Waveform;
class WaveformMultiplexGroup;
class WaveformChannel;
class WaveformSample;
}

2:

namespace dicom {
class Patient;
class Study;
class Series;
class Waveform {
  class MultiplexGroup;
  class Channel;
  class Sample;
  ...
};
}

3:

namespace dicom {
class Patient;
class Study;
class Series;
class Waveform
namespace wf {
  class MultiplexGroup;
  class Channel;
  class Sample;
}
}

 ,

AlexVR
()

Наследование

Лето, температура за бортом +10, что уже радует.

Решили порешать задачки, ни у одну подкидываю.

Есть код:

#include <iostream>

class Foo {
public:
    Foo() : a_(0) {};
    Foo(int a) : a_(a) {};
    inline int getA() { return a_; };
    virtual void print() { std::cout << "{a: " << getA() << "}\n"; };
private:
    int a_;
};

class Bar : public Foo {
public:
    Bar() : Foo(), b_(0) {};
    Bar(int a, int b) : Foo(a), b_(b) {};
    inline int getB() { return b_; };
    virtual void print() override { std::cout << "{a: " << getA() << ", b: " << getB() << "}\n"; };
private:
    int b_;
};

int main() {
    Foo t1 = Bar(10,10);
    Bar t2 = Bar(20,20);
    Foo *t3 = new Bar(30,30);
    t1.print();
    t2.print();
    t3->print();
    delete t3;
    return 0;
}

Выхлоп ожидаемый:

...$ g++ -std=c++11 task.cpp && ./a.out
{a: 10}
{a: 20, b: 20}
{a: 30, b: 30}

И тут вопрос: «А как сделать вывод в первой строке такой же как в других? А чем это будет плохо?»

 

AlexVR
()

stdarg и float

При компиляции на 32-битной платформе:

float x = 0.0f;
printf("%f", x);
будет происходить нечто подобное:
float x = 0.0f;
printf("%f", (double)x);
Т.е. дополнительные параметры типа float будут преобразованы в тип double, перед вызовом функции с переменным числом аргументов.

Вопрос: в каком документе это описано?

AlexVR
()

Перезагрузка из-за переполнения ОЗУ

Ситуация: вычислительный кластер, на узлах запускается приложение в 20 потоков потребляющее много памяти. В один момент ОЗУ заканчивается и узлы тут же уходят в перезагрузку. Что бы пользовательское приложение уводило систему в перезагрузку мне кажется мало вероятным, более вероятным кажется, что систему выводит из строя либо какая-то служба (например, ganglia), либо драйвер Infiniband. Если что ОС Redhat 6, ОЗУ 64Гб, своп 2 Гб. Что можно сделать?

AlexVR
()

Удалённый графический терминал

Понимаю, что задача достаточно стандартная, но башка уже не варит.

Есть сервер (RedHat). На нём в основном народ будет работать через ssh. Но в некоторых случаях нужен запуск графических приложений. Проброс X-ов ведёт себя, мягко говоря, притормаживающи. Каналы связи клиентов могут быть крайне медленными (1Мб/с, а то и уже). Основная ОС клиентов: Оффтоп. В далёкие времена я для таких целей использовал FreeNX. Но что сейчас выбрать?

AlexVR
()

Тем кто пользуется CentOS

Стою перед задачей поднять несколько машиин с CentOS для разработки ПО под кластер. Честно говоря от такого закоренелого Ынтерпрайза я в шоке. Тихо мирно первый ноут привожу к удобоворимому виду. Но вот хочется услышать, кто как использует сабж (какие репозитории используете, откуда таскаете spec-файлы, чем автоматизируете сборку пакетов, зачем вам вообще это надо, ...)

 

AlexVR
()

Глюк с [url=...

Пример А пытался сослаться на http://xn--90afdbaav0bd1afy6eub5d.xn--p1ai/bsr/case/13446

AlexVR
()

http://www.doxygen.org в реестре?

Что-то у меня http://www.doxygen.org/ выдаёт сообщение «Мы приносим свои извинения, но доступ к запрашиваемому ресурсу ограничен.»

З.Ы.: Хотя http://doxygen.org/ - редиректится на http://www.stack.nl/~dimitri/doxygen/ и всё ок.

AlexVR
()

Страница регистрации

Сейчас зашёл через другой браузер и пришлось логинится. Но я промахнулся и попал на страницу регистрации, после чего повторно залогинился и тут увидел форму регистрации в своей любимой black-теме.

Что-то мне подсказывает, что форму регистрации залогиневшейся пользователь не должен видеть вообще. Должен быть редирект на главную или предыдущую.

AlexVR
()

Переход с SVN на HG

Решил потренироваться с переходом с SVN на HG.

  • В качестве тестового примера взял КуМир (http://lpm.org.ru/kumir2/).
  • Используя snvsync сделал локальную копию репозитория. С ней получается быстрее конвертация и анализ изменений.
  • Далее начинаются проблемы. Если использовать hg convert то:
    • получаем набор независимых веток, но по ним нормально виден процесс работы.
    • теряется вся что было где-то до 984 ревизии, когда код из корневой директории всё таки начал переноситься в trunk. Т.е. до этого никаких brunches и trunk небыло.
    • теряются директории playground и testing, но с ними надо разбираться отдельно, находя подходящее место в новом проекте.

Собственно приходи к вопросам:

  • как добавить всё что было до этого (984 SVN-ревизии)?
  • как свести ветви в единое дерево?
  • как быть с дополнительными директориями playground, testing находящимися и сейчас в корне?

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

AlexVR
()

[почта] что выбрать

Понадобилась система со следующим функционалом:

  1. Почтовые ящики для собственного домена
  2. Групповые алиасы - кто угодно посылает письмо на один адрес, пересылается нескольким адресатам, не все из них в этом домене
  3. Закрытые подписки - на подобе Гугловских групп, участники не обязательно в этом домене
  4. Web-интерфейс управления всем выше перечисленным

ни как не могу найти всё в одном.

 

AlexVR
()

35-долларовый планшетник решено поставить на конвейер

http://www.membrana.ru/particle/16901

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

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

Новое устройство нельзя назвать полноценным компьютером, в нём нет операционной системы

Но всё не так уж плохо для аппарата за $35-50 (точная цена будет названа позже). Планшетник оборудован семидюймовым сенсорным экраном и стилусом. На «ай-слейте» дети могут читать предустановленный учебник или делать заметки (в памяти помещается несколько страничек), а также решать задачи.

В общем индусы как всегда, делают самое дешевое, с минимальным но качественным функционалом.

З.Ы.: Ъ не увидят ролик с современным индийским школьным классом.

AlexVR
()

[Он настал] IBM впервые с 1996 года обошла Microsoft по капитализации

Акции корпорации IBM по итогам торгов 29 сентября выросли в цене на 0,91 процента до 179 долларов за штуку. Таким образом, общая капитализация IBM достигла отметки в 213,98 миллиарда долларов и превысила капитализацию Microsoft (213,2 миллиарда долларов). Как отмечает BBC News, IBM не стоила дороже Microsoft с 1996 года.

С начала 2011 года акции IBM подорожали уже более чем на 22 процента, а Microsoft - опустились на 8,62 процента.

Лента.вру

AlexVR
()

[патенты] Супер-пупер смартфон от M$

Компания Microsoft получила патент на смартфон модульной конструкции, ...

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

http://lenta.ru/news/2011/09/26/moduls/

 

AlexVR
()

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