201211302100


FAQ Языки программирования.

Наиболее удачным я считаю определение язык программирования как интерфейс между человеческой личностью и компьютером. Определение это не мое, разные вариации на эту тему мне приходилось слышать в беседах во времена эпидемии рождений новых языков в 90-ые годы прошлого столетия. В этом тексте попытаюсь ответить на некоторые вопросы, связанные с предметом ООП (не затрагивающие тему языков типа brainfuck).

----------

1. Как проще вывести на консоль многострочный текст в языках С и С++ ? Когда-то давно я пользовался таким приемом (язык С++):

  #include <iostream>

  using namespace std;

  typedef const char * CONST;

  CONST c = "+----------------------------+\n"
            "|                            |\n"
            "|  http://www.qbc.narod.ru/  |\n"
            "|                            |\n"
            "|  Сайт закрыт. Linux вечен. |\n"
            "|                            |\n"
            "+----------------------------+\n";
            
  int main() {
      cout << c;
      return 0;
  }

Убрать звезду из строки typedef .. и скомпилировать без ошибок полученный текст с помощью g++, можно, пожалуй единственным способом - если редактировать не тот файл, который Вы компилируете. 

----------

2. Что означает звезда в следующем тексте

  http://stackoverflow.com/questions/3597480
       /how-to-make-python-3-print-utf8

I made printRAW function witch works fine :) (tnx Zack)

  def printRAW(*Text):
      RAWOut = open(1, 'w', encoding='utf8', closefd=False)
      print(*Text, file=RAWOut)
      RAWOut.flush()
      RAWOut.close()

  printRAW("Cool", TestText)

output: \\ now it print in UTF-8

  Cool Test - āĀēĒčČ..šŠūŪžŽ

printRAW(chr(252)) also nicely prints ü (in UTF-8, [xC3][xBC]) and without errors :)

Звезда _не_ передает строку по ссылке (by reference), как это на первый взгляд может показаться. Так что в данном тексте она лишняя (хотя и не мешает).

  def foo( *a):
      print( type( a))
      print( a)
  
  foo( "Hello")

STDOUT
  
  <class 'tuple'>
  ('Hello',)
  
Смысл такой записи объясняется на сайте:

  http://blog.swlogic.eu/2010/09/30
       /python-parametry-funkcij-napominalka/

(*arg - произвольное количество аргументов, **arg - Произвольное количество именованных аргументов)

----------

3. Настройка консоли Windows и Python 3.x для работы с UTF-8

  1. Command Prompt ->
         Properties or Defaults ->
             Font ->
                 Consolas или Lucida Console

  2. chcp 65001

Python (3.3). В файл C:\Python33\Libs\encodings\aliases.py добавляем строку 'cp65001' : 'utf_8',

  ...
  # utf_8 codec
  'u8'                 : 'utf_8',
  'utf'                : 'utf_8',
  'utf8'               : 'utf_8',
  'utf8_ucs2'          : 'utf_8',
  'utf8_ucs4'          : 'utf_8',
  'cp65001'            : 'utf_8',

  ## uu_codec codec
  #'uu'                 : 'uu_codec',
  ...

Желательно использовать консоль от jpsoft.com

  http://jpsoft.com/downloads/v13/tcclex64.exe

----------

4. Как, с помощью Python 3.x вывести UTF-8 через HTTP минуя региональные настройки сервера ?

   скрипт CGI (common gate interface).

  #!/Python33/python

  import sys
  import os

  def printsig():
      print( format("%c%c%c" % (0xef, 0xbb, 0xbf)))

  def printRAW(Text, afile = 1):
      RAWOut = open(1, 'w', encoding='utf8', closefd=False)

      print(*Text, file=RAWOut)
      RAWOut.flush()
      RAWOut.close()

  printRAW("Content-type: text/html; charset=utf-8\n\n")
  printsig()
  printRAW("<html><head><title>")
  printRAW("Моя первая страница")
  printRAW("</title></head><html>")
  printRAW("<body>Здравствуй, Мир !</body></html>")

----------

5. С чего начать изучение HTML ?

Упрощаем HTML

Если вы еще не знаете языка разметки веб-страниц, не беда, мы будем использовать его узкое подмножество, некое подобие ББ-кода (bulletin board code) в который добавим формы, чтобы на ходу можно было вводить какие-нибудь данные.
 
  <b>жирный</b>                  _жирный_
  <i>курсив</i>                  ~курсив~
  <u>подчеркнутый</u>            _подчеркнутый_

  <a href="http://example.com">пример ссылки</a>
  <img src="http://example.com/KAPTUHKA.png">

  <pre>печатаем моноширинным фонтом</pre>
  <font size="6">меняем размер кегли</font>
  <font color="#FF0000">меняем цвет кегли</font>

  <ul><li>первая строка списка</li><li>вторая..</li></ul>
  <table><tr><td>данные ячейки таблицы</td></tr></table>

  <blockquote><p>сюда можно вставить цитату</p></blockquote>
  <!-- Откомментировать -->

Вспомогательные теги HTML

  <br> переход к новой строке
  <p>  параграф </p>

