Programozás

Programozással kapcsolatos ötletek, megoldások

Keresés és találatok kiemelése a szövegben

Kiemelő

A keresés megvalósítása még viszonylag egyszerű és kézenfekvő feladat annak, aki kicsit ért az SQL-hez. Feltéve persze, hogy a keresendő információt is SQL adatbázisban tárolja. De biztos mindenki látott már olyant, hogy a találatok ki voltak emelve valamilyen színes háttérrel. Erre írok egy nem tökéletes, de használható megoldást. Amiből már el lehet indulni egy komolyabb felé is.


A keresés még rendben van általában. De az ember szereti látni, hogy amire rákeresett, az mégis a talált szövegben hol van. Lehet persze a böngésző beépített kereső funkcióját is használni, ami firefox-ban a CTRL+F billentyű kombinációval is elérhető, de megspórolhatunk a felhasználónak ennyi többletmunkát.

Megosztás/Mentés

MySQL kis- és nagybetűk megkülönböztetése

mysql logo

Tudjuk vagy sem, de MySQL-ben a mező választott karakterkészletétől függ, hogy kereséskor egy WHERE feltételben számít-e a kis- és nagybetűk különbsége. Elsőre lehet nem tűnik fontosnak ez a kérdés. De cseppet sem mindegy, hogy egy loginrendszernél például ugyanannak számít-e Bela és bela. Ugyanakkor egy jelszónál ( amit egyébként nem nagyon szokás hashelés nélkül tárolni ) pedig fontos, hogy különbözzön 123ABC és 123aBc. Most nem tudok jobb példát mondani. De akkor milyen karakterkészletet válasszunk? Erről fogok írni pár szót.


Megosztás/Mentés

Word dokumentumok összefűzése C# -ban

MergeDoc

Gondoltam egyet, és összedobtam egy programot C# -ban, ami összefűz tetszőleges számú és formátumú word dokumentumot. Nem rég szükségem is lett volna egy ilyenre, de ehelyett egyenként tallóztam be egy új dokumentumból a beillesztendő fájlokat. Lehet, lett volna más megoldás, de már mindegy. A program futtatható exe fájlja és a forráskódja is letölthető a következő linken:



Forráskód és EXE fájl

A program fő része gyakorlatilag a következő:

  1. using System;
  2. using System.Windows.Forms;
  3. using Word = Microsoft.Office.Interop.Word;
  4.  
  5. namespace MergeDoc
  6. {
  7.     public partial class Form1 : Form
  8.     {
  9.         OpenFileDialog ofd = new OpenFileDialog();
  10.         public Form1()
  11.         {
  12.             InitializeComponent();
  13.  
  14.         }
  15.  
  16.         private void browseBtn_Click(object sender, EventArgs e)
  17.         {
  18.             ofd.Multiselect = true;
  19.             ofd.Title = "Jelöld ki az összefűzendő dokumentumokat";
  20.             String filter = "Word 93-2007 (*.doc,*.docx)|*.doc; *.docx|Word 97-2003 (*.doc)|*.doc|Word 2007 (*.docx)|*.docx";
  21.             ofd.Filter = filter;
  22.          
  23.             if (ofd.ShowDialog() == DialogResult.OK)
  24.             {
  25.                 openedDocs.Items.Clear();
  26.                 foreach (String filename in ofd.FileNames)
  27.                 {
  28.                     openedDocs.Items.Add(filename);
  29.                 }
  30.             }
  31.         }
  32.  
  33.         private void saveBtn_Click(object sender, EventArgs e)
  34.         {
  35.             Word.ApplicationClass wordApp = new Word.ApplicationClass();
  36.             object visible = false;
  37.             object doctype = Word.WdNewDocumentType.wdNewBlankDocument;
  38.             object docformat = Word.WdOriginalFormat.wdOriginalDocumentFormat;
  39.             object missing = System.Reflection.Missing.Value;
  40.  
  41.             Word.Document outdoc = wordApp.Documents.Add(missing, missing, doctype, visible);
  42.             foreach (String filename in openedDocs.Items)
  43.             {
  44.                 object file = filename;
  45.                 try
  46.                 {
  47.                     outdoc.ActiveWindow.Selection.InsertFile(filename);
  48.                 }
  49.                 catch (System.Runtime.InteropServices.COMException ex)
  50.                 {
  51.                     MessageBox.Show(ex.Message);
  52.                 }
  53.             }
  54.             try
  55.             {
  56.                 wordApp.Documents.Close();
  57.             }
  58.             catch (System.Runtime.InteropServices.COMException)
  59.             {
  60.  
  61.             }
  62.             finally
  63.             {
  64.                 wordApp.Quit();
  65.             }
  66.         }
  67.  
  68.     }
  69. }

