1

(5 відповідей, залишених у Python)

Master_Sergius написав:

Не зрозуміло до чого тут python.

Як мінімум є специфічні програмки (аля TFS), які не підійдуть під Python, але займаються тим що я хочу (контролем версій)

Master_Sergius написав:

Але чому б не git? Без github-а, навіть, га?

Ну а чому б не щось інше? Часу все перепробувати у нас немає, раз за популярним ми вже пішли - да, прикольне, але недоліки болючі. Тому вирішив розпитати - хто з чим працював, кому що сподобалось.

2

(5 відповідей, залишених у Python)

Вітаю
Тут у нас у команді назріла проблема із нашим поточним онлайн сервісом (BitBucket + Cloud9) для комфортного програмування сайту. Проблема полягала у частим пропаданням кусків коду.
У зв'язку з цим хочу спитати - хто з чим мав досвід, хто що може порадити? Не обов'язково щоб це був онлайн сервіс, я особисто за check-in (раніше ми просто онлайн прогали один файл - сидиш і дивишся як хтось поряд бидлокодить).

3

(5 відповідей, залишених у Бази даних)

Така річ (ієрархія) зазвичай вирішується зв'язком таблиці на саму себе (іншими словами, є поле, яке вказує на свого предка, і відповідно є кортеж, який містить на місці предка NULL). Оброблювати таку структуру для БД важче, і здійснюється це рекурсивним запитом (він свій у Оракла, у всіх остальних - оператор WITH із SQL99 стандарту)

UPD: Ось на хабрі толково пояснюють

4

(4 відповідей, залишених у Бази даних)

koala написав:

оптимізувати не пробували перед видаленням?

OPTIMIZE TABLE ...

на диску є місце?

На диску було десь 35 Гб вільного місця, сама таблиця займала 7 Гб, я думав що цього достатньо, але 30 млн рядків - це не мало, місце закінчилось, БД лягла і не піднімалась поки я вручну не повидаляв усі bin файли, які там понастворювались

5

(4 відповідей, залишених у Бази даних)

Глобально задачі видалення з таблиці не стоїть, я просто вирішив її трохи зменшити бо воркбенч не запускається (вічно сканує схему), а тут таке... Але я ще думаю стосовно якогось джобу (як на MS SQL), який би періодично переносив дані із цієї здорової таблички у так званий архів, бо очікується кілька мільярдів на цю табличку, а не 30 млн...

6

(4 відповідей, залишених у Бази даних)

Табличка містить майже 30 млн рядків, що ще цікаво - здійснювати insert операцію - без проблем, здійснювання видалення конкретного рядка - теж без проблем, а щоб видалити десь 5 млн рядків - отака помилка. Шаринг в інтернеті дав мені оце вирішення, я знайшов той файл (my.cnf) і розкоментував там кілька рядків, призначених для InnoDB, але помилка просто стала вилітати пізніше (в кілька раз). Я так розумію це пов'язано із якимось буфером (можливо, теж якась змінна у цьому файлі), поясніть хто-небудь, що це?

7

(5 відповідей, залишених у Python)

Ну із самим алгоритмом хешування вроді зрозуміло, а як зробити так, що хешувався не сам пароль, а, скажім, пароль + мейл?

8

(5 відповідей, залишених у Python)

Master_Sergius написав:

Оце може? https://docs.djangoproject.com/en/1.9/t … passwords/

Такі речі в settings.py  прописуються

Саме цей мануал я і мав на увазі
У settings.py зараз немає цієї змінної, то її вручну прописати?

9

(5 відповідей, залишених у Python)

Припустимо я хочу використовувати свій алгоритм хешування при збереженні паролю (SHA256 + bcrypt), і хочу задавати свою сіль, пр чому спочатку до паролю докидувати сіль а потім цю пару хешувати. Звісно, є мануал для цього, але я, як людина яка вперше в житті сіла за джанго, не розумію де лежить той параметр PASSWORD_HASHERS, де і як його міняти, і як зробити так, щоб докидувати до паролю свою сіль. Найшов у системних кодах реалізацію методів із останнього розділу (ручне керування паролями користувачів), мені їх переписати чи як? Хтось зможе з таким допомогти?

10

(2 відповідей, залишених у C++)

