Archive for January, 2010

31 Jan

Prevent a ScrollViewer’s Vertical ScrollBar to be displayed

comments

A ScrollViewer is a container that can display content that is larger than the ScrollViewer itself. However by default the Scroll Viewer displays a Vertical Scrollbar even if the the content falls within the dimension of the ScrollViewer

<Canvas x:Name="can">    <ScrollViewer Width="200" Height="200"                  Canvas.Left="30" Canvas.Top="30">        <TextBlock Text="Lorem Ipsum Lorem">                     </TextBlock>    </ScrollViewer></Canvas>

image

In order to prevent a vertical scrollbar to be displayed, just set the VerticalScrollBarVisibility property to Auto

<Canvas x:Name="can">    <ScrollViewer Width="200" Height="200"                  Canvas.Left="30" Canvas.Top="30"                  VerticalScrollBarVisibility="Auto">        <TextBlock Text="Lorem Ipsum Lorem">                     </TextBlock>    </ScrollViewer></Canvas>

The Vertical ScrollBar does not appear now.

image

From DevCurry

30 Jan

Groovy and SQL*Plus

comments

Oracle’s SQL*Plus is not as user-friendly as SQL Developer or JDeveloper for manipulating data in an Oracle database, but it is still commonly used. In fact, SQL*Plus is often preferred to the tools with fancier user interfaces for quick and dirty manipulation, for running SQL scripts, for being run as part of shell scripts, and for other non-interactive uses. Furthermore, Oracle’s SQL*Plus page calls SQL*Plus “the primary interface to the Oracle Database server.” In this blog post, I look at using SQL*Plus in conjunction with Groovy scripts.

Groovy’s Process Management plays the most significant role in the process of using Groovy with SQL*Plus. This functionality is easily applied thanks to the GDK’s String extension that includes an execute() method which returns a Process running the command contained within that GDK-extended String. This mechanism will be used repeatedly in the examples in this blog post.

Notes Related Specifically to Windows/Vista

Many books, blogs, and articles on using Groovy with Windows rightly point out that some of the commonly used commands in Windows are not actually executables, but are instead built-in commands. These commands must be prepended with cmd /C to be executed appropriately. However, this step is unnecessary when invoking SQL*Plus from Groovy on Windows because SQL*Plus is a separate executable.

When using Vista, it is important to run SQL*Plus with the appropriate privileges. Because the Groovy scripts in this post run SQL*Plus, the scripts should be executed in a console window that is being run under administrative privileges. An error message including the phrase “The requested operation requires elevation” is seen when the Groovy scripts using SQL*Plus are executed without the appropriate privileges. This is demonstrated in the next screen snapshot.

Example 1: Basic Query Statement

One of the easiest ways of using SQL*Plus is to write a file containing commands to be run within SQL*Plus. These files often end with the .sql suffix and are typically executed in SQL*Plus by prefacing the name of script file (with path if the file is not in the current working directory) with the @ symbol.

In this first example, that SQL*Plus script file is called 01-employeeIds.sql and is a single-line script:

01-employeeIds.sql

select employee_id from employees;

The above script is expected to be executed against the HR sample schema that is supplied with most modern versions of the Oracle database. The Groovy to run this SQL*Plus script file is contained in the next code listing for sql01.groovy:

sql01.groovy

#!/usr/bin/env groovydef sqlplusCmd = "sqlplus hr/hr @01-employeeIds.sql".execute()println "${sqlplusCmd.class}"sqlplusCmd.in.eachLine { line -> println line }

The above Groovy script specifies an explicit call to SQL*Plus with the ‘hr’ username and associated ‘hr’ password. It then runs the script showed above by prefacing its name with the “@” symbol. All of this is included in a GDK-extended String upon which the execute() method is invoked. The object returned from that call is a GDK-extended Process instance (as illustrated by the println call below its instantiation) from which each line is printed.

The initial results of running the above script are shown in the next screen snapshot:

