C string array and pointers

Няколко примера, които описват почти едно и също нещо – обхождане на елементи на масив с пойнтери. Много важно е да се схване, че масивите от стрингове всъщност представляват масиви от пойнтери от тип char!!!!
Костваше ми много време, докато се убедя, че е така, но не всеки може лесно да свикне да мисли на C :).
Пример 1

#include <stdio.h>
int main(){
 char words[][18] = {"edno", "dve", "tri", "chetiri", "pet"};
 int i;
 
 for (i = 0; i < 5; i++){
     char *words_ptr = *(words + i);
     printf("words_ptr + %d = %s \n", i, words_ptr);
 }
 return 0;
}

Пример 2

#include <stdio.h>
char words[][18] = {"edno", "dve", "tri", "chetiri", "pet"};
char *ptr;
 
int main(){
 int i;
 
 for (i = 0; i < 5; i++) {
     printf("--%s--\n",words + i);
     ptr = *(words + i);
     printf("ptr + %d = %s \n", i, ptr);
 }
 return 0;
}

Пример 3

#include <stdio.h>
char *words[] = {"edno", "dve", "tri", "chetiri", "pet"};
 
int main(){
 int i;
 
 for (i = 0; i < 5; i++) {
     printf("ptr + %d = %s \n", i, *(words + i));
 }
 return 0;
}

Share and Enjoy !

Shares

C read word line from text file

C read word from file
Прост C код, който чете от текстов файл line-by-line и показва резултата като думи. Идеята е, ако имаме файл, на който всеки ред представлява дума, да можем да вземем тази дума и да я обработим.

#include <stdio.h>
#include <stdlib.h> // ANSI C exit() prototype
 
#define MAX 40
 
int main(){
	FILE * fp;
	char words[MAX];
 
	if ((fp = fopen("in.list", "r")) == NULL){
		printf("Can't open file\n");
		exit(1);
	}
 
	while (fscanf(fp,"%s",words) == 1){
		puts(words);
	}
 
	if (fclose(fp) != 0) printf("Error in closing file \n");
}

Текстовия файл in.list съдържа следните редове:
foo
bar
biz

Естествено изхода от по-горната програма е същия.
Програмаката е много удобна, ако искаме да направим нещо като речник, който да обработваме с регулярни изрази или нещо подобно.

Share and Enjoy !

Shares

Apache and PHP Server Session not working

Това е един прост трик, който задължително трябва да знаете, ако ви се прецакват PHP-сесиите на локалния компютър. При мен се получи при 2 различни версии на XAMPP. Задължително тествайте сайта, като в адресната лента не пишете “localhost” или “127.0.0.1”, а пишете iP-то, което имате в мрежата ви.
Това може да се види, като се изкара един промпт и в него пишете:

ipconfig /all

… или командата “ifconfig”, ако ползвате Linux.

Share and Enjoy !

Shares

Инверторен компресор за хладилник. Refrigeration compressor frequency – components.

Какво е съдържанието на компресор за хладилник може да се види в видеото по-долу. Компресора е инверторен и има инверторна кутия тип “frequency”.
Подобни компресори се използват за средно-големи домашни хладилници, като самите компресори са особено ефективни и с висок коефициент на COP.

Можете да разгледате и Как работи домашния хладилник – схема

Share and Enjoy !

Shares

Change Date Picture Taken Exif info

Date Picture Taken или кога е направена някоя снимка може да се види като се кликне на файла с десен бутон на мишока -> Properties -> Summary -> Advanced.
Date Picture Taken
Често снимам с разни фотоапарати, на които не им е настроена коректно информацията за датата и часа.

Тогава ползвам един страхотен иснструмент за разглеждане и редактиране на EXIF информация – EXIFTool.
Командата, която използвам за смяната на Date/Time Original:

exiftool -overwrite_original -dateTimeOriginal="2012:10:23 20:06:34.33-05:00" DSC00098.JPG

По подобен начин се сменя и датата Create Date, като се заменя dateTimeOriginal с CreateDate.

Може да се промени и Date Modify. Става с опцията -filemodifydate. Примерно:
-filemodifydate=”2013:10:23 20:06:34.33-05:00″

Share and Enjoy !

Shares




C++ use ENTER to quit program – излизане от конзолна програма с Enter