Én nem állítom, hogy tökéletes, de a célnak megfelelt. Egy nap majd talán írok jobbat. Addig is akit érdekel, használja kedvére.

Tesztelve Microsoft Office 2007 mellett lett Windows 7 rendszerben.
A project Visual Studio 2010 -ben készült de .NET 3.5 verzióra állítva.

Megosztás/Mentés

MASM lemezszektor olvasó lapozható tartalommal

Előkép

A következő program beolvas egy (Floppy)lemezről egy (512 byte-os) szektort. Lényegében egy házi feladat volt az egyetemen, hogy csinosítsuk ki keretekkel, esetleg menükkel a programot, ami már előre meg volt írva. Ezen célon túllőve nem csak a kimenetet csinosítottam, hanem a forráskódot is. Jóllehet, túl is bonyolítottam.

Az igazsághoz hozzá tartozik, hogy a program csak floppy lemezről tud beolvasni. 3 féle megoldást próbáltam ki a lemezszektor olvasásra, de némi utánajárás után kiderült, hogy vagy az oprendszer nem támogatja a módszert, vagy a fájlrendszer. Nem beszélve arról, hogy egy virtuális FAT12 -es merevlemezt sem tudtam olvasni, tehát maradt konkrétan a virtuális floppy csatolás virtualboxban egy virtuális XP-vel. Floppy képet egyébként készen is lehet letölteni a neten.



Adatbekérés

Kiírás

Megosztás/Mentés

Dinamikus select lista javascripttel

Sok oldalon látni olyan lenyíló listákat, aminek azonnal megváltozik a tartalma, amint egy másik listában kiválasztunk valamit. Erre mutatok egy példát, és közben kitérek kapcsolódó témákra is.

Legyen a példa egy igen mesterkélt probléma. Adott egy select lista, amiben számok vannak 1-től 10-ig. Ha ebben kiválasztunk egy számot, akkor a második select listában jelenjenek meg a kiválasztott szám többszörösei maximum 20-ig. Ugyebár adja magát az első lépés. Kell az első select html kódja. Minden select-nek kell egy id, hogy lehessen rá hivatkozni majd javascript-ből. Nevet is lehet neki adni, ha netán szerver oldalon szeretnénk feldolgozni majd az űrlap elküldése után az eredményt. Amire azért igen nagy az esély.

Megosztás/Mentés

Meghívós loginrendszer - R.E. Login v2.0

R.E. Login v2.0

Az R.E. Login újabb verziója, vadi új objektum orientált motorral. Megőrizve az elődje funkcióit, de némileg kibővítve azt, és lehetőséget biztosítva további fejlesztések egyszerűbb elvégzésére. Ebből kifolyólag valószínű lesz is folytatás. Addig is köszöntsük szeretettel új barátunkat, az R.E. Login v2.0 -át.
R.E. Login v2.0.3 letöltése
Kövesd a projektet és keresd a legfrissebb verziókat a:
https://sourceforge.net/projects/relogin/ oldalon.


Figyelem: Ez a rendszer már elavult. Hibákat tartalmazhat és az új PHP verziókkal nem teljesen kompatibilis. Az init.php-be beillesztve az alább írt sorok egyikét a hibaüzenetek eltüntethetők, de a login használata csak saját felelősségre javasolt.

