These are some notes on how to get the free Visual C++ Express version to build Win32 programs and use the FOX Toolkit for GUIs. Note: This is work in progress.
1) Visual C++ Express (or get the ISO image)
2) Windows Platform SDK (or get the ISO image)
3) Follow the instructions: Using Visual C++ 2005 Express Edition with the Microsoft Platform SDK
4) FOX Toolkit (tested with 1.6)
5) Open the project in fox\windows\vcpp\foxdll and compile a release build. The result will be put in fox\lib
6) Open your solution, go to the property tab, right-click Debug and add a new property sheet.
7) Follow the instructions on Windows Notes accordingly:
C/C++: Additional include directory: $(ProjectDir)..\lib\fox\include
C/C++: Preprocessor definitions: FOXDLL
Linker: Additional library directories: $(ProjectDir)..\lib\fox\lib
Linker: Additional dependencies: FOXDLL-1.6.lib
Linker: Entry point: mainCRTStartup
Build events / Post-Build Event: if not exist $(OutDir)\FOXDLL-1.6.dll copy
$(ProjectDir)..\lib\fox\lib\FOXDLL-1.6.dll $(OutDir)
This is how one redefines the table name and primary key column:
class MyTableName < ActiveRecord::Base
set_table_name 'my_other_table_name'
set_primary_key 'MyPrimaryKeyColumn'
There are two things that need to be done when you want to (or, in my case, have to) use an ISO character set throughout your application (i.e. database and web pages).
1) Set the character encoding to ISO-8859-1 in the HTTP header. From application.rb:
before_filter :set_charset
def set_charset
@headers["Content-Type"] = "text/html; charset=ISO-8859-1"
end
(See “Foreign language” characters below)
2) Convert data sent via XMLHTTPREQUEST from UTF-8 to ISO-8859-1
Get the iconv library (instructions) (might already be included with Ruby 1.8.4).
Create a new file charset_conversion.rb in the helpers/ directory:
require 'iconv'
class Hash
def iconv!(to,from)
iconv = Iconv.new(to,from)
perform_iconv!(iconv)
iconv.close
end
def perform_iconv!(iconv)
each_pair do |key,value|
case value
when String
self[key] = iconv.iconv(value)
when Hash
value.perform_iconv!(iconv)
end
end
end
end
Include this file in application_helper.rb:
require 'charset_conversion'
In the action that receives the serialized XML data, add a call to iconv! before using the data:
def update
params.iconv!("iso-8859-1", "utf-8")
..
This is essentially my interpretation of the notes from here: Ajax and Character Sets
The SQL Server adapter uses the Time class by default to represent datetime columns. This leads to problems when you want to represent dates before the year 1970: You would just get nil values.
I quickly found a similar solution (link lost) (scroll to 11/17/05) on the net and implemented the fix like this in my application_helper.rb file:
# Make the SQL Server Adapter work with dates before 1970
module ActiveRecord
module ConnectionAdapters
class ColumnWithIdentity
def cast_to_time(value)
return value if value.is_a?(Time)
time_array = ParseDate.parsedate(value)
time_array[0] ||= 2000
time_array[1] ||= 1
time_array[2] ||= 1
begin
Time.send(Base.default_timezone, *time_array)
rescue
DateTime.new(time_array[0], time_array[1],
time_array[2], time_array[3],time_array[4],
time_array[5]) rescue nil
end
end
end #class ColumnWithIdentity
end #module ConnectionAdapters
end #module ActiveRecord
This overwrites the standard function of the SQL Server Adapter and returns a DateTime if a normal Time is not enough for the given data.
I posted the official announcement of the new Neverwinter Nights Extender for NWN2 today. It’s name will be NWNX4.
The main work will be on the program itself, but the website and the documentation section will get an overhaul as well.
To my pleasure, numerous people have already offered to help !
The application I am working on is in german, so Rails needs to display Umlauts correctly (e.g. ä,ö,ü). At least with WebBrick, I was not able to convince it to send pages in ISO-8859-1, it always defaulted to UTF-8 which the Browsers would not interprete correctly.
My temporary solution is to overwrite the default codepage like this:
class ApplicationController < ActionController::Base
before_filter :set_charset
def set_charset
@headers["Content-Type"] = "text/html; charset=ISO-8859-1"
end
end
Using that, the Umlauts appear correctly in all Browsers. Oh well, it works for now…
Both the standard scaffold generator and my modified version of the AJAX scaffold support paging, i.e. displaying 10 items per page and allowing the user to flip through the pages with the usual first, last, next, previous links.
It does not work out of the box with SQL Server, unfortunately. You have to tell the driver explicitely that it should order the table by your primary key (id). Example:
@header_pages, @headers =
paginate :headers, :per_page => 10,
:order => ’id asc’
This page include almost everything you need to get started with SQL Server (2005): HowtoConnectToMicrosoftSQLServer
Basically, you have to copy the file ADO.rb from the latest Ruby-DBI source distribution to the directory
ruby\\lib\\ruby\\site_ruby\\1.8\\DBD\\ADO
and then set up your database.yml like this:
development:
adapter: sqlserver
database: mydb
host: myhost
username: myuser
password: mypassword