LINUX.ORG.RU

Сообщения snake266

 

Выбор ноутбука тред

Вообщем, нужен ноут. Какие требования:

  • 13-ти дюймовый хороший экран, чтобы не портить глаза
  • Вес около килограмма, не больше 1,4кг, чтобы было удобно носить
  • Хорошая сборка и качественный корпус
  • Время работы от батареи где то от 8 часов, хотя чем больше тем лучше

Бюджет до 100к. Знаю про макбук, но хочется чего-то подешевле.

 

snake266 ()

Как программно выбрать пункт в html теге <select>

В общем, сразу к делу. Есть html страница, есть на ней пункт выбора группы, сделанный через тег <select>, и ниже есть <div>, который изначально пустой, но после выбора группы этот див заполняется таблицей с расписанием. Посмотрел какой запрос отправляется (POST) и решил попробовать отправлять такой же запрос сам. Запрос выглядит как обычный хедер + в теле group=%группа%. К сожалению мне приходит все тот же html с пустым <div>, в котором должно быть расписание. Собственно, как мне выставить значение и прочитать уже обновленную html-страницу?

Из HTML

<select class="group select2-hidden-accessible" tabindex="-1" aria-hidden="true" style="">
<option>%Группа-11%</option>
<option>%Группа-12%</option>
....
</select>
<div class="schedule"></div><!--Вот тут появляется таблица -->

Как изменяется страница при выборе группы

<select class="group select2-hidden-accessible" tabindex="-1" aria-hidden="true" style="">
<option>%Группа-11%</option>
<option>%Группа-12%</option>
....
</select>

<div class="schedule">
    <table> <!-- Оп, таблица подъехала -->
    ....
    ....
    </table>
</div>

Мой запрос (Java)

HttpClient client = HttpClient.newBuilder()
                    .followRedirects(HttpClient.Redirect.NORMAL)
                    .build();
            HttpRequest request = HttpRequest.newBuilder()
                    .uri(URI.create("%Сайт с расписанием%"))
                    .headers("Content-Type", "application/x-www-form-urlencoded") // Тут сделал как в хедере в запросе
                    .POST(HttpRequest.BodyPublishers.ofString(group))
                    .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.headers());
System.out.println(response.body());
System.out.println(response.request());

 ,

snake266 ()

Область видимости для цикла loop в perl6.

Решил попробовать что за зверь такой этот Perl6.

Начал писать циклы и обратил внимание, что на такой момент когда я использую $i в двух разных циклах компилятор ругается на переопределение:

sub test() {
    loop (my Int $i = 0; $i < 10; $i++) { print "$i "}
    print "\n";
    loop (my Int $i = 0; $i < 10; $i++) { 
        print "$i ";
    }
}