In the above output, the first of many rows returned from the database are shown after the SQL*Plus banner is displayed and the line showing that the GDK String.execute() method returns a java.lang.ProcessImpl is displayed.

When run as shown above, this script never ends because the SQL*Plus session is never exited. This is easily addressed by adding the word “exit” to the end of the SQL script, which will be done in the next example. The next screen snapshot demonstrates how the script appears to “hang” when the SQL*Plus session has not been explicitly exited.

Example 2: Cleaning Up SQL*Plus’s Output

We often don’t want the SQL*Plus banner to be displayed when running SQL*Plus via script. SQL*Plus provides the -S option to suppress this banner. The next version of the Groovy script will take advantage of that as shown in sql02.groovy:

sql02.groovy

#!/usr/bin/env groovydef sqlplusCmd = "sqlplus -S hr/hr @02-employeeIds.sql".execute()sqlplusCmd.in.eachLine { line -> println line }

The only changes to this script from the Groovy script in the first example is the addition of -S to suppress SQL*Plus’s banner and the calling of a different SQL script file (02-employeeIds.sql), which will be shown next.

When running SQL*Plus with scripts, it is often convenient to suppress other portions of feedback in addition to suppressing the SQL*Plus banner. Many of these types of output are turned off or suppressed within SQL*Plus by using the SET command to set the relevant property to a desired value. The code listing for 02-employeeIds.sql demonstrates turning off query results feedback, header information, and page separation in the SQL*Plus results and also explicitly exits from SQL*Plus.

02-employeeIds.sql

-- HEADING off turns off column headings in output of query resultsset HEADING off-- FEEDBACK turns off message saying number of rows returnedset FEEDBACK off-- PAGESIZE to 0 removes spaces between "pages" of resultsset PAGESIZE 0

select employee_id from employees;

-- Return SQL*Plus settings to defaultsset HEADING onset FEEDBACK 6set PAGESIZE 14exit

The next two screen snapshots demonstrate the leaner/cleaner output with the SQL*Plus banner suppressed along with no headers, no page separation, and no feedback. The second of the images proves that exit successfully exits SQL*Plus (and the invoking Groovy script).

Example 3: Passing in Parameter

It is often the case that we want to run SQL*Plus scripts depending on parameters set dynamically when the script is executed. SQL*Plus accepts command-line parameters and this feature is leveraged in the next SQL script listing.

03-employeeFind.sql

-- HEADING off turns off column headings in output of query resultsset HEADING off-- FEEDBACK turns off message saying number of rows returnedset FEEDBACK off-- PAGESIZE to 0 removes spaces between "pages" of resultsset PAGESIZE 0

select first_name || ' ' || last_name "NAME" from employees where employee_id = &1;

-- Return SQL*Plus settings to defaultsset HEADING onset FEEDBACK 6set PAGESIZE 14exit

In the above script, an employee’s full name is returned based on a provided parameter (&1) representing the employee’s ID. To support this expected parameter, the Groovy script must supply that ID to the SQL*Plus script. This is shown in the Groovy script sql03.sql:

sql03.grooy

#!/usr/bin/env groovyif (!args){   println "You must supply the ID of the employee of interest."   System.exit(-1)}def sqlplusCmd = "sqlplus -S hr/hr @03-employeeFind.sql ${args[0]}".execute()sqlplusCmd.in.eachLine { line -> println line }

This Groovy script exits promptly if no parameter is provided and informs the user that an ID is required. If the ID is provided, it is passed to the SQL*Plus script by appending it to the end of the SQL*Plus invocation. The output from this is shown next.

The screen snapshot just shown demonstrates that the parameter passing from command-line to Groovy script to SQL*Plus worked fine. The only downside is that the SQL*Plus variable substitution is explicitly shown and this may not always be desirable. I can turn this off by specifying set VERIFY off in the SQL*Plus script. When I do that, the output is as shown next.