Про cpp файли то зрозуміло, та й компілятор здається такого не дозволить, а стосовно include guard - дякую, тепер я зрозумів, що дарма повидаляв ті директиви))

Вітаю

Сам у С/С++ новенький, оце всівся (що правда синтаксис ще колись вивчив). Так от, описую я знач один клас (з використанням хедера), потім описую інший клас, який використовує перший, потім у програмі хочу підключити обидва ці класи і отримую помилку, що клас1 оголошений двічі (бібліотеки підключав через лапки, хоча як бібліотеки... швидше просто класи у вигляд пари <*.h, *.cpp>). Наскільки я зрозумів - при підключені через лапки код классу1 всовується у файл коду класу 2, а коли в головній програмі так підключаю обидва класи - то отримую продубльований код класу1. Звісно, я можу просто не викликати у програмі клас1, оскільки він вже є у класі2, але це для мене виглядає по-каліцьки, не люблю коли щось ховається за ширмою (звичка із шарпів).

Які у даному випадку будуть поради чи якісь норми описання/підключення класів?

12

(69 відповідей, залишених у Обговорення)

Joker написав:

Я шпилив в контру цілий день.

ВСЕ САМОПІДГОТОВКА

Ви зробили собі клона один з яких вчився, а інший - готувався до іспиту?

Він так англійську вчив (певно гра була на англійській)

13

(69 відповідей, залишених у Обговорення)

а в мене з фізики було 192.. 200 з математики... 175 з мови... я мову завалив...

14

(21 відповідей, залишених у Інше)

Я б вибрав КПІ)))
Ну я правда його і вибрав))

стосовно якості навчання - скажу коротко, немає в Україні вишів із якісним навчанням, на жаль... Питання лише де більше ганяють і скільки непотрібних предметів. (у нас - ганяють добре, предметів лишніх ще більше).

Суто за рейтингом - воднік вище, але якщо говорити про обласні олімпіади (шкільні) з інформатики - то там воднік ніяк не допомагає, лише РДГУ - там і олімпіади проводяться, і викладачі звідти беруться на підготовку та суддівство.

P.S.

Vo_Vik написав:

Піпець освіта ком юа, а основна мова сайту російська.

До речі про основну мову (але це певно краще в нову тему), питання наступне - основна мова в компаніях - наскільки там важко буде мені (людині, яка за все життя і ста слів російською не написала) працювати в українських(або іноземних) компаніях? Зараз проходжу стажування в IT-Enterprise (головний офіс - Київ, десь 150 працівників, 2-ге місце по ERP після SAP в Україні), тут основна російська, всі коментарі - на російській (стандарт компанії, на остальні мови спеціальні люди перекладають).

15

(17 відповідей, залишених у C#, .NET)

Все, помилка знайдена)
Причина - банально практики не хватає з мультипоточкою, якби вона була - не допустив би такої помилки
Сама помилка в наступному:

           for (int i = 0; i < THREAD_COUNT - 1; i++)
           {//проходить роздача параметрів потокам
                first = current;
                for (long j = 0; j < interval; j++)
                    current = current.Next;
 
                threads[i] = Task.Run(() =>
                        {
                            MakeStepForPopulation_thread(first, interval);
                        });
            }
            //останній потік в мене особливий, має починатись так
            threads[THREAD_COUNT - 1] = Task.Run(() =>
            {
                MakeStepForPopulation_thread(current, -1);
            });

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

        private int startedThreadCount;

        public void MakeStepForPopulation()
        {
            LinkedListNode<Homosapien> current = population.First;
            //LinkedListNode<Homosapien> next;
            LinkedListNode<Homosapien> first;
            
            long interval = population.Count / THREAD_COUNT;
            
            startedThreadCount = 0;

            for (int i = 0; i < THREAD_COUNT - 1; i++)
            {
                first = current;
                for (long j = 0; j < interval; j++)
                    current = current.Next;

                threads[i] = Task.Run(() =>
                        {
                            MakeStepForPopulation_thread(first, interval);
                        });
//тут чекаємо, поки поток не почнеться, щоб нормально задались параметри
                while (startedThreadCount <= i)
                    System.Threading.Thread.Sleep(1);
            }

            threads[THREAD_COUNT - 1] = Task.Run(() =>
            {
                MakeStepForPopulation_thread(current, -1);
            });

            Task.WaitAll(threads);
        }

        public void MakeStepForPopulation_thread(LinkedListNode<Homosapien> current, long interval)
        {
//відзначається вхід потоку
            startedThreadCount++;
//ждем, поки всі потоки не почнуться
            while (startedThreadCount != THREAD_COUNT)
                System.Threading.Thread.Sleep(10);

            LinkedListNode<Homosapien> next;

            while (!(interval == 0 || current == null))
            {
                next = current.Next;
                current.Value.MakeStep(
                    GetMatrixConversion(current.Value.Age.Year,
                                        today.Month));

                interval--;
                current = next;
            }
        }

