Трябва ми лек сървар с който да управлявам едн компютър, който ползвам за нещо като локален NAS. Apache тотално не ми се вписва в сметките, защото напоследък брах ядове с пълното му деинсталиране от системата. Затова се спрях на конкурента му nginx. По-долу поствам някои интересни моменти от тестовете, които направих под Windows. За да мога да достъпвам сървара в локална мрежа, трябваше да променя настройките на Firewall-а на Windows 10. В моя случай промених настройки на firewall на Nod32, който е асоцииран по подразбиране в firewall-a на Win.
Изтеглих Mainline version на nginx от тук: nginx download
Разархивирах го в една директория и му промених conf/nginx.conf така, че да отговаря на моите нужди. Важно е да се отбележи, че предварително имам инсталиран PHP 7.2, който е добавен в променливите на обкръжението на Win10.
казва на сървара първо да потърси файл, след това директория и най-накрая ако не намери предните две да потърси index.php, като всичко след името на домейна го постави като аргумент. Примерно: https://localhost/system-info ще се преобразува в: https://localhost/index.php?/system-info По този начин мога да ползвам френдли адресиране, вместо да изписвам остарелите GET променливи. В Apache се ползва .htaccess за тая цел. Но в nginx тези инструкции се поместват в основния кофигурационен файл.
За да спирам и пускам сървара използвах batch код, който намерих някъде в мрежата. Коментирал съм с REM кодове в скрипта, които могат да са полезни след време, но които не са ми необходими, като спиране и пускане на MySQL. Напоследък за леки проекти ползвам основно SQLite с RedBeanPHP като ORM:
@echo off
REM cd C:\WebServer\nginx
IF "%1" == "stop" (
GOTO STOPSERVER
)else IF "%1" == "start" (
GOTO STARTSERVER
)else (
echo Use these commands:
echo.
echo myserver start
echo myserver stop
)
GOTO END
:STARTSERVER
REM QPROCESS * | find /I /N "mysqld.exe">NUL
REM IF "%ERRORLEVEL%"=="0" (
REM echo MYSQLD is already running.
REM )else (
REM RunHiddenConsole.exe mysqld --console
REM echo MYSQLD is now running.
REM )
QPROCESS * | find /I /N "nginx.exe">NUL
IF "%ERRORLEVEL%"=="0" (
echo NGINX is already running.
)else (
RunHiddenConsole.exe nginx
echo NGINX is now running.
)
QPROCESS * | find /I /N "php-cgi.exe">NUL
IF "%ERRORLEVEL%"=="0" (
echo PHP-CGI is already running.
)else (
RunHiddenConsole.exe php-cgi -b 127.0.0.1:9000
echo PHP-CGI is now running.
)
echo.
echo To stop, type "myserver stop"
GOTO END
:STOPSERVER
REM QPROCESS * | find /I /N "mysqld.exe">NUL
REM IF "%ERRORLEVEL%"=="0" (
REM taskkill /F /IM mysqld.exe>NUL
REM echo MYSQLD ended successfully.
REM )else (
REM echo MYSQLD is not running
REM )
QPROCESS * | find /I /N "nginx.exe">NUL
IF "%ERRORLEVEL%"=="0" (
::nginx -s stop
taskkill /F /IM nginx.exe>NUL
echo NGINX ended successfully.
)else (
echo NGINX is not running
)
QPROCESS * | find /I /N "php-cgi.exe">NUL
IF "%ERRORLEVEL%"=="0" (
taskkill /F /IM php-cgi.exe>NUL
echo PHP-CGI ended successfully.
)else (
echo PHP-CGI is not running
)
:END
Запазих по-горния код в директорията с exe-то на nginx в файла myserver.bat. Пускане и спиране на сървара става с командите:
myserver start
myserver stop
За файлов фмениджър на NAS-чето за сега съм се спрял на Tiny File Manager. Този файлов мениджър е поместен само в един файл и има достатъчно опции за редактиране, които са ми напълно достатъчни.
За да ми е по-лесно да преговаряме с дъщеря ми по математика, си правя простички файлчета тест-генератори на Excel. Споделям един тест-файл по математика за 4-ти клас. Добавих му малко екстри, за да може да се използва от начални учители или от други деца. Освен задачите автоматично се генерират и отговорите. Генерирането на нов тест става като се натисне бутона F9 от клавиатурта. Основната страница на теста е форматираната като страница за принтиране, файла може да се запази като PDF и така да се генерират множество готови тестове с отговорите.
В различните ми проекти с PHP съм ползвал различни Captcha генератори, за да се пазя от спамери и ботове. Но винаги нещо ми е липсвало или са били прекалено грамадански за семплите ми нужди. За това си написах един клас, който лесно да мога да интегрирам в проектите. Всъщност идеята беше друга – да направя голямо количество предефинирани капчи и да ги набутам в SQLite файл, така скоростта на зареждане става муцка. Това и направих. Но така или иначе написах голяма част от кода, та реших да направя и един самостоятелен клас. В последствие, ако ми текне музата, мога да напиша и туториал и със сесии да демострирам, как използвам капчата в реални условия.
Моя Captcha Generator има няколко готини опции за настройка:
използване на множесвно TTF-шрифтове. Аз ползвам такива от https://fonts.google.com
Престои ми ремонт и имам нужда от нещо, което да ми смята бързо броя плочки или ламиниран паркет, като добавя фугите. За това си написах калкулатор на jacascript. Представлява обикновена web-страница. Във версия 002 на калкулатора са направени някои промени:
Кода е изцяло пренаписан, като вече е обектен, което ще ме улесни да прилагам нови методи на редене
Добавен е диагонален модел за редене на плочките
Добавен е генериран код за CAD-софтуера QCad
Програмата работи с всички модерни браузери и мобилни устройства. Калкулатора може да се зареди онлайн от тук: Tile Calculator
След разархивиране на архива може да се ползва само html-файла в основната директория. В папката source е развойната версия на калкулатора с scss-кода.
Кратко видео, което показва моя начин на ползване на това тулче:
Video Player
Media error: Format(s) not supported or source(s) not found
Езикът C винаги може да помогне в критични моменти. Той е парен чук! Трябваше ми просто, малко по размер и прецизно по време приложение за Windows. За да се свързвам с Arduino контролер. Мислих, мислих и се върнах към C. Башка, че Arduino също е почти C, макар и да е повече Processing. Поствам програмка, която прави нещо на всеки 5 секунди.
#include <stdio.h>
#include <windows.h>
#include <time.h>
#define interval 5
int do_something(char *i);
int main()
{
// main
int h, m, s, once;
char str[100];
time_t now;
struct tm *tm;
while (1)
{
now = time(0);
tm = localtime (&now);
h = tm->tm_hour;
m = tm->tm_min;
s = tm->tm_sec;
if (!(s % interval) && once != 1 ){
sprintf(str, "Time: %d:%d:%d\n", h, m, s);
do_something(str);
once = 1;
} else if (!(s % interval) && once == 1 ) {
continue;
} else {
once = 2;
}
Sleep(990);
}
return 0;
}
int do_something(char *i){
printf(i);
}
Простичък код на batch който взима последния csc.exe от Microsoft.NET\Framework. Кода се пейства в bat-файл и при двоен клик компилира script.cs.
1
2
3
4
5
6
7
@echo offfor/f "TOKENS=1"%%x in('dir %windir%\Microsoft.Net\framework\v* /b ^| findstr "v[1-9]"') do (
set myPID=%%x
)
set csc=%windir%\Microsoft.Net\framework\%myPID%\csc.exe
%csc%/t:winexe script.cs
@echo off
for /f "TOKENS=1" %%x in ('dir %windir%\Microsoft.Net\framework\v* /b ^| findstr "v[1-9]"') do (
set myPID=%%x
)
set csc=%windir%\Microsoft.Net\framework\%myPID%\csc.exe
%csc% /t:winexe script.cs
Share and Enjoy !
Shares
This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish.AcceptRead More
Privacy & Cookies Policy
Privacy Overview
This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the ...
Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.
Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.