Dumping and importing from/to MySQL in an UTF-8 safe way
In a nutshell: to avoid your shell character set from messing with imports, use -r to export and SOURCE when importing.
Dumping safely
# Do not do this, since it might screw up encoding
mysqldump -uroot -p database > utf8.dump # this is bad
Better do:
mysqldump -uroot -p database -r utf8.dump
Note that when your MySQL server is not set to UTF-8 you need to do mysqldump --default-character-set=latin1 (!) to get a correctly e...
UTF-8ify an existing MySQL database
First do
ALTER DATABASE database_name CHARACTER SET "utf8";
ALTER DATABASE database_name COLLATE "utf8_unicode_ci";
After that, for each table:
ALTER TABLE table_name DEFAULT CHARACTER SET "utf8" COLLATE "utf8_unicode_ci";
This just changes the default character set / collation for each table. To convert them, you need:
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
jeremyevans's home_run at master - GitHub
home_run is an implementation of ruby’s Date/DateTime classes in C, with much better performance (20-200x) than the version in the standard library, while being almost completely compatible.
Using CSS3PIE cross-domain
Currently not possible as the linked .htc file contains JavaScript which is not explicitly called.
The developers are working on a pure JavaScript solution which will have some downsides but work across different domains.
Error installing the raspell gem
When you get this while installing the raspell gem:
ERROR: Error installing raspell:
ERROR: Failed to build gem native extension.
You need some libraries:
sudo apt-get install libaspell-dev
Aspell Error - No word lists can be found for the language XY
When you get this error:
No word lists can be found for the language "de".
An aspell dictionary is missing. Install it with
sudo apt-get install aspell-de
Submit a form with Prototype
For example, to send a form and populate a preview div with the response.
$('content_form').request({
parameters: { 'preview': "1" }, // overrides parameters
onComplete: function(transport){
$('previewContent').update(transport.responseText);
}
});
Autofocus a form field with HTML5 or jQuery
In Webkit you can use the HTML5-attribute autofocus:
= form.text_field :title, :autofocus => 'autofocus'
Here is a jQuery fallback for browsers that don't speak HTML5:
var Autofocus = {
supported: function() {
return 'autofocus' in document.createElement('input');
},
fake: function() {
$('[autofocus]').focus();
},
extend: function() {
Autofocus.supported() || Autofocus.fake();
}
};
$(Autofocus.extend);
Fixing Webrat after following an external link
When a Cucumber feature leaves your page through an external Link, Webrat has problems like "Could not find field: "E-mail" (Webrat::NotFoundError)" using your page afterwards. It will also have trouble following redirects.
Fix it with this step:
Given /^I am back on my page$/ do
webrat_session.header("Host", "www.example.com")
end
MySQL replication how-to
This may be awkward to set up, but will work once you're done.
Fun facts:
- In case of a connection loss the slave will try to reconnect to the master server and resume replication for the next 24 hours
- If you want to use your slave as a "real" MySQL server, you basically need to switch off replication (
STOP SLAVE; RESET SLAVE;and reset your my.cnf) and restart the MySQL daemon.
Master server configuration
-
- Create replication user
- In the MySQL shell:
CREATE USER 'replicator'@'%' IDENTI...
MySQL Server and UTF-8 Defaults
Unless all MySQL server defaults are set to UTF-8, mysqldump encodes UTF-8 characters incorrectly and only outputs correct UTF-8 when you switch to Latin 1 (!). Also you need to setup charset and collation manually for each new database.
To prevent this, make sure your /etc/mysql/my.cnf looks like this:
[mysqld]
default-character-set = utf8mb4
collation-server = utf8mb4_unicode_ci
[mysql]
default-character-set=utf8mb4
After that do
sudo /etc/init.d/mysql restart
Convert a Subversion repository to Git
- To retain all branches you can try the
svn2gittool. However, this tool has some bugs. - To only import the trunk (with complete history):
git svn clone http://host/svn/... - Create a .gitignore after the conversion.
- Turn the folder into a git repository as described here.
Branching and merging in Subversion
- Create a branch:
svn copy https://dev.makandra.de/svn/filepanic/trunk https://dev.makandra.de/svn/filepanic/branches/$ticketnumber_shortdesc - Don't just copy the folder into your working copy and try a commit without a merge because Subversion will die on you.
- Work on
./branches/$ticketnumber_shortdesc. - If you work on a long story it is useful to sometimes merge the trunk into your branch so there will be less pain later:
svn merge https://dev.makandra.de/svn/filepanic/trunk ./branches/$ticketnumber_shortdesc. - When you're done...
Common Screen Resolutions
Optimize for
- Notebook: 1280x800 (many consumer notebooks)
- Netbook: 1024x600
- Desktop: 1440x900 / 1680x1050 (19"- und 22"-Widescreen-TFTs)
- iPad: 768x1024
Notebooks
- 1280x800 (13.3"-15.4", 16:10)
- 1440x900 (15.4", 16:10)
- 1680x1050 (15.4"+, 16:10)
- older notebooks cf. Desktops (1024, 1280, ...)
Desktops
- 1440x900 (19", 16:10)
- 1680x1050 (22", 16:10)
- 1920x1080 (23", 16:9)
- 1920x1200 (24", 16:10)
- 1024x768 (17", 4:3)
- 1280x1024 (19", 5:4)
- 1600x1200 (21", 4:3)
Netbooks
- 720x480 (7")
- 1024x600 (8.9")
...
Load all models into an Array
Dir.glob(File.join RAILS_ROOT, 'app', 'models', '*.rb').collect{ |path| path[/.+\/(.+).rb/,1] }.collect(&:camelize).collect(&:constantize)
Cucumber Webrat steps
Most of these will not work in newer projects because these use the Capybara/Rack::Test combo in lieu of Webrat.
Find input fields
Then /^there should be a "([^"]+)" field$/ do |name|
lambda { webrat.current_scope.send(:locate_field, name) }.should_not raise_error(Webrat::NotFoundError)
end
Then /^there should be no "([^"]+)" field$/ do |name|
lambda { webrat.current_scope.send(:locate_field, name) }.should raise_error(Webrat::NotFoundError)
end
Find html content
Then /^I should see "([^\"]*)...
Reprocess only missing images with Paperclip
When a paperclip attachment gains a new style and you have many attachments, reprocessing can take ages. This is because all styles are being recomputed.
To create only missing images, patch Paperclip like this in your script that does the reprocessing:
Paperclip <2.3.2
class Paperclip::Attachment
private
def post_process_styles_with_extreme_lazyness
@old_styles = @styles
@styles = @styles.reject do |name, _|
exists?(name)
end
post_process_styles_without_extreme_...
Convert colorspace of images attached with Paperclip
has_attached_file(
:avatar,
:styles => { :large => "300x300", :small => "100x100" },
:convert_options => { all => "-colorspace RGB" }
)
Reprocess Paperclip attachments in one line
script/runner -e development 'Article.all.each { |a| a.image.reprocess! if a.image.exists? }; "done"'
Release gem; Deploy gem; Update a gem created with Jeweler
Until May 2011 our gems have been created with Jeweler, which is a helper library to package code into a gem. You know a gem was cut with Jeweler if you see the word jeweler in a gem project's Rakefile.
This note describes how to update a gem that was cut using Jeweler. Note that this can be traumatic the first time. It would be great to have an easier workflow for this. Jeweler is deprecated these days because you can
**now [cut gems more easily using Bundler](https://makandracards.com/makandra/1229-updat...
Aggregated RSpec/Cucumber test coverage with RCov
With defaults, RCov doesn't work the way you how you would like it to. To create a nice test coverage report, copy the attached file to lib/tasks/rcov.rake. After that rake rcov:all will run all RSpec examples and Cucumber features. The report will be written RAILS_ROOT/coverage/index.html.
Here is what the task does in detail:
- Generates aggregated coverage of both RSpec and Cucumber
- Works with Rails 2 and Rails 3
- Reports for
app/**/*.rband nothing else - If called with an environment variable
IGNORE_SHARED_TRAITS=trueit ...