Простейшая страница

  <html>
    <head>
      <meta charset="utf-8">
      <title>Шапка</title>
    </head>
    <body>Прощай, Мир !</body>
  </html>


Формы

  <form action="" method="get">Можно GET или POST</form>

  <input type="text" name="a1" value=12345>
  <input type="radio" checked value="nice" name="a2">неплохо<br>
  <input type="radio" value="cool" name="a2">годится<br>
  <input type="radio" value="not bad" name="a2">сойдет<br>
  <input type="radio" value="bad" name="a2">плохо<br>
  <input type="radio" value="awful" name="a2">ужас<br>

  <select name="a3">
  <option value="керосин">Пить</option>
  <option value="желудь">Есть</option>
  <option value="метан">Дышать</option>
  </select>

  <input type="checkbox" name="a4" value="C#" checked>C dies<br>
  <input type="checkbox" name="a5" value="Java">Ява<br>
  <input type="checkbox" name="a6" value="Python">Горыныч<br>

  <textarea cols="40" rows="5" name="a7">внутри</textarea><br>

  <input type="submit" name="query" value="Кнопка">

Пример работающей страницы

  <html>
    <head>
      <meta charset="utf-8">
      <title>Шапка</title>
    </head>
    <body>
  <form action="" method="get">

  <input type="text" name="a1" value=12345><br>
  <br>
  <input type="radio" checked value="nice" name="a2">неплохо<br>
  <input type="radio" value="cool" name="a2">годится<br>
  <input type="radio" value="not bad" name="a2">сойдет<br>
  <input type="radio" value="bad" name="a2">плохо<br>
  <input type="radio" value="awful" name="a2">ужас<br>
  <br>
  <select name="a3">
  <option value="керосин">Пить</option>
  <option value="желудь">Есть</option>
  <option value="метан">Дышать</option>
  </select><br>
  <br>
  <input type="checkbox" name="a4" value="C#" checked>C dies<br>
  <input type="checkbox" name="a5" value="Java">Ява<br>
  <input type="checkbox" name="a6" value="Python">Горыныч<br>
  <br>
  <textarea cols="40" rows="5" name="a7">внутри</textarea><br>
  <br>
  <input type="submit" name="query" value="Кнопка">

  </form>
    </body>
  </html>
  
HTML документ похож на матрешек. С той лишь разницей, что каждый из контейнеров не обязательно содержит именно один контейнер поменьше. Контейнер может оказаться пустым, или содержать несколько контейнеров. В свете сказанного, неконтейнерный объект (самая маленькая матрешка) не обязательно последний, и уж тем более это вовсе не обязательно игла Кащеева.
 
Например, пусть наша страница выглядит следующим образом:

  <html>
    <head>
      <meta charset="utf-8">
      <title>матрешки</title>
    </head>
    <body>
      <p>
        <i>
          <b>
            <u>
              <h1>
                подчеркнуто-толстый итальянец
              </h1>
            </u>
          </b>
        </i>
      </p>
    </body>
  </html>

Для непрограммиста смысл написанного примерно следующий.

  1. веб-документ содержит голову (мозг) и тело (блок питания).
  2. голова содержит имя (матрешки) и кодировку (utf-8).
  3. тело содержит параграф текста (<p>)
  4. параграф содержит указание на то, что фонт наклонный (<i>)
  5. наклонный содержит указание на то, что фонт жирный (<b>)
  6. жирный содержит указание на то, что фонт подчеркнутый (<u>)
  7. подчеркнутый содержит указание на то, что фонт крупный (<h1>)
  8. крупный содержит строку текста: подчеркнуто-толстый итальянец

----------

6. При написании программ на Python теряются (возникают, некорректно конвертируются в пробелы) TAB символы, что приводит к странным диагностическим сообщениям об ошибках.

ТАВ символ при работе в Python 3.3

  - Статья о религиозных войнах

  http://programmingpraxis.com/2011/05/06/entab-and-detab/

  - entab.c и detab.c от Франца Фрицше

  http://clc-wiki.net/wiki/K%26R2_solutions:Chapter_5:Exercise_12

  - Среда, убирающая табы редактором - PyScripter
  
----------

7. Как полностью включить некоторый исходный текст на Python 3.x в свою программу ?
   
Пример включения первого файла во второй:

  c:\xampp\cgi-bin\zfa.py

    #!/usr/bin/python3

    def calc( a):
        return str( a)

  c:\xampp\cgi-bin\zfb.py

    import sys
    import zfa

    sys.path.append("c:\\xampp\\cgi-bin")
    print( zfa.calc("Hello"))

----------
    
8. Как писать школьные задания по ООП работая через браузер ?

Будем действовать по Гради Бучу:

  - ввод данных любой сложности в одно текстовое поле.
  - все вычисления при нажатии на единственную кнопку.
  - в случае ошибок во входных данных их можно подредактировать.
  - пишем свой код в файл c:\xampp\cgi-bin\mytask.py изменяя
    подходящим образом тело функции main.

Работающий набор скриптов CGI для решения большинства задач. Пишем только в теле функции calc файла mytask.py.

