Показват се публикациите с етикет програмиране. Показване на всички публикации
Показват се публикациите с етикет програмиране. Показване на всички публикации

неделя, 29 септември 2013 г.

База данни за метеорити

Разработих проста база данни с научна информация за метеорити:

http://meteoritedb.appspot.com/

Засега базата данни съдържа само една таблица, в която всеки ред описва един метеорит. Метеоритът се описва в следните полета на реда:
  1.  Name -  официално име, с което е регистриран метеорита;
  2.  Observed Fall - показва дали е наблюдавано, или не падането на този метеорит;
  3.  Year - през коя година е открит или видян да пада метеорита;
  4.  Place - страната и мястото, където е намерен;
  5.  Type - към кой клас е отнесен метеорита;
  6.  Mass - обща маса (тегло) на всички намерени късове от метеорита;
  7.  Information - известни данни от изследвания на метеорита (структура, минерален и химичен състав и други), а също и сведения, дали има осеяна с отломки област (Strewn Field), което е интересно за търсачите на метеорити.
Базата данни има полета, в които се задава търсене по име, страна (място), клас или произволен текст в информацията, а също и поле за сортиране по име, клас, година или маса (символът звезда * в някое поле, разбира се, означава "всички"). Има бутон Search! който се натиска и се появяват данните.

Технически подробности


Написах системата на езикa PHP. За хостинг използвах Google App Engine for PHP (https://gaeforphp.appspot.com/).

Използвах вградена машина за бази данни (Embedded Database), която също е написана на PHP и включена в основната програма. Вградената база данни изпълнява заявки на език SQL и използва свое вътрешно представяне за съхраняване на данните в текстови файлове, разположени във файловата система на Google App Engine for PHP.

Изходният код, който системата изпраща към браузъра, съответства на стандартите на HTML5/CSS3, което проверих с http://validator.w3.org/ .

събота, 9 февруари 2013 г.

Преместване на файлове

Методът renameTo на класа File в езика Java извършва преименуване на файл. Това може да се използва за преместване на файл от една директория в друга.

В една програма на Java, работеща под Linux, срещнах проблеми с реализираното по този начин преместване на файл от една директория в друга.

В следващата конструкция, с оператор if, методът renameTo упорито връщаше резултат false и файлът просто не се появяваше в целевата директория:

if(srcFile.renameTo(dstFile))

Когато замених предишния ред със следващата конструкция, всичко тръгна нормално и файлът се преместваше успешно от едната директория в другата:

if(patchMoveFile(srcFile.getAbsolutePath(),
                 dstFile.getAbsolutePath()))

Тук новонаписаният допълнителен метод patchMoveFile премества файл по най-прост начин, като чете файла, записва го в друг файл и след това изтрива първия файл:

private boolean patchMoveFile(String srcFileName,
                              String dstFileName)
{
  InputStream inStream = null;
  OutputStream outStream = null;
  boolean r = false;

  try
  {
    File inFile = new File(srcFileName);
    File outFile = new File(dstFileName);     
    inStream = new FileInputStream(inFile);
    outStream = new FileOutputStream(outFile);
    byte[] buffer = new byte[1024];
    int length;
  
    while ((length = inStream.read(buffer)) > 0)
    {
      outStream.write(buffer, 0, length);
    }
    inStream.close();
    outStream.close();
    inFile.delete();
    r = true;
  }
  catch(IOException e)
  {
    e.printStackTrace();
  }
  return r;
} // patchMoveFile

Значи, конструкцията с метода renameTo не искаше да работи, а с метода patchMoveFile заработи правилно в съвсем същия контекст на програмата/системата.

Това ми напомня, че за постигането на надеждност на програмите трябва да се използват конструкции, които работят без проблеми в различни възможни контексти/условия/системи/ситуации.