Задать вопрос
  • Как узнать подключен ли процесс openvpn к туннельному интерфейсу или висит просто так?

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    У openvpn, если его правильно настроили, есть файл-статус текущих сессий.
    Добавляете в конфиг сервера
    status /var/run/openvpn-server.status
    И делаете в любой момент cat на этот файл
    root@xxx:~# cat /var/run/openvpn-server.status
    OpenVPN CLIENT LIST
    Updated,Sat Jul 30 11:31:40 2016
    Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
    user3,10.124.228.105:42972,2117077,2327219,Tue Jul 26 13:50:13 2016
    user4,10.124.105.1:49420,6284997,6730873,Tue Jul 19 04:14:12 2016
    ROUTING TABLE
    Virtual Address,Common Name,Real Address,Last Ref
    192.168.99.10,user3,10.124.228.105:42972,Tue Jul 26 13:50:16 2016
    192.168.99.6,user4,10.124.105.1:49420,Tue Jul 19 04:14:14 2016
    GLOBAL STATS
    Max bcast/mcast queue length,16
    END
    root@xxxx
    Ответ написан
  • Партнеры-фрилансеры 1С-Битрикс Маркетплейс?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    А какие проблемы? С вами заказчик заключает договор подряда на проведение работ (поиск в гугле "договор подряда с физическим лицом"). По окончании работ подписываете акт, а заказчик перечисляет деньги и налоги (как минимум НДФЛ, но я в этом не силён)..
    ppt.ru/kodeks.phtml?kodeks=6&glava=37 Вот прямо со статьи 702.
    Практически все бухгалтеры знают, как оформить такие отношения, примеров самих договоров в интернете полно. Ничего сложного нет.
    Проблема одна, не все заказчики желают иметь такие отношения, так как налоговые иногда косо смотрят на такие подряды. Налоговой легче иметь дело с "предприятием", с них легче налоги взыскивать, так как есть счет и прочие атрибуты.
    Ответ написан
  • Как правильно реализовать хранение состояния?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Если вложенность большая, то стеком. Если маленькая, то наверное со стеком лучше не заморачиваться, а сделать что-то типа контекста.
    Ответ написан
    Комментировать
  • Как явно указать какой шрифт использовать в Pyhton?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Если приложение консольное, то шрифт задается в настройках консоли, а не в программе! Скорее всего у вас приложение консольное, выдающее на выходе UTF-8. Тогда вам нужно поменять шрифт с поддержной нужных символов. Я не знаю какая у вас операционка, но если это виндовс, то вот это подскажет как - www.howtogeek.com/howto/windows-vista/stupid-geek-...
    В линуксовых терминалах тоже меняется через настройки соответствующего приложения.
    Ответ написан
    4 комментария
  • Можно ли активировать индикатор мыши?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Предлагаю решить этот вопрос аппаратно. Взять Ардину и шаговый мотор, к нему колесико и толкатель мышки влево/вправо. Себестоимость $30. :-D
    А по честному, я не понимаю, для чего вам дрыгатель мышки?
    Ответ написан
    7 комментариев
  • Не могу записать в файл. Что делать?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    writelines ожидает sequence, например массив строк, вы же передаете только строку.
    ndb.writelines([])
    Ответ написан
    2 комментария
  • Как обойти: FUP – Fair Usage Policy или возможно это вообще !?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Никак! Пользуйте тырнет в соответствии с соглашением!
    Ответ написан
    Комментировать
  • Как сделать архитектуру инфоблоков?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Как-то все сложно у вас.... Должен быть инфоблок "измерение", в нем поля Т1, Т2, дата, ссылка на Объект, гигакалории.
    А вообще-то и этого не нужно! Просто привязываете с своему Объекту highload-блок с этими же полями! Вытягиваете объект, из него вытягиваете записи из хайлоад блока за нужный месяц. Будет работать очень шустро.
    Другими словами, у вас всего два инфоблока Подстанция и Объект, и один хайлоад блок, связанный с Объектом с результатами за нужную дату.
    А если еще немного подумать, то можно и Подстанцию перевести из инфоблока в в разделы инфоблока Объект. Тогда у вас останется всего один инфоблок Объект с разделами каталога в виде Подстанций (у раздела тоже могут быть свои свойства и не только!), и хайлоадблок!
    Если непонятно написал, спрашивайте.
    ЗЫ. Чем хорошо делать подстанции в виде разделов - вы их сможете организовать в древовидной структуре как угодно, например территориально, и поиск и результаты измерений - все будет логически связано, расширяемо и без лишних сущностей. Ну и например, можно задавать роли доступа пользователям на уровне разделов к Объектам.
    Ответ написан
    Комментировать
  • Питон приложение на Windows и Ubuntu как организовать?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    По поводу файлов, сделайте файл settings.cfg, в него уберите хотя бы путь до вашего приложения.
    import platform
    
    if platform.system() == 'Linux':
       MYAPPPATH = "/var/www/FlaskApp/FlaskApp"
    else: 
       MYAPPPATH = "C:/FlaskApp/FlaskApp"

    Ну или прямо в коде запуска приложения
    import platform
    if platform.system() == 'Linux':
      app.config["MYAPPPATH"] = "/var/www/FlaskApp/FlaskApp"
    else: 
       app.config["MYAPPPATH"] = "C:/FlaskApp/FlaskApp"


    Далее в коде
    file = open(app.config["MYAPPPATH"]+'/myfile', 'w')


    По второму вопросу, во flask есть встроенные сервер, но он для отладки и разработки,. В боевом режиме настоятельно рекомендуется запускать из-под нормального сервера под WSGI. Здесь как раз и нужно будет написать дополнительно wsgi.py (в зависимости от типа запускалки) на десяток строк - в сети примеров вагон.
    Ответ написан
  • Рабочие столы os x?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    В доке, на приложении, хлоп правой кнопкой мыши -> параметры -> Этот рабочий стол
    Ответ написан
  • Как деплоить Flask на vps ubuntu или debian?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    1 комментарий
  • Как вернуть результат рекурсивной функции в переменную?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Надеюсь, понятно.
    def SearchDir(path):
       z= []
       def _SearchDir(path):
          ...
          z.append("abc")
          _SearchDir(newpath)
          ...
       _SearchDir(path)
       return z
    Ответ написан
    2 комментария
  • Как организовать отмечание "просмотренных" материалов?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Я бы для этих целей вообще sql не использовал. Это данные, которые, в основном: являются временными, ограниченными (100/1000/10000 записей и т.д), не влияют на основной функционал, могут быть счетчиками, их может быть очень много, их хорошо бы извлекать очень быстро, по ним не нужно делать большой обработки, у них есть "время жизни"...
    Поэтому предложу посмотреть в сторону redis.io который для этого и создан!
    Ответ написан
  • Как осуществлять работу с датой в Java?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Для восьмой явы - код ниже. Для всех остальных - joda.org
    package jtests;
    
    import java.time.LocalDateTime;
    import java.time.format.DateTimeFormatter;
    import java.time.format.DateTimeFormatterBuilder;
    
    public class MyTest3 {
    
    	public static void main(String[] args) {
    		DateTimeFormatter fmt = new DateTimeFormatterBuilder()
    				.appendPattern("dd.MM.yyyy. HH:mm:ss")
    				.toFormatter();
    		
    		LocalDateTime t1 = LocalDateTime.parse("01.01.2016. 00:00:00", fmt);
    		LocalDateTime t2 = LocalDateTime.parse("01.01.2013. 00:00:00", fmt);
    		
    		System.out.println(t1);
    		System.out.println(t2);
    		System.out.println(t1.isAfter(t2));
    		System.out.println(t2.isAfter(t1));
    	}
    }
    Ответ написан
    Комментировать
  • Какие аргументы в пользу использования транзакций в бд?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Ну как бы и без транзакций можно обходиться. Например использовать поле version, которое прибавляется каждый раз при при update.
    Если вся работа с данными сводится к их добавлению, то транзакции и не нужны.
    Но если присутствует цикл select/update, да еще и в несколько потоков, то рано или поздно данные повредятся.

    Простой случай, возьмем поле debit. Попробуем его увеличивать в несколько потоков без транцакций в цикле - select debit from mytable where ID=10, программно прибавляем единичку к полученному debit, затем делаем update mytable set debit=11 where ID=10. Результат приятно удивит.

    Также можно обойтись и без транзакций (точнее использовать так называемые "оптимистические блокировки"), если с полем debit считывать, например, поле version -
    select debit, version as oldversion from mytable where ID=10
    . Тогда update будет выглядеть примерно так
    update mytable set debit =11, version=version+1 where ID=10 and version=oldversion
    . Но при этом придется всегда проверять, изменили ли мы данные или нет.

    ЗЫ. По просьбам трудящихся, про оптимистические блокировки - https://ru.wikipedia.org/wiki/Блокировка_(СУБД)
    Ответ написан
    8 комментариев
  • Как из бд достать данные в HashMap?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Подкину парочку статей древнющих, они помогут:
    www.javable.com/columns/jdbc/workshop/01
    www.javable.com/javaworld/tips/82_tt

    Ну а вообще-то лучше сразу смотреть в сторону hibernate и spring.
    Можно еще и на blog.mybatis.org (бывший iBatis) посмотреть. Он достаточно простой.
    Ответ написан
    2 комментария
  • Стоит использовать исключения или if/else?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Господа, что-то в разум не возьму... Всегда сам считал, что Exception - зло, а тут решил проверить. Я понимаю, что JVM может чего и оптимизнула...

    Упс! Все встало на свои места!
    IF execution time: 1231
    EXCEPT execution time: 1260

    package jtests;
    
    import java.util.HashMap;
    
    public class MyTest2 {
    
    	String testIf(HashMap<String, String> h, int i) {
    		String r = "None";
    		if(h.containsKey("NONEKEY")) {
    			r = h.get("NONEKEY");
    		}
    		return r;
    		
    	}
    	String testExept(HashMap<String, String> h, int i) {
    		String r = "None";
    		try {
    			r = h.get("NONEKEY");
    		} catch(Exception e) {
    			return e.getMessage();
    		}
    		return r;
    		
    	}
    	public static void main(String[] args) {
    		MyTest2 m = new MyTest2();
    		HashMap<String, String> h = new HashMap<String, String>();
    		h.put("KEY", "VALUE");
    		
    		long startTime = System.currentTimeMillis();
    		for (int i = 0; i < 900000000; i++) {
    		  m.testIf(h,i);
    		}
    		long endTime = System.currentTimeMillis();
    		System.out.println("IF execution time: " + (endTime - startTime) );
    		
    		startTime = System.currentTimeMillis();
    		for (int i = 0; i < 900000000; i++) {
    		  m.testExept(h,i);
    		}
    		endTime = System.currentTimeMillis();
    		System.out.println("EXCEPT execution time: " + (endTime - startTime) );
    	}
    
    }
    Ответ написан
  • Стоит ли использовать граф и в каких случаях их используют?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Ох, как хорошо ваши данные ложатся на elasticsearch!
    Ответ написан
    Комментировать
  • Почему с sync'ом низкая скорость записи?

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    Просто, если писать маленькими блоками с опцией sync, то получается много накладных расходов, которые в USB занимают 20-30%. Другими словами, на каждый блок данных система будет ждать подтверждения от устройства о записи.
    Если это дело кешировать (что и делает кеш) и/или писать большими блоками, то и скорость вырастет.
    Ответ написан
  • Как ответить на вопрос по поводу полиморфизма в Java?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Может быть так проще будет?
    Класс В наследует методы и переменные класса A. И когда мы вызываем метод объект В, то он может использовать методы и переменные объекта А, также можно представить объект В, как объект А, но поведение будет все равно, как у объекта В.
    В моем примере произошел вызов переопределённого метода b класса B с последующим вызовом родительского оригинального метода класса A. Причем видно, что принудительная кастенация (приведение типов) класса В к классу А - ничего не меняет, как был объект класса В, так он и остался, с переопределённым методом.
    И еще, объектом обычно называют экземпляр класса, то, что образовалось после new.
    package jtests;
    import java.lang.System;
    
    public class MyTest {
    
    	class A {
    		String  a () {
    			return("from A:a");
    		}
    		String b() {		
    			return("from A:b - " + a());
    		}
    		
    	}
    	class B extends A {
    		@Override String b() {
    			return ("from B:b - " + super.b());
    		}
    	}
    	
    	public static void main(String[] args) {
    		MyTest m = new MyTest();
    				
    		System.out.println("A");
    		A a =  m.new A(); // Используем A
    		System.out.println(a.getClass().getName() + " * " + a.b());
    		
    		System.out.println("B");
    		B b =  m.new B(); // Используем B
    		System.out.println(b.getClass().getName() + " * " + b.b());
    		
    		System.out.println("B -> A");		
    		A ab = (A) m.new B(); // Используем B как A
    		System.out.println(ab.getClass().getName() + " * " + ab.b());
    	}
    }


    И Вывод:
    A
    jtests.MyTest$A * from A:b - from A:a
    B
    jtests.MyTest$B * from B:b - from A:b - from A:a
    B -> A
    jtests.MyTest$B * from B:b - from A:b - from A:a
    Ответ написан
    Комментировать