z.py

  #!/Python33/python

  import sys
  import os

  def printsig():
      print( format("%c%c%c" % (0xef, 0xbb, 0xbf)))

  def printRAW(*Text, afile = 1):
      RAWOut = open(1, 'w', encoding='utf8', closefd=False)

      print(*Text, file=RAWOut)
      print("<br>", file=RAWOut)

      RAWOut.flush()
      RAWOut.close()

  def create_htmltop( astr):
      RAWOut = open(1, 'w', encoding='utf8', closefd=False)
      print("Content-type: text/html; charset=utf-8\n\n",
            file=RAWOut)
      printsig()
      print("<html><head><title>", file=RAWOut)
      print( astr, file=RAWOut)
      print("</title></head><body>", file=RAWOut)

      RAWOut.flush()
      RAWOut.close()

  def create_htmlbottom():
      printRAW("</body></html>")

  def create_form():
      printRAW( "Задай исходные данные :")

      printRAW( "<form action=\"\" method=\"get\">")
      printRAW( "<!-- Здесь вводим данные -->")
      printRAW( "<input type=\"text\" name=\"arg1\" size=41>")
      printRAW( "<br>")
      printRAW( "<input type=\"submit\" name=\"query\" " +
                "value=\"Нажми на кнопку - получишь результат\">")
      printRAW( "</form>")

  def exercise( a):
      print( "Just a dummy test")
      return str( a)

test-00.py

  #!/Python33/python

  import cgi
  import sys
  import z

  def main( a):

  ################## РЕШАЙ СВОЮ ЗАДАЧУ ЗДЕСЬ #####################

      z.printRAW("<h1><b>Песня о зайчиках</b></h1>")
      if a == "": return ""

      sys.path.append("c:\\xampp\\cgi-bin")
      return str( "посчитали, получается " + a)

  ############# НАЧАЛО ОБЛАСТИ ПОМОШНИКА (WIZARD) ################

  def mainforcgi():
      sys.path.append("c:\\xampp\\cgi-bin")
      form = cgi.FieldStorage()

      if "query" in form:
          z.create_htmltop("Ответ")

          if "arg1" not in form:
              z.printRAW("data без птицы <br>")
          else:
              answer = main( form["arg1"].value)
              z.printRAW( answer )

      else:
          z.create_htmltop("Запрос")
          main( "")
          z.create_form()

      z.create_htmlbottom()

  if __name__ == '__main__':
      mainforcgi()

----------

9. Демонстрация формы через CGI.

  #!/Python33/python

  import sys
  import os
  import cgi

  def printsig():
      print( format("%c%c%c" % (0xef, 0xbb, 0xbf)))

  def printRAW(*Text, afile = 1):
      RAWOut = open(1, 'w', encoding='utf8', closefd=False)

      print(*Text, file=RAWOut)
      RAWOut.flush()
      RAWOut.close()

  def create_htmltop( astr):
      printRAW("Content-type: text/html; charset=utf-8\n\n")
      printsig()
      printRAW("<html><head><title>")
      printRAW( astr)
      printRAW("</title></head><body>")

  def create_htmlbottom():
      printRAW("</body></html>")

  def create_form():
      printRAW( "<form action=\"\" method=\"get\">")
      printRAW( "<!-- Здесь вводим данные -->")

      printRAW( "<input type=\"text\" name=\"arg1\" value=12345><br><br>")

      printRAW( "<input type=\"radio\" checked value=\"nice\" name=\"arg2\"> неплохо (5)<br>")
      printRAW( "<input type=\"radio\" value=\"cool\" name=\"arg2\"> годится (4)<br>")
      printRAW( "<input type=\"radio\" value=\"not bad\" name=\"arg2\"> сойдет (3)<br>")
      printRAW( "<input type=\"radio\" value=\"bad\" name=\"arg2\"> плохо (2)<br>")
      printRAW( "<input type=\"radio\" value=\"awful\" name=\"arg2\"> ужас (1)<br><br>")

      printRAW( "<select name=\"arg3\">")
      printRAW( "<option value=\"керосин\">Пить</option>")
      printRAW( "<option value=\"желудь\">Есть</option>")
      printRAW( "<option value=\"метан\">Дышать</option>")
      printRAW( "</select><br><br>")

      printRAW( "<input type=\"checkbox\" name=\"arg4\" value=\"CSharp\" checked>C dies<br>")
      printRAW( "<input type=\"checkbox\" name=\"arg5\" value=\"Java\">Ява (это что язык такой, где нет свопа ?)<br>")
      printRAW( "<input type=\"checkbox\" name=\"arg6\" value=\"Python\">Змей Горыныч<br><br>")

      printRAW( "<textarea cols=\"40\" rows=\"5\" name=\"arg7\">")
      printRAW( "Находимся внутри memo")
      printRAW( "</textarea><br><br>")

      printRAW( "<input type=\"submit\" name=\"query\" value=\"Послать\">")
      printRAW( "</form>")


  if __name__ == "__main__":

      form = cgi.FieldStorage()

      if "query" in form:
          create_htmltop("ANSWER")
          printRAW( form["arg1"].value + "<br><br>")
          printRAW( form["arg2"].value + "<br><br>")
          printRAW( form["arg3"].value + "<br><br>")

          if "arg4" not in form:
              printRAW("arg4 без птицы <br>")
          else:
              printRAW( form["arg4"].value + "<br>")

          if "arg5" not in form:
              printRAW("arg5 без птицы <br>")
          else:
              printRAW( form["arg5"].value + "<br>")

          if "arg6" not in form:
              printRAW("arg6 без птицы <br>")
          else:
              printRAW( form["arg6"].value + "<br>")

          printRAW( "<br>" + form["arg7"].value + "<br><br>")

      else:
          create_htmltop("REQUEST")
          create_form()

      create_htmlbottom()