test();
Potential difficulties:
    Redeclaration of symbol '$i'
    at C:\Users\batur\work\perl6/.\test.p6:4
    ------>     loop (my Int $i<HERE> = 0; $i < 10; $i++) {
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9

То есть по сути, если я правильно понял, в первом и втором цикле одинаковые $i. Почему так сделали? Почему не сузили область видимости этой переменной до цикла loop, в котором она объявляется? Я вот не могу прикинуть такой use-case, в котором бы от такой области видимости была польза

 

snake266 ()

Обратная совместимость в плюсах

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

 , ,

snake266 ()

А как слиноковать boost?

Поставил boost с репозитерии арча. Написал простецкий пример из туториала к boost.asio:

#include <iostream>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>

int main()
{
    boost::asio::io_service io;
    boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
    t.wait();
    std::cout << "Hello world!" << std::endl;
    return 0;
}
Решил сначала скопилить пример через g++:
g++ main.cpp \
-lboost # вот тут я пробовал -lboost-(_)asio, еще побовал -I /usr/lib, , но везде линкеру чего-то не нравится
Прошу тыкнуть носом туда, где я что-то делаю не так

 ,

snake266 ()

Rust 1.35

Команда разработчиков Rust рада представить новую версию своего языка: 1.35. Rust - это язык программирования, который позволяет писать надёжные и эффективные программы.

Если у вас уже установлен Rust через rustup,то можно обновиться командой: $ rustup update stable

Главное в обновлении - это реализиция трейтов замыкания Fn, FnOnce, FnMut, для Box<dyn Fn>, Box<dyn FnOnce>, Box<dyn FnMut>, соответственно. Добавлении возможности приводить замыкания к указателям на небезопасные функции, вызов макроса dbg!() теперь возможен без аргументов, была проведена стабилизация стандартной библиотеки.

К деталям:

  • В новой версии добавили реализации трейтов Fn, FnOnce, FnMut, для Box<dyn Fn>, Box<dyn FnOnce>, Box<dyn FnMut>, соответственно.
    Теперь такой код будет работать:
    fn foo(x: Box<dyn Fn(u8) -> u8>) -> Vec<u8> {
        vec![1, 2, 3, 4].into_iter().map(x).collect()
    }
    
    Также, можно вызывать замыкание прямо из Box<dyn FnOnce>:
    fn foo(x: Box<dyn FnOnce()>) {
        x()
    }
    

  • Теперь замыкания можно приводить к указателям на unsafe fn Теперь можно делать вот так:
    /// The safety invariants are those of the `unsafe fn` pointer passed.
    unsafe fn call_unsafe_fn_ptr(f: unsafe fn()) {
        f()
    }
    
    fn main() {
        // SAFETY: There are no invariants.
        // The closure is statically prevented from doing unsafe things.
        unsafe {
            call_unsafe_fn_ptr(|| {
                dbg!();
            });
        }
    }
    

  • Добавлена возможность вызова макроса dbg!() без аргументов Если передать этому макросу какое-то выражение то, макрос выведет его результат. Пример:
    fn main() {
        let mut x = 0;
    
        if dbg!(x == 1) {
            x += 1;
        }
    
        dbg!(x);
    }
    
    При запуске такого кода вы увидите:
    [src/main.rs:4] x == 1 = false
    [src/main.rs:8] x = 0
    
    Сейчас вы можете написать вот так:
    fn main() {
        let condition = true;
    
        if condition {
            dbg!();
        }
    }
    
    При выполнении такого кода вы увидите: [src/main.rs:5]
  • Были стабилизированы некоторые части стандартной библиотеки
    • Новые методы для f32 и f64:
      • f32::copysign
      • f64::copysign
      Собственно, функции копируют знак у другого числа. Пример:
      fn main() {
          assert_eq!(3.5_f32.copysign(-0.42), -3.5);
      }
      
    • Добавлены новые методы для Range типов
      • Range::contains
      • RangeFrom::contains
      • RangeTo::contains
      • RangeInclusive::contains
      • RangeToInclusive::contains
      С этим можно легко проверить есть ли определенное значение в последовательности:
      fn main() {
          if (0..=10).contains(&5) {
              println!("Five is included in zero to ten.");
          }
      }
      

Подробнее

Перемещено jollheef из development

 

snake266 ()

Ubuntu 19.04 зависает экране блокировки.

Здравствуйте, столкнулся с такой проблемой: после ввода верного пароля убунта что-то там думает, а потом откидывает опять вводить пароль, но при этом если выбрать запуск через Wayland, то тогда все нормально проходит. Поискал в интернете что делать: файла .Xauthority у меня нет, права на /tmp менял - ничего не помогло. До этого (18.10) через иксы все круто запускалось. Ноутбук: Acer aspire e5-571g - запускаюсь через биос.

И да через Wayland полет нормальный, но хотелось бы использовать именно иксы.

 , , ,

snake266 ()

Чем вообще занимаются программисты?

Здравствуйте, случилось такое что в 11 классе я понял, что хочу заниматься программированием не только как хобби, а как работой. Но я совершенно не представляю чем занимаются взрослые программисты. Хотелось бы услышать свои будни от людей, которые именно получают деньги за работу в данной сфере. Сам пишу на С/C++. Ну и было бы очень круто если бы пришла Iron_Bug. Заранее большее спасибо!

 , , ,

snake266 ()

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