16

(5 відповідей, залишених у C++)

Ghoul написав:
try {
                if ((e->KeyChar >= '0') && (e->KeyChar <= '9')) 
                    return;
             
                if (e->KeyChar != (char)8) 
                    e->Handled = true;
            }
            catch (System::FormatException^ e) {
                if ((e->KeyChar < '0') && (e->KeyChar > '9')) 
                    MessageBox::Show("Помилка вхідних даних.\n В даному полі потріно вказати рік!","Рік випуску", MessageBoxButtons::OK, MessageBoxIcon::Warning);
                textBox2->Focus();
            }

підкажіть будь-ласка чому цей Exeption не підходить.

Тут немає де вилітати ексепшинам. Прочитайте детальніше, як працює try-catch.
Раджу Вам краще не гратись тут з ексепшинами, а просто і банально виводити повідомлення про помилку тоді, коли виконається відповідний if (або не виконається, залежить від Вашого бажання)

17

(17 відповідей, залишених у C#, .NET)

mich_retten написав:

Поставтпе breakpoint на рядку 16:

                        MakeStepForPopulation_thread(first, interval);

і подивіться, що знаходиться на цей момент у first. Гадаю, не перший елемент списку, а той, що відстоїть interval від першого.

Я вже ставив там breakPoint, через що і кажу - там все в порядку, наведу арумент чому:

                first = current;
                for (long j = 0; j < interval; j++)
                    current = current.Next;

цей цикл first не змінює (знаю що тупо, але це не головна проблема зараз)

18

(17 відповідей, залишених у C#, .NET)

mich_retten написав:

Доречі, зверніть увагу, у Вас перші interval елементів списку не обробляються жодним потоком: Ви спочатку берете перший елемент, потім пропускаєте interval елементів, і наступний елемент віддається потоку.

Не зрозумів, що Ви сказали, але в будь-якому випадку в однопоточному режимі все оброблюється правильно (в тому числі перші елементи)

19

(17 відповідей, залишених у C#, .NET)

                 threads[i] = Task.Run(() =>
                        {
                            MakeStepForPopulation_thread(first, interval);
                        });

Я просто думаю, що тут або передається оригінал замість копії, або їх ініціалізація (параметрів методу) відбувається трохи пізнувато (по завершеню циклу), інакше яка може бути причина, що потоки отримали однакові вхідні дані в цьому коді?

20

(17 відповідей, залишених у C#, .NET)

mich_retten написав:

Ніякого "стану гонки" і так не буде. Це ваше вумне слово (go) - абсолютно зайва деталь.
Десь у Вашій               

 current.Value.MakeStep(
                    GetMatrixConversion(current.Value.Age.Year,
                                        today.Month));

видаляється елемент списку, який одночасно обробляється паралельним потоком.
Треба змінювати всю архитектуру обробки. Самий простий і прямий спосіб - кожному потоку - свою колекцію, після обробки - merge.

Стан гонки полягає в тому, що підлеглий поток може досить швидко якийсь елемент видалити, якраз в той момент, коли

                for (long j = 0; j < interval; j++)
                    current = current.Next;


виконуватиметься у головному потоці, тоді або помилка, або список закінчиться, або ще щось

Різні колекції різним потокам - надто багато роботи із пам'яттю, хоча якщо мені вдасться реалізувати якийсь швидкий і легкий алгоритм - то я так зроблю, АЛЕ мені це не допоможе, якщо і надалі передаватиметься оригінал змінної у потік, тоді як мала б передаватись копія.
Я зараз на етапі перегляду IL коду, з надією що може там я знайду відповідь "чому передається оригінал"