Покажи Публикации - PaperNick
* Виж публикациите на потр. | Виж темите на потр. | Виж прикачените файлове на потр
Страници: [1] 2 3 ... 20
1  Хумор, сатира и забава / Кошче / Злословие или не -: Dec 11, 2020, 14:16
@samo_za_info, мерси за инфото. Подозирах нещо такова, но се замислих, кой ли клиент би чакал за нещо подобно 1+ година? (темата е създадена Jul 03, 2019, 19:52)
Отделно, услугата на ЧЕЗ е публична и всеки може да я ползва. Явно за всеки влак си има пътници...
2  Програмиране / Web development / Re: Авариите на чез. -: Dec 08, 2020, 22:04
Извинявай но не знам къде да ги добавя в кода.

Няма да стане толкова просто, а и не знам какво точно искаш да постигнеш. CLI програмка ли искаш да си направиш или web страница?
Не мога да отделя повече време по проблема. Надявах се, че разбираш поне малко от програмиране и ще можеш да се оправиш сам след насоките.
3  Програмиране / Web development / Re: Авариите на чез. -: Dec 08, 2020, 16:46
А реално как ще стане със всички ID които има чез. Благодаря предварително

Ми така като гледам, предложенията за градове ги взима от самата HTML без да прави други заявки:
Ако прегледаш изходния код на страницата https://info.cez.bg/js/avarii/av1.php ще видиш всички имена и id-та на ред 249:
Код:
autocompleteData = $.parseJSON('[{"value":"153","label":"СОФИЯ"}.....
4  Програмиране / Web development / Re: Авариите на чез. -: Dec 08, 2020, 15:01
Как мога да го визуализирам в php,  пробвах с това shell-exec не става

Ето едно примерче за София - Перник е с ид 149
Код
GeSHi (Bash):
  1. curl -d "city_id=153&page=1" -X POST https://info.cez.bg/js/avarii/contents.php | grep -oP '<span style="float:left;font-size:small">.*?<\/span>' | sed 's/<[^b][^<>]*>//g'

Не е нужно да използваш shell_exec, просто направи заявката от PHP.
Ето какво сътворих набързо използвайки регулярния израз на колегата:
Код
GeSHi (PHP):
  1. <?php
  2.  
  3. $SOFIA = 153;
  4. $PERNIK = 129;
  5. $NO_BREAKDOWNS_MESSAGE = 'няма прекъсвания на захранването';
  6.  
  7. $requestOptions = [
  8.    'http' => [
  9.        'method'=> 'POST',
  10.        'header' => 'Content-type: application/x-www-form-urlencoded',
  11.        'content' => http_build_query(['city_id' => $SOFIA, 'page' => 1])
  12.    ],
  13. ];
  14.  
  15. $context = stream_context_create($requestOptions);
  16. $fp = fopen('https://info.cez.bg/js/avarii/contents.php', 'r', false, $context);
  17. $pageContent = stream_get_contents($fp);
  18. fclose($fp);
  19.  
  20. if (strpos($pageContent, $NO_BREAKDOWNS_MESSAGE) !== false) {
  21.    echo 'Няма авария' . PHP_EOL;
  22. } else {
  23.    echo 'Има Авария' . PHP_EOL;
  24. }
  25.  
  26. $regionBreakdownPattern = '/<span style="float:left;font-size:small">(.*?)<\/span>/i';
  27. preg_match_all($regionBreakdownPattern, $pageContent, $breakdowns);
  28.  
  29. foreach ($breakdowns[1] as $breakdown) {
  30.    echo $breakdown . PHP_EOL;
  31. }

Голяма част от кода я взех директно от документацията:

В София има авария в момента и ми изкарва това:
Цитат
Има Авария
жк.ХИПОДРУМА<br>СМИЛИЦА
жк.ХИПОДРУМА<br>ХИПОДРУМА
жк.ХИПОДРУМА<br>ПИРИНСКИ ИЗВОР
жк.ХИПОДРУМА<br>КЮСТЕНДИЛ/АТАНАС НЕНОВ/
жк.БАНИШОРА<br>БАНИШОРА
жк.БАНИШОРА<br>ГЕН. СТОЛЕТОВ
жк.БАНИШОРА<br>ИВАН ТУРГЕНЕВ

Edit: разписах го на PHP 7.2
5  Програмиране / Web development / Re: Авариите на чез. -: Nov 19, 2020, 19:11
Днес се присетих за тази тема и по-точно за Selenum. И се сетих, че преди година време чух за поредната му алтернатива. Казва се Cypress – https://www.cypress.io/.

Тогава пича, който я препоръча, каза:

Цитат
Има изключително много възможности за тестване, само че не става за тестване на SalesForce. За всичко друго е супер и много по добре от Selenium според мене.

Бях чувал за Cypress, но не бях цъкал с него досега. Разписах проверките за аварии на ЧЕЗ и се получи доста добре.

Ето и кода:
Код
GeSHi (Javascript):
  1. const CEZ_BREAKDOWNS_URL = 'https://info.cez.bg/js/avarii/av1.php';
  2. const NO_BREAKDOWNS_ASSERT_MESSAGE = 'няма прекъсвания на захранването';
  3.  
  4. const populatedPlaces = [
  5.  { name:'Перник', fullMatch: false },
  6.  { name:'Кюстендил', fullMatch: false },
  7.  { name: 'Буново, общ. Кюстендил', fullMatch: true },
  8. ];
  9.  
  10. describe('CEZ Breakdowns', () => {
  11.  beforeEach(() => {
  12.    // https://docs.cypress.io/api/events/catalog-of-events.html#Examples
  13.    cy.on('uncaught:exception', (err, runnable) => {
  14.      // An "Uncaught ReferenceError: object is not defined" exception is thrown from CEZ webpage.
  15.      // Ignore it so that the execution can continue.
  16.      // Return false to prevent the error from failing the current test.
  17.      return false;
  18.    });
  19.  });
  20.  
  21.  function checkBreakdown(place, fullMatch) {
  22.    it(`should not have any breakdowns for "${place}"`, () => {
  23.      cy.visit(CEZ_BREAKDOWNS_URL);
  24.  
  25.      cy.get('#searchField').type(place);
  26.  
  27.      const searchValue = fullMatch ? place.toUpperCase() : new RegExp(`^${place.toUpperCase()}`);
  28.      const placeSuggestion = cy.get('#suggestions .ui-btn').contains(searchValue, { matchCase: true });
  29.  
  30.      placeSuggestion.should('have.length.greaterThan', 0);
  31.  
  32.      placeSuggestion.click();
  33.  
  34.      cy.get('[data-role="content"] .ui-body').should('contain', NO_BREAKDOWNS_ASSERT_MESSAGE);
  35.    });
  36.  }
  37.  
  38.  populatedPlaces.forEach(place => checkBreakdown(place.name, place.fullMatch));
  39. });
  40.  

Ето и как се пуска:
Код
GeSHi (Bash):
  1. mkdir cez_checker
  2. cd cez_checker/
  3. npm init --yes
  4. npm install cypress --save-dev
  5. echo '{}' > cypress.json
  6. mkdir -p cypress/integration
  7. touch cypress/integration/cez_breakdown_spec.js
  8.  
  9. # Поставете съдържанието на скрипта в "cypress/integration/cez_breakdown_spec.js"
  10.  
  11. npx cypress run --quiet

В браузъра се пуска с:
Код
GeSHi (Bash):
  1. npx cypress open

След изпълнението има дори видео запис :o
Код
GeSHi (Bash):
  1. $ ls cypress/videos/
  2. cez_breakdown_spec.js.mp4

А, да, трябва да инсталирате NodeJS.
6  Linux секция за начинаещи / Настройка на програми / Re: Някой с някакъв опит с LineageOS? -: Aug 22, 2019, 11:24
Не вярвам да стане лесно без  познания по embedded системи и особености на портването lineage os. Аз за това си харесах едно Xiaomi Mi A1 за целта. Нече не ми се занимава или нямам идея как ще протече процеса, но нямам времето и нервите да го правя. Предполагам че мога да мина и с по-малко пари, за някой телефон 2-ра ръка, но пък там си е лотария какво ще уцелиш.
Да, усетих че съм още зелен за тая работа опитвайки се да разбера как ще стане.
И аз ще взема някое телефонче да цъкам, пък след някоя друга година току-виж съм изкарал работещ build.
7  Linux секция за начинаещи / Настройка на програми / Re: Някой с някакъв опит с LineageOS? -: Aug 22, 2019, 09:29
А някой успявал ли е да подкара LineageOS на device, който не се поддържа (не е изброен в техния сайт)?
От няколко месеца се каня да пробвам Lineage и се чудя дали няма да е по-лесно просто да си купя телефон, който се поддържа и да си експериментирам, вместо да се мъча да build-на нещо на ръка (едва ли ще успея)?

Полезна информация stealth, благодаря!
8  Програмиране / Web development / Re: PHP каква е тази конструкция $w['parent']()[0] -: Jul 01, 2019, 20:15
Сигурно вече си се ориентирал и си го тествал, но все пак:

Код
GeSHi (PHP):
  1. <?php
  2.  
  3. $foo = 'test';
  4. $test = ['bar' => ['baz' => 'result']];
  5.  
  6. // Interpreted as ($$foo)['bar'['baz'] in PHP 7. Prints "result".
  7. // This line throws a Warning and Notice in PHP 5
  8. echo $$foo['bar']['baz'];
  9.  
  10. echo PHP_EOL;
  11.  
  12. // Compatible in PHP 5 and 7. Prints "result".
  13. echo ${$foo}['bar']['baz'];
9  Програмиране / Web development / Re: PHP каква е тази конструкция $w['parent']()[0] -: Jun 27, 2019, 16:49
Между другото, във втория линк който пусна за Uniform variable syntax пише, че добавяйки изрично скобички за приоритет си гарантираш еднакво поведение в PHP 5 и 7.
https://wiki.php.net/rfc/uniform_variable_syntax#semantic_differences_in_existing_syntax
10  Програмиране / Web development / Re: PHP каква е тази конструкция $w['parent']()[0] -: Jun 27, 2019, 16:09
Това означава ли че работещ код под PHP 5, например $$foo['bar']['baz'] точно така написан (без допълнителни скоби) може да върне съвсем друг резултат под PHP 7? Ами за останалите три примера ще връща ли различен резултат под PHP 7.
Да, много е вероятно понеже когато ставаше миграята към 7, доста хора се оплакваха, че това им е счупило проектите. И в Wordpress имаше някаква драма, ама вече не помня.

Това ми бърка в мозъка а и нямам php7 да го пробвам.
И аз нямам. Горните примери ги нацъках в един online tool. Използвах този, понеже поддържа доста версии:
http://sandbox.onlinephpfunctions.com/

Ако ми остане време и успея да измисля някакъв пример за $$foo['bar']['baz'], ще тествам и ще пиша.
11  Програмиране / Web development / Re: PHP каква е тази конструкция $w['parent']()[0] -: Jun 22, 2019, 21:24
Variable variable е с два долара:   $$w

----
Код:
$w['parent']()[0]

да не искаш да кажеш че това е името на функцията???
т.е. в $w['parent'] например се съдържа 'my_func'

а $w['parent']() тогава извиква  my_func()

а пък $w['parent']()[0] връща нулевият елемент от резултата на масива на функцията???  my_func()[0]   <---- това вече го разбрах че е новост в php5.4

Шантава работа..Така ли е наистина. Тук нещо понамерих:
https://www.php.net/manual/en/functions.variable-functions.php

ако наистина е така насочването беше успешно [_]3 и си заслужи бирата.

Макар, че go_fire те побутна в правилната посока и се ориентира сам, все пак да потвърдя, че поведението е такова.
Общо взето, както си установил, в PHP 5.4 вкараха "array dereferencing" на методи/функции които връщат нещо.
https://www.php.net/manual/en/migration54.new-features.php

В твоя случай това ще рече, че след извикването на динамичната функция, PHP-то ще последва референцията където се намира масива в паметта и ще достъпи първия елемент.
Преди PHP 5.4 се налагаше резултата от функцията да се присвои на променлива.

Код
GeSHi (PHP):
  1. // PHP 5.3
  2.  
  3. <?php
  4.  
  5. function test_func() {
  6.    return array('Test was called');
  7. }
  8.  
  9. $my_array = array('parent' => 'test_func');
  10. $func_result = $my_array['parent']();
  11. echo $func_result[0];

Код
GeSHi (PHP):
  1. // PHP 5.4
  2.  
  3. <?php
  4.  
  5. function test_func() {
  6.    return ['Test was called'];
  7. }
  8.  
  9. $my_array = ['parent' => 'test_func'];
  10. echo $my_array['parent']()[0];

Готиното на този синтакс е, че ти позволява да навързваш такива извиквания без да се налага да присвояваш резултата на всяка стъпка:
Код
GeSHi (PHP):
  1. $arr['parent']()[0]['child']()[1]
(не трябва да се прекалява обаче, понеже става трудно за четене и дебъгване)


И понеже предвиждам, че точно този синтакс ще ти докара ядове когато мигрираш към PHP 7+ ти пускам тази статия, която показва промените свързани с приоритета на изпълнение на подобни динамични извиквания:
https://www.atlantic.net/hipaa-compliant-cloud-storage/what-is-php7-breaking-changes-php5/
и там секцията "Uniform Variable Syntax".

Ако те мързи да кликаш, това:
Код
GeSHi (PHP):
  1. $atlantic->$dot[‘net’]()
В PHP 5 се изпълнява с този приоритет:
Код
GeSHi (PHP):
  1. $atlantic->{$dot[‘net’]}()
А в PHP 7+ с този:
Код
GeSHi (PHP):
  1. ($atlantic->$dot)[‘net’]()

Забавлявай се ;D
12  Хардуер за Линукс / Лаптопи / Re: Интересна и може би полезна програмка -: Nov 14, 2018, 22:09
За първи път мернах подобни анимации в един блог пост на Минко:
https://blog.mgechev.com/2018/05/28/revive-golang-golint-linter/

Оттогава винаги съм се чудил как точно се правят подобни svg-та.
Благодаря много, и на мен ще ми е интересно да прегледам кода!
13  Програмиране / Web development / Re: PHP работа едновременно с две сесии/кукита -: Oct 04, 2018, 21:23

Виж никой не ти пречи да си направиш някаква вътрешна логика и от 1 сесия да направиш 1 истинска (от ПХП) и една виртуална (от теб си).

смисъл? ако има зададено второ куки си пълня собствен масив $_SESSION_2[] и си го записвам по мой си начин на сървера?

Точно така... как ще направиш връзката си е твоя грижа.
Съжалявам, че малко късно се включвам. n00b е отговорил достатъчно изчерпателно, но и аз да направя едно обощение.

Когато се създава сесия, сървъра генерира някаква произволна стойност и я сетва на потребителя посредством Set-Cookie HTTP хедъра. Реално информацията от сесията не са пази в това PHPSESSID, а по подразбиране се пази като файл някъде на сървъра. PHPSESSID просто служи като идентификатор, който се подава при всяка заявка, за да може да се помни състоянието между различните заявки.

Бисквитката не е задължително винаги да служи като идентификатор. Може да държи и тривиална информация, като последно влизане, дали нещо е кликнато и т.н. Тези бисквитки обикновено не са http_only и могат да бъдат четени и от JS. Но ако има друга която служи като идентификатор, може да провериш за нейното наличие чрез $_COOKIE и съответно да запазиш информация свързана с нея като:
  • някакъв друг файл на сървъра
  • в базата данни (или специална in-memory такава) под някаква структурирана форма - сериализиран JSON или отделна таблица специално за това
  • в $_SESSION под някакъв друг ключ $_SESSION['other_session_data']

Третото не знам дали ще ти свърши работа, понеже ако главната сесия се унищожи, то и данните от другата сесия ще заминат с нея.
14  Програмиране / Web development / Re: PHP работа едновременно с две сесии/кукита -: Oct 03, 2018, 22:29
По принцип PHP ще хвърли грешка (notice), ако се опиташ да стартираш сесия докато съществуваща такава вече тече.

Досега не ми се е налагало да поддържам 2 сесии едновременно. Има ли причина непременно да съхраняваш данните в отделни сесии?
15  Предложения и въпроси относно Linux-BG / Предложения за подобрения на сайта / Re: update на сайта? -: May 10, 2018, 09:21
И аз го наглеждам, но нямам време да се включа в разгорещените теми на деня. Просто докато го отворя има 10+ нови страници ;D
Страници: [1] 2 3 ... 20