CategoryEnglish

Do you need to change a filename before sending it ?

Rails action to send binary data

I have one old application where the attachment is store as an id in the filesystem. The customer wants to have the attachment with the right name. So I have made this small action which accepts the id of the requested object and send the file data.


  def send_bios
    redirect_to :action => 'bios' if params[:id].blank?
    @artist = Artist.find(params[:id]);
    contents = File.open(@artist.bios_path,"rb") {|io| io.read}
    send_data contents, :filename => "#{@artist.name}.pdf", :type => "application/pdf", :disposition => 'attachment'
  end

Debian/Ubunto notes

How to save and installed packges

http://www.cyberciti.biz/tips/linux-get-list-installed-software-reinstallation-restore.html

$ dpkg --get-selections > /backup/installed-software.log

# dpkg --set-selections < /backup/installed-software.log

Now your list is imported use dselect or other tools to install the package.
# dselect

Select ‘i‘ for install the software.

Upgrade Debian

http://www.cyberciti.biz/tips/upgrading-debian-sarga-3-to-etch-4.html

Commands

cat /etc/debian_version

Fix the W: There are no public key available for the following key IDs:

4D270D06F42584E6

apt-key update

gpg –keyserver wwwkeys.eu.pgp.net –recv-keys XXXXXXXXXXXXXXXX
apt-key add /root/.gnupg/pubring.gpg
apt-get update

debian tracd initscript

Trac startup script.

Continue reading

Bulgarian stopwords

I want to start such a list so I will become maintain a Bulgarian list here which I will use for my website www.cenite.com

As a base source I will use this list here

Please submit your suggestions.

Note: I have removed a lot of words from the starting list.

 Continue reading

Javascript in the window.name

Wow. What a nice idea.

http://code.google.com/p/quipt/

Note: if you want to make the test.html to work checkout and test on http://… it is some beta but it works great only in Firefox

Random images helper for Rails

Here is how to make random images generation for your website.

First you must put your images in a folder /public/images/random_images or what ever.

Second you put images there and mark the filenames with a prefix, which image to which section will be visible on.

index_bottom_1.jpg -> for the index page on the bottom :)

index_bottom_2.jpg -> for the index page on the bottom

featured_art_1.jpg -> some panel.

featured_art_2.jpg -> some panel.

and so on…

Paste this method in your base controller. This method will be called to make list for a specific image folder and “filter” the images that are supposed to be showed in the different regions in @variables.

  before_filter :init_random_images
  protected # :) be carefull for this if you copy paste
  def init_random_images
    # collect some static images
    web_root = "images/imagestorage/random_images"

    all_images = Dir["#{RAILS_ROOT}/public/#{web_root}/*.jpg"]

    @random_head_images = []
    @random_indexbtm = []
    @random_featured = []
    @random_sales = []
    @random_services = []
    @random_framing = []
    @random_artistcollection = []
    all_images.each do |f|
      if File.stat(f).file?
        @random_head_images << ("/#{web_root}/" + File.basename(f)) if f =~ /head_images_/
        @random_indexbtm << ("/#{web_root}/" + File.basename(f)) if f =~ /indexbtm_/
        @random_featured << ("/#{web_root}/" + File.basename(f)) if f =~ /featured_/
        @random_sales << ("/#{web_root}/" + File.basename(f)) if f =~ /sales_/
        @random_services << ("/#{web_root}/" + File.basename(f)) if f =~ /services_/
        @random_framing << ("/#{web_root}/" + File.basename(f)) if f =~ /framing_/
        @random_artistcollection << ("/#{web_root}/" + File.basename(f)) if f =~ /artistcollection_/
      end
    end

Then paste this as a helper or in the base controller, to use it in your views. The method will give you from the images array, count number of images.

  helper_method :get_random_image
  def get_random_image(images, count)
    requested_images = []
    images_copy = images.clone
    [images_copy.size, count].min.times do
      index = rand(images_copy.size)
      requested_images << images_copy[index]
      images_copy.delete_at(index)
    end
    requested_images.flatten.compact
  end

here is an example how to use it.

<div id="static_logo" style="background:url(<%= get_random_image(@random_sales, 1) %>) no-repeat scroll left top;">
 

Future optimization

Put some caching, not to make

Dir["#{RAILS_ROOT}/public/#{web_root}/*.jpg"]
 

on every request.

10x Bl8cki to the nice code optimizations :)

Opera beautifully engineered…for my desktop

I was nice surprised when I tried Opera browser for PC after aprx. one year Firefox usage.

Zooming is faster and smarter than in every browser that I have used.

Firefox boot like MS Windows, and is almost stable like it.

Opera is faaaaast. Gmail is fast. And my work is going fast because all webpages are opening fast.

What? Why you need faster browser if it doesnt support right CSS, DOM, or what ever?