Example 4: Handling Return SQL*Plus Return Code

Because Groovy’s process management capability uses a GDK-extended Process, the Process.exitValue() method can be used to access the codes returned from invoked commands. This allows the Groovy code to analyze the codes returned from the invoked script and act appropriately.

To illustrate this, the SQL*Plus script used above is modified to return a -4. The modified version is shown next.

04-employeeFind.sql

-- HEADING off turns off column headings in output of query resultsset HEADING off-- FEEDBACK turns off message saying number of rows returnedset FEEDBACK off-- PAGESIZE to 0 removes spaces between "pages" of resultsset PAGESIZE 0-- VERIFY off turns off the prompts showing variable substitutionset VERIFY off

select first_name || ' ' || last_name "NAME" from employees where employee_id = &1;

-- Return SQL*Plus settings to defaultsset HEADING onset FEEDBACK 6set PAGESIZE 14set VERIFY on

-- Pretend there is some type of error or other condition in which the returning-- of -4 is appropriateexit -4

The modified Groovy script that takes advantage of Process.exitValue() to process this returned code is shown next. This Groovy script simply prints the value, but it could implement alternative logic based on the code returned.

sql04.groovy

#!/usr/bin/env groovyif (!args){   println "You must supply the ID of the employee of interest."   System.exit(-1)}def sqlplusCmd = "sqlplus -S hr/hr @04-employeeFind.sql ${args[0]}".execute()sqlplusCmd.in.eachLine { line -> println line }println "Return value: ${sqlplusCmd.exitValue()}"

When this script is executed, its output looks like that shown in the next screen snapshot.

Example 5: Processing Significant SQL*Plus Output

There are times when the Groovy script needs to process more than a return code. One way of doing this is to have the SQL*Plus script write out data to an external file that the Groovy script can process. It helps, of course, that Groovy provides some nice GDK File extensions.

The SQL*Plus SPOOL command can be used to spool output to an operating system file.

An example of a SQL*Plus script that writes employee last names and first names, separated by a comma, on individual lines of a file named “name.txt” is shown next.

05-employeeList.sql

-- HEADING off turns off column headings in output of query resultsset HEADING off-- FEEDBACK turns off message saying number of rows returnedset FEEDBACK off-- PAGESIZE to 0 removes spaces between "pages" of resultsset PAGESIZE 0-- VERIFY off turns off the prompts showing variable substitutionset VERIFY off-- COLSEP sets character to be placed between returned columnsset COLSEP ,-- TRIMSPOOL affects spooling output only; not SQL*Plusset TRIMSPOOL on

spool name.txtselect last_name, first_name from employees;spool off

-- Return SQL*Plus settings to defaultsset HEADING onset FEEDBACK 6set PAGESIZE 14set VERIFY onset COLSEP " "set TRIMSPOOL offexit

When a Groovy script runs this file, the expected file named name.txt is generated. A portion of it (top and bottom) is shown next.

Abel                     ,EllenAnde                     ,SundarAtkinson                 ,MozheAustin                   ,DavidBaer                     ,HermannBaida                    ,ShelliBanda                    ,AmitBates                    ,ElizabethBell                     ,SarahBernstein                ,DavidBissot                   ,LauraBloom                    ,HarrisonBull                     ,Alexis

. . .

Vollman                  ,ShantaWalsh                    ,AlanaWeiss                    ,MatthewWhalen                   ,JenniferZlotkey                  ,Eleni

This output file can be processed in the same Groovy script that caused it to be generated. Groovy provides rich features for file handling and String manipulation, making it highly effective in this situation.

sql05.groovy

#!/usr/bin/env groovydef sqlplusCmd = "sqlplus -S hr/hr @05-employeeList.sql".execute()def file = new File("name.txt")file.eachLine { println "Name (Last, First): ${it}" }

Much more sophisticated logic could be performed on the contents of the name.txt file, but this demonstrates how easy it is to fix the spooled output with the Groovy script. The bottom portion of the script’s execution is shown in the next screen snapshot.