error_reporting(E_ALL | E_STRICT); // E_STRICT hibaüzenetek elrejtése
vagy
error_reporting(0); //minden hibaüzenet elrejtése

Kapcsolódó oldalak

Szerkesztve: 2010.04.04. 23:02
A loginban sikerült felfedezni pár hibát. Ezek javítva lettek. A hibák a következők voltak:

  • Profil módosítás fájl kimaradt a beállításokból, így csak changeprofile.php néven működött
  • Ugyanezen okból adminnak más profiljában is a saját profiljára mutató link volt.
  • Apró elírás a telepítőben. STMP volt SMTP helyett az egyik megjegyzésben
  • A telepítő nem ellenőrizte, hogy az SMTP host és port meg van-e adva. Sem az e-mail címeket.

Továbbá egy kiegészítés:

  • Most már opcionális az SMTP használat is. ha netán valakinek nem lenne semmilyen SMTP szerver használatára lehetősége, akkor SMTP nélkül küldi a leveleket.

Más nem változott. Ha bárki hibát észlel, kérem szóljon.
Köszönet tbence-nek az észrevételeiért és hibajelentésért.

A Login funkciói nagy vonalakban:

  • Regisztráció ( Opcionális meghívó mód, regisztráció blokkolása )
  • Beléptetés
  • Meghívó küldés
  • Privát üzenet küldés ( Kimenő, bejövő postafiók, Hír küldés )
  • Felhasználói profil
  • Gravatar és MKAvatar használat
  • Admin felület ( Tulajdonos és Admin rangot megkülönböztetve )
  • Bővíthető ranglista
  • Felhasználó lista
  • Online lista
  • Felhasználó keresése usernév szerint
  • Elfelejtett jelszó funkció

Megosztás/Mentés

Perzisztens PHP objektumok - R.E. DBObjects v2.1

Ez az osztálykönyvtár perzisztens megvalósítását teszi lehetővé PHP osztályoknak. Ezen kívül tartalmazza az R.E. Pagination néhány funkcióját, hogy a perzisztens objektumokat tartalmazó listát is lehessen inicializálni oldalanként.

R.E. DBObjects letöltése
Dokumentáció letöltése
Dokumentáció megtekintése

Előnyei

  • Frissítésnél és törlésnél nincs szükség sql kódok írására.

  • Az egyes adatbázis mezők objektum tulajdonságként kezelhetők. Így akár osztályon belül módosítható is az elérésük __get __set metódusokkal.

  • Egyedi metódusok definiálhatók a jellemzők kezelésére.

  • A kódolás egyszerűbb, gyorsabb, átláthatóbb.

Hátrányai

  • Összetett kulcsokat még nem tud kezelni.

  • Minden táblának tartalmaznia kell auto_increment elsődleges kulcsot.

  • A frissítés, törlés, lekérdezés valamivel lassabb lehet. Ez nyilvánvalóan adódik az előnyök megvalósításának idejéből.

  • Még nem képes több adatbázis kapcsolat egyidejű kezelésére

Példa a használatára:

  1. <?php
  2. //Ennek az osztálynak includeolása szükséges egyedül.
  3. require_once 'REDBObjects/REDBObjects.class.php';
  4. //Az összes mysql modult betölti a könyvtárból.
  5. REDBObjects::uses('mysql');
  6.  
  7. mysql_connect('localhost', 'root', 'password');
  8. mysql_select_db('teszt');
  9.  
  10. $list = new IsMySQLListClass(array(
  11.         'teszt'=>array('*')
  12. ));
  13. $list->tableName_signal = 'T_'; //Ez az alapértelmezett is
  14. $list->table_field_sep = '__'; //Az alapértelmezett az egy darab _ jel
  15. //sql kód FROM utáni részét kell megadni limit nélkül.
  16. //Plusz hogy hány rekordot kérdezzen le egy oldalra
  17. $list->page("teszt where field like 'A%'", 10);
  18. foreach ($list as $key => $object)
  19. {
  20.         print $object->T_teszt__id.', '.$object->field.'<br />'.PHP_EOL;
  21.         if ($object->id == 2)
  22.         {
  23.                 //Frissíti a field tulajdonság értékét.
  24.                 $object->field = 'P';
  25.                 $object->update();
  26.         }
  27. }
  28. ?>