----------

10. Язык С++ разделен на два уровня существенно отличающихся по сложности. Между ними - прослойка из вакуума. К сложной части можно отнести указатели (*x) ссылки (x&) структуры (struct), классы (class, private, protected, public), пользовательские типы (typedef, user defined types), перегрузку операций и функций (overriding), абстрактные методы, исключения (try, catch, throw), аспекты, подсчет ссылок и умные указатели (reference counting and smart pointers) сборку мусора (например, Hans Boehm garbage collector), и.т.п.
     
Возможно ли писать полноценные программы пользуясь преимущественно простой частью языка ?
    
В статье "Portable Inheritance and Polymorphism in C" за 1997 год, доктор Самэк:
    
  (Miro Samek, www.state-machine.com/resources/samek97.pdf)
    
показал, как классический С 197х годов успешно справляется с концепцией объектного программирования. 

Ответ на этот вопрос таков: да это возможно, но текст программы будет значительно более трудно читаем и более уязвим (ошибки легко прощаются автоматической диагностикой - lint, сообщения компилятора, и визуально хорошо маскируются), чем в языке контролирующим названные и другие понятия. Вспомним хотя-бы как в курсе дигиталки выглядят одна и та же схема, созданная на основе автомата Миля и более простого автомата Мура (часто вторая схема сложнее).     

Потерпевшая крах идея Поля Дирака (физик) о том, что формула верна, если она красива, сменилась подходом в духе Ричарда Фейнмана (физик) - никто не виноват, что (X) сложно для понимания, просто так работает Природа, и что остается, как доверять тем, кто понимает (X) ?

----------------------------------------------------------------

11. Тестовая таблица - толковый словарь Одгена.

  http://www.audioenglish.net/dictionary
  http://ogden.basic-english.org/words.html
  
OGDEN's BASIC ENGLISH Word List - in His Order
  
OPERATIONS - 100 words

come, get, give, go, keep, let, make, put, seem, take, be, do, have, say, see, send, may, will, about, across, after, against, among, at, before, between, by, down, from, in, off, on, over, through, to, under, up, with, as, for, of, till, than, a, the, all, any, every, little, much, no, other, some, such, that, this, I, he, you, who, and, because, but, or, if, though, while, how, when, where, why, again, ever, far, forward, here, near, now, out, still, then, there, together, well, almost, enough, even, not, only, quite, so, very, tomorrow, yesterday, north, south, east, west, please, yes.  

THINGS - 400 General words

account, act, addition, adjustment, advertisement, agreement, air, amount, amusement, animal, answer, apparatus, approval, argument, art, attack, attempt, attention, attraction, authority, back, balance, base, behavior, belief, birth, bit, bite, blood, blow, body, brass, bread, breath, brother, building, burn, burst, business, butter, canvas, care, cause, chalk, chance, change, cloth, coal, color, comfort, committee, company, comparison, competition, condition, connection, control, cook, copper, copy, cork, cotton, cough, country, cover, crack, credit, crime, crush, cry ,current, curve, damage, danger, daughter, day, death, debt, decision, degree, design, desire, destruction, detail, development, digestion, direction, discovery, discussion, disease, disgust, distance, distribution, division, doubt, drink, driving, dust, earth, edge, education, effect, end, error, event, example, exchange, existence, expansion, experience, expert, fact, fall, family, father, fear, feeling, fiction, field, fight, fire, flame, flight, flower, fold, food, force, form, friend, front, fruit, glass, gold, government, grain, grass, grip, group, growth, guide, harbor, harmony, hate, hearing, heat, help, history, hole, hope, hour, humor, ice, idea, impulse, increase, industry, ink, insect, instrument, insurance, interest, invention, iron, jelly, join, journey, judge, jump, kick, kiss, knowledge, land, language, laugh, law, lead, learning, leather, letter, level, lift, light, limit, linen, liquid, list, look, loss, love, machine, man, manager, mark, market, mass, meal, measure, meat, meeting, memory, metal, middle, milk, mind, mine, minute, mist, money, month, morning ,mother, motion, mountain, move, music, name, nation, need, news, night, noise, note, number, observation, offer, oil, operation, opinion, order, organization, ornament, owner, page, pain, paint, paper, part, paste, payment, peace, person, place, plant, play, pleasure, point, poison, polish, porter, position, powder, power, price, print, process, produce, profit, property, prose, protest, pull, punishment, purpose, push, quality, question, rain, range, rate, ray, reaction, reading, reason, record, regret, relation, religion, representative, request, respect, rest, reward, rhythm, rice, river, road, roll, room, rub, rule, run, salt, sand, scale, science, sea, seat, secretary, selection, self, sense, servant, sex, shade, shake, shame, shock, side, sign, silk, silver, sister, size, sky, sleep, slip, slope, smash, smell, smile, smoke, sneeze, snow, soap, society, son, song, sort, sound, soup, space, stage, start, statement, steam, steel, step, stitch, stone, stop, story, stretch, structure, substance, sugar, suggestion, summer, support, surprise, swim, system, talk, taste, tax, teaching, tendency, test, theory, thing, thought, thunder, time, tin, top, touch, trade, transport, trick, trouble, turn, twist, unit, use, value, verse, vessel, view, voice, walk, war, wash, waste, water, wave, wax, way, weather, week, weight, wind, wine, winter, woman, wood, wool, word, work, wound, writing, year.
 
