Pull to refresh
140
0.9
Андрей Дмитриев @AndreyDmitriev

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

Send message

Именно так, я экспериментировал с разными типами пластиков (имитирующих дерево, алюминий и т.д), имел неострожность купить бобину "флекс" (он мягкий как резина), с ним вообще без шансов. Орка, к сожалению, это принтер напрямую не поддерживает (в смысле коммуникации), с ним идёт своя программа FlashPrint, простая как пять копеек, но там возможностей меньше (хотя она неплохая). Я поигрался и с оркой, но постоянно экспортировать .gcode, а потом использовать FlashPrint мне надоело, напрямую удобнее (хотя последние версии я не смотрел). А так он в принципе норм, но надо с настройками повозиться (как и с любым бюджетником).

трехгигабайтный винчестер. Забегая наперед — им я проапгрейдил девайс от WD

Такой вопрос - а вы как-то специально размечали этот диск, чтобы WD его увидел? У меня просто есть такая железка, живая, я хочу в неё диск посвежее воткнуть. Мне что-то надо с ним специально делать или просто чистый диск вставить, отформатировать и WD его подхватит?

Спасибо за советы! В LabVIEW вообще всё это ну очень просто — там готовые кирпичики чтобы загрузить wav файл и график тоже, любой LabVIEW программист набросает такое часа этак за три. И хорошая мысль с workaudiobook, переделаю-ка я это на srt для совместимости, как-то я эту программу пропустил, там есть пара неплохих моментов, да. А "лондонский" лингафонный курс — это английский, надо полагать, равно как и Assimil? Есть ли хороший французский?

Как программист начинает изучать новый разговорный язык? Правильно, сначала он пишет программу-помощник для изучения этого самого языка.

Я начал учить французский в конце прошлого месяца (с абсолютного нуля), обложился учебниками с кучей аудиоматериалов, но довольно скоро мне стало не очень удобно ставить это дело на паузу и мотать туда сюда в плеере (французский не очень прост в плане произношения). Короче слепил такую вот программку, чтобы в неё можно было загрузить текстовый файл и аудио (в виде wav файла), затем для каждой фразы определить начало и конец (руками, тут только хардкор, никакого ИИ), сохранить это дело и проигрывать любую фразу сколько нужно раз, пока она не проникнет в мозг, вот так это на данный момент выглядит:

Цифры справа от текста - позиция и длительность, курсоры начала и конца можно интерактивно двигать и сохранять. А, ещё я сделал замедленное произношение (во французском бывает слова склеиваются в группы, я ни фига на нормальной скорости не разбираю, а замедленно в полтора два раза — чуть легче). Это кстати, оказалось непросто, чтобы сохранять высоту тона, я уже приготовился идти и разбираться с Фурье и вокодером, но потом просто воспользовался Rubber Band библиотекой (там есть утилита командной строки, которой можно wav скормить) и стало норм, велосипед изобретать не пришлось.

Написано на LabVIEW (мне так проще). Выкладывать пока не буду, там сыро и спагетти, кроме того мне ещё надо прикрутить юникод, чтобы и фонетическую транскрипцию IPA шрифтом и русский перевод сразу видеть (это в LabVIEW мягко говоря нетривиально, но возможно). Материалы разложены в два уровня — "Учебник" и "Урок", чтобы проще навигироваться было (я пользуюсь тремя учебниками плюс то, что преподаватель даёт). По сути это папки, в каждой просто лежит текстовый файлик, wav файл и опционально png картинка, которая справа показывается (ну там скриншот учебника или сайта). Пока идёт "пристрелка", я подгоняю инструмент под учебный процесс в виде полезной прокрастинации между занятиями.

А до фильмов на французском мне ещё ох как далеко.

Вы серьёзно? А мне вот синие надо. Ну привык я к ним. И сейчас с ними сижу и пишу данное сообщение.И что? Пнх я? ))