Conclusion and Final Remarks

Groovy and SQL*Plus can be used effectively together to script data-related functionality. Groovy offers many of the advantages of traditional scripting languages when used in conjunction with SQL*Plus, but offers the added advantage of enjoying full access to the JVM and the plethora of Java libraries. Groovy can be used with existing SQL*Plus scripts or can access the database directly with its powerful and convenient JDBC abstraction GroovySql.

From Dustin's Software Development Cogitations and Speculations

30 Jan

My Personal Blog Policies

comments

The recent posting of the The Oracle Social Media Participation Policy on Justin Kestelyn’s (Oracle Technology Network Editor in Chief) blog has caused me to reevaluate my own personal and previously unwritten policies that affect how and what I write in this blog. In this post, I briefly look at the informal and unwritten policies that I have attempted to follow in writing posts for this blog and why these internally-motivated policies are important. Other developers who blog (and I think more should) may wish to similarly take an inventory of their own blogging practices.

Mixing of Personal and Technical

One of the main differences Justin calls out between Oracle’s policy and Sun’s policy is the mixing of personal with work-related content. In an update to the post, Justin points out that not all personal is discouraged. In many ways, my own post (though hosted on Google’s Blogger rather than on any employer’s infrastructure) follows the same advice. I do weave small personal details into my posts, but the focus of each post is always technically related.

The reason for this is that I have found that I prefer that approach as a reader of other peoples’ blogs. I present in a way I most enjoy as an attendee at a presentation (fast-talking, content-rich presentations) and I write my blog in the way I prefer others’ blogs (strongly focused on the technical subjects with just enough personal details to make the topic less dry, somewhat personable, and to provide informed opinion).

I tend to prefer it when other bloggers separate purely personal non-technical content from their technical content. The reason for this is that I often don’t know these people personally and while their technical expertise and insight is valuable to me, I really don’t care about their purely personal interests (especially in terms of politics). I don’t want to wade through meaningless and uninteresting non-technical details to find the technical gems. I do “maintain” a personal blog with non-technical subjects, but it doesn’t get the same attention from me as my technical blog.

Long-Term Blog Availability

One of the respondents to Justin’s post asked about the future of his Sun blog. This is a reminder that one’s blog can get removed at anytime. Hosting one’s own blog obviously reduces the chances of anyone else removing it, but insufficient backups can mean problems even then. Hackers, hardware problems, and even user error could wipe out a blog whether it is hosted externally or on one’s own. Very few things in life are guaranteed and online resource availability is certainly not (see the demise of GeoCities as an example). It is important to back up one’s blogs. It helps if a blog has been reproduced on other hosts (which is sometimes the case), but even this can be difficult to piece back together.

I was very happy when Blogger announced the ability to export a blog and import a blog. That certainly contributes to the ability to move one’s blog to another host if necessary or desired. The ability to do that is one of the reasons that I’ve stayed with Blogger.

In addition, I have my blog posts forwarded to multiple e-mail accounts as additional backup. The export/import is certainly easier if I ever need to actually do this in bulk, but the e-mail messages are automatic and are easily stored. In other words, the export/import can be more difficult to remember to do in a timely manner, but are easier to do if the time comes to export/import the blog in bulk.

In the worst case, there are other options for resurrecting a “lost blog” such as using Google Cache or the Internet Archive WayBack Machine. Reconstructing a blog from these two sources would be tedious and depends on the blog being archived/cached in these resources.

In summary on the topic of long-term blog availability, I continue to use Blogger and back it up occasionally using the export feature. I also have my posts forwarded to multiple e-mail accounts as soon as they are submitted. If Google ever stops supporting Blogger, I will hopefully have the ability to easily move my blog posts to another provider or, in the less optimal case, reconstruct them from my e-mail messages.

Watching What I Say