THINGS - 200 Picturable words - picture list

angle, ant, apple, arch, arm, army, baby, bag, ball, band, basin, basket, bath, bed, bee, bell, berry, bird, blade, board, boat, bone, book, boot, bottle, box, boy, brain, brake, branch, brick, bridge, brush, bucket, bulb, button, cake, camera, card, cart, carriage, cat, chain, cheese, chest, chin, church, circle, clock, cloud, coat, collar, comb, cord, cow, cup, curtain, cushion, dog, door, drain, drawer, dress, drop, ear, egg, engine, eye, face, farm, feather, finger, fish, flag, floor, fly, foot, fork, fowl, frame, garden, girl, glove, goat, gun, hair, hammer, hand, hat, head, heart, hook, horn, horse, hospital, house, island, jewel, kettle, key, knee, knife, knot, leaf, leg, library, line, lip, lock, map, match, monkey, moon, mouth, muscle, nail, neck, needle, nerve, net, nose, nut, office, orange, oven, parcel, pen, pencil, picture, pig, pin, pipe, plane, plate, plough/plow, pocket, pot, potato, prison, pump, rail, rat, receipt, ring, rod, roof, root, sail, school, scissors, screw, seed, sheep, shelf, ship, shirt, shoe, skin, skirt, snake, sock, spade, sponge, spoon, spring, square, stamp, star, station, stem, stick, stocking, stomach, store, street, sun, table, tail, thread, throat, thumb, ticket, toe, tongue, tooth, town, train, tray, tree, trousers, umbrella, wall, watch, wheel, whip, whistle, window, wing, wire, worm.
  
QUALITIES - 100 General

able, acid, angry, automatic, beautiful, black, boiling, bright, broken, brown, cheap, chemical, chief, clean, clear, common, complex, conscious, cut, deep, dependent, early, elastic, electric, equal, fat, fertile, first, fixed, flat, free, frequent, full, general, good, great, grey/gray, hanging, happy, hard, healthy, high, hollow, important, kind, like, living, long, male, married, material, medical, military, natural, necessary, new, normal, open, parallel, past, physical, political, poor, possible, present, private, probable, quick, quiet, ready, red, regular, responsible, right, round, same, second, separate, serious, sharp, smooth, sticky, stiff, straight, strong, sudden, sweet, tall, thick, tight, tired, true, violent, waiting, warm, wet, wide, wise, yellow, young.
 
QUALITIES - 50 Opposites

awake, bad, bent, bitter, blue, certain, cold, complete, cruel, dark, dead, dear, delicate, different, dirty, dry, false, feeble, female, foolish, future, green, ill, last, late, left, loose, loud, low, mixed, narrow, old, opposite, public, rough, sad, safe, secret, short, shut, simple, slow, small, soft, solid, special, strange, thin, white, wrong.
 
----------

12. Упрощенное введение в SQL (на основе MySQL)