Who said this ? Check the tests for CSS2 and see that Opera and FF are failing apx on the same tests on the same places I am not sure even who is the winner. Check also this those acid tests also

Does someone has tried the dragonfly plugin – analog for the firefox firebug ?

I must agree that the Opera release 9.50 (Build 10063) has some strange javascript support. It happends that when I paste an URL for RSS in Opera, the current page disapears, maybe this is a feature and not a bug :)

Also I am very very disapointed that I should write this article in FF because the build-in WordPress editordoesnt work for Opera :)

Copy checkboxes from one form to another with Prototype

I have a case where the user must select items from a basket and use them with different forms.

Example:
Some items in this form
  • Item:
  • Item:
  • Item:
  • Item:
Another form here
(I will create here hidden fields from the the checkboxes in the first box)

I will show you how to use the checked boxes from the first form with the submit action in the second form

It would be easy if the form could be one – less support.

I am starting with those two forms

  • Helper form – Form with checkboxes
  • Action form – the form that will do the real action based on the selected items in the helper form

Here is how it looks the helper form. All the checkboxes are tagged with the class=”selectable”. Here is rails example but you can implement it pure html.

<%= check_box_tag('selected[]', true, image.selected?, :class=>"selectable") %>

Then we can select all the checkboxes with this javascript.

var make_to_hidden = $$('input.selectable');

Put on your action form an id so we can access it easy in this case:

<form id="mail_form" onsubmit="import_selected_basket()"> ... </form>

Lets add those checkboxes from the first form to the real action form with this javascript function

      function import_selected_basket() {
          var make_to_hidden = $$('input.selectable');
          make_to_hidden.each(function(item) {
              if (item.checked) {
                var new_item = new Element('input', { 'type': 'hidden', name: item.name, value: item.value })
                $('mail_form').appendChild(new_item)
              }
          });

Only get, head, post, put, and delete requests are allowed.

I got this error when I have to upgrade one old project from rails 1.2.5 to rails 2.1 (the problem is not in rails)

ActionController::MethodNotAllowed

Only get, head, post, put, and delete requests are allowed.

The exception:

ActionController::MethodNotAllowed (Only get, head, post, put, and delete requests are allowed.):
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/routing/recognition_optimisation.rb:65:in `recognize_path'
    /usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_controller/routing/route_set.rb:384:in `recognize'

I got this error only when I access URL’s with param like

http://127.0.0.1:3000/dod/images/show_big_image/1639

I found that the problem was in the :id because without the :id the method was called correctly

This means that there is something with the routes.

Not working routes.rb: ….

  map.connect '', :controller => 'auth'

  # Install the default route as the lowest priority.
  map.connect ':controller/:action/:id'
  map.connect ':controller/:action/:sort_key/:sort_order'

it will work if you swap the last two lines….

  map.connect '', :controller => 'auth'

  # Install the default route as the lowest priority.
  map.connect ':controller/:action/:sort_key/:sort_order'
  map.connect ':controller/:action/:id'

It seems that it does reading the comments in the routes.rb is usefull. There is written:

# Install the default route as the lowest priority.

This error also occurs if you haven't restart your webserver. I know that there is no need to restart it but its true, try restarting and check.

Gentoo Cheatsheet

Java install

ls /usr/portage/dev-java/sun-jdk/
emerge -av =dev-java/sun-jdk-1.5.0.13
java-config -L
java-config -S 1
/usr/sbin/env-update && source /etc/profile

Emerge and Equery

Taken from here

emerge brings in new packages. equery looks at the package database.

update repository:
emerge –sync
install package with query
emrge -av sun-jdk
start with this software
emerge links wget htop
emerge …
manipulate package database
emerge -NDtu world
–update packages and packages that depend on updated packages (–deep) in the world list. Give output in –tree format. Consider packages changed if their USE flags have changed (–newuse, -N) Add –pretend (-p) to just see what it will do first.
emerge –skipfirst …
skip first pkg on a rebuild; very useful if something doesn’t work
equery …
query package database
equary belongs
who owns these files?
equery list
list packages on system

Maintenance

Taken from here

Do this whenever you want a steaming pile of fresh packages.

# emerge --sync
# emerge --update system
# etc-update
if necessary
# emerge --update world

I have seen Meddle to do it this way

emerge –newuse –deep –update world
emerge –ask –verbose coreutils
emerge –resume

Fix the mktemp / coreutils block in Gentoo

Looks like mktemp is now provided by coreutils. No wonder. This block has been bugging me (read: I’ve been ignoring it) for months.

To fix just unmerge mktemp and update coreutils.

Update: Same for the setarch / util-linux block should you come across it. Unmerge setarch.

© 2024 Gudasoft

Theme by Anders NorénUp ↑