In my blog, I do endeavor to keep my criticisms as constructive as possible and I try not to allow emotion to override technical merit. Although I feel I do pretty well at this generally, I do better at it sometimes more than others. One of the blog posts that seemed to lead to Justin’s post, Assimilation Begins…Oracle Censors Blogs.Sun.com, the blog author does seem to drop into an emotionally-charged state with significant use of hyperbole (though I love the use of the image of one of my favorite fictional villains [The Borg]).

The author uses words like “muck-mucks“, “subjugate Sun culture” (cultural change seems to inevitably happen in mergers and acquisitions between very large companies), “Snoracle,” “draconian rules,” and “cultural imperialism.” Normally, use of exaggeration and hyperbole undermines the credibility of a blog topic in my mind, but in this case, I attribute it more to the blog author’s referenced personal connection to the creation of the blogs.sun.com site. It is easier to understand this emotion in that light, even if it seems a little overly dramatic from an outsider’s perspective.

I acknowledge that I have said things and written things that are emotionally-driven and often overly critical, especially in e-mail and newsgroups. I try a little harder with blogs to not go that far and be more controlled in what I write.

I prefer blogs with opinions and facts as long as the opinions are informed opinions and are presented as opinion rather than fact. I also understand the importance of not revealing trade secrets regarding employers, clients, etc. and in not committing libel, slander, and the like. When one writes a blog post, the onus is on that person to think carefully about what he or she writes.

In general, I sometimes feel the “online frontier” is far too wild in terms of lack of civility and respect. I do try to keep my blog more positively focused and to talk about things I like or appreciate more often than my occasional posts about things I don’t like or wish would be better. There is a place for constructive criticism and constant improvement, but it doesn’t need to be rude and condescending.

Conclusion

I think it is important to have personal guidelines that shape what we say, do, and write. Having internal guidelines that I attempt to adhere to in writing this blog is an extension of that. It is my opinion that these guidelines benefit me and those who read one or more of my posts. It’s time to back up my blog while I’m thinking about it.

From Dustin's Software Development Cogitations and Speculations

30 Jan

Thank You (2009 Edition)

comments

Before January slips away from me, I want to get my annual Thank You post out! Thanks to TheDoc (our resident prolific forums guru) for reminding me.

Milestones

Snippets Launched

The biggest addition to this site in 2009 was the snippets area. It has been a popular resource which makes me happy since that’s the reason this site is around. It’s been slowing down a little, but I’m not too worried about that. You are welcome to contribute snippets of course, to help keep that area bigger and better.

Born and Died

2009 saw the death of “Status”, a project between me and Richard Felix Jr. But also saw the birth of Are My Sites Up? (kinda wild that’s only been one year since AMSU went up). Are My Sites Up was based on yearly pricing, so we are seeing the first round of people renewing their service right now, which is awesome.

Digging Into WordPress

I wrote a book this year with co-author Jeff Starr. As awesome as that was, I consider the blog that goes with it an equal accomplishment. I think I just love blogging.

Speaking

2009 was the first year I spoke at any events. The first being the Front End Design Conference in 2009. Between then and now, I’ve spoken at a number of other cool events. I hope to do some more of that in 2010. I’ll be at the CMS Expo in May, but other than that nothing else lined up.

Design

There were two biggish redesigns in 2009. One in September and one in December. Kind of strangely close together. At the time of this writing I’m calling it v6, and for the record, I rather like it. Probably won’t last long, but even when I do redesign, as you all know, it’s mostly just refinements and alignments rather than crazy huge overhauls. For example, the sidebar has been on the right since day one.

Writing Style

In the last few months I’ve been writing more editorial style posts. I plan to continue doing that as I enjoy it and I enjoy the conversion that is a result of it. I don’t plan to have it take over the site though. I plan to do tutorials and tips/tricks as well.

Chicago

Around the 4th of July I moved from Portland to Chicago. I like Portland the city (and the entire surrounding state) better, but I like Chicago as well and enjoy being closer to home and the Badgers.