C++ е много печен език и почти винаги едно нещо може да се напише по 10 различни начина. Но всеки от начините си има предимства и недостатъци. Скрипта по-долу е една моя алтернатива на проверка за натиснат 2 пъти ENTERR в конзолна програма. Използва Enter-а за изход, като просто проверявам, дали има въведен string в командния вход – cin:

#include <iostream>
using namespace std;
 
int main () {
string a;
 
while(1){
    getline(cin, a);
    if (a.empty())
        break;
    cout<<"You added: "<<a<<endl;
}
 
cout<<"You Enter!"<<endl;
}

След компилиране се получава това:
C++ use Enter to quit program

Share and Enjoy !

Shares




Background diagonal lines – Inkscape

За да се направят диагонални линии (seamless diagonal line pattern) за фон на html страница или за wallpaper понякога изисква малко математика или просто практика. Ще се опитам да покажа най-простичкия начин за правене на такива линии, който често използвам. За целта ще използвам чудесната OpenSource програма Inkscape.
В Inkscape си правим линиите, които искаме да искаме да получим:
Inkscape diagonal lines
Маркираме с плъзгане на мишката всички линии, натискаме Ctrl, за да получим възможност за въртене на обектите:
Inkscape diagonal lines
Отново натискаме Crtl и завъртаме с мишката на 45°:
Inkscape diagonal lines
С инструмента Rectangle изчертаваме един квадрат. За да се получи точен квадрат при чертането, задръжте Ctrl когато плъзгате мишката. Правим квадрата леко прозрачен, за да видим къде се намираме, спрямо диагоналните линии:
Inkscape diagonal lines
Сега нагласяме квадрата така, че ъглите на квадрата да обхванат максимално точно линиите, които са показани по-долу:
diagonal lines
и долу в дясно по същия начин:
seamless diagonal lines
Сега трябва да разкараме квдрата на най-долния слой, за да не се вижда:
Seamless diagonal lines
Почти готови сме с Background-а, само трябва да го експортваме. Докато е селектиран квадрата (който не се вижда) избираме File -> Export Bitmap:
Inkscape export bitmap
Ако случайно кликнете някъде и квадрата се деселктира, тогава натиснете Alt и кликайте с мишката там където знаете, че е квадрата, докато не се селектира отново.
Много е важно да обърнете внимание на настройките: 75dpi и Selection. Експортираме и си имаме един много тарикатски фон за web-страница:
Diagonal seamless background
Примерна страница, в която може да се види как изглежда бекграунда: Background diagonal lines – example

Inkscape seamless diagonal lines html background

Inkscape файла може да се изтегли от тук: Inkscape seamless diagonal background

