1

(19 відповідей, залишених у Ваші проєкти)

Всім привіт) Давно не заходив, і тут такі цікаві теми пішли)) Теж рік назад ставив собі за мету здешевити виробництво принтерів і взагалі будь-яких ЧПУ-станків. В результаті було визначено, що в ролі підшипників лінійних дуже гарно підходять мідно-графітові втулки зі старих міксерів для випічки))

Прихований текст

https://gitlab.com/FuckingHacking/photoForSite/raw/master/trashProject/WP_20161213_018.jpg
https://gitlab.com/FuckingHacking/photoForSite/raw/master/trashProject/WP_20161209_001.jpg

А бували випадки, коли готових підшипників не знаходилось. Благо, вдома є токарний станок і людина, яка непогано з ним справляється. В результаті вийшло щось таке:

Прихований текст

https://gitlab.com/FuckingHacking/photoForSite/raw/master/trashProject/WP_20161030_003.jpg
https://gitlab.com/FuckingHacking/photoForSite/raw/master/trashProject/WP_20161114_002.jpg

Дуже цікаво, продовжуйте. Погляньте ще на бліг навчалкіна


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

ktretyak написав:

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

Шукаю щоб хтось допоміг, а не написав. Так як не досвідчений в django, потрібні інколи поради від людини з більшим досвідом

ktretyak написав:

Виглядає досить непогано... але як для "третьої версії" - слабенько. На скільки я розумію, усе що пропонує сайт, це

1. читати статті
2. шукати статті по категоріям
3. реєстрація та можливість публікувати статті і коментарі
4. ставити лайк... я так розумію, що ще не реалізовано

Ви хоча б тут опишіть головну задумку сайта, а краще, звичайно ж, зробити це на самому сайті. Тобто сторінки http://freakspace.xyz/about явно не вистачає.

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

Ми перейшли з Wordpress на python/django, і критично не вистачає часу та ще однієї пари рук на допрацювання сайту. Зараз шукаю пітоніста, який допоміг би довести сайт до логічного завершення, бо через проекти та навчання самому довести це до пуття не вийде
А про лайки - так це чомусь перестало працювати зовсім недавно.. Треба дебажити.

NagarD написав:

Оуу, а я вже думав, що ви здубилися)) Пам'ятаю, першу версію, була на іншому домені, але сайт закрився. Пам'ятаю другу, на вордпрес і вже в зоні .xyz, але вона теж довго не пропрацювала. Зараз бачу, вже все по інакшому, по крутому. Дякую, так тримати!)

Тільки що я зрозумів, що навіть минулі, кхм-кхм, "сайти" не були дарма зроблені, якщо їх хтось пам'ятає!))

Ну що ж, всім привіт. Ніяк не наважувався сюди написати про свій проект, але все таки пора))
Першим ділом хочу згадати сайт: http://freakspace.xyz/. Проект почався саме з нього. І хоч він ще в процесі розробки і на ньому ще далеко не всі наші статті та проекти, але це тільки питання часу і бажання)) Первинна мета якою керувалися - покращення становища української технічної мови в українському сегменті інтернету (це далеко не перша його версія. До цього було 2 сайти, які еволюціонували в це що зараз є  *SCRATCH* ).
Другим ділом скажу, що учасник даного проекту, через критичну масу знань, яка назбиралась в ході роботи та розробок, відкрив свою маленьку школу по програмуванню на Arduino в Івано-Франківську, і ім'я їй CraftClub.
Третім ділом скажу, що ми достатньо добре просунулись в 3D друці і принтерах, і зараз спільно з інтернет-магазином beegreen запускаємо в серійне виробництво власну корисну модель принтера Prusa i3, яка дешевша за китайські аналоги і виконана в алюмінієвій рамі.
Вчора ми вибороли перше місце серед стартапів на конкурсі від Наукового парку ПНУ ім. В. Стефаника і маємо велику надію, що проект повноцінної лабораторії буде втілено в життя.
Чекаю ваших фідбеків, пропозицій та зауважень. Цікава думка учасників саме даного форуму))

6

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

