<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>jQuery, PHP, Rails, AS3, Linux, Nerdom &#124; Jolie Rouge</title>
	<atom:link href="http://jolierouge.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://jolierouge.net</link>
	<description></description>
	<lastBuildDate>Thu, 15 Mar 2012 14:17:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Jay n&#8217; Mike&#8217;s Rules of Acquisition</title>
		<link>http://jolierouge.net/2012/03/jay-n-mikes-rules-of-acquisition/</link>
		<comments>http://jolierouge.net/2012/03/jay-n-mikes-rules-of-acquisition/#comments</comments>
		<pubDate>Thu, 15 Mar 2012 14:17:43 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Information]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Topics]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Writings]]></category>

		<guid isPermaLink="false">http://jolierouge.net/?p=641</guid>
		<description><![CDATA[My programming partner and I have been working for quite some time on some large projects, and we have come up with a basic list of rules that apply to startup computer businesses, from software development to software sales. You have to pay &#8211; Nothing in life is free, someone is always paying for it, [...]]]></description>
			<content:encoded><![CDATA[<p>My programming partner and I have been working for quite some time on some large projects, and we have come up with a basic list of rules that apply to startup computer businesses, from software development to software sales.</p>
<ol>
<li><strong>You have to pay</strong> &#8211; Nothing in life is free, someone is always paying for it, in time, energy, and or money.  Never-Ever do anything for free, because when it&#8217;s free, you&#8217;re the one paying for it. That doesn&#8217;t mean you have to charge money for things, there are many forms of currency, favors, endorsements, contributions, and forgiveness for mistakes and lateness are all ways of getting compensated for going the extra mile.</li>
<li><strong>No funny stuff</strong>- This is also what we call Jay n&#8217; Mike&#8217;s Razor, similar to Occam&#8217;s Razor, where the simplest solution is usually the correct one, this rule states that the simplest and most direct route to a solution is the most maintainable, stable, and testable. Arcane, convoluted, esoteric systems are a hassle. This applies to development as well as business.This rule is akin to the KISS principle, keep it simple stupid, but is more precise in its application, that is, it is not so much about keeping it simple, somethings just can&#8217;t be made simpler than they are, it&#8217;s about keeping things explicit.
<p>While the <strong>No funny stuff</strong> rule may seem simple and obvious, there are some important conflicts, for instance, while some meta-programming is permitted, it almost always violates the <strong>No funny stuff</strong> rule.</p>
<p>Some optimizations in code, like managing several arrays within the same loop also violate this rule.</p>
<p>Code shortcuts almost always violate the rule. Dynamic code, or code that is generated at runtime almost always violates this rule unless it is integral to the design of the product.</p>
<p>Anonymous functions also violate this rule in most cases. Explicitly defining the function and then passing it as a callback is preferred because it is named, can be reused (You never know, this is often the case. This mostly applies to languages that allow closures as arguments, like Javascript and Ruby) and can easily be searched for.</p>
<p>When designing product options, like product packages, the <strong>No funny stuff</strong> rule applies.</p>
<p>The <strong>No funny stuff</strong> rule is also the <strong>Don&#8217;t be a clever smartass rule</strong>. You might think you are clever now, but you won&#8217;t in the future. I couldn&#8217;t count how many times I thought I was clever with my code or my actions and they came back to bite me on the ass. Keep to the direct, explicit straight and narrow path.</p>
<p>When you design forms in HTML, <strong>No funny stuff</strong>! Forms should do one thing, and one thing only. That makes multi-model forms a no-no. Create a separate form and connect  the IDs of the models via a select or auto-complete box.</p>
<p>Modular designs which convolute code, or make functions and behavior arbitrary and unpredictable are a no-no.</p>
<p>Fixedly adhering to <strong>Don&#8217;t Repeat Yourself</strong> that forsakes clarity and explicitness of code is a no-no. This is why this rule comes before <strong>Don&#8217;t Repeat Yourself</strong>.</li>
</ol>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://jolierouge.net/2012/03/jay-n-mikes-rules-of-acquisition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Qt C++: Threaded Communication with Artema Hybrid on Linux</title>
		<link>http://jolierouge.net/2011/11/qt-c-threaded-communication-with-artema-hybrid-on-linux/</link>
		<comments>http://jolierouge.net/2011/11/qt-c-threaded-communication-with-artema-hybrid-on-linux/#comments</comments>
		<pubDate>Sun, 20 Nov 2011 16:06:15 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[c/C++]]></category>
		<category><![CDATA[C/C++ Programming]]></category>
		<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Javascript Tutorials]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Topics]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[C/C++]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[QT]]></category>

		<guid isPermaLink="false">http://jolierouge.net/?p=621</guid>
		<description><![CDATA[Communicating with an Artema Hybrid CC Payment device is actually deceptively simple. I&#8217;ve written an application what uses a webkit widget exclusively for the UI display, and so I hook into the Javascript to provide some extra functionality to the app, in this case, reading and writing to/from the Artema Hybrid device. The documentation that [...]]]></description>
			<content:encoded><![CDATA[<p>Communicating with an Artema Hybrid CC Payment device is actually deceptively simple.</p>
<p>I&#8217;ve written an application what uses a webkit widget exclusively for the UI display, and so I hook into the Javascript to provide some extra functionality to the app, in this case, reading and writing to/from the Artema Hybrid device.</p>
<p>The documentation that I received was in German exclusively, so this took a bit of work to get going, but once you have it down it&#8217;s very easy. The device is connected via it&#8217;s POS connection Serial-&gt;RJ45 connection to a Serial-&gt;USB (FTDI chipset) converter that gets plugged into a usb port. You use the standard open, read, write and close functions.</p>
<p>The Artema Hybrid constantly communicates with your system, so you&#8217;ll need to create a QThread to run in the background reading from the device once every second. The Artema Hybrid will send you an ENQ (0&#215;05) and you need to respond with either an ACK (0&#215;06) or an STX (0&#215;02).</p>
<p>With the way that I have it set up, the c++ code does the absolute minimum required which is it reads from the device and emits a dataRead() signal which is connected in Javascript. If I read ENQ, then I emit dataRead(&#8220;ENQ&#8221;). and in the Javascript function that is connected to the dataRead() signal, I see if the string passed up == ENQ.</p>
<p>In the javascript, I have an array of data to write to the device, if that array is empty, I just write back to the Device ACK, otherwise, I pop one entry off the message queue and send the data back to the c++ code, and it will write STX, then DATA, then ETX, then LRC (LRC being the xor of the DATA + ETX).</p>
<p>I can&#8217;t put the source code for this up directly, but I can give you some basic pseudo code. But considering that all of this is really straighforward and small, the pseudo code is actually very close to the real code.</p>
<pre class="brush:py">class AHybrid
  void run
      descriptor = open(device node)
      if descriptor then
        running = true
      while running
        buffer = read(descriptor,1024)
        if buffer0 == 0x05 then
          emit dataRead("ENQ")
        elsif buffer0 == 0x02 then
          // parseData function just converts non
          // printing chars like STX/ETX etc to
          // readable markers so we can parse with
          // JavaScript Regex();
          emit dataRead(parseData(buffer))
      close(descriptor)
  void writeData(QString data)
      char * buffer = malloc data.length etc
      strcpy buffer data.toLatin1().data()
      char lrc
      each buffer do b
        lrc ^= b
      lrc ^= 0x03
      // it's possivle to combine the below <img src='http://jolierouge.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
      write(descriptor,0x02)
      write(descriptor, buffer)
      write(descriptor, 0x03)
      write(descriptor, lrc)
      emit dataWritten(data)</pre>
<p>The member variable running is just there so we can control the reading of data, and we can easily shutdown the thread by setting that to false, and it will exit gracefully.</p>
<p>It&#8217;s not much more complex than that.</p>
<p>The Javascript side just converts an Object to a string, so we have this struct, like so:</p>
<pre class="brush:js">
// This is for ordering the fields in the struct for when it gets converted to a string
var forder = ['sa',  'version', 'euro',  'ind', 'betrag', 'nummer', 'personal',
                      'konto', 'ausnahme', 'ware', 'verzogerung', 'mmmm', 'handel'];
var struct = {
  sa: 'E',
  version: '1',
  euro: '1',
  ind: 'U',
  betrag: '00000900', // This changes with each total
  nummer: '2', // This can usually stay the same, as we are not
  // processing multiple sales on the same device at the same time
  personal: '00', // The cash register id goes here
  konto: '01', // This is a store conf variable
  ausnahme: '0',
  ware: '99',
  verzogerung: '000000',
  mmmm: '0000',
  handel: 'Jason' // not sure what this will be useful for...
}

function struct2string(struct) {
  var str = '';
  for (var i in forder) {
    if (struct[forder[i]]) {
      str = str + struct[forder[i]];
    }
  }
  return str;
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://jolierouge.net/2011/11/qt-c-threaded-communication-with-artema-hybrid-on-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Letter to the Creators of EVE</title>
		<link>http://jolierouge.net/2011/10/a-letter-to-the-creators-of-eve/</link>
		<comments>http://jolierouge.net/2011/10/a-letter-to-the-creators-of-eve/#comments</comments>
		<pubDate>Fri, 07 Oct 2011 17:35:49 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Game Reviews]]></category>
		<category><![CDATA[Information]]></category>
		<category><![CDATA[Reviews and Rants]]></category>
		<category><![CDATA[Writings]]></category>

		<guid isPermaLink="false">http://jolierouge.net/?p=609</guid>
		<description><![CDATA[A Response to CCP Hellmar&#8217;s Letter. The estrangement from CCP that many of you have been feeling of late is my fault, and for that I am truly sorry. There are many contributing factors, but in the end it is I who must shoulder the responsibility for much of what has happened. I appreciate both [...]]]></description>
			<content:encoded><![CDATA[<p>A Response to CCP Hellmar&#8217;s Letter.</p>
<blockquote><p>The estrangement from CCP that many of you have been feeling of late is my fault, and for that I am truly sorry. There are many contributing factors, but in the end it is I who must shoulder the responsibility for much of what has happened.</p></blockquote>
<p>I appreciate both the sentiment and the spin, as well as the effort you are putting forward, to be honest I doubt many other game companies would bother to write the letter you&#8217;re writing but let&#8217;s be honest, the problems with EVE and with CCP are endemic, and asking us to swallow this guilt trip is not coming off as humble as you&#8217;d think. I mean saying that you are responsible for the the current state of EVE is like saying Lee Harvey Oswald really shot JFK, sure, that&#8217;s the official story, but no one really believes it.</p>
<blockquote><p>I was impatient when I should have been cautious, defiant when I should have been conciliatory and arrogant when I should have been humble.</p></blockquote>
<p>No, You were greedy. We aren&#8217;t children, well most of us aren&#8217;t. A few of us have lived long enough, and participated in business long enough to recognize zealous hubris from gluttonous greed. You got greedy and you fucked up. You started to look at us like we were just dollar signs, just consumers.</p>
<blockquote><p>&#8230;growing the company to 600 people, increasing our subscriber count beyond that of the population of Iceland and on and on, one resounding success after the next despite earthquakes, volcanic eruptions and even a world economic collapse.</p></blockquote>
<p>This is why we are still here, why you are getting second, and third and fourth chances, because you have done right by us in the past, and you can do again, but this is also the same reason why you are being held by the community to a higher standard. It&#8217;s at the top of the hill that you must walk the hardest.</p>
<blockquote><p>I was wrong and I admit it.</p></blockquote>
<p>Apology accepted.</p>
<h2>Captain&#8217;s Quarters</h2>
<p>No biggie, most of us just turn it off, it&#8217;s pretty much useless and a drain on resources. Most hard core players run multiple clients, we turn the audio and the detail way down. You really would have done better to speed up the client.</p>
<p>I for instance run EVE on my laptop, running 2 clients at once on a laptop sucks.</p>
<h2>Virtual Goods</h2>
<p>Virtual goods have no place in EVE, that is something that is successful with companies like Zynga, and casual gamers. EVE is not a casual game, it&#8217;s a substantial monetary and time investment just to play normally, plus all of the addtional skills and information you need to learn. There are thousands of modules, and combinations and little rules to remember. We love that stuff.</p>
<p>What we don&#8217;t love is bullshit useless vanity items.</p>
<blockquote><p><a href="http://www.eveonline.com/devblog.asp?a=blog&amp;bid=935"><em>The investment of money in EVE should not give you an unfair advantage over the investment of time.</em></a></p></blockquote>
<p>This is something that simply boggles my mind. You have PLEXes, either get rid of them or add to them, but quit with this idea that&#8217;s it&#8217;s unfair. Time is money. I personally think it&#8217;s unfair for me to get suicide ganked by a 10 year old when I undock because he has such good pilot skills because he can spend his every waking moment online waiting for someone with the right cargo to undock, but I, a busy adult, have to get something moved now.</p>
<p>I consider that an unfair advantage, I work for hours to get my money, I should be able to convert that time into game value. It&#8217;s a sword that cuts both ways.</p>
<p>If something takes 3 hours of game time to do, and I don&#8217;t have 3 hours of game time, I should be able to trade 3 hours of work time for 3 hours of game time. That&#8217;s not an unfair advantage, that&#8217;s a balance. So whether you sit in a chair in front of the screen and grind it out, or pay $30, you have still spent 3 hours of time at something.</p>
<h2>You wanna talk about unfair advantages&#8230;</h2>
<p>EVE is filled to the brim with iniquities, selfishness, and rewards only for the most psychotic and psychopathic behaviors.</p>
<p>Something that you completely avoid in your letter, what are you going to do about griefing. We aren&#8217;t asking you to ban it, we are asking for some kind of method to get back at people who harass us, within the game, that actually matters.</p>
<p>Killing us matters to us, but to a griefer, getting killed is just funny. We want a non-destructive community beneficial method of punishment that we can reciprocate with.</p>
<p>I think eve should be the first, or one of the first games ever to implement a prison system, where griefer players can go and have to pay a debt to society. Like mining ice in a frigate.</p>
<p>I think the players should have player Judges, appointed by the CSM who can hear complaints and take action. I think players in Empire space should be given the ability to work WITH CONCORD and State governments. The whole Pirate Faction stuff is fun, but we want incursions against Pirate Corporation, against other players.</p>
<p>We want laws and rules, and the ability, the tools, to enforce those laws within the space that we live.</p>
<blockquote><p>Though the introduction was clearly flawed, our plans for virtual goods are intended to make your playing experience better, not to disrupt it.</p></blockquote>
<p>No, they weren&#8217;t. They don&#8217;t make anyone&#8217;s lives or player experience better. Your intention was to make money and cash in on this digital item craze. Christ man, we are already paying you guys a minimum of 14 euros a month. Most of us pay a lot more. How much money do you really need?</p>
<p>There was another way, but you were too blind to see it. You already have digital goods, that mean something, and that are bought and sold all of the time.</p>
<h2>EVEbay</h2>
<p>Your staunch and inflexible policies on selling ships, modules, and ISK is just bad business practice. Obviously it is something people want, so you should find a way for them to do it, and there&#8217;s no reason why you can&#8217;t make some money while you do it.</p>
<p>Imagine for a moment, you have thousands of players grinding, inventing, market trading. They would love to convert that time spent into some cash. Why don&#8217;t you just provide them with a way to do it? Why not create real player stores on the eve website, allow them to list their goods, and you process the payments and pay them at the end of the month, keeping a transaction fee for yourself?</p>
<p>Instead of punishing people, unfairly, and to be frank, retardedly and sometimes meanly, for doing what they want, why don&#8217;t you see this as an opportunity to have your cake and eat it too?</p>
<p>Monthly subscriptions are a thing of the past, and micropayment systems are coming into their own. But that doesn&#8217;t always directly mean you must sell digital goods.</p>
<p>You could sell embedded advertising.</p>
<p>You could institute a micropayment, pay as you go, only pay for the time you play system. So if this month, you don&#8217;t log in so much, you don&#8217;t pay as much.</p>
<p>You could split the game up a bit. Many of us just do market trading, we rarely ever leave stations cause of griefers, and it&#8217;s a waste of ISK. Why not have an iphone, web based interface to market trading with per-transaction costs? Why not create something like EveTrade. This would link back in nicely to player stores and selling digital items, for which the market is key, so you could charge a bit extra, or charge differently for different aspects of the game.</p>
<p>You guys really had blinders on with this one, greed blinders, and you were lazy. Those things are difficult to forgive because they aren&#8217;t honest mistakes, they are dishonest.</p>
<blockquote><p>EVE will be more personal, and thus more accessible to general audiences. Visual self-expression in a virtual setting is a core psychological component of gaming; most people need to see their avatars, or something vaguely humanoid, or else they don’t connect with the game.</p></blockquote>
<p>You can please some of the people all of the time, or all of the people some of the time, but you can&#8217;t do both. You will just have to choose.</p>
<p>It&#8217;s a bit like <a href="http://www.youtube.com/watch?v=qjPBMAmNH14">Chris Rock&#8217;s comedy routine about new pussy</a>. It&#8217;s about 1:42 into the video. It&#8217;s about commitment, versus new pussy, because you have to look at things in the long term. Yeah, there are a lot of finicky casual gamers out there who want an identity in a video game to tranquilize their minds from the horrors of their mediocre suburban existence, but those customers are like new pussy. Hardcore gamers are a bitch, we can be cranky, hard to please. But in the end, we pay. And once we start something, we stay with you for years. We bought your cars, we bought your houses, we buy your vacations. After all we&#8217;ve done for you, you wanna go fuck around on us?</p>
<p>EVE is not an easy game. It is not a &#8220;fun&#8221; distraction. EVE is a challenge, it always has been, and it attracts people with a grandiose sense of self and ability. We are too narcissistic to give attention away on a fucking avatar. We want world domination, mayhem, power, we want to overcome obstacles and triumph. We want our game experience to have meaning. We don&#8217;t want Gallenteville on Facebook. Or Angry Khanids on iPhone. That&#8217;s not innovation, that&#8217;s copying off others, and that&#8217;s a losers game.</p>
<h2>A dog with two bones</h2>
<p>It seems to me that you, and the whole of CCP are like a dog with two bones, it&#8217;s an Aesop&#8217;s fable, look it up.</p>
<p>You can&#8217;t decide which one you want, the one you have, or the one you could get. But you don&#8217;t have a casual gaming product. You have a hardcore gaming product. And as more and more companies flood the market with pointless casual games, you think you want a piece of that pie, without realizing that those companies are alienating their hardcore player base. Where are they gonna go? If you play your cards right, they could go to EVE.</p>
<blockquote><p>EVE is still unique in the real and virtual world. <a href="http://www.youtube.com/watch?v=45mlVuLs_Nw">This is our vision for her</a>, and we want so badly to take you there.</p></blockquote>
<p>The pointless paramoralism of that video aside, taking EVE in that direction is going to require a lot of work, which we all know you can do, but you cannot do it alone. You need your hardcore player base, you need your testers, you need your feedback, and you need to make the process of feature design and even implementation more transparent and more dynamic. I am not talking about development by committee, I am talking about agile development with constant feedback.</p>
<h2>Ships in EVE</h2>
<p>More ships, and not just T3, or T2, I think you should decommission old ships and create completely new ones. Decommission old modules as well.</p>
<p>You should fix the SB, we all keep saying this, but it needs more range, and less torpedos, in fact, Fuck torpedos.</p>
<p>SBs are Artillery, it&#8217;s supposed to be a positional warfare kind of ship. But since it&#8217;s the only one, it&#8217;s fucking useless, the best way to fix SBs is to create more AOE weapon types, and ships that actually have to be flown.</p>
<p>Also, you should make it harder to kill ships. I don&#8217;t mean easier to escape, I mean it should take longer to kill them.</p>
<p>You should also allow for more customization of ships, if you hadn&#8217;t spent so much time on that fucking useless character customizer and spent more on customising ships we&#8217;d all be happy bunnies.</p>
<p>While I am on the topic of character customization, I want fat short characters. I find it insulting that every character must be average to anorexic. I want a midget, I want a fat midget.</p>
<p>You don&#8217;t just have to fix nullsec, you have to fix combat in nullsec,and combat entirely. It&#8217;s too easy for a bunch of assholes with too much time on their hands to run around ganking people.</p>
<p>Get rid of bubbles. Just fuck bubbles entirely.</p>
<p>Regards,</p>
<p>Jason Martin</p>
<p>P.S. Please comment below <img src='http://jolierouge.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<blockquote><p>&nbsp;</p>
<p>&nbsp;</p></blockquote>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://jolierouge.net/2011/10/a-letter-to-the-creators-of-eve/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fear and Loathing On Tranquility</title>
		<link>http://jolierouge.net/2011/09/fear-and-loathing-on-tranquility/</link>
		<comments>http://jolierouge.net/2011/09/fear-and-loathing-on-tranquility/#comments</comments>
		<pubDate>Fri, 16 Sep 2011 22:56:58 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Game Reviews]]></category>
		<category><![CDATA[Information]]></category>
		<category><![CDATA[Reviews and Rants]]></category>
		<category><![CDATA[Writings]]></category>

		<guid isPermaLink="false">http://jolierouge.net/?p=602</guid>
		<description><![CDATA[There&#8217;s a general tendency in the world to cruelty and sadism, a kind of malaise that affects the hearts and minds of those who for all intents and purposes appear to be normal human beings. You never know who they are in your daily life, but they exist, some are called sociopaths, others psychopaths, but [...]]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s a general tendency in the world to cruelty and sadism, a kind of malaise that affects the hearts and minds of those who for all intents and purposes appear to be normal human beings. You never know who they are in your daily life, but they exist, some are called sociopaths, others psychopaths, but I tend to think that there is something more too it, a kind of awful yearning in the human heart to burn everything in your sight. But more importantly, to burn it alive.</p>
<p>There&#8217;s a river deep in the soul of man from which springs eternally all the goodness that could ever be, and next to that river is a textile factory, weaving a cloth of iniquity and ejecting the raw sewage of its manufacture into said river. The toilets also flush there, at least from the smell.</p>
<p>If there is only one truth you ever learn in this life is that most people you meet, even if they aren&#8217;t hurting you now, will probably not think twice at hurting in the future if they ever get the chance. This unfortunate reality dawns on most of us a little too late.</p>
<p>Thus enters the game of EVE Online. The Sandbox.</p>
<p>EVE Online is the sci-fi cesspool of all the worlds most childish and sadistic and hopeful and nerdy and intelligent and dimwitted. It is a melting pot of every type of player from every type of game somehow all living in the same space, something that CCP prides themselves on.</p>
<p>But EVE isn&#8217;t finished, it&#8217;s a work in progress, a work that seems to have stalled in favor of an already successful company irrationally going retarded and trying to monetize a game already monetized, to hook a hard core player base deeper with casual social network game strategies. They aren&#8217;t fooling anyone, and most of their dedicated player base has become that much more irritated with their latest antics.</p>
<p>The question that has been on my mind, and I think the minds of so many others is: What the hell do we keep playing this damn game?</p>
<p>My only theory is that we must be complete and total masochists, EVE Online isn&#8217;t so much a game, it isn&#8217;t fun, it&#8217;s nothing but one heartache, or betrayal, or frustration, or bore after another. EVE Online is like a shitty fast food restaurant being installed in the middle of a famine, of course everyone is going to eat there, they&#8217;re starving, but that doesn&#8217;t mean the food is actually any good. It&#8217;s probably killing you just as much as starving would, only a bit slower.</p>
<p>The problem is there are so few games out there that are even decent, and even fewer that have the theme that attracts us. So few sci-fi games period, so few with player driven economies, so few that aren&#8217;t split up on to 11ty billion servers.</p>
<p>The truth is, EVE Tricked Us®, EVE claimed to be freedom from the grinds of WoW and EverQuest, they sold us on time based training, and no leveling, they promised us &#8220;career paths&#8221; that would allow us to choose our own style of game play. They promised us variety, and cool ships, and meta game elements, and they fibbed their fucking asses off because EVE is a perpetual grind. The time based training is the great un-equalizer. You will always be at a lower footing than someone who started before you.</p>
<p>The careers in EVE are a joke if you take them seriously, which you shouldn&#8217;t, there&#8217;s another way to understand EVE. EVE is all about the long con. It&#8217;s a trick, and we are the Rubes, the Marks, we are being taken for a ride because we signed up for a fun space game and what we got what 101 ways to be victimised by everyone.</p>
<p>EVE Online is fundamentally a sandbox for psychopathic endeavors. Everything is geared to attract unsuspecting players to the game in hopes of something new, or different, or more challenging, but all of that is to rope you in. You become little more than the scratching post of griefers, the slaves of corporations. Hell, in EVE you aren&#8217;t even a wage slave, you have PAY to get into a corp most of the time, either actively with corp dues, or passively with corp tax.</p>
<p>EVE is fundamentally about exploitation, all of the features of the game are geared not around how you can have fun(unless you are having fun by hurting others), but how others can have fun screwing you. Corporations are set up in such a way as to be primed for theft and betrayal. Everyone is trying to be the top dog, it&#8217;s a fundamentally pyramidal self-service kind of game.</p>
<p>Combat in eve is a farce, there is no real strategy to it, you click on someone and then shoot them, you can try to spiral around them, and that can be effective, but fitting your ship right is less important than having 10-15 &#8220;corp-mates&#8221; to fly with you so that it hardly matters how you fit your ship at all.</p>
<p>EVE is more of a gankbox than anything, how many different ways can you find to get together a gang of like minded sadists and hunt around for some lone ship. I was in a Pirate corporation, all we did was move from system to system trying to catch loners. And we were a highly ranked Pirate Corp. There was no challenge or strategy to it, we would look at the opponent, if they were stronger than us, we ran, if we were strong than them we fought. If it was at all ambiguous, haul ass out of there.</p>
<p>How is that fun? I missed  the member, I signed up to use my mind, not just my mouse. But EVE is mindless. It requires no mind. I can&#8217;t tell you the number of people I met in the game who were perfectly capable of fitting up ships and having high kill/death ratios and couldn&#8217;t even read my characters name. I felt like I was awash in a world of complete dyslexics. But if they had been dyslexic, it would be forgiveable. EVE is like a massive Idiocracy that doesn&#8217;t seem to realize how bad it really is.</p>
<p>And yet we keep playing. I wonder why.</p>
<p>The game isn&#8217;t fun. It&#8217;s not worth it. The friends you make are hardly friends. Most of them you barely like, and the ones you do, you&#8217;d remain friends with them anyway.</p>
<p>Eve is the dream that never was, because it was a lie. Now I see the slow and subtle signs of an impending death and I have to say: What can I do to help?</p>
<p>How can I bring the monster down, break the cycle, break the mold, break the chains, we have been so long in the servitude of the delusion that is EVE Online, the farce, the fake, the flippant and mealy mouthed propaganda about the sandbox and freedom, and emergent gameplay. The only gameplay that emerges in EVE is psychopathic gameplay.</p>
]]></content:encoded>
			<wfw:commentRss>http://jolierouge.net/2011/09/fear-and-loathing-on-tranquility/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rails will_paginate links to wrong page</title>
		<link>http://jolierouge.net/2011/08/rails-will_paginate-links-to-wrong-page/</link>
		<comments>http://jolierouge.net/2011/08/rails-will_paginate-links-to-wrong-page/#comments</comments>
		<pubDate>Wed, 17 Aug 2011 17:43:03 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Javascript Tutorials]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Topics]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://jolierouge.net/?p=587</guid>
		<description><![CDATA[Well, While setting up a website today I found a bit of retardation in will_paginate. Aside from poor and complicated documentation and an incredible amount of bloat for what amounts to a very simple kind of website component, I found that will_paginate was linking to /?page= on a page that showed in the url bar [...]]]></description>
			<content:encoded><![CDATA[<p>Well,</p>
<p>While setting up a website today I found a bit of retardation in will_paginate. Aside from poor and complicated documentation and an incredible amount of bloat for what amounts to a very simple kind of website component, I found that will_paginate was linking to <strong>/?page=</strong> on a page that showed in the url bar as <strong>/products</strong>, so the link should have been <strong>/products?page=</strong>. So I looked around for a quick fix, and this is the best I got: <a href="http://thewebfellas.com/blog/2010/8/22/revisited-roll-your-own-pagination-links-with-will_paginate-and-rails-3">Revisited: roll your own pagination links with will_paginate and Rails 3</a></p>
<p>OH MY GAWD. You have to be shitting me. That is hands down the most retarded thing I have ever seen. So, like the little hack monster that I am, I did it faster and easier with less code. If you want to change the pagination links, you can do it with jQuery.</p>
<pre class="javascript">$('div.pagination a').each(function () {
    var url = $(this).attr('href');
    url = url.replace('/','');
    $(this).attr('href',url);
});</pre>
<p>Why? Because ideally, will_paginate shouldn&#8217;t give a shit about the url, that&#8217;s not its job, that&#8217;s my job, its job is to <strong>ADD get parameters</strong>, and manage what those parameters should be, anything else is retarded.</p>
]]></content:encoded>
			<wfw:commentRss>http://jolierouge.net/2011/08/rails-will_paginate-links-to-wrong-page/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Rails 3 &#8211; PHP Style Global Variables, $_SESSION, $_GET, $_POST in the models, and everywhere.</title>
		<link>http://jolierouge.net/2011/08/rails-3-php-style-global-variables-_session-_get-_post-in-the-models-and-everywhere/</link>
		<comments>http://jolierouge.net/2011/08/rails-3-php-style-global-variables-_session-_get-_post-in-the-models-and-everywhere/#comments</comments>
		<pubDate>Fri, 05 Aug 2011 10:05:14 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[PHP Tutorials]]></category>
		<category><![CDATA[PHP/MySQL]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Topics]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://jolierouge.net/?p=583</guid>
		<description><![CDATA[PHP Globals in Rails 3 So, as part of my slow descent into hell for even showing this stuff, I thought I would make a quick and dirty post about getting PHP like globals into your models in Rails. I wrote a longer article about globals in the model in rails which you can check [...]]]></description>
			<content:encoded><![CDATA[<h2> PHP Globals in Rails 3 </h2>
<p>So, as part of my slow descent into hell for even showing this stuff, I thought I would make a quick and dirty post about getting PHP like globals into your models in Rails. I wrote a longer article about <a href="http://jolierouge.net/2011/05/ruby-on-rails-session-in-models-not-so-evil-actually/">globals in the model in rails</a> which you can check out for some other options.</p>
<pre name="code" class="ruby">
def some_before_filter
  $_SESSION = session
  $_GET = request.GET
  $_POST = request.POST
  $GLOBALS = {}
end
</pre>
<p>Yeah, that simple. When it comes to globals, the ruby and rails community is kind of like the child of a former Nazi sympathizer who got off the hook at Nuremburg. Yeah, they&#8217;re related, but they just don&#8217;t want to have anything to do with them, and if you remind them of the connection they get really angry.</p>
]]></content:encoded>
			<wfw:commentRss>http://jolierouge.net/2011/08/rails-3-php-style-global-variables-_session-_get-_post-in-the-models-and-everywhere/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu, Find large files by size</title>
		<link>http://jolierouge.net/2011/07/ubuntu-find-large-files-by-size/</link>
		<comments>http://jolierouge.net/2011/07/ubuntu-find-large-files-by-size/#comments</comments>
		<pubDate>Mon, 18 Jul 2011 13:10:23 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Topics]]></category>

		<guid isPermaLink="false">http://jolierouge.net/?p=575</guid>
		<description><![CDATA[Here&#8217;s a handy little command for finding files in a directory over a certain size. $ find * -type f -size +90000k -exec ls -lh {} \; &#124; awk '{ print $9 ": " $5 }']]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a handy little command for finding files in a directory over a certain size.</p>
<pre name="code" class="c">
$ find * -type f -size +90000k -exec ls -lh {} \; | awk '{ print $9 ": " $5 }'
</pre>
]]></content:encoded>
			<wfw:commentRss>http://jolierouge.net/2011/07/ubuntu-find-large-files-by-size/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache2/MySQL on Ubuntu Configuration</title>
		<link>http://jolierouge.net/2011/07/apache2mysql-on-ubuntu-configuration/</link>
		<comments>http://jolierouge.net/2011/07/apache2mysql-on-ubuntu-configuration/#comments</comments>
		<pubDate>Mon, 18 Jul 2011 13:02:04 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[General Computing]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP/MySQL]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Topics]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Writings]]></category>

		<guid isPermaLink="false">http://jolierouge.net/?p=573</guid>
		<description><![CDATA[Once you&#8217;ve installed apache2 and mysql on your server, you might want to try these configuration changes to make it perform a bit better: In /etc/mysql/my.cnf key_buffer = 16K max_allowed_packet = 1M thread_stack = 64K table_cache = 4 sort_buffer = 64K net_buffer_length = 2K And in Apache2&#8242;s config, /etc/apache2/apache2.conf, find the section for MPM prefork [...]]]></description>
			<content:encoded><![CDATA[<p>Once you&#8217;ve installed apache2 and mysql on your server, you might want to try these configuration changes to make it perform a bit better:</p>
<p>In /etc/mysql/my.cnf</p>
<pre name="code" class="c">
key_buffer = 16K
max_allowed_packet = 1M
thread_stack = 64K
table_cache = 4
sort_buffer = 64K
net_buffer_length = 2K
</pre>
<p>And in Apache2&#8242;s config, /etc/apache2/apache2.conf, find the section for MPM prefork if yo have it and:</p>
<pre name="code" class="c">
StartServers 1
MinSpareServers 3
MaxSpareServers 6
ServerLimit 24
MaxClients 24
MaxRequestsPerChild 3000
</pre>
<p>The above are just some things to try if you encounter a situation where apache is using too much memory, or the same for mysqld.</p>
]]></content:encoded>
			<wfw:commentRss>http://jolierouge.net/2011/07/apache2mysql-on-ubuntu-configuration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Never Again! Backing up your rails .sqlite3 dbs</title>
		<link>http://jolierouge.net/2011/07/never-again-backing-up-your-rails-sqlite3-dbs/</link>
		<comments>http://jolierouge.net/2011/07/never-again-backing-up-your-rails-sqlite3-dbs/#comments</comments>
		<pubDate>Fri, 15 Jul 2011 15:39:25 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[General Computing]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Topics]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Writings]]></category>
		<category><![CDATA[Backups]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Shell Scripting]]></category>
		<category><![CDATA[Sqlite3]]></category>

		<guid isPermaLink="false">http://jolierouge.net/?p=546</guid>
		<description><![CDATA[Well, with mysql, it&#8217;s pretty hard to overwrite your dbs, but with sqlite, it&#8217;s real easy. I did this, luckily I only lost about a days worth of work, but nevertheless, I have instituted a new rule for sqlite3 dbs: Hourly backups. Here&#8217;s the script: #!/bin/sh D=`date +%H` cp -f /var/www/app/db/production.sqlite3 /var/www/fapp/db/production.sqlite3.bak.$D]]></description>
			<content:encoded><![CDATA[<p>Well, with mysql, it&#8217;s pretty hard to overwrite your dbs, but with sqlite, it&#8217;s real easy. I did this, luckily I only lost about a days worth of work, but nevertheless, I have instituted a new rule for sqlite3 dbs: Hourly backups.</p>
<p>Here&#8217;s the script:</p>
<p>#!/bin/sh<br />
D=`date +%H`<br />
cp -f /var/www/app/db/production.sqlite3 /var/www/fapp/db/production.sqlite3.bak.$D</p>
]]></content:encoded>
			<wfw:commentRss>http://jolierouge.net/2011/07/never-again-backing-up-your-rails-sqlite3-dbs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Deploy Ruby on Rails to the Desktop (Ubuntu), as a Debian Package</title>
		<link>http://jolierouge.net/2011/07/deploy-ruby-on-rails-to-the-desktop-ubuntu-as-a-debian-package/</link>
		<comments>http://jolierouge.net/2011/07/deploy-ruby-on-rails-to-the-desktop-ubuntu-as-a-debian-package/#comments</comments>
		<pubDate>Fri, 08 Jul 2011 15:42:20 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[C/C++ Programming]]></category>
		<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[General Computing]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Writings]]></category>

		<guid isPermaLink="false">http://jolierouge.net/?p=545</guid>
		<description><![CDATA[Introduction to deploying Rails Applications to the Desktop Some things you&#8217;ll learn in this series of articles: How to distribute a Rails App to an Ubuntu Desktop How to Compile a custom Ruby installation to avoid conflicting with an existing Ruby install Get automatic updates to all users for free by virtue of being a [...]]]></description>
			<content:encoded><![CDATA[<h2>Introduction to deploying Rails Applications to the Desktop</h2>
<p>Some things you&#8217;ll learn in this series of articles:</p>
<ol>
<li>How to distribute a Rails App to an Ubuntu Desktop</li>
<li>How to Compile a custom Ruby installation to avoid conflicting with an existing Ruby install</li>
<li>Get automatic updates to all users for free by virtue of being a Debian Package</li>
<li>How to organize a build environment to make and distribute all Debian packages with a single command.</li>
<li>How to build your own custom dumb browser in QT C++ (QT Creator now includes the ability to generate an HTML5 App, it didn&#8217;t when I started building Salor&#8230;)</li>
</ol>
<p>This is not a step by step tutorial, it&#8217;s a broad discussion, though I plan to make an example video with a hello world style app at a later date.</p>
<p>Deploying Rails applications to the desktop, specifically unbuntu, though I plan to figure out how to do it with windows very soon, turns out to be much easier than I ever thought.</p>
<p>While deploying Rails apps can kind of suck in comparison to other types of web-applications, it&#8217;s hardly any more difficult than any other kind of executable deployment.</p>
<p>The reasons for using Rails for a desktop application are pretty obvious, ease of development, ease of maintenance, and Ruby can pretty much do anything you need it to do. For instance, in our application we use ruby to connect to a receipt printer and print out receipts, reports, labels and barcodes and more.</p>
<p>Before you deploy a Rails app, you might give a moments thought to whether or not you&#8217;ll be satisfied with have the application run in Firefox or not. We chose not, and bundled the application with it&#8217;s own webkit browser (Via QT Webkit), to make the app appear as seamless as possible.</p>
<p>One of the best selling points of Webkit is all the groovy .css features it has, like styling scrollbars, so our rails app is 100% uniform in appearance, including styled scrollbars. We also take advantage of QT&#8217;s fullscreen capabilities, so our application takes over the whole screen and looks like something completely custom.</p>
<p>The particular application is a Point of Sale software called Salor.</p>
<p>Here is an example of the main checkout screen, this is in fullscreen mode.</p>
<p><img src="http://jolierouge.net/wp-content/Screenshot.png" alt="salor pos customer checkout screen" /></p>
<p>And here is one of the modal dialogs in the app that allows you to void an order.</p>
<p><img src="http://jolierouge.net/wp-content/Screenshot2.png" alt="salor pos void order screen for the customer checkout" /></p>
<p>Some things to notice: uniform style, the entire interface looks 100% custom, they don&#8217;t even know it&#8217;s running linux, you don&#8217;t see the Ubuntu app bars or any of that nonesense, so everything has this uniform native look, when in reality it&#8217;s all just running inside of a fullscreen Webkit widget.</p>
<p>There is also a lot of stuff going on in the background, for instance it writes a webkit&#8217;s page to a Display Link mini usb screen for a customer display, though this is done in C++ where the C functions are callable from javascript on the page. Even the customer display is done in Rails, so we are just rendering the webkit widget to the display link etc.</p>
<p>Because of this small thing, and the fact that ubuntu doesn&#8217;t have any driver support, the app has to run as gksu, which was a bit of a pain to finagle at first, but now when the POS machine (A Zotac MAG with Touchscreen) starts up, it automatically runs the salor app which takes over the screen immediately so it&#8217;s a pretty seamless and consistent UX.</p>
<p>While it&#8217;s pretty simple to get this all running once you get the basics down, getting those basics were a complete monster, and I have my friend Michael to thank for finding out and fixing some of the more obscure things, like how to configure the rails application on install, getting the mysql username and password from the person installing. This actually wouldn&#8217;t be an issue if we were using sqlite3, which is still a possibilty, the only issue being Salor only doubles as a local installation, it is also a full blown website that is a Software as Service application. There is really very little difference between the two, a simple config variable switches Salor into Standalone mode.</p>
<h2> The Debian Package Structure</h2>
<p>The Deb docs wouldn&#8217;t tell you this, but it&#8217;s dead simple to make them, they are really just glorified mini file systems tarred up. The additional things are this idea of a control file, and then the scripts and templates for user input, which is where the headache comes in. What I ended up doing was creating a package called salor_manager, which essentialy is a big script that just receives cmdline arguments from dpkg and does fancy stuff, instead of trying to do them in BASH, which is a freakin nightmare.</p>
<p>Here is the template directory for Salor, the rails app get&#8217;s copied from a gitrepos into /opt/salor_pos at build time.</p>
<pre>
salor-src/
├── DEBIAN
│   ├── conffiles
│   ├── config
│   ├── control
│   ├── postinst
│   ├── postrm
│   ├── preinst
│   └── templates
└── opt
    └── salor_pos
        └── salor
</pre>
<p>The postinst file looks like this:</p>
<pre name="code" class="php">
#!/bin/sh

. /usr/share/debconf/confmodule
export RAILS_ENV=production
echo "Reading configuration from Debconf database ..."
db_get salor/enter_username
username=$RET
db_get salor/enter_password
password=$RET
db_get salor/enter_database
database=$RET
echo "Setting username and password for salor database ..."
php /usr/bin/salor_manager salor-src install postinst $username $password $database
db_go
exit 0
</pre>
<p>The magic of getting some input from the user via db_get I&#8217;ll talk about a little later. </p>
<p>Of course, you can look at all of this in the <a href="http://github.com/jasonknight">salor_deb gitrepos</a>.</p>
<p>For the little password getting db_get stuff, you need to have a templates file, like this, you can just more or less copy mine:</p>
<pre name="code" class="php">
Template: salor/enter_database
Type: string
Default: salor_production
Description: Please enter the name of the salor database.
 If you've already created a database for salor, enter the name here, otherwise leave the default.
Description-de.UTF-8: Bitte geben Sie den Namen der salor Datenbank ein.
 Wenn Sie schon eine Datenbank für salor angelegt haben, geben Sie den Namen hier ein, ansonsten lassen Sie die Standardeinstellung.

Template: salor/enter_username
Type: string
Default: root
Description: Please enter the username for the database
 If you've created a dedicated user for the salor database, please enter the name here, otherwise leave the default value.
Description-de.UTF-8: Bitte geben Sie den Benutzernamen für die salor Datenbank ein.
 Wenn Sie schon einen Datenbank-Benutzer für salor angelegt haben, geben Sie den Namen hier ein, ansonsten lassen Sie die Standardeinstellung.

Template: salor/enter_password
Type: password
Description: Please enter the password for the database user that you've set in the previous step.
Description-de.UTF-8: Bitte geben Sie das Passwort für den Datenbank-Benutzer ein, den Sie im letzten Schritt angegeben haben.

Template: salor/done
Type: note
Description: Installation of salor is complete.
 If everything went alright, you should be able to browse to http://salor and see the login screen.
 Use Salor Pos from Applications/Office
 Use Chromium Browser to preview how salor displays on mobile devices.
 Login: su Password: su
Description-de.UTF-8: Die Installation von salor ist vollständig.
 Wenn alles gut gegangen ist, sollten Sie auf http://salor browsen können und den Login-Bildschirm sehen.
 Verwenden Sie Mozilla Firefox für das Kassen-Hauptgerät.
 Verwenden Sie den Chromium Browser um zu sehen, wie salor auf mobilen Geräten angezeigt wird.
 Login: su Password: su
</pre>
<p>This also shows you how to make it multi-lingual, I can&#8217;t take credit for the above, that all goes to my friend and dev partner on the project Mike. Everything I know about deb packaging basically comes from him, so many thanks for all of his help.</p>
<p>Again, you can get most of this stuff if you checkout the gitrepos.</p>
<h2>Compiling Ruby</h2>
<p>Deploying rails applications isn&#8217;t as easy as PHP, but it&#8217;s still not hard. We chose to go with Apache/Passenger configuration, but I didn&#8217;t want to conflict with existing ruby installs, and I didn&#8217;t want to deal with the headache of gem vs. apt-get, so I just bundle everything up in a salor-ruby package. In the repo you&#8217;ll see a compile.sh script that is used to compile it, you only really need to do this once, and from then on, you just use that ruby&#8217;s gem and bundle to install your depenencies, like passenger, which you&#8217;ll also have to compile the apache passenger module.</p>
<h2> Accessing USB Printers with UDEV</h2>
<p>In the gitrepos, you&#8217;ll see a udev rule file in the salor package, salor_deb / salor / etc / udev / rules.d , this is for using with my other project, also on github which is called <a href="https://github.com/jasonknight/printr">printr</a>,<br />
printr is currently being used in several production deployments of this software to print to receipt printers, and to print labels and such. We are using the Metapace T-1 USB Thermal printer, I haven&#8217;t tested it with anything else, but I&#8217;d like too.</p>
<h2> Salor Gui (C++ Frontend that is a dumb browser)</h2>
<p>What with QT Creators ability to generate an HTML5 app pretty much the same why I am doing it, I won&#8217;t go into much detail. The only extra thing that is going on with salor_gui is that it is compiled against libdlo and libusb to write to mini usb screens, we use those instead of pole displays, which gives customers a full color, styled output of the current order total and item, as well as having room for advertisements, so you can upsell your products and get exposure for upcoming sales etc. </p>
<p>I will continue this part soon and talk about salor_customer_screen.cpp and replacing the QWebPage. Really what is going on is that there are two webkit widgets, one hidden that is accessing a special url to view a customer screen served by the rails app, so all of the visual appeal is 100% HTML/CSS, it just paints the webview to a file and passes the filename to a c module that prints the .bmp file directly to the USB device, mainly because there aren&#8217;t any linux drivers for the DisplayLink mini-usb screen.</p>
]]></content:encoded>
			<wfw:commentRss>http://jolierouge.net/2011/07/deploy-ruby-on-rails-to-the-desktop-ubuntu-as-a-debian-package/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

