2016年11月29日 星期二

MAC OS printing to a color Ricoh MP C3300

http://flying-geek.blogspot.tw/2016/05/getting-os-x-1011-el-capitan-printing.html


Solution:

foomatic-rip --version
foomatic rip version 4.0.6.230
"man foomatic-rip" for help.
gs -v
GPL Ghostscript 9.19 (2016-03-23)
Copyright (C) 2016 Artifex Software, Inc.  All rights reserved.
cupsctl WebInterface=yes

  • Browse to http://localhost:631
    • Under “CUPS for Administrators” click “Adding Printers and Classes”
    • Under “Printers” click the button [Add Printer]
    • If prompted for a username and password, login as a user with administrative privileges on the Mac (e.g., "bob" / "password4bob")
    • In my case, I selected “LPD/LPR Host or Printer” and clicked the button [Continue]
    • In my case, the printer is on IP address 192.168.1.41, and I used the ‘default’ (lp) queue: lpd://192.168.1.41/lp
    • I gave the printer a legal name (“Ricoh_MP_C2503_pxlmono”)
    • I configured it as a Make: “Generic” and Model: “Generic PCL 6/PCL XL Printer Foomatic/pxlcolor (en)” printer.
    • On the Defaults screen, I changed Printout Mode to “Normal”
  • Run Matt Broughton’s excellent yosemite_foomatic_paths.command (available: https://gist.github.com/coffeesam/578d7b6beef0fbda975a or http://tinyurl.com/oepe5go [yosemite_foomatic_paths.command.zip]), which will come up in a Terminal.app window (if prompted for a password, if you’re an administrator, punch in your own password, e.g., password4bob):
The printer queue Ricoh_MP_C2503_pxlmono should be modified.
Do you want to continue? (y,n)  y
  • In Terminal.app, sudo to ‘root’ and append a line to the /etc/cups/cups-files.conf file, then stop and restart CUPS (same password as above):
sudo -i
echo "Sandboxing Relaxed" >> /etc/cups/cups-files.conf
launchctl  stop org.cups.cupsd
launchctl start org.cups.cupsd

Voila, you’ll now have color PCL printing to the Ricoh (or whatever PCL printer you have that needs pxlmono + foomatic-rip + ghostscript to work under OS X)...


Update: With the paper size set to 'letter' I was getting complaints from Word, etc., that my margins were bad, and sure enough, when I printed from my standard templates the bottom 1/2" or so was cut off. Setting the paper size to "Custom" 8.5"x11" instead of Letter appears to have solved that problem:


Update to the Update: I was still having margin issues, and Word wasn’t letting me set the non-printable area greater than .5" from the top/bottom, .25" from the sides. I did some PostScript math (72 points = 1", my templates assume .17" non-printable margins) and came up with 12 12 600 780 as the printable boundaries that should work. I then looked at the PPD for the Ricoh Aficio 3510sf I have at my home office, and lo and behold, the dimensions were identical...

Here’s my fixed, working “Letter” page definition / imageable area PPD, which should live at /etc/cups/ppd/Ricoh_MP_C2503_pxlmono.ppd


cd /etc/cups/ppd
sudo vi Ricoh_MP_C2503_pxlmono.ppd
    *DefaultImageableArea: Custom.8.5x11in
    *ImageableArea Letter/US Letter: "12 12 600 780"

(The PPD specified, before it was edited: *ImageableArea Letter/US Letter: "18 36 594 756")

Now, all my (admittedly pretty annoyingly technical) templates print properly again, with no footers cut off.

macOS Sierra Update

I did an upgrade-in-place to Sierra and the Ricoh stopped working. It seemed to send prints out, but the printer never received them or spat them out. Followed Apple's simple process to reset the printing system (which, annoyingly, nuked all the printers I'd installed) and more or less followed the above steps to reinstall it. Didn't have to reinstall foomatic or ghostscript. Did have to re-enable the cupsctl WebInterface, and walk through the steps to re-add the printer. This time, instead of a generic PCL printer, I set it up as a Ricoh MP C2500 PXL (which I believe is PCL XL, and not the "PS" version, which I'm pretty sure is PostScript, which my printer doesn't have). Set up this way, I didn't have to modify the .ppd file at all, it was already setup with the 12 12 600 780 printable area. Everything's working again, in color.







https://bbs.archlinux.org/viewtopic.php?id=121767
set up color to gray mode
Use:
lpoptions -l
to list printer specific settings
then
lpoptions -o option=value
to set it.
On my HP printer, I had this particular option:
ColorModel/Color Mode: *FromPrintoutMode Color Grayscale
So I set
lpoptions -o ColorModel=Grayscale


ColorModel/Color Mode: *FromPrintoutMode Color *Grayscale








2016年7月21日 星期四

rails - problem when install nokogiri cannot discover where libxml2 is located on your system.

Update

For those using El Capitan the following command will work:
gem install nokogiri -- --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/libxml2 --use-system-libraries

sierra

gem install nokogiri -- --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/libxml2 --use-system-libraries


http://stackoverflow.com/questions/19643153/error-to-install-nokogiri-on-osx-10-9-maverick