Кратко флаш видео, което показва как точно се правят диагоналните линии:
[flv:https://blog.nediko.info/examples/diagonal_lines/Diagonal_lines.flv https://blog.nediko.info/examples/diagonal_lines/diagonal_lines_10.jpg 504 388]

Файловете от видеото могат да се изтеглят от тук: Inkscape-seamless-diagonal-lines.rar

Share and Enjoy !

Shares




Excel VBA add row – добавяне на ред с Vba в Excel

Днес ми се наложи да добавям доста редове в Excel таблица, която беше предварително форматирана. Добавянето и форматирането на редовете един по един е хамалска работа, затова реших да напиша простичък макрос на VBA, който да свърши работата. Кода на макроса е:

Private Sub CommandButton1_Click()
    ActiveCell.Offset(1).EntireRow.Insert
    ActiveCell.EntireRow.Copy
    ActiveCell.Offset(1).EntireRow.PasteSpecial Paste:=xlPasteFormats, _
        Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
End Sub

Кода го вкарвам в Shee-та:
Excel VBA add code to Sheet1
За да го стартирам се вижда, че съм използвал бутон, вкаран в Shee-та:
Excel VBA - добавяне на ред
Екселския файл може да се изтегли от тук: Excel VBA add row
Ето и едно видео, което показва цялата операция:
Excel VBA add row
[flv:https://blog.nediko.info/examples/excel_VBA_add_row/Add_row.flv https://blog.nediko.info/wp-content/uploads/2012/06/excel_addrow_03.jpg 472 388]

Share and Enjoy !

Shares




Анализ за търсене на грешки

Напоследък ми се наложи да се запозная с няколко системи за търсене грешки. За да съм полезен на себе си ще постна екстрактнато и опростено инфо, което да ме подсети. В общи линии има 2 популярни системи:

1. Матричен анализ за търсене на грешки
Матричен анализ за търсене на грешки
При този анализ се прави простатаблица с частите на определен обект. Важно е да се отбележи всяка част каква функция изпълнява, както и кои функции с кои части са свързани. Там където липсват хиксчета “x”, значи нещо е е наред.

2. Стъпков анализ за търсене на грешки
Стъпков анализ за търсене на грешки
При този анализ се обръща внимание на отделните стъпки от един процес. Целта е да се проследи ако в крайната, най-малка стъпка се получи проблем, какво “нагоре” би произтекло от този проблем. Какви щети ще доведе проблем в определена стъпка от процеса.

На базата на тези системи са създадени методики за търсене и анализ на грешки. Една интересна методика е “5-те ЗАЩО?“, в която се наблюдават поотделно 5-те основни фактора, които могат да доведат до грешка:

  • човек
  • машина
  • метод
  • материал
  • околна среда

При този метод се чертае диаграма тип “рибена кост” с много разклонения.

Share and Enjoy !

Shares




Ченге скочи от рейса и обезвреди крадец – холивудски екшън по български

Тази новина ме разби! Мислех си, че такива неща могат да се видят вече само по филмите. Подобни истории ме карат да вярвам, че все още има останали човеци в тая България.

ЙОРДАН ЙОЧЕВ
16.03.2012
Полицай, работещ в МВР едва от 3 месеца, скочи от рейс и хукна да преследва въоръжен бандит, пребил и ограбил жена посред бял ден в София. След кратък спринт служителят на реда успял да настигне извършителя и да избие пистолета от ръцете му. Секунди след това дошли още 2 патрула подкрепление и задържали бандита. Задигнатата чанта с последните 20 лв. на жената є била върната.

Случката се разиграла вчера сутринта около 6,10 часа. Както обикновено, оперативният полицай Христо от Четвърто РПУ се качил на автобус номер 604 и тръгнал от квартал „Драгалевци” към управлението. Младият полицай от Русе завършил преди няколко месеца Академията на МВР и решил, че ще работи в София, но още търсел квартира. Тъй като временно живеел в „Драгалевци”, му се налагало да става доста рано, за да стигне навреме в районното. Именно този факт се оказал

решаващ за разкриването на престъплението

Малко след 6 часа рейсът спрял на спирката на бул. „България” в района на Търговската гимназия. Веднага след като се затворили вратите, полицаят видял как бандит нападнал жена, ударил я и отмъкнал чантата є.

„Спри, ограбиха жена”, викнал полицаят на шофьора, който отворил вратата на автобуса и Христо хукнал по петите на извършителя. „Стой, полиция”, извикал служителят на реда, но бандитът продължавал на тича. Викнал втори път, но в този момент грабителят се обърнал и насочил пистолет срещу полицая. Без да се изплаши, Христо се хвърлил върху заподозрения и след кратко боричкане успял да избил пистолета. През това време шофьорът на рейса, който станал свидетел на случката, се обадил на телефон 112, за да повика помощ и за броени секунди 2 патрула се озовали на мястото и задържали извършителя. Оказало се, че той е 21-годишният Христо Вълчев, който бил регистриран и осъждан за хулиганство. Младежът лъхал на алкохол. На въпроса защо го направил отговорил най-невъзмутимо:

Исках да направя нещо яко

След нападението жертвата Антоанета била откарана във Военномедицинска академия. От удара жената паднала по очи и си разбила носа в плочките. Тя имала в чантата си едва 20 лева, които били и всичките є пари до заплата. Обикновено при подобни случаи парите също се вземали от разследващите като доказателство по случая, но жената написала молба до прокурора да є ги върнат, защото в противен случай трябвала да взема назаем.

„Нашият служител е действал повече като гражданин, а не като полицай. Той не е имал белезници в себе си, бил е цивилен и дори си е оставил раницата с лаптопа в автобуса, преди да тръгне да гони заподозрения”, коментираха вчера от столичното Четвърто районно.

Новината е публикувана тук:
Ченге скочи от рейса и обезвреди крадец

Share and Enjoy !

Shares