Всім привіт. Давно мучить одне питання, і відповідей вже нашукався, вирішив все ж написати на форум.
Суть:
Є в мене форми написання постів на сайт. Форми юзаю не ті що в forms.py, а довільні. Так ось, сама проблема в тому, що я не знаю куди правильно повертати з них дані: у в'юшку, у той же forms.py, напряму в модель чи можливо створити якийсь файлик в якому буде вся логіка? З тою формою ще проходить велика купка маніпуляцій перед тим як вона потрапляє в БД.
Та і не тільки форми це стосується. Де загалом краще реалізовувати логіку роботи сайту? Можливо якісь дизайн-патерни порадите?

7

(5 відповідей, залишених у Хостинг та домени)

Всім привіт. Потрібний DNS сервер. Маю домен зареєстрований на Hostinger і власний сервер на якому стоїть сайт. Для перенаправлення домену на мою ІР-шку треба або піднімати 2 сервера dns, або заюзати якийсь готовий. Може ви порадите якісь безкоштовні з можливістю використовувати власний домен?

ping написав:

якщо флешка у форматі FAT , то , наскільки приигадую часи роботи з MS DOS - є дві таблиці file allocation table (основна і дублююча)

The FAT Region.

    This typically contains two copies (may vary) of the File Allocation Table for the sake of redundancy checking, although rarely used, even by disk repair utilities.

може можна спробувати з двох зробити одну діючу і по ній вибирати маючи номери кластерів?

Цікаво. Треба доки читати.

І взагалі, в мене пропозиція до форумчан, написати нормальну прогу по відновленню файлів))

koala написав:

0. Recuva не пробували використовувати?

Ні, не пробував

koala написав:

1. Ви шукаєте певну комбінацію (початок jpg-файлу), перебираючи по 4 байти. Оскільки початки файлів вирівняні по кластерах, а їхній розмір - ступінь 2, це працює. Але ви при цьому додаєте до лічильника i 1, а не 4.

Я не розбирався як записуються дані на флеш-носії і все ж думав що початок картинки може зустрітись в наступному байті

koala написав:

2. Ніхто не гарантує неперервність файлів на диску. Розірвані файли ваша програма відновити не в змозі.

Ну без файлової системи мені здається що це навряд вийде відновити

koala написав:

3. Вікі каже, що ще є варіант FF D8 FF DB. І взагалі

check=[b'\xFF\xD8\xFF\xDB',b'\xFF\xD8\xFF\xE0',b'\xFF\xD8\xFF\xE1']
...
if bufer in check:

виглядає краще.

Так, звісно, дякую. Скриптик був написаний за 4 хв, і це була повна копія програми на С. Тому, оптимізація в майбутньому))

koala написав:

4. Якщо посеред файлу зустрінеться сигнатура jpg (а це може бути як випадково, так і, скажімо, вкладений thumbnail), то ваша програма розіб'є його на шматки. Може, краще розібратися в тому, як зберігаються jpg, і перевіряти, чи дійсно все ще читається той самий jpg? Це, до речі, допоможе не різати весь диск на окремі файли (із купами сміття в кінці), а витягати саме фотографії.

Читаючи літературу про jpeg виконуючи завдання на CS50 я зрозумів що файли даного розширення починаються з 4 байт по яких їх і відрізняють від інших. Проблема, що в даних картинках немає визначеної послідовності байт, які б вказували на завершення файлу. Я теж боявся що зустрінеться така ж послідовність чисел десь посеред картинки, але на щастя обійшлось. Відновив всі 411 фото

Переписав на python, тепер проблем як з С-шкою немає, правда працює разів в 50 повільніше. Для наглядності добавив progress bar. Прямо зараз іде відновлення, 290 фотографій вже відновило і це (якщо вірити прогресс-бару) трохи більше 1% зі всього.

https://scontent-waw1-1.xx.fbcdn.net/v/t31.0-8/20643272_946998315438041_8869939226871839337_o.jpg?oh=46a9044a1f3949e2ba40eb0f5b96a977&oe=59EFE0FE

Код заливаю на git, сподобалось, вирішив підтримувати і розвивати аппку. Буду радий, якщо хтось вирішить долучитись до розробки: ImageRestorer

Master_Sergius написав:

А взагалі, всі люди діляться на 2 типи: ті, хто не робить бекапи і ті, хто вже робить бекапи.

Ну проблеми почались саме коли фото скидались. Одне фото скинуло і все, файлова система відсутня, вінда просить форматнути флешку