2016年3月17日 星期四

swift send value via HTTPHeader

i.e authentication

http://stackoverflow.com/questions/35071753/send-data-through-params-to-rails-app-from-ios-in-swift


request.setValue("XXXXXXXXXX", forHTTPHeaderField: "Authorization")

func postRequest2(x: String) {
    let string = "http://localhost:3000/api/users/2/products"
    let url = NSURL(string: string)
    let session = NSURLSession.sharedSession()
    let request = NSMutableURLRequest(URL: url!)
    let params = ["title": "Fifth Title"]
    request.setValue("XXXXXXXXXX", forHTTPHeaderField: "Authorization")
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    request.HTTPMethod = "POST"
    do {
        request.HTTPBody = try NSJSONSerialization.dataWithJSONObject(params, options: NSJSONWritingOptions.PrettyPrinted)
    }
    catch {

    }
    let tache = session.dataTaskWithRequest(request) { (data, response, error) -> Void in
        if let antwort = response as? NSHTTPURLResponse {
            let code = antwort.statusCode
            print(code)
        }
    }
    tache.resume()

}

swift - A Simple Table View Example

https://medium.com/@ronm333/a-simple-table-view-example-in-swift-cbf9a405f975#.egj26mr64

Swift waitUntilAllTasksAreFinished error


http://stackoverflow.com/questions/26947608/waituntilalltasksarefinished-error-swift

func checkLogin(succeed: Bool, msg: String) {
    if (succeed) {

        NSOperationQueue.mainQueue().addOperationWithBlock {
            self.performSegueWithIdentifier("logInTrue", sender: self)
        }        
    }
}

swift - NSUserDefaults

https://www.hackingwithswift.com/example-code/system/how-to-save-user-settings-using-nsuserdefaults


let defaults = NSUserDefaults.standardUserDefaults()
defaults.setInteger(25, forKey: "Age")
defaults.setBool(true, forKey: "UseTouchID")
defaults.setDouble(M_PI, forKey: "Pi")

defaults.setObject("Paul Hudson", forKey: "Name")
defaults.setObject(NSDate(), forKey: "LastRun")
When you set values like that, they become permanent – you can quit the app then re-launch and they'll still be there, so it's the ideal way to store app configuration data.
As mentioned, you can use NSUserDefaults to store arrays and dictionaries, like this:
let array = ["Hello", "World"]
defaults.setObject(array, forKey: "SavedArray")

let dict = ["Name": "Paul", "Country": "UK"]
defaults.setObject(dict, forKey: "SavedDict")
When it comes to reading data back, it's still easy but has an important proviso: NSUserDefaults will return a default value if the setting can't be found. You need to know what these default values are so that you don't confuse them with real values that you set. Here they are:
  • integerForKey() returns an integer if the key existed, or 0 if not.
  • boolForKey() returns a boolean if the key existed, or false if not.
  • floatForKey() returns a float if the key existed, or 0.0 if not.
  • doubleForKey() returns a double if the key existed, or 0.0 if not.
  • objectForKey() returns AnyObject? so you need to conditionally typecast it to your data type.
With that in mind, you can read values back like this:
let defaults = NSUserDefaults.standardUserDefaults()

let age = defaults.integerForKey("Age")
let useTouchID = defaults.boolForKey("UseTouchID")
let pi = defaults.doubleForKey("Pi")
When retrieving objects, the result is optional. This means you can either accept the optionality, or typecast it to a non-optional type and use the nil coalescing operator to handle missing values. For example:
let array = defaults.objectForKey("SavedArray") as? [String] ?? [String]()

rails api docs

important one :

http://apionrails.icalialabs.com/book/chapter_one

its github
https://github.com/kurenn/market_place_api


User Authentication on iOS with Ruby on Rails and Swift



github





some blogs

http://www.yoniweisbrod.com/rails-api-mini-guide/

https://labs.kollegorna.se/blog/2015/04/build-an-api-now/

http://www.andrewhavens.com/posts/20/beginners-guide-to-creating-a-rest-api/

https://codedecoder.wordpress.com/2013/02/21/sample-rest-api-example-in-rails/


2016年3月4日 星期五

api problem Stub Method error in request spec

according to the tutorial
http://apionrails.icalialabs.com/book/chapter_five

to setting current_user will face a problem


Failure/Error: authentication.stub(:request).and_return(request)



http://stackoverflow.com/questions/26428882/stub-method-error-in-request-spec


require 'rails_helper'

class Authentication
  include Authenticable
end

describe Authenticable, :type => :controller do
  let(:authentication) { Authentication.new }

  describe "#current_user" do
    before do
      @user = FactoryGirl.create :user
      request.headers["Authorization"] = @user.auth_token
      allow(authentication).to receive(:request).and_return(request)
    end

    it "returns the user from the authorization header" do
      expect(authentication.current_user.auth_token).to eql @user.auth_token
    end
  end
end
app/controllers/concerns/authenticable.rb
module Authenticable
  # Devise methods overwrites
  def current_user
    @current_user ||= User.find_by(auth_token: request.headers['Authorization'])
  end

  def request
    request
  end
end