Work

I was and still am a full time designer at Chatman Design. We’ve done some pretty fun and successful projects for local clients. We’ve also see some sites deteriorate and one thing we are working on right now is taking one of those and rehauling it. I’m excited to see that launch, if and when we can convince the client that they need it.

Statistics

  • The highest-ever RSS feed subscriber count was 39,690.
  • There have been 549 posts published, which makes 280 of them this year alone, and probably more than that since I’ve removed some old useless ones.
  • 3,105 people have used the CSS-Tricks contact form, which makes 1,885 of them this year. Last year I said I responded to 90%, I’m thinking that’s closer to 75% this year. I really try, but I can’t do individual troubleshooting for the most part anymore.
  • I’m up to screencast #79, with #80 and #81 already thought up in my head. That makes only 31 this year, less prolific than last year. I still love doing them but they are the least return on investment thing that I do with my time.
  • I spoke at 7 events.
  • There are 4,786 members of the forums who have posted 22,183 messages. This has about quadrupled since last year, although the forums see about 1/10 the traffic of the rest of the site. Huge shout out to all the forums guys who help keep that place so ridiculously helpful.
  • Search engines provide 39% of traffic, 38% from referring sites, and 21% direct. I think that’s a solid mix.
  • The most popular single article of the year was the Auto-Playing Featured Content Slider, responsible for 241,333 pageviews and 1.65% of total traffic.
  • The single highest traffic day was August 24th, with 94,037 pageviews from the Moving Boxes post. Apparently, people like slidy JavaScript things.

To Come

Free Stuff, Soon

As part of all this thank you business, I have a plan to give away a whole bunch of books I have amassed and could use a better home. I’m still reigning in all the details. But it’s going to be fun, trust me.

Who Knows!

Again this year, it’s really hard to say what the future holds for 2010. I have less definite plans this year than I did last year, partially on purpose since I always have so much stuff on my plate I don’t like making major plans on top of it all. I am genuinely excited to live through it though.

 

Most of all, thank you to everyone who visits this site on a regular basis and participates in the community here. The year of 2009 was the first that this site solidified it’s place as not only something I do for fun but also as a part of my life and career. That’s only possible because of people like you.

From CSS-Tricks

30 Jan

Adding all TextBox values to a Hidden field using jQuery

comments

I was recently asked on one of the ASP.NET forums how to store all the values of every text box in a hidden field using JavaScript. I immediately said use jQuery! And this is what I came up with:

<html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server">    <title></title>    <script src="http://code.jquery.com/jquery-latest.js"    language="javascript" type="text/javascript"></script>    <script language="javascript" type="text/javascript">        $(function() {            $("#Button1").click(function(event) {                               var data = [];                var form = $("form :input[type=text]");                $.each(form, function(e, textBox) {                    data.push($.trim(textBox.value));                });                $("#HiddenAddressData").val(data.join(" "));            });        });    </script>

</head><body>    <form>        <input id="Address1" type="text" /><br />        <input id="Address2" type="text" /><br />        <input id="State" type="text" /><br />        <input id="Zip" type="text" /><br />        <input id="Button1" type="button" value="button" />        <input id="HiddenAddressData" type="hidden" />    </form></body></html>

What I’m doing is looping through each form element and adding it to my JavaScript array:

var data = [];var form = $("form :input[type=text]");$.each(form, function(e, textBox) {    data.push($.trim(textBox.value));});

Then I join all the element of the array into a single value that is copied to the hidden field:

$("#HiddenAddressData").val(data.join(" "));

Nice and simple.

From DevCurry

29 Jan

Seriously: Where Is The Link Between Copyright Infringement And Terrorism/Organized Crime

comments