а) Как получить тестовую базу данных ?

  - Воспользоваться построителем myPHPAdmin (есть в популярном пакете Xampp и включен в набор Portables на моей странице.
    
  - Воспользоваться набором шаблонов по SQL (следует учесть, что свежие версии ANSI SQL [2008, 2011] не являются подмножеством языка SQL большинства производителей (Oracle, Microsoft, IBM, Postgre,.. etc). Общую реализованную часть на уровне семантики, дает теория реляционных баз данных, на уровне синтаксиса не дает никто, однако можно найти очень узкое пересечение множеств диалектов SQL (значительно беднее ANSI SQL, весь DCL [Grant, Revoke], будет исключен).

  - генерировать базу с помощью скрипта:
  
    1. http://www.wbluhm.com/MySQLTut.html
    
      mysql -t wbluhm < myscript.sql
      
    2. Export Northwind Access database to MySQL via ODBC
    
      http://www.geeksengine.com/article
           /export-access-to-mysql.html
      http://www.geeksengine.com/lg.php?i=northwind-sql
      http://www.geeksengine.com/lg.php?i=northwind-pic
    
    3. Employees Sample Database
    
      http://dev.mysql.com/doc/employee/en/index.html
      https://launchpad.net/test-db/employees-db-1/1.0.6
            /+download/employees_db-full-1.0.6.tar.bz2
          
  - Нарисовать схему в ассеss 97 (устаревший коммерческий продукт, возможно abadonware, работает в свободно распространяемой ОС Reactos, "Works in: ReactOS 0.3.13"
  
      http://www.reactos.org/compat/?show=version&id=66) 
      
    и конвертировать бесплатным конвертером в требуемую базу данных:
    
      http://www.ilovefreesoftware.com
           /17/programming/convert-access-to-mysql.html

----------

13. Поваренная книга MySQL

MySQL. Свойства полей и действия.

  CASCADE
  SET NULL
  RESTRICT
  NO ACTION
  SET DEFAULT
  
MySQL. Важные умолчания.

To use the utf8 Unicode character set, issue this statement after connecting to the server:

  SET NAMES 'utf8';

  --                    комментарий
  ;                     разделитель
  InnoDB                движок
  0                     для цифровых полей (кроме AUTOINCREMENT)
  Текущие дата и время  Timestamp
  Первое по списку      Enum
  Пустая строка         текстовые поля
  
  NULL                  Если не указано NOT NULL
  Без индекса           Если не указано KEY или INDEX
  Не уникальное         Если не указано UNIQUE
  
  RESTRICT (NO ACTION)  Если не указано ON UPDATE / ON DELETE
                        Отклонить обновление / удаление из
                        родительской таблицы
                        
  3306                  порт по умолчанию (скрипты)
  

Some basic column types (http://www.wbluhm.com/MySQLTut.html): 

  INTEGER, FLOAT, CHAR, DATE, TIME, BLOB

Пример 0. Одиночная таблица

  CREATE TABLE data (
      intf INT(10) AUTOINCREMENT,
      numericf DECIMAL(8,3)
      floatf FLOAT,
      charf CHAR(64),
      textf VARCHAR(72),
      datetimef TIMESTAMP,
      cyrillictextf VARCHAR(80) CHARSET utf8
  );

*) суффикс f stands for field.
   DECIMAL total 8 places including separator, 1234.567
   
Задача. Написать скрипт заполняющий таблицу (INSERT)

Пример 1. Связка child - parent

  CREATE TABLE parent (
      id INT NOT NULL,
      name VARCHAR(30),
      PRIMARY KEY (id)
  );

  CREATE TABLE child (
      id INT, 
      pid INT,
      name VARCHAR(30),
      INDEX (pid),
      FOREIGN KEY (pid) REFERENCES parent(id)
                        ON DELETE CASCADE
  );
  
Задача. Написать скрипт заполняющий таблицы (INSERT)

Пример 2. Связка son, daughter - mother, father

  CREATE TABLE mother (
      id INT NOT NULL,
      name VARCHAR(30) CHARSET utf8,
      birthday TIMESTAMP,
      height INT(3),
      weight DECIMAL(4.1),
      hair_rgb INT,
      PRIMARY KEY(id)
  ) ENGINE=INNODB;

  CREATE TABLE father (
      id INT NOT NULL,
      name VARCHAR(30) CHARSET utf8,
      birthday TIMESTAMP,
      height INT(3),
      weight DECIMAL(4.1),
      hair_rgb INT,
      PRIMARY KEY (id)
  );

  CREATE TABLE child (
      id INT NOT NULL AUTO_INCREMENT,
      pid0 INT NOT NULL,
      pid1 INT NOT NULL,
      name VARCHAR(30) CHARSET utf8,
      birthday TIMESTAMP,
      height DECIMAL(4.1),
      weight FLOAT,
      hair_rgb INT,
      gender ENUM('M','F') NOT NULL, 
      PRIMARY KEY (id),
      INDEX (pid0),
      FOREIGN KEY (pid0)
          REFERENCES mother(id)
          ON UPDATE CASCADE ON DELETE RESTRICT,
      INDEX (pid1),
      FOREIGN KEY (pid1)
          REFERENCES customer(id)
          ON UPDATE CASCADE ON DELETE RESTRICT,
  );
  
Задача. Заполнить таблицы. Найти всех братьев и сестер.

----------

14. Питон и MySQL. Поваренная книга (Cookbook).

Ссылки:

  http://stackoverflow.com/questions/372885/how-do-i-connect-to-a-mysql-database-in-python
  http://kuutorvaja.eenet.ee/wiki/Python
  http://dev.mysql.com/doc/connector-python/en/connector-python-installation-src-windows.html
       
       
Пререквизиты:

Установить Питон 3.2.3
  
  http://www.python.org/ftp/python/3.2.3/python-3.2.3.msi

Установить коннектор

  http://dev.mysql.com/get/Downloads/Connector-Python/mysql-connector-python-1.0.7-py3.2.msi/from/http://cdn.mysql.com/
       
Установить PyScriptor

  http://pyscripter.googlecode.com/files/PyScripter-v2.5.3-Setup.exe
  
Тест (в базе test создана таблица testo с полем name типа varchar(30). Занесена одна запись 'one':

  import mysql.connector

  config = {
    'user': 'root',
    'password': '',
    'host': '127.0.0.1',
    'database': 'test',
    'raise_on_warnings': True
  }

  cnx = mysql.connector.connect(**config)
  strSQL  = "SELECT name FROM test.testo;"
  cur = cnx.cursor()
  r=cur.execute(strSQL)
  for name in cur:
      print(name)
  cur.close()                             

----------

15. Как исполнить Python скрипт из диалогового окна Python ?

  http://www.daniweb.com/software-development/python/threads/31082/execute-python-script-from-shellinteractive-window

  http://forums.arcgis.com/threads/10156-run-python-script-in-python-window

Создаем тестовый скрипт args.py

  import sys

  for x in sys.argv:
      print x

В диалоговом окне:

  >>> import sys
  >>> sys.argv = ['1', '2', '3']
  >>> execfile('args.py')
  
Или  
  
  >>> import os
  >>> os.system("args.py A B C D")
  
----------

16. Как установить MySQL Connector в Python, если у меня не такая версия / другая операционная система ?
    
  http://dev.mysql.com/doc/connector-python/en
       /connector-python-installation-src-windows.html
       
Качаем zip версию:

  http://dev.mysql.com/downloads/connector/python/#downloads
  
  Select Platform - Platform Independent

Platform Independent (Python), ZIP Archive (mysql-connector-python-1.0.7.zip)

  http://dev.mysql.com/get/Downloads/Connector-Python/mysql-connector-python-1.0.7.zip/from/http://cdn.mysql.com/
       
Распаковываем во временное хранилище. Заходим в папку и пускаем скрипт.

  shell> cd C:\tmp\mysql-connector\
  shell> python setup.py install

Запускаем mysql сервер (в базе test создана таблица testo с полем name типа varchar(30). Занесена одна запись 'one').

m.py:

  import mysql.connector

  config = {
    'user': 'root',
    'password': '',
    'host': '127.0.0.1',
    'database': 'test',
    'raise_on_warnings': True,
  }

  cnx = mysql.connector.connect(**config)
  strSQL  = "SELECT name FROM test.testo;"
  cur = cnx.cursor()
  r=cur.execute(strSQL)
  for name in cur:
      print(name)
  cur.close()                             

Запускаем тест m.py:

  shell> python m.py
  ('one',)
  
----------

17. Как "открыть" порты виртуальной машины VirtualBox за NAT?

    Используем возможность форварда портов для конкретного NIC.
    
    NB! На портах хоста 22 3306 не должно быть демонов.
    
  Oracle VirtualBox Manager -> 
    MyVM - Settings -> 
      Network -> 
        Adapter1
        
    [ Port Forwarding ]
  
NIC:

  General        Network
  System         Adapter 1  Adapter 2  Adapter 3  Adapter 4
  Display        [v] Enable Network Adapter
  Storage              Attached to: [ NAT               |v]
  Audio                Name
  Network            v Advanced
  Serial Ports       Adapter Type: PCnet-FAST III (Am79C973)
  USB            Promiscuous Mode: Deny
  Shared Folders      MAC Address: XXXXXXXXXXXX
                                   [v] Cable connected
                                   [ Port Forwarding ]
        Port Forwarding Rules
  Name   Protocol  Host IP  Host Port  Guest IP  Guest Port  <+>
  Rule 1 TCP                22                   22          <->
  Rule 2 TCP                3306                3306
    
----------

18. Как увидеть MySQL-сервер, запущенный на виртуальной машине VirtualBox с Windows хоста ?

  root@bootstrap:~# ifconfig
  eth0   Link encap:Ethernet  HWaddr 08:00:27:60:f1:3c
         inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
         inet6 addr: fe80::a00:27ff:fe60:f13c/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:30272 errors:10 dropped:0 overruns:0 frame:0
         TX packets:14418 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000
         RX bytes:24920315 (23.7 MiB)  TX bytes:803391 (784.5 KiB)
         Interrupt:10 Base address:0xd020

  lo     Link encap:Local Loopback
         inet addr:127.0.0.1  Mask:255.0.0.0
         inet6 addr: ::1/128 Scope:Host
         UP LOOPBACK RUNNING  MTU:16436  Metric:1
         RX packets:4 errors:0 dropped:0 overruns:0 frame:0
         TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0
         RX bytes:168 (168.0 B)  TX bytes:168 (168.0 B)
    
  mysql> use mysql;
  Database changed
  mysql> GRANT ALL PRIVILEGES ON *.* TO 'virtu'@'10.0.2.15' 
         WITH GRANT OPTION;
  mysql> GRANT ALL PRIVILEGES ON *.* TO 'virtu'@'10.0.2.2' 
         WITH GRANT OPTION;
  mysql> UPDATE user SET password=PASSWORD("virtu") 
         WHERE User='virtu';

  mysql> SELECT host, user, password FROM user;
  +-----------+------------------+-----------------------+
  | host      | user             | password              |
  +-----------+------------------+-----------------------+
  | localhost | root             | *81F5E21E35407D884A6C |
  | bootstrap | root             | *81F5E21E35407D884A6C |
  | 127.0.0.1 | root             | *81F5E21E35407D884A6C |
  | localhost | debian-sys-maint | *7D8A625990504D93F163 |
  | 10.0.2.15 | virtu            | *F38F719BC6C498DCC32E |
  | 10.0.2.2  | virtu            | *F38F719BC6C498DCC32E | ..  <-- *
  +-----------+------------------+-----------------------+ 
  6 rows in set (0.00 sec)

  mysql>\q
  bye

*) ЭТО ВИРТУАЛЬНЫЙ GATEWAY, ТАКОЙ АДРЕС ВИДИТ ВИРТУАЛЬНЫЙ JEOS 
   КОГДА ИДЕТ КОННЕКТ С ПОРТА 3306 В ХОСТЕ (СДЕЛАН ФОРВАРД С
   3306 HOST НА 3306 GUEST)

  # vi /etc/mysql/my.cnf

  skip-external-locking
  #
  # Instead of skip-networking the default is now to listen only on
  # localhost which is more compatible and is not less secure.
  # bind-address          = 127.0.0.1 <===== ЗАКОММЕНТИРОВАТЬ **)
  #
  # * Fine Tuning
  #
  key_buffer              = 16M
  max_allowed_packet      = 16M

  :wq

  **) смысл в том, что если строка не инициализируется из conf-
      файла то там 32 бита нулей - IP 0.0.0.0 (In the Internet 
      Protocol version 4 the address 0.0.0.0 is a non-routable 
      meta-address used to designate an invalid, unknown or non 
      applicable target: http://en.wikipedia.org/wiki/0.0.0.0)

  # service mysql restart
  Stopping MySQL database server: mysqld.
  Starting MySQL database server: mysqld.

теперь на консоли хоста (виндоуз 8)

  mysql.exe -h127.0.0.1 -uvirtu -pvirtu
  
  Welcome to the MySQL monitor.  Commands end with ; or \g.
  Your MySQL connection id is 38
  Server version: 5.1.63-0+squeeze1 (Debian)

  Copyright (c) 2000, 2011, Oracle and/or its affiliates. All 
  rights reserved.

  Oracle is a registered trademark of Oracle Corporation and/or 
  its affiliates. Other names may be trademarks of their 
  respective owners.

  Type 'help;' or '\h' for help. Type '\c' to clear the current 
  input statement.

  mysql>
    
----------

19. Какова схема БД employees (п 12.3) ?

Employees sample database (MySQL).

  https://launchpad.net/test-db/employees-db-1/1.0.6/+download/employees_db-full-1.0.6.tar.bz2

      +------------------------------+-+
      | employees                    | |
      +------------------------------+-+
      | ^p emp_no INT                |n|-<-
      | <> birth_date DATE           |n|   |
      | <> first_name VARCHAR(14)    |n|   |
      | <> last_name VARCHAR(16)     |n|   |
      | <> gender ENUM('M','F')      |n|   |
      | <> hire_date DATE            |n|   |
      +------------------------------+-+   |
                                           |
      +------------------------------+-+   |
      | departments                  | |   ^
      +------------------------------+-+   |
   ->-| ^p  dept_no CHAR(4)          |n|   |
  |   | <>u dept_name VARCHAR(40)    |n|   |
  |   +------------------------------+-+   |
  |                                        |
  |   +------------------------------+-+   |
  |   | dept_manager                 | |   |
  |   +------------------------------+-+   |
  +-<-| ^f  dept_no CHAR(4)          |n|   |
  |   | ^f  emp_no INT               |n|->-+
  |   | <>  from_date DATE           |n|   |
  |   | <>  to_date DATE             |n|   |
  |   +------------------------------+-+   |
  |   | ^p  (emp_no, dept_no)          |   |
  |   +------------------------------+-+   ^
  |                                        |
  |   +------------------------------+-+   |
  |   | dept_emp                     | |   |
  |   +------------------------------+-+   |
  |   | ^f  emp_no INT               |n|->-+
   -<-| ^f  dept_no CHAR(4)          |n|   |
      | <>  from_date DATE           |n|   |
      | <>  to_date DATE             |n|   |
      +------------------------------+-+   |
      | ^p (emp_no, dept_no)           |   |
      +------------------------------+-+   ^
                                           |
      +------------------------------+-+   |
      | titles                       | |   |
      +------------------------------+-+   |
      | ^f emp_no INT                |n|->-+
      | ^^ title VARCHAR(50)         |n|   |
      | ^^ from_date DATE            |n|   |
      | <> to_date DATE              |n|   |
      +------------------------------+-+   |
      | ^p (emp_no, title, from_date)  |   |
      +------------------------------+-+   ^
                                           |
      +------------------------------+-+   |
      | salaries                     | |   |
      +------------------------------+-+   |
      | ^  emp_no INT                |n|->-
      | <> salary INT                |n|
      | ^^ from_date DATE            |n|
      | <> to_date DATE              |n|
      +------------------------------+-+
      | ^p (emp_no, from_date)         |
      +------------------------------+-+

Legend: ^p - primary key, ^f - foreign key, ^^ - participates in primary key, <> not indexed, n not NULL.

----------

20. Что почитать о данном предмете ?

  http://www.stihi-rus.ru/skazki/skazkarus17.htm
  http://public-library.narod.ru/Pushkin.Alexander/rybak.html