Ну это просто значит, что конкретно вам конкретно эта клава не подходит, только и всего, ведь на вкус и цвет все разные, как говорится. Это же просто бюджетная механика, тут подсветки вообще нет. Русских букв тоже нет, но это нужно не всем. В рунете есть пара обзоров и там говорят, что уменьшенное расстояние между блоками дискомфорт не вызывает, это даже лучше, что она чуть уже. А свичи, кстати, по заверениям производителя такие стоят только в этой клаве, так что просто повод попробовать. Ну и белых полноразмерных механических клавиатур, да ещё что б не выглядела как новогодняя ёлка и не стоила как крыло от боинга не так много на рынке. Я ж не агитирую покупать, просто поделился. Сейчас за неё просят 70-80 евро, что мне кажется слегка оверпрайс, будет 60 - норм, а вообще полтинник — её красная цена.

Мне из свежих Cherry KC 200 MX понравилась. Она недорогая совсем, меньше ста долларов, без наворотов. Там новые свичи MX2A, на выбор, либо красные тихие, либо коричневые.

А, и ещё она в белом варианте есть, я почему-то чёрные не люблю (со времён ДВК наверное), вот с ISO/немецкой раскладкой:

У меня относительно дешёвый Flashforge Adventurer 3 за три с чем-то сотни евро, в принципе норм, но "Боуден" подача мне кажется не самым оптимальным решением (а у рассматриваемого принтера именно она, судя по всему), она к пластику довольно привередлива, да и результат бывает не очень из-за инерционности подачи и ретракта. Если я буду свой менять, то следующий возьму исключительно с "Директ" экструдером, чтобы этот узел прямо на печатающей головке был.

Нет, как их воткнул, так они и работают. Стоят Devolo на 200 Мбит с дисплейчиками (три или четыре штуки), это удобно. Вот эти:

И один на 500 Мбит. Пока все живые. Возможно у вас с проводкой и заземлением что-то не то, либо какое-то из устройств типа пылесоса или стиральной машины гонит в сеть импульсы, которые и пробивают адаптеры.

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

Да вы его не так роняете!

На самом деле Эппл проводит креш-тесты смартофонов и планшетов, роняя их с довольно большой высоты на гранитную плиту — для этого у них в R&D есть несколько специальных стендов, но в приоритете там не выживаемость устройства как такового, а изучение внутренних деформаций электроники и аккумулятора, что б он не полыхнул при падении. Умные колонки тоже проверяют, но прямо в транспортной таре — тут больше на тему возможных повреждений при транспортировке. Странно, что хрупкую кнопку не заметили на тестах. Хотя может и заметили, но там предсерийные образцы тестируются, им вероятно проще по расширенной гарантии менять, чем процесс производства корректировать.

О, спасибо огромное, а то я собрался уже было WSL расчехлять. Теперь понятнее.

Я, кстати, попробовал навскидку gp_embedded_init()/gp_embedded() и эти функции работают, что даёт возможность напрямую вызывать скрипт вообще откуда угодно. Это не самый эфффективный способ (грубо говоря там интерпретатор работает), но удобно. Офигенная игрушка, на самом деле, спасибо за наводку.

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