Megosztás/Mentés

PHP ellenőrzőkód - R.E. Captcha v1.0

Captcha kép 1

Captcha kép 2

Újabb taggal bővült az "R.E. termékcsalád", (R.E. mint RimElek) mert hogy már szinte védjegyem. Ezúttal egy Captcha PHP osztály személyében. Itt bal oldalt található is két példa kép. Mint látható, az egyiken egy matematikai műveletet kell elvégezni, a másikon pedig csak felismerni a véletlenszerűen megjelenített karaktersorozatot. Mindkét esetben megzavarva a képet a szintén véletlenszerűen generálható vonalakkal.


R.E. Captcha v1.0 letöltése
R.E. Captcha v1.0.1 letöltése
Dokumentáció letöltése
Dokumentáció online megtekintése

A fent említett két mód között már mondanom sem kell, hogy hogyan vált a program. Természetesen véletlenszerűen. Persze nem csak fix betűtípussal használható. Tetszés szerint megadható bármilyen ttf betűtípus fájl. Állítható a betűméret, a kép méret és a kép típusa is. ( jpg, png, gif ) Ezen kívül a háttérszín is, bár leginkább világos háttérszín mellett mutat jól tapasztalataim szerint. Még érdekesség, hogy mivel gyakran fordultak hozzám oylan kérdéssel, hogy egy PHP-val generált képet hogyan lehet megjeleníteni egy html fájlban, így két megjelenítési lehetőséget is beépítettem.

Megosztás/Mentés

LL(1) grammatika - Szó felismerés Macro Assemblerben

LL1 grammatika

Ez a program egy egyelőre fix szabálykészlet alapján egy LL(1) grammatika elemzést végez. Egy bekért inputot próbál megfeleltetni a szabályoknak. Majd kiírja, hogy sikerült-e vagy sem. Közben az elemző vermének tartalmát is lépésenként megjeleníti, valamint az épp beolvasott karaktert, hogy követni lehessen a folyamatot.

A program egy egyetemi előadáshoz készült. Az előadáshoz, és a program elkészítéséhez szükséges információkat Dévai Gergely ( ELTE-IK ) prezentációjából szereztem.



Az előző néhány assembly programhoz hasonlóan, ezt is masm 6.11 fejlesztőkörnyezettel fordítottam. Lényeges információ a sikeres fordítás szempontjából :) Megint csak nem kommentelném a forráskódot hosszan, hiszen a kódban levő kommentek is elég részletesek. Ha valaki véletlenül hibát vélne felfedezni a programban, kérem szóljon, hogy abból is tanuljak. Az alábbi program ugyanis nálam több gépen is működött teszteléskor, ám mikor egyetemen az előadáson be szerettem volna mutatni, azon a gépen már nem futott le, amelyiken ki kellett volna vetítenem. Ma (2010.04.10.) rájöttem, hogy kihagytam a dsinit eljárás végén a ret kulcsszót. Valószínű ezért nem működött a program megfelelően.

A prezentációk és a program letölthető a következő linken is:
Letöltés


Megosztás/Mentés

Kurzor pozicionálás és string kiírás Microsoft macro Assemblerben

writeto_string logo

A már pascalból jól ismert gotoxy és writeto eljárásokat tartalmazza a program. Egy stringet lehet kiírni vele a DOS képernyőn bárhova pozicionálva. A program masm 6.11 -el lett fordítva, és notepad++ -ban szerkesztve. Valószínű nem ez lesz az utolsó assembly program, amit közzé teszek. De egyelőre meg kell elégednetek ennyivel :)


Megosztás/Mentés