It's amazing that the most relevant answer is buried under ton of irrelevant stuff.
It's freeware (Lightroom is nice but for its price you should consider it if you are going to use all other features, not just for tagging).
It's based on the excellent Exiftool tagger (much more reliable than many commercial tools when writing back to files keeping original metadata).
You can decide where to store the metadata (EXIF/IPICT/XMP in the file or sidecar XMP).
Easy geotagging integrated with Goggle maps and supporting favorites locations.
Easy tagging in general with templates.
Supports batch tagging.
Easy in general, yet flexible if you want to do something more complex supporting extra commands through Exiftool.
Windows based (can't believe how people suggest to change OS to do a simple thing like tagging).
Just try it, I'm sure it's what you are looking for. Only major thing missing: facial recognition to assist tagging people. For that, you can use Live Photogallery, it's not as good as Picasa but at least it stores the metadata in documented XMP estensions (Picasa store facial information inside sidecar files but they contain references to unique ids in their database).
I canceled the Sky satellite contract years ago. First they started with documentary channels (the only ones I was really interested in) with ads about other programs. Then after a year or so they started with generic advertisement.
I simply canceled everything and gave them a hard time to get back the leased decoder. I'm not going to pay for advertisement that's it.
Nowadays, I simply look a the news on the free channels (luckily here they are not interrupted by ads. Instead, I now read a *lot* more and can dedicate time to the kids to do something more intelligent that passively looking at the box full of crap.
Of course, they still aren't there, but in terms of being a front end for a media server it does a good job.
Good job? You must be joking. Can't access regular CIFS shares, requires DLNA and then it's not able to play FLAC, which is pretty much standard among people taking digital backups of their CDs, unless you have something that transcodes on-the-fly and not many NASs are powerful enough to do that. A complete failure I would say. Let alone the UI which is horrible.
Some cameras already use technologies to optimize the dynamic range e.g. using Apical solutions:
http://www.dpreview.com/news/0903/09031801apical.asp
not really like multiple shots with different exposures, but still very effective. Moreover, I prefer to leave such things to the post-processing phase of my work flow.
Still nice that the camera is open, I hate manufacturers issuing dozen of new cameras every six months with very small increments in the feature set every time.
FWIW they use the words in the second and third edition (Databases Types and the Relational Model) of the third manifesto.
Anyway, the whole point, let me be a little bit reductive, is that with a properly implemented type system in the dbms, and a proper language (along the lines of the educational Tutorial D), we will have a rich formal model and can live without the collection of best practices that people call object "model" <g> ok, ok, a lot of people will need to get used to relations instead of collections or arrays but that's life;-)
I checked the links and I must admit that I didn't know about such regulations in Lombardy. I live on lake Lago Maggiore, which is around 80km-100km away from Milan, and I must say that light pollution (yes, I call it pollution, parent poster is simply pathetic) in awful. Most of it comes from the nearby airport (Malpensa) and the rest from the wild real estate market that built houses everywhere.
Speaking of Provence, I always respected that they chose not put street lights in many places. Even in touristic places. For example: the route that goes from Saint-Tropez to Ramatuelle. Then again things are slowly changing. I still remember that up to 5 years ago you could still get to the beach in Pampelonne in complete darkness through Boulevard Patch. Can you believe that now they placed ground lights transforming it in an airport runaway? Oh even nicer: an orange glowing billboard with parking info that is on 24/7 (the parking is of course almost empty at night and no one is there collecting money, abandoned if you wish). I guess this is the price for this mighty "over sized sunglasses" civilization. Maybe I'm just slowly becoming old:-)
Exactly. People that modded parent as troll should go out of the basement and have a look at what happens in large organizations where users are left building Office cross-application. Criticizing this model is one thing, living in a idealistic dream i another thing. So op arguments are perfectly legit.
Having said so, I don't think availability of this integration between apps is a problem yet. Although there are already some examples, I don't see large organizations queuing up to outsource their office applications to the cloud. It may happen more and more in the future, and Goggle is probably wise enough to have some plan somewhere, but it's just not a priority right now.
No, there is a difference in this example between the selected and the sorted-on field. Plus, the selected field may not be unique (which is the main reason for getting an arbitrary amount of results). If I make a webapp in which I produce a subset of one or more tables that are the result of a query that I want to present to the user in the form of pages, I may, for example select on everybody in Houston (which gives me a subset), and sort on name. If I get to use offset and limit, I can do something like this:
SELECT * FROM PEOPLE WHERE CITY='Houston' ORDER BY NAME OFFSET 0 LIMIT 20;
For the next page, I would then replace '0' with '20', to give me the next 'page' of the result set. Fantastic. However, if I did this:
SELECT * FROM PEOPLE WHERE CITY='Houston' AND ROWNUM() >= 0 AND ROWNUM() < 20 ORDER BY NAME;
I would first select the first twenty (arbitrary) results from the database, and only *then* sort them. My result could contain names beginning with 'a' through 'z' for every page ! The 'solution' proposed here, says that you should be aware of your resultset.
To put it simply: no.
Look: I'm not sure if we don't understand each other, if you're teasing me around for trolling purposes or if you are genuinely uneducated on the ROW_NUMBER() windowing function (which has nothing to do with Oracle's ROWNUM pseudo-column); but it doesn't work as you say.
To prove it, you just need a copy of SQL Server 2008 (express edition should do) and the last version (available on Codeplex) of the AdventureWorks2008 sample database. Then just run this query against it and play with the numbers as you want:
SELECT * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY P1.FirstName) AS rn , P1.FirstName, P1.LastName, A1.City FROM Person.Person AS P1 JOIN Person.BusinessEntityAddress AS T1 ON P1.BusinessEntityID = T1.BusinessEntityID JOIN Person.Address AS A1 ON T1.AddressID = A1.AddressID WHERE A1.City = 'Redmond' ) AS T WHERE rn BETWEEN 1 AND 21;
Ordering is applied right after the A1.City = 'Redmond' predicate while generating row numbers with the ROW_NUMBER() function.
So
there's absolutely no arbitrary selection for assignment of row numbers, they are assigned base on FirstName ordering
because of this, there can't be names beginning with 'a' through 'z' for every page (unless, of course, they all fit in a single page)
I suspect you are simply wasting my time because you don't know how windowing functions work but still you are arrogant enough to try and bend Oracle's ROWNUM into a possible behavior without simply looking up some documentation. Have you *at least* seen and contemplated that the ROW_NUMBER() function comes with an OVER (PARTITION BY..., ORDER BY...) clause???? And that ORDER BY clause is different from the ORDER BY clause that come at the end of a SQL statement?
A ROWNUM value is assigned to a row after it passes the predicate phase of the query but before the query does any sorting or aggregation.
This is simply *NOT* how the ROW_NUMBER() windowing function works! Look it up in both Oracle's and SQL Server's documentation.
There are some additional considerations that may apply because of determinism of the sort order or duplicates because of the chosen attributes in the partitioning/ordering clause, but these are considerations that applies also to LIMIT.
Before starting again running in circles, because you have no clue about how this windowing function works,
I'm sorry but I don't understand you. If the results are 10, they are marked from 1 to 10. If the results are 700000, they are marked from 1 to 700000. I don't know where you take the 10 to 20, a row number is just a row number and has no relationship with other ids or numbers (except for possible ordering, but see next paragraph).
Moreover, I can't make any sense of what you're saying about matching rows fetched in arbitrary order and so on. Look is very simple: row numbers are logically assigned in the inside table expression (query if you wish) based on the specified ordering in the OVER (ORDER BY) clause (and not in arbitrary order). Then rows are filtered in the where clause based on the give row number (so order is completely preserved). Please note that I said "logically" because, of course, the whole result of the table expression is not completely materialized before applying the outer where clause. Streaming operators in the query plan permit access optimizations so that the query process only the minimum amount of data.
I see calling names but no arguments from your part. "If they use it, there a reason" is hardly an argument anywhere except among clueless people.
Taking for granted that the list is accurate, I'm pretty sure none of them even remotely thinks about using MySQL for data warehousing. The ad-hoc nature of requests from a lot of business intelligence solutions, and the lack of optimizationn techniques in this scenarios, will simply bring it on it knees immediately. Let alone the fact that other products include specific storage engines for multi-dimensional models.
The other guy, OTOH, brought some arguments and gave due credit also to MySQL. So, sorry dude, but if I had one point left, instead of modding him up, I'd just mod you down into oblivion.
The result is that PG is almost always faster than MySQL in the general case.
Amen. And that is exactly why DBMSs where built in the first place: to handle efficiently, and independently from physical implementations, the the general case. A lot of solutions that implements very specific, hard-coded, physical access paths are faster than any DBMS.
MySQL is also loaded with gotcha's and odd behavior based on the "back end" or what settings you use.
And this is exactly what a DBMS should prevent: dependencies on physical implementations.
If someone think this is only theory, then he should do a reality check and see what good optimizers in the Oracle, DB2, MSSQL (and I guess PostgreSQL but I have not experience there) space can do with extremely complex queries
If I need to be extremely fast just a bunch classes of queries for a web back-end, then I may as well replicate data and just use an indexing engine.
The bwin Data Management Systems group uses SQL Server 2008 to continue its tradition of providing world-class performance for its sports betting customers. During peak loads SQL Server handles more than 6,000 financial transactions per second, which Grohser says translates into more than 30,000 database transactions per second.
Well, you can use INSTEAD OF triggers. But you still have to do the actual operation in the trigger body, so yes it would be nice if they implemented it. Reality is that features gets prioritized and although it may seem a very popular thing, it's actually not.
Or row-level triggers?
Because the preferred approach with (almost) relational technology is set based instead of row-based? You can still have a row based approach in the body of the trigger if you want with a cursor and a loop. However, in most cases you simply deal with the whole set (inserted and deleted virtual tables instead of:new and:old virtual aliases). Maybe I should ask why in Oracle the examples for statement based triggers are always the same: they log the fact that an action triggered, they never deal with the data...
Anyway, a couple of better trigger questions (or rather a better flaming questions) are:
Why MSSQL doesn't support trigger with predicates? (where conditions)
Why it doesn't support columns triggers?
In both cases you have to test conditions inside the trigger body, but the trigger always fires.
Indeed. I'm off to Serre-Chevalier myself on Friday, with 90cm/25cm it isn't perfect.
Been there for new year's eve, we had a wonderful sun on the 30th and the 31th and the snow on most slopes was way more than acceptable. I go there every year and been skiing with much worses conditions. Unfortunately two of the best slopes (Luc Alphand and Casse du Boeuf) where closed at that time, but since it snowed I guess they are now open.
Enjoy yourself.
There can be several reasons beside tools. For example the express edition can be a subscriber for SQL Server replication, or you may want to take advantage of the new asynchronus infrastructure (SQL Server Broker).
I installed SQL Server Express 2005 on Windows XP and had no way to get a query plan. set showplan_text on
set showplan_all on
set statistics profile on
set statistics xml on
The lack of command-line features meant that many operational activities that could be automated required a dba to manually do the job via the gui. And lets not even talk about how you had to completely recreate DTS packages when promoting them from dev to test to prod...
Sorry dude, but you are just making up arguments or you never even bothered to open the documentation.
Every single task you can do via the GUI is done behind the covers either by issuing Transact-SQL commands, or by executing stored procedures. Of course all these commands can be issued from one of the command line interactive tools (isql.exe for versions before 7.0, osql.exe for 7.0 and 2000 or sqlcmd.exe for 2005).
You can also use profiler (via the GUI, or server-side tracing with the SQL trace infrastructure) to capture exactly which commands are issued by the GUIs. In SQL Server 2005 a lot of GUIs behave like a flight recorder and have a button to generate the Transact-SQL code to execute all the commands for a given task.
Then of course you can use any scripting language that supports ODBC/OLE-DB/db-library (to a certain extent) to issue the very same commands. Speaking of scripting languages, there's also a COM object model (SQL-DMO) and a.NET extension (SMO) to interact with a SQL Server instance.
In the box there's also SQL Server Agent a scheduler (and event listener) that can be used to execute all these scripts you can create.
Just a small set of configuration options is not available through Transact-SQL or stored prcoedures (eg. service and net library configuration) but you can still do it via scripting (WMI, DMO, SMO etc.)
About DTS packages what can I say... if you recreated then to move them from test to production then you should have spent your time reading a little bit more the documentation. DTS Packages can just be saved to any other server, file of even VB source. DTS has a rich object model and even if you had to just change connection items you could have written a small script to do it programmatically (but there are also other methods)
Why convert to an entirely different structure when just implimenting proper code standards will suffice? Using parameterized stored procedure calls instead of dynamic SQL will not only protect you from the vast majority of SQL Injection attacks, but will also improve the performance of your web page.
Performance is a good point.
Some rdbms will cache stored procedure plans in order to reuse them saving compilation and optimization time.
Even when not using stored procedures, it's a good thing to use prepared statements since some rdbms are going to produce a plan in cache that can be reused with different parameters values.
OTOH this is not always going to be the ideal thing because a cached optimized plan for a given set of parameters values may not be the optimal plan for a different set of parameters values.
It's amazing that the most relevant answer is buried under ton of irrelevant stuff.
Just try it, I'm sure it's what you are looking for. Only major thing missing: facial recognition to assist tagging people. For that, you can use Live Photogallery, it's not as good as Picasa but at least it stores the metadata in documented XMP estensions (Picasa store facial information inside sidecar files but they contain references to unique ids in their database).
I canceled the Sky satellite contract years ago. First they started with documentary channels (the only ones I was really interested in) with ads about other programs. Then after a year or so they started with generic advertisement.
I simply canceled everything and gave them a hard time to get back the leased decoder. I'm not going to pay for advertisement that's it.
Nowadays, I simply look a the news on the free channels (luckily here they are not interrupted by ads. Instead, I now read a *lot* more and can dedicate time to the kids to do something more intelligent that passively looking at the box full of crap.
You should be modded up. Parent is clearly trolling with 14 minutes.
Of course, they still aren't there, but in terms of being a front end for a media server it does a good job.
Good job? You must be joking. Can't access regular CIFS shares, requires DLNA and then it's not able to play FLAC, which is pretty much standard among people taking digital backups of their CDs, unless you have something that transcodes on-the-fly and not many NASs are powerful enough to do that. A complete failure I would say. Let alone the UI which is horrible.
Some cameras already use technologies to optimize the dynamic range e.g. using Apical solutions: http://www.dpreview.com/news/0903/09031801apical.asp not really like multiple shots with different exposures, but still very effective. Moreover, I prefer to leave such things to the post-processing phase of my work flow. Still nice that the camera is open, I hate manufacturers issuing dozen of new cameras every six months with very small increments in the feature set every time.
FWIW they use the words in the second and third edition (Databases Types and the Relational Model) of the third manifesto.
Anyway, the whole point, let me be a little bit reductive, is that with a properly implemented type system in the dbms, and a proper language (along the lines of the educational Tutorial D), we will have a rich formal model and can live without the collection of best practices that people call object "model" <g> ok, ok, a lot of people will need to get used to relations instead of collections or arrays but that's life ;-)
You have all my sympathy.
I checked the links and I must admit that I didn't know about such regulations in Lombardy. I live on lake Lago Maggiore, which is around 80km-100km away from Milan, and I must say that light pollution (yes, I call it pollution, parent poster is simply pathetic) in awful. Most of it comes from the nearby airport (Malpensa) and the rest from the wild real estate market that built houses everywhere.
Speaking of Provence, I always respected that they chose not put street lights in many places. Even in touristic places. For example: the route that goes from Saint-Tropez to Ramatuelle. Then again things are slowly changing. I still remember that up to 5 years ago you could still get to the beach in Pampelonne in complete darkness through Boulevard Patch. Can you believe that now they placed ground lights transforming it in an airport runaway? Oh even nicer: an orange glowing billboard with parking info that is on 24/7 (the parking is of course almost empty at night and no one is there collecting money, abandoned if you wish). I guess this is the price for this mighty "over sized sunglasses" civilization. Maybe I'm just slowly becoming old :-)
Exactly. People that modded parent as troll should go out of the basement and have a look at what happens in large organizations where users are left building Office cross-application. Criticizing this model is one thing, living in a idealistic dream i another thing. So op arguments are perfectly legit.
Having said so, I don't think availability of this integration between apps is a problem yet. Although there are already some examples, I don't see large organizations queuing up to outsource their office applications to the cloud. It may happen more and more in the future, and Goggle is probably wise enough to have some plan somewhere, but it's just not a priority right now.
No, there is a difference in this example between the selected and the sorted-on field. Plus, the selected field may not be unique (which is the main reason for getting an arbitrary amount of results). If I make a webapp in which I produce a subset of one or more tables that are the result of a query that I want to present to the user in the form of pages, I may, for example select on everybody in Houston (which gives me a subset), and sort on name. If I get to use offset and limit, I can do something like this:
SELECT * FROM PEOPLE WHERE CITY='Houston' ORDER BY NAME OFFSET 0 LIMIT 20;
For the next page, I would then replace '0' with '20', to give me the next 'page' of the result set. Fantastic. However, if I did this:
SELECT * FROM PEOPLE WHERE CITY='Houston' AND ROWNUM() >= 0 AND ROWNUM() < 20 ORDER BY NAME;
I would first select the first twenty (arbitrary) results from the database, and only *then* sort them. My result could contain names beginning with 'a' through 'z' for every page ! The 'solution' proposed here, says that you should be aware of your resultset.
To put it simply: no.
Look: I'm not sure if we don't understand each other, if you're teasing me around for trolling purposes or if you are genuinely uneducated on the ROW_NUMBER() windowing function (which has nothing to do with Oracle's ROWNUM pseudo-column); but it doesn't work as you say.
To prove it, you just need a copy of SQL Server 2008 (express edition should do) and the last version (available on Codeplex) of the AdventureWorks2008 sample database. Then just run this query against it and play with the numbers as you want:
Ordering is applied right after the A1.City = 'Redmond' predicate while generating row numbers with the ROW_NUMBER() function.
So
I suspect you are simply wasting my time because you don't know how windowing functions work but still you are arrogant enough to try and bend Oracle's ROWNUM into a possible behavior without simply looking up some documentation. Have you *at least* seen and contemplated that the ROW_NUMBER() function comes with an OVER (PARTITION BY ..., ORDER BY ...) clause???? And that ORDER BY clause is different from the ORDER BY clause that come at the end of a SQL statement?
Let me quote from Oracle's documentation:
A ROWNUM value is assigned to a row after it passes the predicate phase of the query but before the query does any sorting or aggregation.
This is simply *NOT* how the ROW_NUMBER() windowing function works! Look it up in both Oracle's and SQL Server's documentation.
There are some additional considerations that may apply because of determinism of the sort order or duplicates because of the chosen attributes in the partitioning/ordering clause, but these are considerations that applies also to LIMIT.
Before starting again running in circles, because you have no clue about how this windowing function works,
I'm sorry but I don't understand you. If the results are 10, they are marked from 1 to 10. If the results are 700000, they are marked from 1 to 700000. I don't know where you take the 10 to 20, a row number is just a row number and has no relationship with other ids or numbers (except for possible ordering, but see next paragraph).
Moreover, I can't make any sense of what you're saying about matching rows fetched in arbitrary order and so on. Look is very simple: row numbers are logically assigned in the inside table expression (query if you wish) based on the specified ordering in the OVER (ORDER BY) clause (and not in arbitrary order). Then rows are filtered in the where clause based on the give row number (so order is completely preserved). Please note that I said "logically" because, of course, the whole result of the table expression is not completely materialized before applying the outer where clause. Streaming operators in the query plan permit access optimizations so that the query process only the minimum amount of data.
I see calling names but no arguments from your part. "If they use it, there a reason" is hardly an argument anywhere except among clueless people.
Taking for granted that the list is accurate, I'm pretty sure none of them even remotely thinks about using MySQL for data warehousing. The ad-hoc nature of requests from a lot of business intelligence solutions, and the lack of optimizationn techniques in this scenarios, will simply bring it on it knees immediately. Let alone the fact that other products include specific storage engines for multi-dimensional models.
The other guy, OTOH, brought some arguments and gave due credit also to MySQL. So, sorry dude, but if I had one point left, instead of modding him up, I'd just mod you down into oblivion.
The result is that PG is almost always faster than MySQL in the general case.
Amen. And that is exactly why DBMSs where built in the first place: to handle efficiently, and independently from physical implementations, the the general case. A lot of solutions that implements very specific, hard-coded, physical access paths are faster than any DBMS.
MySQL is also loaded with gotcha's and odd behavior based on the "back end" or what settings you use.
And this is exactly what a DBMS should prevent: dependencies on physical implementations.
If someone think this is only theory, then he should do a reality check and see what good optimizers in the Oracle, DB2, MSSQL (and I guess PostgreSQL but I have not experience there) space can do with extremely complex queries
If I need to be extremely fast just a bunch classes of queries for a web back-end, then I may as well replicate data and just use an indexing engine.
Interesting... but it seems NASDAQ and the London Stock Exchange, among several others, do not agree with your field experience.
As another example take the Bwin case study:
The bwin Data Management Systems group uses SQL Server 2008 to continue its tradition of providing world-class performance for its sports betting customers. During peak loads SQL Server handles more than 6,000 financial transactions per second, which Grohser says translates into more than 30,000 database transactions per second.
Why doesn't SQL server have BEFORE triggers?
Well, you can use INSTEAD OF triggers. But you still have to do the actual operation in the trigger body, so yes it would be nice if they implemented it. Reality is that features gets prioritized and although it may seem a very popular thing, it's actually not.
Or row-level triggers?
Because the preferred approach with (almost) relational technology is set based instead of row-based? You can still have a row based approach in the body of the trigger if you want with a cursor and a loop. However, in most cases you simply deal with the whole set (inserted and deleted virtual tables instead of :new and :old virtual aliases). Maybe I should ask why in Oracle the examples for statement based triggers are always the same: they log the fact that an action triggered, they never deal with the data...
Anyway, a couple of better trigger questions (or rather a better flaming questions) are:
In both cases you have to test conditions inside the trigger body, but the trigger always fires.
Want other, better, flaming questions?
and so on....
There can be several reasons beside tools. For example the express edition can be a subscriber for SQL Server replication, or you may want to take advantage of the new asynchronus infrastructure (SQL Server Broker).
set showplan_text on
set showplan_all on
set statistics profile on
set statistics xml on
Sorry dude, but you are just making up arguments or you never even bothered to open the documentation.
Every single task you can do via the GUI is done behind the covers either by issuing Transact-SQL commands, or by executing stored procedures. Of course all these commands can be issued from one of the command line interactive tools (isql.exe for versions before 7.0, osql.exe for 7.0 and 2000 or sqlcmd.exe for 2005).
You can also use profiler (via the GUI, or server-side tracing with the SQL trace infrastructure) to capture exactly which commands are issued by the GUIs. In SQL Server 2005 a lot of GUIs behave like a flight recorder and have a button to generate the Transact-SQL code to execute all the commands for a given task.
Then of course you can use any scripting language that supports ODBC/OLE-DB/db-library (to a certain extent) to issue the very same commands. Speaking of scripting languages, there's also a COM object model (SQL-DMO) and a .NET extension (SMO) to interact with a SQL Server instance.
In the box there's also SQL Server Agent a scheduler (and event listener) that can be used to execute all these scripts you can create.
Just a small set of configuration options is not available through Transact-SQL or stored prcoedures (eg. service and net library configuration) but you can still do it via scripting (WMI, DMO, SMO etc.)
About DTS packages what can I say... if you recreated then to move them from test to production then you should have spent your time reading a little bit more the documentation. DTS Packages can just be saved to any other server, file of even VB source. DTS has a rich object model and even if you had to just change connection items you could have written a small script to do it programmatically (but there are also other methods)
it's just too easy to troll on this one :-)
:)
anyway... one less