Вы знаете, тут больше всё-таки от задачи зависит, которую вы решаете. Ну вот, к примеру, надо вам вычислить детерминанты нескольких матриц матриц Гильберта очень большого размера или там факториал или ещё что, причём где-то параллельно. Соответственно (если не писать всё руками в С# с нуля) придётся воспользоваться подходящей математической библиотекой. Если Pari имеет всю необходимую для решения задачки математику, то можно воспользоваться ею. И тут есть несколько вариантов. Можно пользоваться Pari просто как алгебраическим калькулятором, оставаясь в рамках предложенного скриптового языка gp, тогда да, parfor и всё остальное — наше всё, вызывать это дело надо будет из командной строки, гнать вычисления в файл, тут всё просто. Либо, если надо тесно интегрировать в C# (или другую среду), то можно написать всё на Си, используя libpari.dll (кстати, конвертера gp2c я под Windows не вижу, но есть исходники), ну и подключать как динамическую библиотеку. Можно враппер написать, вот, к примеру для питона я вижу cypari/cypari2. В этом случае нам parfor вообще никаким боком не нужен (да мы его из Си/C#/Python и не можем использовать, разве что через gp_embedded_init()), тем не менее для параллелизации вычислений есть несколько возможностей (судя по примерам).

Можно воспользоваться тем, что предоставляет Pari, через mt_queue*, тут запускается три потока для параллельной обработки N1 N2 и М:

#include <pari/pari.h>

GEN
Cworker(GEN d, long kind) { return kind? det(d): Z_factor(d); }

int
main(void)
{
  long i, taskid, pending;
  GEN M,N1,N2, in,out, done;
  struct pari_mt pt;
  entree ep = {"_worker",0,(void*)Cworker,20,"GL",""};
  /* initialize PARI, postponing parallelism initialization */
  pari_init_opts(8000000,500000, INIT_JMPm|INIT_SIGm|INIT_DFTm|INIT_noIMTm);
  pari_add_function(&ep); /* add Cworker function to gp */
  pari_mt_init(); /* ... THEN initialize parallelism */
  /* Create inputs and room for output in main PARI stack */
  N1 = addis(int2n(256), 1); /* 2^256 + 1 */
  N2 = subis(int2n(193), 1); /* 2^193 - 1 */
  M = mathilbert(80);
  in  = mkvec3(mkvec2(N1,gen_0), mkvec2(N2,gen_0), mkvec2(M,gen_1));
  out = cgetg(4,t_VEC);
  /* Initialize parallel evaluation of Cworker */
  mt_queue_start(&pt, strtofunction("_worker"));
  for (i = 1; i <= 3 || pending; i++)
  { /* submit job (in) and get result (out) */
    mt_queue_submit(&pt, i, i<=3? gel(in,i): NULL);
    done = mt_queue_get(&pt, &taskid, &pending);
    if (done) gel(out,taskid) = done;
  }
  mt_queue_end(&pt); /* end parallelism */
  output(out); pari_close(); return 0;
}

Либо можно воспользоваться старым добрым openmp, наброшенным поверх pari_thread_*(), тогда это вот так будет выглядеть:

#include <pari/pari.h> /* Include PARI headers */

#include <omp.h>       /* Include OpenMP headers */

#define MAXTHREADS 3  /* Max number of parallel threads */

int
main(void)
{
  GEN M,N1,N2, F1,F2,D;
  struct pari_thread pth[MAXTHREADS];
  int numth = omp_get_max_threads(), i;
  /* Initialise the main PARI stack and global objects (gen_0, etc.) */
  pari_init(8000000,500000);
  if (numth > MAXTHREADS) {
    numth = MAXTHREADS;
    omp_set_num_threads(numth);
  }
  /* Compute in the main PARI stack */
  N1 = addis(int2n(256), 1); /* 2^256 + 1 */
  N2 = subis(int2n(193), 1); /* 2^193 - 1 */
  M = mathilbert(80);
  /*Allocate pari thread structures */
  for (i = 1; i < numth; i++) pari_thread_alloc(&pth[i],8000000,NULL);
#pragma omp parallel
  {
    int this_th = omp_get_thread_num();
    if (this_th) (void)pari_thread_start(&pth[this_th]);
#pragma omp sections
    {
#pragma omp section
      {
        F1 = factor(N1);
      }
#pragma omp section
      {
        F2 = factor(N2);
      }
#pragma omp section
      {
        D = det(M);
      }
    } /* omp sections */
    if (this_th) pari_thread_close();
  } /* omp parallel */
  pari_printf("F1=%Ps\nF2=%Ps\nlog(D)=%Ps\n", F1, F2, glog(D,3));
  for (i = 1; i < numth; i++) pari_thread_free(&pth[i]);
  return 0;
}

Ну и для любителей хардкора можно на классических POSIX потоках (эту простыню я под спойлер засуну):

Скрытый текст
#include <pari/pari.h> /* Include PARI headers */

#include <pthread.h>   /* Include POSIX threads headers */

void *
mydet(void *arg)
{
  GEN F, M;
  /* Set up thread stack and get thread parameter */
  M = pari_thread_start((struct pari_thread*) arg);
  F = QM_det(M);
  /* Free memory used by the thread */
  pari_thread_close();
  return (void*)F;
}

void *
myfactor(void *arg)  /* same principle */
{
  GEN F, N;
  N = pari_thread_start((struct pari_thread*) arg);
  F = factor(N);
  pari_thread_close();
  return (void*)F;
}

int
main(void)
{
  long prec = DEFAULTPREC;
  GEN M1,M2, N1,N2, F1,F2, D1,D2;
  pthread_t th1, th2, th3, th4; /* POSIX-thread variables */
  struct pari_thread pth1, pth2, pth3, pth4; /* pari thread variables */

  /* Initialise the main PARI stack and global objects (gen_0, etc.) */
  pari_init(32000000,500000);
  /* Compute in the main PARI stack */
  N1 = addis(int2n(256), 1); /* 2^256 + 1 */
  N2 = subis(int2n(193), 1); /* 2^193 - 1 */
  M1 = mathilbert(149);
  M2 = mathilbert(150);
  /* Allocate pari thread structures */
  pari_thread_alloc(&pth1,8000000,N1);
  pari_thread_alloc(&pth2,8000000,N2);
  pari_thread_alloc(&pth3,32000000,M1);
  pari_thread_alloc(&pth4,32000000,M2);
  /* pthread_create() and pthread_join() are standard POSIX-thread
   * functions to start and get the result of threads. */
  pthread_create(&th1,NULL, &myfactor, (void*)&pth1);
  pthread_create(&th2,NULL, &myfactor, (void*)&pth2);
  pthread_create(&th3,NULL, &mydet,    (void*)&pth3);
  pthread_create(&th4,NULL, &mydet,    (void*)&pth4); /* Start 4 threads */
  pthread_join(th1,(void*)&F1);
  pthread_join(th2,(void*)&F2);
  pthread_join(th3,(void*)&D1);
  pthread_join(th4,(void*)&D2); /* Wait for termination, get the results */
  pari_printf("F1=%Ps\nF2=%Ps\nlog(D1)=%Ps\nlog(D2)=%Ps\n",
              F1,F2, glog(D1,prec),glog(D2,prec));
  pari_thread_free(&pth1);
  pari_thread_free(&pth2);
  pari_thread_free(&pth3);
  pari_thread_free(&pth4); /* clean up */
  return 0;
}

Ну то есть при использовании Pari в многопоточной среде и интеграции со своей средой многопоточность среды остаётся как есть, она заменяет все эти "parfor", то есть если вы пользуетесь С#, то и будете использовать те же привычные Parallel.For/Parallel.Foreach, ну или я если в LabVIEW, то буду использовать свои конструкции. Я не думаю, что параллелизация parfor какая-то особенная, чудес не бывает, но всегда можно запустить бенчмарк на одинаковых данных и проверить. Как-то так.

А, не, там что-то с исходником не так. Я дома ещё раз проверил на совсем простом примере, всё ОК.

Вот код в test.c, я хз сколько там надо в pari_init() заказывать, надо доки почитать, пусть будет с запасом:

#include "pari/pari.h"

int main()
{
	pari_init(8000000,500000);
	pari_printf("Pari test - begin\n");

	GEN ver = pari_version(), Major = gel(ver,1), minor = gel(ver,2), p = gel(ver,3);
	pari_printf("Pari Version M = %Ps m = %Ps p = %Ps\n", Major, minor, p);
    printf("pari-%ld.%ld.%ld\n", itos(Major), itos(minor), itos(p));

	GEN M, D;
	M = mathilbert(5);
	D = det(M);
	pari_printf("M = %Ps\nD = %Ps\n", M, D);
	
	pari_close();
	printf("Pari test - end\n");	
	return 0;
}

Компилируем просто:

gcc test.c -l pari -o test

Вывод из test.exe:

Pari test - begin
Pari Version M = 2 m = 17 p = 0
M = [1, 1/2, 1/3, 1/4, 1/5; 
	1/2, 1/3, 1/4, 1/5, 1/6; 
	1/3, 1/4, 1/5, 1/6, 1/7; 
	1/4, 1/5, 1/6, 1/7, 1/8; 
	1/5, 1/6, 1/7, 1/8, 1/9]
D = 1/266716800000
pari-2.17.0
Pari test - end

И да, детерминант матрицы Гильберта 5x5 считает верно.

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

Не, не в этот раз, там минимальные требования MS-DOS 3.0. У меня такой дисковод есть, я в теории могу собрать винтажный комп, но скорей всего читаться будет с трудом.

Я сегодня уже с утра читаю, как весь линкедин взорвался комментами типа "да это не физика!", "это смешно" или "с какой стати мы присуждаем премии по физике за математику" и т.д. На самом деле это скорее теорфизика (или статистическая физика), причём уже ставшая классикой, просто нобелевский комитет какой-то слишком уж хайповый подзаголовок добавил с машинным обучением (котолрое безусловно имеет под собой этот фундамент). Насколько я понимаю, то одна из работ, на основании которой Хопфилд получил эту премию это Neural networks and physical systems with emergent collective computational abilities (а это 1982 год, на секундочку), ну и Машина Больцмана. У меня, кстати, сохранилась старая книжка "Нейронные сети", в которой модель Хопфилда рассматривается сразу за сетью Кохонена (и Машина Больцмана совместно с Хинтоном и Сейновски там тоже упоминается), сама книга на немецком, но зацените на каком носителе там исходники прилагаются:

Это 1990 год.

Я так понял вы решили начать по хардкору, написав на Си с использованием libpari. 

Это я просто "с конца" начал. Так то я в LabVIEW программирую, и хотелось бы (допустим) внешнюю математику подключить библиотекой (суть DLL), иначе pari останется "вещью в себе". Я, конечно, могу (вероятно) через командную строку с ней общаться, но хотелось бы именно библиотекой. Там ещё надо будет посмотреть как данные пробрасывать, но это дело техники - если я успешно соберу консольное приложение с libpari, то соберу и библиотеку. Там ещё могут настичь подводные камушки с параллельностью, так как LabVIEW "параллельна" сама по себе, и в некоторых редких случаях внешняя многопоточная библиотека может доставить головную боль, но и это решаемо. А "пристреливаться" и отлаживаться, я конечно не в библиотеке буду. У меня в общем практической задачки в руках нет, да и дополнительная зависимость - не всегда хорошо, тут просто чисто любознательный интерес для расширения кругозора.

Что-то у меня под Windows собрать до работоспособного состояния пример extgcd.c, что там идёт в комплекте не получилось. Студии отчаянно не нравится заголовочник divll_pre.h, а gcc (minGW64) в общем собирает, и оно даже запускается, но крешится где-то в районе gp_read_stream(stdin). Я верю, что под Линуксом оно всё ОК, но вот Windows что-то не срастается.

Я пробовал и по-простому "gcc extgcd.c -llibpari -o extgcd" и так, как интернет рекомендует "gcc extgcd.c -Wall -Wextra -pedantic -llibpari -std=c11 -g -o extgcd", но нет.

Минимальнейшая конфигурация, на которой у меня крутится 24Н2 это Acer Aspire XC-105 c AMD камушком, ему чуть больше одиннадцати лет, я ему память до 8 ГБ проапгрейдил:

Но мне просто потребовался комп с голой ОС для подключения кой-каких USB накопителей, плюс я хотел просто "потестить" LTSC на древнем железе. Даже если просто подключиться к нему через RDP, то уже загрузка процессора улетает в 50%. Работать на нём - ну такое себе.

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

Нет проблем, лишь бы они висели на одной фазе. Но даже если не на одной, то есть такая штука:

Правда она скорость роняет. В моём случае через розетки где-то 60-70 мегабит, а через фазу - скорость падала вдвое, так что я все комнаты где интернет через розетки, на одну фазу повесил. Чем длиннее линия, тем ниже скорость. Но у меня модули очень старенькие стоят, им лет пятнадцать уже.

Да, выросли. Я б не сказал что "вдвое", но раза в полтора (мука, молоко, сыр, масло), пожалуй да, что есть, то есть. Вот тут есть табличка в Экселе, правда на немецком, но переводится легко. Хотя сейчас вроде потихоньку начинают падать, но очень слегка.

1
23 ...

Information

Rating
1,664-th
Location
Ahrensburg, Schleswig-Holstein, Германия
Date of birth
Registered
Activity