Всім привіт. Спіткала така біда, на флешці з дорогоцінними фото злетіла файлова система. CD-картка з фотоапарата на 32 Гб, на ній востаннє було 411 фото, але після того як з файловою системою сталась біда, звичайно ж комп бачить що всі 30 Гб зайняті чимось, і це не що інше як старі фото. Так ось, я колись вже відновлював фотографії виконуючи задачку з курсів по програмуванню CS50, програмка залишилась.
Зробив образ флешки і трохи змінив програму, все працює, але не довго. Відновлює максимум 507 фото з початку, і зупиняється. Коли за допомогою fseek переходжу в кінець файлу - і ftell-ом дивлюсь позицію - показує максимум 6422144 байт.
Можливо ви підкажете як вийти за ці межі?
Ось код:

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


int main(int argc, char* argv[])
{

    FILE* cpcard = fopen("raw.img", "rb");
    if (cpcard == NULL)
    {
        printf("could not open file");
        return 1;
    } 

    uint8_t bufer[4];
    int count = 0;
    uint8_t check[5]  = {0xff, 0xd8, 0xff, 0xe0, 0xe1};
    FILE* picture;
    char nameFile[9] = {'0', '0', '0', '/', '.', 'j', 'p', 'g', '\0'};
    int    flag = 0; 
    int i;
    fseek(cpcard, 0, SEEK_END);
    long long len = ftell(cpcard);
    printf("%d", &len);
    fseek(cpcard, 0, SEEK_SET);
    for (i=0; i++; i<1024)
        fseek(cpcard, 6422144, SEEK_SET);

       while (fread(&bufer, 4, 1, cpcard) > 0)
       {
           if (bufer[0] == check[0] &&  bufer[1] == check[1] && 
               bufer[2] == check[2] && (bufer[3] == check[3] || bufer[3] == check[4]))
           {
//               printf('True\n');
            picture = fopen(nameFile, "wb");
            if (nameFile[3] == '9')
            {
                if (nameFile[2] == '9')
                {
                    if (nameFile[1] == 9)
                    {
                        nameFile[1] = '0';
                        nameFile[2] = '0';
                        nameFile[3] = '0';
                        nameFile[0]++;
                    }
                    else
                    {
                        nameFile[1]++;
                        nameFile[2] = '0';
                        nameFile[3] = '0';
                    }
                }
                else
                {
                    nameFile[2]++;
                    nameFile[3] = '0';
                }
            }
            else nameFile[3]++;
            
            fwrite(&bufer, 4, 1, picture);
            
            while(fread(&bufer, 4, 1, cpcard) > 0)
            {
                if (bufer[0] == check[0] &&  bufer[1] == check[1] && 
                   bufer[2] == check[2] && (bufer[3] == check[3] || bufer[3] == check[4]))
                   {
                       count++;
//                          printf("%d\n", &count);    
                       break;
                }

                fwrite(&bufer, 4, 1, picture);
            }
           }
       }
       
    fclose(cpcard);
    fclose(picture);
    return 0;
}

Сам я на С дуже давно не пишу, більше 2 років, все забув вже. Буду дуже вдячним за допомогу.
Можете запропонувати якісь інші методи відновлення даних, дієві. Але задачку з цією програмкою хотілось би все таки вирішити.
Може можна якось файл такого розміру розбити на менші файли?

Master_Sergius написав:

Саме слово означає - помістити в капсулу. Це не обов'язково тільки приховати. Ви поміщаєте в капсулу сукупніть речей (сутностей), які згруповані за якоюсь ознакою. Наприклад, ті ж "капсули часу", куди запихають якісь шкільні речі і викопують через 20 років (принаймні, в американських фільмах таке неоднократно показували).
Отож, тут розуміється також те, що ви поміщаєте в капсулу дані та методи роботи з ними. І саме через ці методи ви можете доступатися до даних, а не ніяк інакше.

Впринципі все так і є. Але на той момент коли читав вас, все ще не міг зрозуміти відмінність між інкапсуляцією і датахайдінгом. Зараз ніби розібрався з поняттями. Дякую за допомогу)

http://www.python-course.eu/images/data_abstraction.png
Опираючись на Python-course (гортати в низ до такої ж картинки як вверху) можна зробити висновок, що різниця є, і досить таки суттєва.
Коротко: інкапсуляція - не обов'язково приховування даних. Ці дані можуть бути інкапсульовані в метод, ми їх можемо бачити, але звернення до них має відбуватись саме через метод, а не напряму. А приховування даних - це приховування даних , *CRAZY*  це сховування інформації так, що ззовні її змінити неможливо. А в сукупності це все дає нам інформаційну абстракцію.