Over the past few years, the entertainment industry has been pushing hard on the claim that copyright infringement and organized crime (or terrorism) are somehow connected. It’s a regular talking point and is often brought up in discussions about ACTA. And yet, where is this supposed link? Glynn Moody discusses what a bogus concept it is, and why a new EU report is massively discredited in simply taking the claim at face value:


I’ve noted several times an increasingly popular trope of the intellectual monopolists: since counterfeiting is often linked with organised crime, and because counterfeiting and copyright infringement are vaguely similar, it follows as surely as night follows day that copyright infringement is linked with organised crime.

But, of course, that’s not the case. In fact, those who traffic in things like counterfeit DVDs are discovering that unauthorized access to online files is actually harming the counterfeit DVD business that organized crime has used in the past. Based on the logic put forth by the entertainment industry, shouldn’t we cheer on The Pirate Bay for putting DVD counterfeiters (and thus, organized criminals and terrorists) out of business?

Moody goes on to challenge the idea that copyright infringement leads to people being put in harm’s way:


*Counterfeiting* can certainly be a threat to consumer health and safety, and needs to be combated vigorously, but the idea that copyright infringement might be is simply risible, and it’s an insult to our intelligence even to suggest it.

Indeed. This is a problem. So, let’s start calling the industry on this. Can they show any actual evidence that basic online copyright infringement is in any way linked to organized crime or terrorism?

Permalink | Comments | Email This Story





From Techdirt

29 Jan

New Data Shows No Decrease In Crashes After Driving While Yakking Laws Were Implemented

comments

We’ve been suspicious of whether or not “driving while yakking” laws actually do any good. There are already laws against reckless driving, and picking out specific driving distractions doesn’t seem likely to change things, since people just switch to other distractions. A study back in 2006 found that driving while yakking laws don’t make the roads any safer, and a brand new study has apparently surprised researchers in showing no impact whatsoever on crash data even as studies show that fewer people are holding phones to their ears while driving (thanks Chirag). Now, there could be plenty of reasons for this — such as that people are just switching to ear pieces which can be just as dangerous. Or it could be that common claims about driving while yakking leading to more accidents are wrong. Or it could be more complex, with other variables having an impact, but which is hidden in the data. Either way, it certainly seems worth investigating more seriously. If the goal is better road safety, then we should make sure that the laws actually lead to that result. If they don’t, then it’s important to understand why not.

Permalink | Comments | Email This Story





From Techdirt

29 Jan

Mozilla releases first mobile Firefox browser

comments

Just two days ago Mozilla pushed out the third release candidate for its first mobile Firefox browser. On Friday, Firefox 1.0 for Nokia’s Maemo arrived.

Originally posted at The Download Blog

From Webware.com

29 Jan

Econ 101: Study Shows That If Record Labels Lowered Prices On Music, They Would Sell A Lot More

comments

Having talked with a bunch of music execs recently, as well as a few different companies that do analytics in the music space, one thing became clear: unlike most other industries, record label execs tend not to be particularly data or analytics-driven. Let’s just say they didn’t get into the recording industry because they were good at math. There are a few exceptions, obviously, but getting many industry execs to think logically and examine data isn’t particularly easy. This isn’t that surprising, given how many examples of actions by big record label execs that make little to no sense when thought about analytically.

Yet another study has come out suggesting that the industry has pricing all wrong, pointing out that the increase in sales from dropping the price of music would increase profits. And yet what has the industry been trying to do? That’s right: trying to raise the price. The study suggested that the “optimal” price for music might be closer to $0.60 per track. That still seems way too high to me when you look at how people flocked to services like Allofmp3.com, but in general I think the basic concept makes sense. You can maximize revenue by dropping prices, but it doesn’t seem like many record industry execs have realized that.

Permalink | Comments | Email This Story





From Techdirt

29 Jan

Chrome 5 debuts more settings options

comments

Google updated its Chrome browser’s developer’s builds to version 5 for Windows and Mac today, the first time any version of Chrome has reached that milestone.

Originally posted at The Download Blog

From Webware.com

Categories