І взагалі, мене тепер мучить ще одне питання - що таке дані в класі і яка їхня відмінність чи схожість з атрибутами і методами класу... :|  *WALL*  *FACEPALM*

Q-bart написав:

Хм, я думав інкапсуляція - це така штука, що дозволяє тобі запхати в метод якісь дані, код, який їх обробить і написати, що той метод робить.

А далі вже другий програмер, дивиться: цей метод приводить машину в рух. Мені треба, щоб машина проїхали 2 метри - викликаєм. Але він вже не замислюється, яке там підключення машини до коліс і як вона буде гальмувати. Просто викликає, і тішиться результатом.

Так?

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

Всім привіт. Будучи на курсах по програмуванню пів року тому, почув таке цікаве твердження, що інкапсуляція - це не скривання даних, на то є data hiding, але поняття інкапсуляції і хайдінгу десь так на 80-90% перетинаються. Перелопатив гугл, нічого схожого не знайшов, що б підтверджувало чи спростовувало це твердження. Тепер мені ця думка жити не дає)) Може серед форумних гуру є хтось, хто пояснить?

18

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

Спробував кидати запити з консолі, з функції все поверталось, з незрозумілих причин js не заміняв вміст блоків. Трохи побавився з консольки, і все почало працювати. І зразу ж запрацювало на продакшені. Той самий випадок, коли "я нічего нє трогал, оно само")) Всім дякую за допомогу!

19

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

Q-bart написав:

Якщо простіше, то можна забрати цей рядок:

if request.is_ajax():

Тут перевірялось чи саме з цієї функції приходив запит. Там ще else було, і повертало Http404. І дякую за ідею, зараз спробую

Всім привіт. Спіткала така проблема, робив систему лайків для сайту, на окремому проекті все було і працювало безвідмовно. Переніс на реальний сайт, все працює, тільки чомусь не хоче обновляти поля з кількістю лайкнутих.
Ось код з view, який і приймає запит та повертає результат:

Прихований текст
def add_ajax(request, id):
    if request.is_ajax():
        like = Post.objects.get(id=id)

        user = UserProfile.objects.get(user_id=request.user.id)

        user.like -= 1
        user.save(update_fields=['like'])

        like.liking.add(user.user)

        like.author.like += 1
        like.author.save(update_fields=['like'])
        like.like += 1
        like.save(update_fields=['like'])

        response = {'count_like': str(like.like), 'author-like': like.author.like}
        return JsonResponse(response)

Ось сам JS код з Ajax:

Прихований текст
var url = document.createElement('a');
        url.href = document.URL;
        $(document).ready(function () {
            $("#like_this").click(function() {
                $.ajax({
                    type: 'GET',
                    async: true,
                    url: '/ajax'+url.pathname,
                    success: function(data) {
                        $("#like").html(data['count-like']);
                        $("#author-like").html(data['author-like']);
                    },
                    dataType: 'json'
                });
            });
        });

І ось місця де має це всьо діло обновлятись:

Прихований текст
<span [i]id="author_like"[/i]>[b]{{ post.author.like }}[/b]</span>
                    </h5>
                    <div class="author-box-info">
                        <table class="author-box-info-table">
                            <tr align="center">
                                {% if not push_like and not you_post%}
                                    <td>
                                        <span id="like_this" class="glyphicon glyphicon-thumbs-up c222"></span>
                                        <div [i]id="like"[/i]>[b]{{ post.like }}[/b]</div>
                                    </td>
                                {% else %}
                                    <td>
                                        <span class="glyphicon glyphicon-thumbs-up c777"></span>
                                        <div>{{ post.like }}</div>
                                    </td>
                                {% endif %}

Ну і рядок з роутера:

Прихований текст
    url(r'^ajax/post/id(?P<id>\d+)$', views.add_ajax),

Так ось,суть питання, чи можна подивитись якось що повертається і чи взагалі щось повертається з в'юшки після обробки запитів? Бо коли натискаю на лайк - не відбувається нічо, але запити на сервер приходять. І після перезавантаження сторінки лайк зараховується. Пробував в консолі Хрома js-ом заміняти дані в блоках - так без проблем міняє, а тут напевне зворотній запит від сервера не приходить...