Red Sand Project is an international, participatory artwork helping communities spread awareness for human trafficking. By filling cracks in sidewalks and streets with red sand and using #RedSandProject, participants provide a visual disruption to passersby, hopefully sparking curiosity and further learning about this issue. Learn more about how the Coalition has used this project to spread awareness in communities in our county.
Human trafficking is an incredibly complex issue. Education yourself on the issue is key to enacting change. Learn more about our upcoming training opportunities here.


text:
US gold medallists at Pan American Games face sanctions over anti-Trump podium protests
Race Imboden
Gwen Berry poses with her gold medal after she had raised a clenched fist on the podium (AFP Photo/Luis ROBAYO)
American fencer
Lima (AFP) - Two US gold medal winners could face sanctions after staging dramatic podium protests against US President Donald Trump at the Pan American Games in Lima.
Gwen Berry stunned the crowd when she raised a clenched right fist and bowed her head as the US national anthem closed her gold medal ceremony for the women's hammer.
The 30-year-old's protest on Saturday -- which she told US media was aimed at "extreme injustice" - echoed the iconic raised fist protest of US sprinters Tommie Smith and John Carlos at the 1968 Olympics in Mexico.
On Friday, two-time Olympian fencer Race Imboden, 26, set the tone after 'taking a knee' as his team celebrated gold in the team foil event.
He was the latest US sports star to follow NFL quarterback Colin Kaepernick, whose kneeling protest during the US national anthem before NFL games in 2016 became a national issue.
"We must call for change. This week I am honored to represent Team USA at the Pan Am Games, taking home Gold and Bronze," tweeted Imboden.
"My pride however has been cut short by the multiple shortcomings of the country I hold so dear to my heart. Racism, Gun Control, mistreatment of immigrants and a president who spreads hate are at the top of a long list.
"I chose to sacrifice my moment today at the top of the podium to call attention to issues that I believe need to be addressed. I encourage others to please use your platforms for empowerment and change."
Imboden had already staged a similar kneeling protest at the 2017 Fencing World Cup in Egypt.
Mark Jones, vice president of communications for the US Olympic and Paralympic Committee (USOPC), told ESPN that the governing body was considering what sanctions it might impose.
"Every athlete competing at the 2019 Pan American Games commits to terms of eligibility, including to refrain from demonstrations that are political in nature," Jones said in a statement to the US sports network.
"In these cases, the athletes didn't adhere to the commitment they made to the organizing committee and the USOPC.
"We respect their rights to express their viewpoints, but we are disappointed that they chose not to honor their commitment. Our leadership are reviewing what consequences may result."
Current athletes aren't the only ones who have used the Pan Am Games to call out Trump, with Olympic athletics legend Carl Lewis -- attending at the invitation of Lima Organizers -- also weighing in.
"We have a president who is racist and a misogynist, who doesn't value anybody but himself," said Lewis, who was asked to weigh in on the issue of gender equality in sport.
"My mother was a pioneer. My parents were teachers and they taught us that everyone deserves the same opportunities," said Lewis, who counts nine Olympic gold medals among his 10 total.
"Of course I'm for (equal pay) in athletics. We shouldn't even be talking about it."

redpajama_set_name: RedPajamaCommonCrawl


This month's statistics overview begins with a snapshot showing the types of institutions that are most active in terms of OTC ISIN creation activity. The DSB introduced three cross-asset and three portfolio swap templates in mid-February, and it will be interesting to see how use of these templates evolves in the coming months.
Monthly trends held steady with a return to steady state activity in February 2019. The numbers below show the number of DSB ISINs created since the inception of the service in October 2017.
As the table below shows, the market seems to have attained a degree of stability with respect to the generation and search of OTC ISIN, CFI and FISN data. A handful of ISINs have been created for the new cross-asset templates which were made available on 17th February, so this will be one to watch. The DSB also introduced 3 new portfolio swap templates at user request and expects that use of these will commence in the coming weeks.
Notably, the use of non-standard templates seems to be growing – which signals increasing adoption at the more complex end of the spectrum. As would be expected, absolute numbers are lower than those for flow instruments like vanilla options, but the relative month of month increase is around 6% for options and swaps and 4% for forwards.
Users' search request related interactions remain fairly consistent, with FIX based users continuing to dominate programmatic searches within the DSB. As above, the data below shows the volume of messages received by the DSB since inception of the Production service on 2nd October 2017.


WordPress.com makes it easy to manage multiple sites in one place. When you're logged into your account, you can access and manage any site for which you're an administrator or user. If you have a WordPress.org site using the Jetpack plugin, you can also manage that from within WordPress.com. Carrie shows you how to switch back and forth between sites within your account.


During all days of the conference, including pre-conference and sponsored evening activities, there will be Duty Officers available to help provide support for anyone who has been harassed, threatened, abused, or feels the CodeOfConduct4Lib has been violated during the conference. Below is a list of all duty officers, their photos, and the times they will be "on duty".
Send an email to c4l17-duty-officers@googlegroups.com. Only Duty Officers are subscribed to this mailing list, and no archive is kept.
Use the /dutyofficers command on the Code4lib Slack team.
Use the anonymous report form.
All duty officers attending the event — look for the black lanyards!


text:
Q: How can I inject a Terraform resource into my Lambda code? I've got a Terraform file that creates an AWS Lambda and an AWS SNS Topic. The lambda sends a message to the SNS topic. At the moment I have hardcoded the ARN for the SNS Topic in the lambda. Is there anyway of getting the lambda to pickup the ARN from Terraform instead?

A: I would create an environment variable for your lambda containing the ARN of your SNS topic. Then lambda function can read that variable and use it accordingly.

A: I found something that might help you or give you an idea, but SQS is also used in that Terraform.

#resources.tf

resource "aws_sns_topic" "results_updates" {
    name = "results-updates-topic"
}

resource "aws_sqs_queue" "results_updates_queue" {
    name = "results-updates-queue"
    redrive_policy  = "{\"deadLetterTargetArn\":\"${aws_sqs_queue.results_updates_dl_queue.arn}\",\"maxReceiveCount\":5}"
    visibility_timeout_seconds = 300

    tags = {
        Environment = "dev"
    }
}

resource "aws_sqs_queue" "results_updates_dl_queue" {
    name = "results-updates-dl-queue"
}

resource "aws_sns_topic_subscription" "results_updates_sqs_target" {
    topic_arn = "${aws_sns_topic.results_updates.arn}"
    protocol  = "sqs"
    endpoint  = "${aws_sqs_queue.results_updates_queue.arn}"
}

Hope this helps
:)

redpajama_set_name: RedPajamaStackExchange


text:
Comedy gold: New CNN poll of New Hampshire has Bernie Sanders leading Hillary ... by 27 points
Allahpundit Jan 19, 2016 10:01 PM ET
Who has the greater tolerance for electoral humiliation, Hillary or Jeb? Until recently I would have said Jeb. Sure, Hillary's now struggled against upstart challengers in two different primaries where she was heavily favored, but she battled Obama the whole way in 2008 and still leads Bernie Sanders comfortably in most states this year. She's not being humiliated by the opposition the way Jeb is.
Upon further review, though, she is in fact being humiliated by the opposition the way Jeb is.
This is bananas:
He is viewed favorably by 91 percent of likely Democratic primary voters and unfavorably by 7 percent. His support is strong among both men and women, among all age groups and in all geographic areas of the state…
Clinton was chosen by 55 percent as the candidate best able to handle ISIS, while Sanders was named by 26 percent. But, Sanders was picked by 57 percent as best able to handle the economy, while 33 percent chose Clinton.
Also, Sanders was named by 58 percent as the candidates with "the personal characteristics and qualities that a president should have." Clinton was named by 33 percent. In December, Clinton was favored in that category, 38 percent to 27 percent…
Sanders appears to be attracting large numbers of voters who have not voted in past primaries. The poll showed him leading 76 percent to 22 percent among voters who did not vote in the 2008 or 2012 presidential primary.
Last May, just eight months ago, Hillary led Sanders 51/13. Today it's 60/33 for Bernie. There's been a 65-point swing. In February 2015, Hillary had a net favorability of around +75 while Sanders, a relatively well-known poll from neighboring Vermont, hovered at around +35. Since then:
But that's not the craziest trend. This is:
That's a measure of perceived electability, supposedly Hillary's trump card. The 74-year-old avowed socialist is running her off the field. Among women, one of Hillary's core constituencies, he leads by 14 points. That's not all that surprising either: A USA Today poll a few days ago found Sanders leading Hillary among Democratic and independent women between the ages of 18 and 34 by 19 points. Granted, no one else has found him ahead by a margin like 27 points in New Hampshire, but the outlier in this case is merely one of degree: Various other polls have put him ahead by double digits. There's every reason to believe right now that she's not only going to lose New Hampshire, she's going to get blown out. And but for one outlier in Iowa this month showing Hillary up 21 points, she and Sanders would either be tied or he'd be slightly ahead there too in the RCP poll average. There's a serious argument to be made that Sanders, even more so than Trump, is the political phenomenon of the 2015-16 campaign. Who knows? Before long, we may even start seeing a thinkpiece or two about how Berniemania shows that Democrats have veered wildly to the left, the way we always do about Republicans whenever some conservative insurgent gets elected somewhere.
The only thing preventing total panic right now among Democratic leaders is the blind hope that Sanders will hit a wall in South Carolina when black voters there break for Hillary. Sanders is working on that problem, though. We'll see what happens if he runs the table in the first two states. Here he is at a rally last night in Alabama crowing that the inevitable suddenly doesn't seem so inevitable anymore. Exit question: How is Sanders winning when he has Republican operatives trying to help him? Usually that's the kiss of death in a campaign against a top Democrat.
Tags: NEW HAMPSHIRE BILL CLINTON HEALTH CARE CNN POLL HILLARY


text:
How These Desperate Men Talk
20 Nov 2014£1.99 £1.60You save £0.39 (20%)
Schauspielhaus Zurich, 2004
By Enda Walsh
A short play published for the first time, written during the author's time working with European theatremakers.
Enda Walsh's How These Desparate Men Talk was first performed (with the title Fraternity) at the Schauspielhaus Zürich in December 2004.
It was premiered in Ireland (as How These Desparate Men Talk) by Corcadorca Theatre Company at the Greapel Metal Perforation Factory, Kinsale, Co. Cork, in September 2014.
How These Desparate Men Talk is also available in the collection Enda Walsh Plays: One.
Also by Enda Walsh:
Enda Walsh Plays: One
The first eight astonishing plays by 'one of the most dazzling wordsmiths of contemporary theatre'.
Disco Pigs
Enda Walsh's breakthrough play, a fast and formally inventive portrait of two teenage Irish misfits
Enda Walsh Plays: Two
The second collection of plays from the multi-award-winning Irish playwright, including The Walworth Farce,...
My Friend Duplicity
A one-act duologue by Enda Walsh which went on to inspire his play Ballyturk.
A short monologue inspired by the Third Epistle of John and first produced by the Bush Theatre, London, as part of th...
Lynndie's Gotta Gun


ConclusionsThere was a very high prevalence of D. immitis, hookworm and external parasites in Samoan dogs, and prophylactic medication is rarely administered. This is the first report confirming A. platys in Samoa and the South Pacific islands. The public health implications of poor management of the dogs should be considered and investigated further.


Fianna Fáil Deputy, Robert Troy, has welcomed clarification from the Minister for Transport regarding proposals for a road worthiness test aimed at tractors and agricultural vehicles.
Replying to a question tabled by Deputy Troy, Transport Minister Shane Ross confirmed that the new regulations will be introduced in 2018 as part of an EU directive. The Minister also confirmed to Deputy Troy that the regulations will apply to tractors with a maximum design speed exceeding 40km/h which are being used for commercial road haulage.
"Since news first broke of this new regulation, I have been inundated with calls from the agricultural community right across the constituency," Deputy Troy said.
Minister Ross went on to confirm that there is no requirement on member states to test tractors used exclusively for agricultural purposes.
"I have asked the Minister to consult with the various farming representative bodies to ensure that the farming community is fully informed on what is required of them as a result of this change," Deputy Troy concluded.


New to Aries Apparel the Legends socks are an iconic throwback to the old school crew sock. Eco-friendly, hypoallergenic, breathable, moisture-wicking fabric eliminates sweat with a snug technical grip. Legends socks are specially designed to deliver proper blood flow to the feet. Perfect for volleyball, basketball or just wearing to school.


The fifth edition of analytica Vietnam, a spin-off of analytica in Munich, will take place at the International Center for Exhibition (I.C.E.) in Hanoi from March 29 to 31, 2017. Moving the trade fair from Ho Chi Minh City to the Vietnamese capital has advantages: Hanoi is the political center of the country and home to its most important universities. Effective immediately, exhibitors may now register for analytica Vietnam.
Dr. Reinhard Pfeiffer, Managing Director of Messe München, is very enthusiastic about analytica Vietnam moving from Ho Chi Minh City to Hanoi: "Holding the fair in Hanoi gives us proximity to the country's most important research organizations and, above all, to the government. Those are important prerequisites for driving trade and for an exchange at the international level." The fact is that the Vietnamese market for analysis, biotechnology and laboratory technology depends quite strongly on political support. According to the Vietnam Association of Testing Laboratories (VINALAB), 65 percent of investments in this sector come from the government.
And the market is growing rapidly: Vietnam is one of the largest exporters of food. In fact, it is the leading exporter of coffee, pepper and cashew nuts. High-quality laboratory and analysis equipment is needed to guarantee and optimize quality—equipment that Vietnam does not manufacture itself. In 2014, the annual import value in this sector was just less than 400 million dollars, compared to just 250 million in 2009. In addition, product testing and analysis are also up in other branches of industry such as the clothing, textile and wood furniture industries.
Thanks to these developments, business opportunities for suppliers of analysis devices and laboratory equipment are very promising. analytica Vietnam brings local demand for these products together with international supply. It is the only trade fair in the country that covers the analysis, biotechnology and laboratory-technology segments.
"Beside technologies and solutions, Vietnam also needs corresponding know-how," says Gabriele Kraus, Executive Director of the trade-fair organizer IMAG. "That is why, once again, the 2017 fair will be accompanied by the analytica Vietnam conference as well as forums and workshops on the topics of food analysis, pharmaceuticals, environmental analysis, chromatography and mass spectroscopy."
Additional information about analytica Vietnam is available at www.analytica-vietnam.com. Download photographic material here.


Don Rober is a genuine Lamista banco ayahuasquero. He is a natural maestro (master, teacher) and native taught, whose knowledge has been passed down through generations of Amazon jungle healers. Don Rober possesses an extraordinary knowledge of the Amazon's healing plants and how to use them safely and properly for the benefit of his patients.Don Rober is a classic Amazonian curandero of great skill and quiet power who manifests a charming, humorous and humble demeanor and conducts his work in deep concentration and without deception. His gift of intuitive plant knowledge and charismatic healing energy is deeply heart-warming. His consummate ceremonial skills and amazing icaros move the energy and guide our metaphysical and visionary journeys as few can, to realize deep healing and profound realization of who we are and where we are going in our lives.
The term 'banco' refers to curandero specializing in the Ayahuasca medicine who has mastered the fine art of Ayahuasca shamanism at the highest level. Don Rober is a true 'banco' among few living in this day and time. His father and grandfather were both renowned lamista bancos, indeed "maestros de maestros" in the most literal sense. Young Rober began sitting in their ceremonies at the age of 7 or 8, and declared his apprenticeship at age eleven.
During his apprenticeship he was guided in many 'dietas' with scores of healing and teacher plants to learn their medicine, their lessons, and their icaros. The plant dietas give strength, wisdom and knowledge needed to undertake the rigorous life of the vegetalista curandero (plant healer). At the age of eighteen, after a diligent apprenticeship of 7 years, Rober was deemed qualified to begin his lifelong service to the medicine and humanity as a dedicated vegetalista curandero and maestro ayahuasquero.


August 2014 – Jacobs and Company B.I.T.S.
If servers are like the brains of your network then the switches and routers are the backbone, carrying all the information on your network and making sure it gets to where it is supposed to go. In my time as an IT Pro I have seen this equipment grow from a simple ring of cable chaining a group of devices together to sophisticated equipment that moves data at high speeds and prioritizes traffic based on the type of data that is being sent. Today without routers and switches there would be no networks and no Internet.
Let's talk about what a switch does. Basic un-managed switches receive packets of data from a device like a server, printer, or computer then using a list it keeps in its memory shoots that packet of data out the port that the intended target of the data is on. Sometimes there are multiple switches between where a packet starts and where it is destined to end up. In this case the switches have to also keep track of if the device is somewhere beyond another switch. Smart switches and managed switches have a host of features that allow a network pro or engineer manage and improve the quality of service on the network or secure groups of traffic and separate them from each other. The latter is important both for security and performance. One example of how using a smart or managed switch can improve security is this: You have a network with your workstations and your server on it and you have financial data for clients on that network. A contractor like an accountant or other business consultant comes in to do some work for your company and they need access to the internet. You have an extra desk and a cable for them to plug their computer into. They do so but their computer is infected with a virus that is able to collect data from your server and computers. It is relatively easy for the virus to do its work because it is directly connected to all the other devices on your network. With a smart switch or managed switch you can wall this one port off from the rest of the network and only allow access to the internet protecting your clients' valuable data. This is just one of the benefits and features of using a smart or managed switch. Another is that generally they use better components and have faster internal speeds than a basic switch. If you have outside parties accessing your network either wired or wirelessly I highly recommend at least using smart switches in your network. Also if you are thinking about making the switch to VOIP phones a smart switch can allow you separate the voice traffic from your regular data traffic helping to prevent slowdowns on your network. Smart and managed switches require some configuration so like any other device it is a good idea to back up that configuration and back it up again any time it changes. The software on these smarter devices can and should be updated when the manufacturer releases updates. These updates are usually to fix issues or glitches in the software, security or otherwise but can also give the switch access to new features.
A router allows you to take multiple networks that are separated either physically or by software (like I discussed above in the example I gave for smart switches) and pass data between them. Most small and medium sized businesses only have one router on their network and it generally allows their network to connect to the internet. Routers can be set up to only allow certain traffic to go from one network to another and block everything else. Similar to switches routers keep a list, but instead of devices it is a list of networks. This list allows the router to keep track of what port it should send data out in order for it to reach its destination. Keeping with the previous example the router knows about the separate network your guest is on, the internet, and the network all of your devices are on. The router is configured to allow data from the guest network to get to the internet but not to your network. The router also lets your internal network access the internet but nothing from the internet is allowed to come into either network unless it was requested by a device on that network. You can think of a router like a border patrol checkpoint where multiple countries meet. It asks where are you going, why are you going there, and are you carrying anything you shouldn't. That reminds me — routers have also taken on the role of integrating with firewalls and other next gen security tools. This means that they don't just ask what is in your digital trunk; they search it, test it, and seize it before sending you on your way. This inspection helps to protect your network from viruses and attackers before the infected data ever gets to your computers. Like the smart and managed switches the software on routers gets updated several times throughout the device's life. You should keep this software up to date and back up the configuration. Keeping the software up to date is especially important if you are using the advanced firewall features because that could mean the difference between something bad getting in and it being blocked.
Routers and switches can last a long time in your network because the only moving part is the fan. Heat and dust are the 2 major reasons these devices break so they need to be installed in a cool dust free location. Just because the switch is still working though doesn't mean it should still be in your network. Most routers and switches go out of support or EOL (End-Of-Life) at some point. This is when the manufacturer will no longer provide support or software updates for the device. If your router or switch has been EOL for a year or more it is way past time to replace it. Like Windows XP, when hardware reaches its EOL it becomes a liability. If you have had a switch or router for 5 or 6 years and it is still supported by the manufacturer you might still want to begin planning on replacing it with newer hardware. The electronics in the device after running several years non-stop are likely to experience degraded performance and are, in my experience, more likely to fail. After 5 or 6 years the technology in new switches and routers has changed enough that you are likely to also get substantial benefits in speed, quality, and improved features by replacing your routers or switches. Don't wait for your routers or switches to fail — this only leads to lost productivity. Have a plan in place for proactively maintaining your network hardware and replacing it as features and performance improve in newer equipment.
Very soon Internet Explorer users may run into some trouble accessing certain websites. Java is a web page technology developed by Microsoft for use with Internet Explorer that allows developers to create richer interactive web applications. Like all software, new versions come out, support ends for older versions, and life goes on. In an effort to make browsing the internet a little more secure Internet Explorer 8 and above will start blocking older registered Java controls based on the version of Java it is using. Microsoft is not going whole hog and blocking all old Java components, just ones using Sun Java controls older than a certain version. This improved security feature has already been installed if your Windows updates for August have been applied and will go into effect on patch Tuesday September 9th.
Microsoft has a very good reason for doing this. Java exploits account for over 80% of the vulnerabilities targeted by hackers based on the articles I have read on the subject and the latest Microsoft Security Intelligence Report. Fear not! You can disable this feature, I wouldn't recommend it though. When you are using one of the outdated versions of Java you will see a message either at the top or bottom or the browser window, depending on the version of IE you are using, that gives you the option to update your Java or just run it. If one of your application vendors is forcing you to use a specific, blocked version of the Java software then you need to have a long discussion with them about getting their application updated. If not, just update your Java version when it pops up and you will have no problem dealing with this new feature.
Make sure your employees are aware of the new functionality and the pop-up notifications they may see so they are not caught off guard on September 9th. If you have a reason to continue using the out-of-date Java versions talk to your IT admin or consultant about turning this feature off across your business or adding exceptions for only the application URLs that require the out-of-date version until the web application is updated to support new versions of Java.
Over the past few weeks I have been seeing a rise in security articles and news media talking about ransomware. Ransomware is malware that takes over your computer preventing you from using the computer until you pay the "fine" to unlock it. I say fine here because most ransomware pretends to be from a law enforcement agency such as the FBI. The malware typically covers your screen with a window that cannot be closed demanding you pay a fine for having illegal materials on your computer. Similar ransomware has gained popularity. CryptoLocker and Cryptowall ransomware variants have gained popularity and do some real damage on an infected machine. By encrypting all of your files this ransomware makes retrieval of your data impossible without paying the ransom and having them unlock your files.
One of the most popular ways to spread these viruses is by using advertising networks. Attackers purchase ads on these networks that redirect you to sites that have either been compromised or designed to run a drive by attack on your machine which in turn infect the computer with the ransomware. To refresh your memory a drive by attack runs when you visit a website. The code on the site tests for known vulnerabilities in unpatched software then uses that vulnerability to infect the computer with some sort of virus. Recently reports of YouTube's ad network being the latest favorite network for ransomware distribution. The reason is because YouTube's ad network is very low cost and has extremely powerful tools that allow an attacker to target specific groups and geographic areas.
Protecting against this type of malware begins with good security practices. Having solid anti-malware software is only the first step. You should turn on the local firewall either in the operating system or the one that is part of your anti-malware suite. Next patch and update all your software regularly. Software that has the ability to auto update should have that feature turned on. Make sure that when prompted employees run the patches. Some malware looks like valid patch messages so training employees to know what they should see and recognize false patch requests is important. Work with your IT department to implement a patch management and monitoring system or contract a service provider like B.I.T.S. to do it for you. Finally, make sure you are backing up your files both on your computer's local drives and on your servers. If one of these ransomware variants does make its way onto one of your computers and encrypts your files, restoring from a good backup is the only way to recover.
If you haven't seen an ad for these phones you will soon. The ads are popping up on TV, billboards, and on the internet. I decided to pop into an AT&T store to check this phone out. The front and back are both glass but the sides are a plastic material that feels good in your hand. It gives the device some grip. I opened some apps and checked out the camera — it seemed to all perform well. It felt though like I was using a tiny Kindle Fire. This could be a good thing or a bad thing, though I am leaning more towards bad because I didn't find the Kindle Fire particularly impressive. I mentioned I stopped in an AT&T store to check the device out. This is because it is exclusive to the AT&T network so the only place to get the Fire Phone is from AT&T or direct form Amazon. The phone costs nearly $650 to purchase out of contract. If you are setting up a new contract or renewing then you can get the Fire Phone for around $200.
First impressions aside, the phone isn't bad. The hardware is fairly decent if nearly outdated compared to the pace of the market. You can purchase the Fire Phone with 32GB or from what I can tell from my research you can purchase a 64GB version or will be able to soon. The camera is nice weighing in at 13 megapixels and is capable of taking 1080p video. You screen resolution junkies may be disappointed however, because the screen resolution on the 4.7″ screen is only 720p. The rest of the hardware is pretty middle of the road not blowing away any of the current Android based devices.
The Fire Phone runs the Fire OS 3.5 which does not allow you to directly access any of the apps on the Google Play Store that most other Android devices have access to. You can side load apps from other sources but I have never had much luck side loading apps. The Fire Phone excels at giving you access to all of your Amazon and Amazon prime content like books, movies, and music. The Amazon app store is filled with great apps but If you are an Android or iPhone user you might not find all of your favorite apps for this device. One of the big features Amazon is talking about with this device is Firefly, which is an object recognition app that identifies things using the camera then links you to them in the Amazon store. This feels like a way to push users to buy more from Amazon to me and really not that impressive. With the phone, you receive 1 year of Amazon Prime free plus unlimited Cloud Drive storage and automatic backup. That's nice I suppose.
Based on my first impressions and the reviews I read for this device I wouldn't recommend this device to anyone but the most diehard Amazon content users who need to make phone calls between movies. I certainly wouldn't recommend it for a business user as all of its features are centered on accessing amazon content and entertainment leaving little room for productivity. If you want to check out more information about the Fire Phone you can go to Amazon's site here: http://www.amazon.com/Fire-Phone.
In less than 12 months Windows Server 2003 will be put to rest like its desktop sibling Windows XP. With this end of life date looming I have been working to migrate my clients to the latest version of Windows Server. This process is sometimes difficult to get started because I find many people don't know or understand what their server actually does. This article is going to serve as an overview, a sort of crash course in what roles your server plays on your network. With Windows Servers there are three main roles I am going to discuss for simplicity sake. First is the Domain Controller, second is the File/Print Server, and third is the Application Server.
The domain controller server roll is the most complicated and least forgiving role when upgrading and migrating. Domain controllers keep a list of user names and passwords, they also keep track of what security rights and privileges users have on their computers and on the servers, kind of like "big brother" for your network. Anytime a user logs in the domain controller is consulted to see if they are allowed. When a user opens up a file on that "x" drive everyone has, the domain controller is asked if the user is allowed to access that file. In most cases the domain controller also provides some other services it needs but also shares with the rest of the devices on the network. One important service is called DNS or the Domain Naming Service. If you have ever typed in a web address or had to browse to a device on your network you have made use of DNS. It is like an address directory for the network it translates computer names like "Jim's Computer" to a numerical address on the network. The other service usually found on Domain controllers in smaller networks is DHCP. DHCP is the other side of the coin from DNS. When your computer starts up it asks the DHCP service for an address so other computers can find it on the network. The best practice is to let the domain controller do its job and not use it for any other roles. This rarely happens in smaller networks though generally due to initial cost as well as additional maintenance cost for having multiple servers.
Our second role is that of the file and print server. These are two distinct roles but generally are lumped together except in larger networks where usage demands they be split. The file server is really where all the files are physically stored that are on that mysterious "x" drive I mentioned. By the way your, "x" drive might be called p, or z, or t, or any other letter of the alphabet depending on how your IT Pro felt when they set it up. The sole purpose of the file server portion of our dual identity server role is just to store your files and wait diligently until you need to retrieve your files from it. The print server identity is similar in simplistic duty. It waits for you to send a document to print, gathers it all up, and forwards it on to the printer. Additionally, the print server makes it easier on us administrators to manage the printers shared on the network and the drivers needed to install them on all the computers on your network.
Last but not least is the application server. These servers run specific programs like databases like SQL or Oracle, or email servers like Exchange. Sometimes they run multiple applications and perform the duties of a file server. The application server as its most basic function runs an application and stores all the data that application uses or creates. Turn it off and your network accounting software doesn't work or outlook can't send or receive email any more.
In small businesses all of these roles are usually stuffed into one single box which is a very cost effective use of the hardware. The upside of having a single server is maintaining it is less expensive because there is only one piece of hardware to worry about and only one device to backup. The downside is this set up isn't very flexible and can be difficult and time consuming to migrate when it is time to replace or upgrade the server. Migration is especially tricky with the domain controller role running on that single server as well. Splitting up the roles on different hardware makes the system more flexible and resilient. If one server goes down you are not completely dead in the water. You still have access to the remaining services. Many times the domain controller role is set up on at least two servers in order to insure basic network services are always available. Multiple servers though means more cost and more hardware to manage not to mention multiple backups with which to deal. Scaling the hardware in each server can help to mitigate the cost somewhat by choosing hardware that has just the processing power, RAM, and storage needed to perform the role it is designed for.
I hope this brief overview helps you better understand what your servers do and some of the benefits and drawbacks to having a single server or multiple servers on your network. I recommend you have a plan and start with a single server that does it all. Then in a year or two add a separate domain controller and remove the role from that first server. If your applications are running slow or you are running out of space add a server just for the applications and alleviate that first server of those duties as well. Soon it will be time to replace that old server and you will have a solid, reliable, scalable server infrastructure that won't even blink under the pressures of your business.
It's back to school time and everybody has a deal on pretty much everything, including computers. Naturally, this is also the time of year I get asked most frequently, what kind of computer should I get for my home? Simply put, my first response is, get what you want. Not to be terse, I follow up with what I am going to share with you now.
Computers have become a commodity technology like your TV or your microwave oven. Unless you have a specific use in mind for your computer like graphic editing or music composition what you choose comes down to what you like. If you like Dell, buy Dell if not, buy HP, or Asus. Most of the hardware inside is sourced from the same companies anyway. The next bit of advice I usually give is to ask yourself, what do you use your computer for now and why do you need a new one? If you are like most people, your home computer use is mainly for browsing the internet, playing a few games, checking email, and maybe organizing photos. If you liked the brand of PC you had and you just need some extra performance get another one just like what you have now with a faster processor and more RAM and you are all set. If you didn't like the brand you got last time get a different brand. No matter what you get, they all have Windows 8.1… unless you are a Mac like those Apple commercials suggested. In that case just get a new Mac. They upgrade their hardware and OS almost every year.
This next bit is where things get a little sticky…you say you have been thinking about a tablet? Oh well that is a whole different can of worms… same worms, just a different can. I personally feel tablets have computers beat hands down for average day-to-day use. If you want to do all the same stuff you did on your computer well that's easy just look for a hybrid tablet/laptop that runs Windows 8.1 and is within your budget. There are dozens of them in the marketplace and each has its merits and short-comings. Try before you buy. Find a Walmart, Best Buy, Staples that has these devices on display and go pick them up, hold them in your hand, use the touch screen, find one that makes you feel good. In the end, it is still just a Windows 8 computer. The more you want to do with it the more processor speed and RAM you need just like your computer.
What about iPads or Android tablets? They are both great. What kind of phone do you have? I suggest sticking to the same OS as your cell phone. The content shares much easier between devices running the same OS because they use the same app stores. If you have an iPhone get an iPad, Android phone get an Android tablet. A word of caution: Androids and iPads are not like Windows tablets. You have to think about things like pictures and documents differently. These are devices designed to consume content not really store and manage it. The cloud is your friend or a network attached hard drive as long as there is an app for it.
I find that for most of my home use a tablet is my go to almost 99% of the time and the same is true for my wife and kids. I do some light graphics editing and other things on occasion that I have to reach for my computer to do but by and large it tends to just collect dust. Seriously consider a tablet for your daily use but keep a PC around for that other stuff if you need it. I bet this time next year you will have given up your regular computer completely. If not and your computer still needs replaced don't break the bank. Pick up something modest that will do just what you need it for or just get the hybrid Windows laptop. My niece just got a Lenovo Yoga to start college and loves being able to turn it into a tablet and use the touch screen. In the end like I said in the beginning, get what you want because that's what you are going to use.
Earlier this month I read an interesting article about recent cyber-attacks on energy companies called Dragonfly. The end goal of Dragonfly is to sabotage whatever infrastructure it infiltrates, in this case power companies. There are two reasons this caught my interest. First it looks like Dragonfly is government sponsored. That means a government has hired cyber-security specialists to craft an attack designed to cripple the power grid or take control of it. Second is that the way Dragonfly works is similar to what many other threats infect computers like the ones I see in offices on a regular basis.
Dragonfly is a multi-staged attack. The group running the attack sends emails known as phishing emails to targeted firms with malware embedded in the messages. The emails are very convincing and look like messages the recipient would get from trusted sources. Next the group set up what is known as a watering hole attack. The way this attack works is the attacking group is able to gain access to a website they know is likely to be frequented by their target. Once the attacker has access they inject what's known as an exploit kit that will allow them to exploit a flaw in their target's web browser to deliver additional malware to the target computers. At this point most attacks on the internet at large have what they need from their targets. Dragonfly goes a step further and was able to turn legitimate software patches from several Information and Control Systems equipment manufacturers into Trojan Horses. This gave the attackers control over these systems as well. Any firm infiltrated by this multi-staged attack had their entire system from the devices that control the flow of power to the computers of the highest levels of management breached and under outside control.
If you have made it this far into the article you might be asking why we should worry about this attack. What does it have to do with a small business? This attack and how well it was planned and executed serves to prove a point. Hackers are no longer nerds living in their parent's basement, they are groups of highly trained security experts hired by governments and private interests alike to gather information and gain control over remote resources. Their targets range from very specific to very broad groups and small businesses are in most cases the least protected. Business owners and managers whose companies use the internet for business in any way need to have a solid plan and strategy in place for making sure their valuable electronic assets are secure. That means working with your IT Pro to reduce the rights each user has on their local machine to just what they need for their daily activities and make sure antivirus is up to date as well as any software and operating systems on your network. Next generation firewalls that scan for malware as the data flows through them from the internet should be implemented. Users should be educated to recognize phishing attacks. They should know what to expect if their computer detects a virus so they are not vulnerable to the popular fake antivirus attacks. Security is important and should be a priority for any business, including small businesses.
These days it seems like everything is all about the cloud, which we all know is just a fancy buzzword for the Internet. Cloud storage is a hot commodity and everyone wants their piece of the pie. The cloud and by extension cloud storage providers have a near endless supply of low cost storage. Getting to it and using it however has not been quite as easy as we in the small and medium business market had hoped. Most of the time using this cloud storage requires third party software that speaks directly to the cloud storage, a kind of middle man that controls the flow of data. If you have moved your infrastructure out to the cloud and your apps, then accessing this plethora of storage is no problem. For the rest of us there is hybrid cloud storage and the software and hardware vendors that make it possible.
What is hybrid cloud storage? Great question… Depending on which vendor you talk to it can be a few different things, in general it is either storage that replicates to the cloud and allows you to access your data from anywhere or it is just a cheap tier of storage you can add on to your existing local storage. In addition both views of hybrid cloud storage provide fast local access to data that then syncs back up to the cloud. One name that seems to come up frequently associated with hybrid cloud storage is Egnyte. Egnyte is one of those providers that allows you to share your data and access it from anywhere through the cloud. Starting at $40/mo billed annually you get everything you need to turn your storage into hybrid cloud storage for 5 users with 1TB of storage. Microsoft has a storage appliance called StorSimple that integrates with their Azure cloud storage. StorSimple provides fast local access to frequently used data and then moves stale or infrequently used data out to the Azure cloud. The locally stored data is synced with Azure providing a backup of your frequently used data as it changes. With a little work you can access you data that is stored in Azure via the cloud; however, it isn't baked into the solution like it is with Egnyte. I was also not able to find a price for the StorSimple appliances so more than likely this particular solution "isn't in the budget" for most small networks.
I see innumerable benefits to small businesses where the cloud is involved; however, the more I look into these exciting new buzzwords and their amazing technology the less it looks like they are designed for small businesses. Hybrid cloud storage looks to be another one of these not quite small business ready technologies. If you have a lot of data and need to get off of your local storage devices and into a managed cloud environment it is definitely worth exploring. If you are interested in finding out more about hybrid cloud storage solutions give me a call and I would be happy to help you find a solution that meets your needs.


With six programmable buttons and a 3200 CPI Gaming Optical sensor with a sensational backlight graphic design.
The X-Craft Tron 5000 is a gaming mouse with six programmable buttons and a 3200 CPI Gaming Optical sensor with a sensational backlight graphic design.
Its rubberized finishing enhances the grip and comfort for long hours of usage.
Welcome to Computer Zone. Please sign up and be a part of our family. Even if you are not comfortable at dealing with an online market and need a more personal touch; come visit us, we anxiously await your presence.
FL 4/20, Main Rashid Minhas Road, Gulshan-e-Iqbal Block-5, Karachi, Pakistan.
Copyright © Computer Zone 2019. All rights reserved.


text:
Home News Brief With Election Looming, Chavez Launches Security Plan
With Election Looming, Chavez Launches Security Plan
Hannah Stone
Venezuelan President Hugo Chavez's new security plan has some solid proposals, but its politicized launch illustrates how crime and violence are shaping up to be a central issue in the upcoming presidential elections.
On Wednesday, Chavez set out the details of the scheme, "Mision A Toda Vida Venezuela" (Mission for Every Venezuelan Life) on state television. The president acknowledged that the problem of violence in his country was "grave" and "indisputable," and called on citizens to join forces to "resolve this serious national problem."
Chavez gave some details of the wide-ranging scheme, saying that weapons control would be a priority, that it would create community centers for the resolution of conflict, and that national police agency the CICPC would be reformed to handle only criminal investigations.
The government emphasized the social components of the scheme, which is meant to focus on integral crime prevention rather than repressive measures. Interior and Justice Minister Tareck El Aissami said the plan would address institutional, environmental and structural factors that cause crime, such as poverty and social exclusion, El Universal reported. One priority will be encouraging young people who are out of school to return to education, the minister added. Chavez also spoke of expanding the role of an orchestra program for young people as a central part of the security plan.
El Aissami said that the government was trying to find ways other than prison to punish non-violent crimes such as petty theft, for example having criminals make amends to society through community service.
The scheme will focus on the 79 most dangerous municipalities, out of the country's total 335, which account for 86 percent of all murders.
Many aspects of the government's plan sound well-advised, such as the idea of cutting down on prison sentences for non-serious crimes — the country's prison system is in crisis, with massive overcrowding driving inmate violence. However, the focus on certain municipalities has drawn criticism, with Caracas Mayor Antonio Ledezma saying it discriminated against the rest of the country. When the plan was first announced in May, InSight Crime noted that the selection of the municipalities could have electoral implications.
The plan cannot be viewed in isolation from the bitterly contested presidential election in October. Its politicized presentation illustrates what a key issue violence and crime is for voters as the vote approaches, forcing Chavez to acknowledge the scale of the problem. Venezuela saw its most violent year on record in 2011, with a rate of 66 homicides per 100,000 making it most violent country in South America.
Chavez said that the plan was not about gaining an electoral advantage, stating, "I don't need to do that, because we are winning by a big margin." The president still found time for politics in his speech, however, blaming the opposition for some security problems because they hire "real gangsters" as police chiefs in states where they hold power.
El Aissami also took the opportunity to jab at the opposition, contrasting the scheme's focus on prevention with the security policies advanced by "some sectors of the country," which he said were "repressive."
Opposition candidate Henrique Capriles responded forcefully on Twitter, saying that the government had launched 18 security plans during its time in power, and all had failed: "Elections come and today they launch another! … It is clear that under this government the Venezuelans are not going to find security."
Venezuela's Tren de Aragua Gang Muscling into Colombia Border Area
Venezuela Intelligence Chief Exposes Organized Crime Links in Maduro Govt
Massacre on Colombia-Venezuela Border Reveals Rastrojos Civil War
Colombia-Venezuela Border Reopens, But Hidden Trails Still Hotspots
Riots and Violence Overwhelm Venezuela's Police Stations


text:
Tributes to Liverpool FC fan James Acheson-Hill who died in tragic accident as he left bar in Worcester
Young dad, 27, died following the accident in Friar Street, Worcester
Jordan Coussins
James Acheson-Hill (Image: West Mercia Police)
A dad died aged just 27 after reportedly falling down steps he left a bar.
Liverpool FC fan James Acheson-Hill was fatally injured as he left a venue in Friar Street, Worcester, on Saturday, January 18.
He was rushed to hospital but died the next day. West Mercia Police said it was not suspicious.
Mr Acheson-Hill had a son, Eddie, and was described as a "rising star" by colleagues at machine tool firm Mazak, where he worked as a senior applications engineer.
Heavily-pregnant woman pushed over as three burglars raid Tipton home
Six evacuated after 'suspicious' blaze inside Cannock garage
Det Con Bev Hamilton said: "Unfortunately James died as a result of injuries he sustained after a tragic accident while exiting a bar in Friar Street.
"There are no suspicious circumstances and we want to convey our sympathies to the family and our thoughts remain with them at this heart breaking time."
In a tribute, Mr Acheson-Hill's parents said: "James was a devoted father to his son Eddie, a much-loved brother to Niamh and a beloved son to us both.
"He was always thinking of others and putting them before himself.
"He had a great many friends which he was still in contact with from school and was a keen Liverpool FC supporter and would regularly go to Anfield with his friends to watch his team play.
"He loved his work as a senior applications engineer at Mazak in Worcester where his colleagues described him as a 'rising star'.
"We would like to thank everyone for their kind wishes and sympathies and know James would be touched with all the love the family is receiving at this very difficult time."


text:
<?php

  use OSC\OM\DateTime;
  use OSC\OM\HTML;
  use OSC\OM\Mail;
  use OSC\OM\OSCOM;
  use OSC\OM\Registry;

  require('includes/application_top.php');

  $OSCOM_Hooks = Registry::get('Hooks');

  require('includes/classes/currencies.php');
  $currencies = new currencies();

  $orders_statuses = [];
  $orders_status_array = [];

  $Qstatus = $OSCOM_Db->get('orders_status', [
    'orders_status_id',
    'orders_status_name'
  ], [
    'language_id' => $OSCOM_Language->getId()
  ]);

  while ($Qstatus->fetch()) {
    $orders_statuses[] = [
      'id' => $Qstatus->valueInt('orders_status_id'),
      'text' => $Qstatus->value('orders_status_name')
    ];

    $orders_status_array[$Qstatus->valueInt('orders_status_id')] = $Qstatus->value('orders_status_name');
  }

  include('includes/classes/order.php');

  if (isset($_GET['oID']) && is_numeric($_GET['oID']) && ($_GET['oID'] > 0)) {
    $oID = HTML::sanitize($_GET['oID']);

    $Qorders = $OSCOM_Db->get('orders', 'orders_id', ['orders_id' => (int)$oID]);

    if ($Qorders->fetch()) {
      $order = new order($Qorders->valueInt('orders_id'));
    } else {
      $OSCOM_MessageStack->add(OSCOM::getDef('error_order_does_not_exist', ['order_id' => $oID]), 'error');
    }
  }

  if (!isset($_GET['page']) || !is_numeric($_GET['page'])) {
    $_GET['page'] = 1;
  }

  $action = (isset($_GET['action']) ? $_GET['action'] : '');

  $OSCOM_Hooks->call('Orders', 'PreAction');

  if (tep_not_null($action)) {
    switch ($action) {
      case 'update_order':
        $oID = HTML::sanitize($_GET['oID']);
        $status = HTML::sanitize($_POST['status']);
        $comments = HTML::sanitize($_POST['comments']);

        $order_updated = false;

        $Qcheck = $OSCOM_Db->get('orders', [
          'customers_name',
          'customers_email_address',
          'orders_status',
          'date_purchased'
        ], [
          'orders_id' => (int)$oID
        ]);

        if ( ($Qcheck->value('orders_status') != $status) || tep_not_null($comments)) {
          $OSCOM_Db->save('orders', [
            'orders_status' => $status,
            'last_modified' => 'now()'
          ], [
            'orders_id' => (int)$oID
          ]);

          $customer_notified = '0';
          if (isset($_POST['notify']) && ($_POST['notify'] == 'on')) {
            $notify_comments = '';
            $notify_comments_html = '';

            if (isset($_POST['notify_comments']) && ($_POST['notify_comments'] == 'on')) {
              $notify_comments = OSCOM::getDef('email_text_comments_update', ['comments' => $comments]) . "\n\n";
              $notify_comments_html = OSCOM::getDef('email_text_comments_update_html', ['comments' => nl2br($comments)]);
            }

            $invoice_url = OSCOM::link('Shop/' . FILENAME_CATALOG_ACCOUNT_HISTORY_INFO, 'order_id=' . $oID);

            $email = STORE_NAME . "\n" . OSCOM::getDef('email_separator') . "\n" . OSCOM::getDef('email_text_order_number') . ' ' . $oID . "\n" . OSCOM::getDef('email_text_invoice_url') . ' ' . $invoice_url . "\n" . OSCOM::getDef('email_text_date_ordered') . ' ' . DateTime::toLong($Qcheck->value('date_purchased')) . "\n\n" . $notify_comments . OSCOM::getDef('email_text_status_update', ['status' => $orders_status_array[$status]]) . "\n";

            $email_html = '
' . STORE_NAME . '
' . OSCOM::getDef('email_separator_html') . '
' . OSCOM::getDef('email_text_order_number_html') . ' ' . $oID . '

' . OSCOM::getDef('email_text_invoice_url_html') . ' ' . $invoice_url . '

' . OSCOM::getDef('email_text_date_ordered_html') . ' ' . DateTime::toLong($Qcheck->value('date_purchased')) . '
' . $notify_comments_html . OSCOM::getDef('email_text_status_update_html', ['status' => $orders_status_array[$status]]);

            $orderEmail = new Mail($Qcheck->value('customers_email_address'), $Qcheck->value('customers_name'), STORE_OWNER_EMAIL_ADDRESS, STORE_OWNER, OSCOM::getDef('email_text_subject'));
            $orderEmail->setBodyPlain($email);
            $orderEmail->setBodyHTML($email_html);
            $orderEmail->send();

            $customer_notified = '1';
          }

          $OSCOM_Db->save('orders_status_history', [
            'orders_id' => (int)$oID,
            'orders_status_id' => $status,
            'date_added' => 'now()',
            'customer_notified' => $customer_notified,
            'comments' => $comments
          ]);

          $order_updated = true;
        }

        if ($order_updated == true) {
         $OSCOM_MessageStack->add(OSCOM::getDef('success_order_updated'), 'success');
        } else {
          $OSCOM_MessageStack->add(OSCOM::getDef('warning_order_not_updated'), 'warning');
        }

        OSCOM::redirect(FILENAME_ORDERS, tep_get_all_get_params(array('action')) . 'action=edit');
        break;
      case 'deleteconfirm':
        $oID = HTML::sanitize($_GET['oID']);

        tep_remove_order($oID, $_POST['restock']);

        OSCOM::redirect(FILENAME_ORDERS, tep_get_all_get_params(array('oID', 'action')));
        break;
    }
  }

  $OSCOM_Hooks->call('Orders', 'Action');

  $show_listing = true;

  require($oscTemplate->getFile('template_top.php'));
?>

 <a href="<?= OSCOM::link('orders.php'); ?>"><?= OSCOM::getDef('heading_title'); ?>

<?php
  if (!empty($action)) {
    if (($action == 'edit') && isset($order)) {
      $show_listing = false;
?>

<?= '#' . $order->info['id'] . ' (' . strip_tags($order->info['total']) . ')'; ?>

<?= HTML::button(OSCOM::getDef('image_back'), 'fa fa-chevron-left', OSCOM::link(FILENAME_ORDERS, tep_get_all_get_params(array('action'))), null, 'btn-info') . HTML::button(OSCOM::getDef('image_orders_invoice'), 'fa fa-file-text-o', OSCOM::link(FILENAME_ORDERS_INVOICE, 'oID=' . $_GET['oID']), array('newwindow' => true), 'btn-primary') . HTML::button(OSCOM::getDef('image_orders_packingslip'), 'fa fa-clipboard', OSCOM::link(FILENAME_ORDERS_PACKINGSLIP, 'oID=' . $_GET['oID']), array('newwindow' => true), 'btn-primary'); ?>

<?= 'Summary'; ?>

<?= 'Products'; ?>

<?= 'History'; ?>

<?= OSCOM::getDef('entry_customer'); ?>

<?= tep_address_format($order->customer['format_id'], $order->customer, 1, '', '
'); ?>

<?= ' ' . $order->customer['telephone'] . '
 ' . 'customer['email_address'] . '">' . $order->customer['email_address'] . ''; ?>

<?= OSCOM::getDef('entry_shipping_address'); ?>

<?= tep_address_format($order->delivery['format_id'], $order->delivery, 1, '', '
'); ?>

<?= OSCOM::getDef('entry_billing_address'); ?>

<?= tep_address_format($order->billing['format_id'], $order->billing, 1, '', '
'); ?>

<?= OSCOM::getDef('entry_payment_method'); ?>

<?= $order->info['payment_method']; ?>

<?php
      if (tep_not_null($order->info['cc_type']) || tep_not_null($order->info['cc_owner']) || tep_not_null($order->info['cc_number'])) {
?>

                    <?= OSCOM::getDef('entry_credit_card_type'); ?>
                    <?= $order->info['cc_type']; ?>

                    <?= OSCOM::getDef('entry_credit_card_owner'); ?>
                    <?= $order->info['cc_owner']; ?>

                    <?= OSCOM::getDef('entry_credit_card_number'); ?>
                    <?= $order->info['cc_number']; ?>

                    <?= OSCOM::getDef('entry_credit_card_expires'); ?>
                    <?= $order->info['cc_expires']; ?>

<?php
      }
?>

<?= OSCOM::getDef('entry_status'); ?>

<?= $order->info['status'] . '
' . (empty($order->info['last_modified']) ? DateTime::toShort($order->info['date_purchased'], true) : DateTime::toShort($order->info['last_modified'], true)); ?>

<?= OSCOM::getDef('entry_total'); ?>

<?= strip_tags($order->info['total']); ?>

            <?= OSCOM::getDef('table_heading_products'); ?>
            <?= OSCOM::getDef('table_heading_products_model'); ?>
            <?= OSCOM::getDef('table_heading_tax'); ?>
            <?= OSCOM::getDef('table_heading_price_excluding_tax'); ?>
            <?= OSCOM::getDef('table_heading_price_including_tax'); ?>
            <?= OSCOM::getDef('table_heading_total_excluding_tax'); ?>
            <?= OSCOM::getDef('table_heading_total_including_tax'); ?>

<?php
      for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
        echo '
' . "\n" .
             '            ' . $order->products[$i]['qty'] . ' x	' . "\n" .
             '            ' . $order->products[$i]['name'];

        if (isset($order->products[$i]['attributes']) && (sizeof($order->products[$i]['attributes']) > 0)) {
          for ($j = 0, $k = sizeof($order->products[$i]['attributes']); $j < $k; $j++) {
            echo '
<nobr>  - ' . $order->products[$i]['attributes'][$j]['option'] . ': ' . $order->products[$i]['attributes'][$j]['value'];
            if ($order->products[$i]['attributes'][$j]['price'] != '0') echo ' (' . $order->products[$i]['attributes'][$j]['prefix'] . $currencies->format($order->products[$i]['attributes'][$j]['price'] * $order->products[$i]['qty'], true, $order->info['currency'], $order->info['currency_value']) . ')';
            echo '</nobr>';
          }
        }

        echo '	' . "\n" .
             '            ' . $order->products[$i]['model'] . '	' . "\n" .
             '            ' . tep_display_tax_value($order->products[$i]['tax']) . '%	' . "\n" .
             '            ' . $currencies->format($order->products[$i]['final_price'], true, $order->info['currency'], $order->info['currency_value']) . '	' . "\n" .
             '            ' . $currencies->format(tep_add_tax($order->products[$i]['final_price'], $order->products[$i]['tax'], true), true, $order->info['currency'], $order->info['currency_value']) . '	' . "\n" .
             '            ' . $currencies->format($order->products[$i]['final_price'] * $order->products[$i]['qty'], true, $order->info['currency'], $order->info['currency_value']) . '	' . "\n" .
             '            ' . $currencies->format(tep_add_tax($order->products[$i]['final_price'], $order->products[$i]['tax'], true) * $order->products[$i]['qty'], true, $order->info['currency'], $order->info['currency_value']) . '	' . "\n" .
             '
' . "\n";
      }
?>

<?php
      foreach ( $order->totals as $ot ) {
        echo '
' . "\n" .
             '            ' . $ot['title'] . '	' . "\n" .
             '            ' . strip_tags($ot['text']) . '	' . "\n" .
             '
' . "\n";
      }
?>

      <?= HTML::form('status', OSCOM::link(FILENAME_ORDERS, tep_get_all_get_params(array('action')) . 'action=update_order')); ?>

          <?= OSCOM::getDef('entry_status'); ?>

          <?= HTML::selectField('status', $orders_statuses, $order->info['orders_status'], 'id="inputOrderStatus" class="form-control"'); ?>

          <?= OSCOM::getDef('entry_add_comment'); ?>

          <?= HTML::textareaField('comments', '60', '6', null, 'id="inputOrderComment" class="form-control"'); ?>

              <?= HTML::checkboxField('notify', '', true) . ' ' . OSCOM::getDef('entry_notify_customer'); ?>

              <?= HTML::checkboxField('notify_comments', '', true) . ' ' . OSCOM::getDef('entry_notify_comments'); ?>

          <?= HTML::button(OSCOM::getDef('image_update'), 'fa fa-save', null, null, 'btn-success'); ?>

      </form>

            <?= OSCOM::getDef('table_heading_date_added'); ?>
            <?= OSCOM::getDef('table_heading_status'); ?>
            <?= OSCOM::getDef('table_heading_comments'); ?>
            <?= OSCOM::getDef('table_heading_customer_notified'); ?>

<?php
      $Qhistory = $OSCOM_Db->get('orders_status_history', [
        'orders_status_id',
        'date_added',
        'customer_notified',
        'comments'
      ], [
        'orders_id' => $oID
      ], 'date_added desc');

      if ($Qhistory->fetch() !== false) {
        do {
          echo '
' . "\n" .
               '            ' . DateTime::toShort($Qhistory->value('date_added'), true) . '	' . "\n" .
               '            ' . $orders_status_array[$Qhistory->valueInt('orders_status_id')] . '	' . "\n" .
               '            ' . nl2br(HTML::output($Qhistory->value('comments'))) . ' 	' . "\n" .
               '            ';

          if ($Qhistory->valueInt('customer_notified') === 1) {
            echo HTML::image(OSCOM::linkImage('icons/tick.gif'), OSCOM::getDef('icon_tick'));
          } else {
            echo HTML::image(OSCOM::linkImage('icons/cross.gif'), OSCOM::getDef('icon_cross'));
          }

          echo '	' . "\n" .
               '
' . "\n";
        } while ($Qhistory->fetch());
      } else {
          echo '
' . "\n" .
               '            ' . OSCOM::getDef('text_no_order_history') . '	' . "\n" .
               '
' . "\n";
      }
?>

<?= $OSCOM_Hooks->output('Orders', 'Page', null, 'display'); ?>

<?php
    } else {
      $heading = $contents = [];

      switch ($action) {
        case 'delete':
          if (isset($order)) {
            $heading[] = array('text' => OSCOM::getDef('text_info_heading_delete_order'));

            $contents = array('form' => HTML::form('orders', OSCOM::link('orders.php', tep_get_all_get_params(array('action')) . '&action=deleteconfirm')));
            $contents[] = array('text' => OSCOM::getDef('text_info_delete_intro') . '

#' . $order->info['id'] . ' ' . HTML::outputProtected($order->customer['name']) . ' (' . strip_tags($order->info['total']) . ')');
            $contents[] = array('text' => HTML::checkboxField('restock') . ' ' . OSCOM::getDef('text_info_restock_product_quantity'));
            $contents[] = array('text' => HTML::button(OSCOM::getDef('image_delete'), 'fa fa-trash', null, null, 'btn-danger') . HTML::button(OSCOM::getDef('image_cancel'), 'fa fa-close', OSCOM::link('orders.php', tep_get_all_get_params(array('action'))), null, 'btn-link'));
          }
          break;
      }

      if (tep_not_null($heading) && tep_not_null($contents)) {
        $show_listing = false;

        echo HTML::panel($heading, $contents, ['type' => 'info']);
      }
    }
  }

  if ($show_listing === true) {
    echo HTML::form('orders', OSCOM::link('orders.php'), 'get', 'class="form-inline"', ['session_id' => true]) .
         HTML::inputField('oID', null, 'placeholder="' . OSCOM::getDef('heading_title_search') . '"') . HTML::hiddenField('action', 'edit') .
         '</form>' .
         HTML::form('status', OSCOM::link('orders.php'), 'get', 'class="form-inline"', ['session_id' => true]) .
         HTML::selectField('status', array_merge(array(array('id' => '', 'text' => OSCOM::getDef('text_all_orders'))), $orders_statuses), '', 'onchange="this.form.submit();"') .
         '</form>';
?>

      <?= OSCOM::getDef('table_heading_customers'); ?>
      <?= OSCOM::getDef('table_heading_order_total'); ?>

      <?= OSCOM::getDef('table_heading_date_purchased'); ?>
      <?= OSCOM::getDef('table_heading_status'); ?>

<?php
    if (isset($_GET['cID'])) {
      $cID = HTML::sanitize($_GET['cID']);

      $Qorders = $OSCOM_Db->prepare('select SQL_CALC_FOUND_ROWS o.orders_id, o.customers_name, o.customers_id, o.payment_method, o.date_purchased, o.last_modified, o.currency, o.currency_value, s.orders_status_name, ot.text as order_total from :table_orders o left join :table_orders_total ot on (o.orders_id = ot.orders_id), :table_orders_status s where o.customers_id = :customers_id and o.orders_status = s.orders_status_id and s.language_id = :language_id and ot.class = "ot_total" order by orders_id desc limit :page_set_offset, :page_set_max_results');
      $Qorders->bindInt(':customers_id', $_GET['cID']);
    } elseif (isset($_GET['status']) && is_numeric($_GET['status']) && ($_GET['status'] > 0)) {
      $status = HTML::sanitize($_GET['status']);

      $Qorders = $OSCOM_Db->prepare('select SQL_CALC_FOUND_ROWS o.orders_id, o.customers_name, o.payment_method, o.date_purchased, o.last_modified, o.currency, o.currency_value, s.orders_status_name, ot.text as order_total from :table_orders o left join :table_orders_total ot on (o.orders_id = ot.orders_id), :table_orders_status s where o.orders_status = s.orders_status_id and s.language_id = :language_id and s.orders_status_id = :orders_status_id and ot.class = "ot_total" order by o.orders_id desc limit :page_set_offset, :page_set_max_results');
      $Qorders->bindInt(':orders_status_id', $status);
    } else {
      $Qorders = $OSCOM_Db->prepare('select SQL_CALC_FOUND_ROWS o.orders_id, o.customers_name, o.payment_method, o.date_purchased, o.last_modified, o.currency, o.currency_value, s.orders_status_name, ot.text as order_total from :table_orders o left join :table_orders_total ot on (o.orders_id = ot.orders_id), :table_orders_status s where o.orders_status = s.orders_status_id and s.language_id = :language_id and ot.class = "ot_total" order by o.orders_id desc limit :page_set_offset, :page_set_max_results');
    }

    $Qorders->bindInt(':language_id', $OSCOM_Language->getId());
    $Qorders->setPageSet(MAX_DISPLAY_SEARCH_RESULTS);
    $Qorders->execute();

    while ($Qorders->fetch()) {
?>

      <?= 'valueInt('orders_id') . '&action=edit') . '">' . $Qorders->value('customers_name') . ' #' . $Qorders->valueInt('orders_id') . ''; ?>
      <?= strip_tags($Qorders->value('order_total')) . ' ' . $Qorders->value('currency') . ''; ?>

<?= $Qorders->value('payment_method'); ?>

      <?= DateTime::toShort($Qorders->value('date_purchased'), true); ?>
      <?= $Qorders->value('orders_status_name'); ?>
      <?=
        'valueInt('orders_id') . '&action=edit') . '">
         valueInt('orders_id') . '&action=delete') . '">
         valueInt('orders_id')) . '" target="_blank">
         valueInt('orders_id')) . '" target="_blank">';
      ?>

<?php
    }
?>

  <?= $Qorders->getPageSetLinks(tep_get_all_get_params()); ?>
  <?= $Qorders->getPageSetLabel(OSCOM::getDef('text_display_number_of_orders')); ?>

<?php
  }

  require($oscTemplate->getFile('template_bottom.php'));
  require('includes/application_bottom.php');
?>

redpajama_set_name: RedPajamaGithub


Independent graphic designer Jah Eart' has created a limited-edition magazine to promote Puma's Death Before Dishonor – The Road to Athens event. The reggae 'sound clash', held last week in Montego Bay, Jamaica, featured five DJs competing for the chance to perform at the retailer's Olympics party in August. The magazine cover takes the form of a 10-inch dub plate, with a camouflage 'sleeve' made up of interlocking maps of Jamaica. 'It's inspired by war and conflict, though not in a negative way. [The event] is a competition, and the DJs are the best soldiers at what they do,' explains Jah Eart'. Puma jointly hosted the event with reggae label VP Records and promoters Irish and Chin as part of its sponsorship of the Jamaican track-and-field team.


From big wood to peeler poles, these boots give you the foundation you need for a hard day's work. Designed with a wheat Nubuck leather upper, steel safety toe cap, a steel shank, oil-resisting rubber lug outsole, and insulated with 200 grams of Thinsulate, these boots have both safety and comfort in mind. Work hare and fear nothing in these boots from Carolina.


text:
/*
 * image filters plugin (November 2, 2019)
 */

/*global $, JS9, sprintf */

"use strict";

// create our namespace, and specify some meta-information and params
JS9.Filters = {};
JS9.Filters.CLASS = "JS9";       // class of plugins
JS9.Filters.NAME = "Filters";    // name of this plugin
JS9.Filters.WIDTH = 325;         // width of light window
JS9.Filters.HEIGHT = 520;        // height of light window
JS9.Filters.BASE = JS9.Filters.CLASS + JS9.Filters.NAME;

// image filters with no args
JS9.Filters.noargfilters = {
    edge: {def: null},
    invert: {def: null},
    luminance: {def: null},
    median: {def: null},
    sobel: {def: null}
};

// image filters accepting args
JS9.Filters.argfilters = {
    blur: {min: 0, max: 100, step: 1, init: 0, def: 30},
    brighten: {min: 1, max: 100, step: 1, init: 0, def: 10},
    darken: {min: 0, max: 1, step: 0.01, init: 0, def: .66},
    duotone: {min: 0, max: 2, step: 1, init: 0, def: 2},
    emboss: {min: 0, max: 100, step: 1, init: 0, def: 100},
    gamma: {min: 0, max: 2, step: 0.01, init: 0, def: 0.2},
    lighten: {min: 1, max: 2, step: 0.01, init: 0, def: 1.33},
    noise: {min: 0, max: 100, step: 1, init: 0, def: 30},
    pixelate: {min: 0, max: 20, step: 1, init: 0, def: 2},
    scatter: {min: 0, max: 10, step: 1, init: 0, def: 5},
    sepia: {min: 0, max: 100, step: 1, init: 0, def: 100},
    sharpen: {min: 0, max: 100, step: 1, init: 0, def: 20},
    solarize: {min: 0, max: 100, step: 1, init: 0, def: 50}
};

JS9.Filters.headerHTML=`

Image Filters:

click for default settings or use the sliders

`;

JS9.Filters.noargfilterHTML=`

<input type="button" name="%sbutton" value="%s" class="JS9Button2 JS9FiltersButton" onclick="JS9.Filters.xfilter(this, '%s', '%s', '%s', %s)">
`;

JS9.Filters.argfilterHTML=`

<input type="button" name="%sbutton" value="%s" class="JS9Button2 JS9FiltersButton" onclick="JS9.Filters.xfilter(this, '%s', '%s', '%s', %s)">
<input type="range" min="%s" max="%s" step="%s" value="%s" name="%s" class="JS9FiltersRange" onchange="JS9.Filters.xgenfilter('%s', '%s', '%s', this)">

<input type="text" name="%sval" class="JS9FiltersValue JS9FiltersCol3" min="0" max="100" value="0" onchange="JS9.Filters.xgenval('%s', '%s', '%s', this)">
`;

JS9.Filters.undoHTML=`

<input type="button" id="undo" name="undo" value="undo" class="JS9FiltersUndoButton JS9Button2" onclick="JS9.Filters.xundo(this, '%s', '%s')">
`;

JS9.Filters.resetHTML=`

<input type="button" id="reset" name="reset" value="reset" class="JS9FiltersResetButton JS9Button2" onclick="JS9.Filters.xreset(this, '%s', '%s')">
`;

// update gui filter param value
JS9.Filters.updateval = function(target, filter, val){
    if( target && $(target).length > 0 ){
	if( filter ){
	    $(target)
		.closest(`.${JS9.Filters.BASE}Container`)
		.find(`[name='${filter}']`)
		.prop("value", val);
	    $(target)
		.closest(`.${JS9.Filters.BASE}Container`)
		.find(`[name='${filter}val']`)
		.prop("value", val);
	    $(target)
		.closest(`.${JS9.Filters.BASE}Container`)
		.find(`[name='undo']`)
		.prop("value", `undo ${filter}`)
	        .css("width", "100px");
	} else {
	    $(target)
		.closest(`.${JS9.Filters.BASE}Container`)
		.find(`[name='undo']`)
		.prop("value", `undo`)
	        .css("width", "70px");
	}
    }
}

// execute default filter
JS9.Filters.xfilter = function(target, did, id, filter, val){
    let pinst, data;
    let oval = val;
    const im = JS9.lookupImage(id, did);
    if( im ){
	pinst = im.display.pluginInstances[JS9.Filters.BASE];
	pinst.stack = pinst.stack || [];
	if( pinst.stack.length &&
	    pinst.stack[pinst.stack.length - 1].filter === filter ){
	    im.rgb.img.data.set(pinst.stack[pinst.stack.length - 1].data);
	    pinst.stack[pinst.stack.length - 1].val = val;
	} else {
	    data = new Uint8ClampedArray(im.rgb.img.data);
	    pinst.stack.push({filter, val, data});
	}
	if( JS9.notNull(val) ){
	    switch(filter){
	    case "duotone":
		if( val === 0 ){
		    val = "r";
		} else if( val === 1 ){
		    val = "g";
		} else {
		    val = "b";
		}
		break;
	    case "darken":
		val = 1 - val;
		break;
	    }
	    im.filterRGBImage(filter, val);
	} else {
	    im.filterRGBImage(filter);
	}
	// update GUI values
	JS9.Filters.updateval(target, filter, oval);
    }
};

// undo the last filter
JS9.Filters.xundo = function(target, did, id){
    let i, pinst, obj, filter, val;
    const im = JS9.lookupImage(id, did);
    if( im ){
	pinst = im.display.pluginInstances[JS9.Filters.BASE];
	if( pinst.stack && pinst.stack.length ){
	    obj = pinst.stack.pop();
	    im.rgb.img.data.set(obj.data);
	    im.displayImage("display");
	    JS9.Filters.updateval(target, obj.filter, 0);
	}
	if( pinst.stack && pinst.stack.length ){
	    for(i=0; i<pinst.stack.length; i++){
		filter = pinst.stack[i].filter;
		val = pinst.stack[i].val;
		JS9.Filters.updateval(target, filter, val);
	    }
	} else {
	    JS9.Filters.updateval(target, null, null);
	}
    }
};

JS9.Filters.xreset = function(target, did, id){
    const im = JS9.lookupImage(id, did);
    if( im ){
	im.filterRGBImage("reset")
    }
};

// change the filter
JS9.Filters.xgenfilter = function(did, id, filter, target){
    let val;
    const im = JS9.lookupImage(id, did);
    if( im ){
	val = parseFloat(target.value)
	JS9.Filters.xfilter(target, did, id, filter, val);
	$(target)
	    .closest(`.${JS9.Filters.BASE}Container`)
	    .find(`[name='${filter}val']`)
	    .prop("value", val);
    }
};

JS9.Filters.xgenval = function(did, id, filter, target){
    let val;
    const im = JS9.lookupImage(id, did);
    if( im ){
	val = parseFloat(target.value)
	JS9.Filters.xfilter(target, did, id, filter, val);
	$(target)
	    .closest(`.${JS9.Filters.BASE}Container`)
	    .find(`[name='${filter}']`)
	    .prop("value", val);
    }
};

// re-init (avoiding recursion)
JS9.Filters.reinit = function(){
    const pinst = this.display.pluginInstances[JS9.Filters.BASE];
    if( !this.inProcess && pinst.stack && pinst.stack.length ){
	this.inProcess = true;
	delete pinst.stack;
	JS9.Filters.init.call(this);
	this.inProcess = false;
    }
};

// re-init when a different image is displayed
JS9.Filters.display = function(){
    let pinst;
    if( this.lastimage !== this.display.image ){
	pinst = this.display.pluginInstances[JS9.Filters.BASE];
	this.inProcess = true;
	delete pinst.stack;
	JS9.Filters.init.call(this);
	this.inProcess = false;
    }
};

// clear when an image closes
JS9.Filters.close = function(){
    // ensure plugin display is reset
    JS9.Filters.init.call(this, {mode: "clear"});
};

// constructor: add HTML elements to the plugin
JS9.Filters.init = function(opts){
    let s, t, im, mopts, imid, dispid, html, key, obj;
    // on entry, these elements have already been defined:
    // this.div:      the DOM element representing the div for this plugin
    // this.divjq:    the jquery object representing the div for this plugin
    // this.id:       the id ofthe div (or the plugin name as a default)
    // this.display:  the display object associated with this plugin
    // this.dispMode: display mode (for internal use)
    //
    // opts is optional
    opts = opts || {};
    // set width and height of plugin itself
    this.width = this.divjq.attr("data-width");
    if( !this.width  ){
	this.width  = JS9.Filters.WIDTH;
    }
    this.divjq.css("width", this.width);
    this.width = parseInt(this.divjq.css("width"), 10);
    this.height = this.divjq.attr("data-height");
    if( !this.height ){
	this.height  = JS9.Filters.HEIGHT;
    }
    this.divjq.css("height", this.height);
    this.height = parseInt(this.divjq.css("height"), 10);
    // clear out html
    this.divjq.html("");
    html = JS9.Filters.headerHTML;
    // param values for image processing
    delete this.stack;
    // set up new html
    this.filtersContainer = $("
")
	.addClass(`${JS9.Filters.BASE}Container`)
	.attr("id", `${this.id}Container`)
        .attr("width", this.width)
        .attr("height", this.height)
	.appendTo(this.divjq);
    // do we have an image?
    im = this.display.image;
    if( im && (opts.mode !== "clear") ){
	// convenience variables
	imid = im.id;
	dispid = im.display.id;
	mopts = [];
	// add space before the filters
	html += `<div class='JS9FiltersLinegroup'> </div>`;
	// add the arg filters
	for( key in JS9.Filters.argfilters ){
	    if( Object.prototype.hasOwnProperty.call(JS9.Filters.argfilters, key) ){
		obj = JS9.Filters.argfilters[key];
		mopts.push({name: key,
			    value: sprintf(JS9.Filters.argfilterHTML,
					   key,
					   key,
					   dispid, imid, key, obj.def,
					   obj.min, obj.max, obj.step, obj.init,
					   key,
					   dispid, imid, key,
					   key,
					   dispid, imid, key)});
		// add this line to the main html spec
		html += `<div class='JS9FiltersLinegroup'>$${key}</div>`;
	    }
	}
	// add the noarg filterfs
	for( key in JS9.Filters.noargfilters ){
	    if( Object.prototype.hasOwnProperty.call(JS9.Filters.noargfilters, key) ){
		mopts.push({name: key,
			    value: sprintf(JS9.Filters.noargfilterHTML,
					   key,
					   key,
					   dispid, imid, key, null,
					   key,
					   dispid, imid, key,
					   key,
					   dispid, imid, key)});
		// add this line to the main html spec
		html += `<div class='JS9FiltersLinegroup'>$${key}</div>`;
	    }
	}
	// add space before the undo
	html += `<div class='JS9FiltersLinegroup'> </div>`;
	// add undo to the main html spec
	html += `<div class='JS9FiltersLinegroup'>$undo $reset</div>`;
	t = sprintf(JS9.Filters.undoHTML, dispid, imid);
	mopts.push({name: "undo", value: t});
	t = sprintf(JS9.Filters.resetHTML, dispid, imid);
	mopts.push({name: "reset", value: t});
	// expand macros to generate html
	s = im.expandMacro(html, mopts);
	this.lastimage = im;
    } else {
	s = "
Image filters will appear here.";
    }
    this.filtersContainer.html(s);
};

// add this plugin into JS9
JS9.RegisterPlugin(JS9.Filters.CLASS, JS9.Filters.NAME,
		   JS9.Filters.init,
		   {menuItem: "Image Filters",
		    onplugindisplay: JS9.Filters.init,
		    onchangecontrastbias: JS9.Filters.reinit,
		    onsetpan: JS9.Filters.reinit,
		    onsetcolormap: JS9.Filters.reinit,
		    onimagedisplay: JS9.Filters.display,
		    onimageclose: JS9.Filters.close,
		    help: "help/filters.html",
		    winTitle: "Image Filters",
		    winDims: [JS9.Filters.WIDTH, JS9.Filters.HEIGHT]});


With over 350 cultural organizations and programs offered within the city alone, there are more museums and attractions than the most ambitious planner can fit into even the longest multi-day itinerary! The city offers everything from the MIT Museum, which houses world renowned collections in science and technology, holography, architecture and design and nautical engineering to the USS Constitution which was built in 1797 making it the world's oldest commissioned warship afloat. From the Freedom Trail to the Edward M. Kennedy Institute for the United States Senate, where groups can immerse themselves in a full-scale representation of the United States Senate Chamber Boston has it all.
Use this section to research favorites and narrow your selection. New attractions have opened in recent years and beloved favorites have added exciting new galleries and exhibitions. Choose from the city's most popular sites and discover lesser known gems off the beaten path.


text:
Conch Cottage Snapshot
Whitewashed bricks, old Florida shutters and a modern tin roof.
A classic look on First Street, caught in passing.
Posted by Conchscooter at 6:00 PM 2 comments: Links to this post
Labels: Conch Cottage, Key West Blog
Gentrification Please!
Gentrification is the process of moving the affordability goalposts out of reach of ordinary people, and I think the process is gaining speed in Key West. Lately I've got the feeling that the Key West is being hammered on all sides by various plans to "upgrade" the city. Even the approaches to Key West aren't immune. I wrote earlier about the plans for 43 new homes on land in front of Key Haven. A half mile further east, closer to Mile Marker Six we have plans for luxury homes on an empty, kidney shaped peninsula (upgraded to an island by the developers!) that sticks out north of the highway.
I think it would make a fabulous retreat for someone with twenty plus million to spare to build themselves a homestead on the four acres surrounded by water with only one paved roadway in. But greed dictates maximum build out at all costs...
Moving closer in we came to the entrance to Key West which is pretty much a row of blighted chain hotels and plastic ticky tacky boxes lining North Roosevelt Boulevard. It's not much of a welcome mat to the fabulous Southernmost City. Even ignoring the fact that the Boulevard is under construction, it looks pretty unappealing.
There have been plans in the works to change this,
...into something that looks more like this:
...but the dismal economy put on hold the Spottswood plans for a massive hotel and convention center curling around the corner of North Roosevelt. They own the whole string of hotels and the idea was to combine them into a center that would look good and offer the convenience of a Key West experience with none of the real world hassles. Our state representative raised a few eyebrows when he announced he was shilling for the gambling industry which is trying to nuzzle into the state, much to the aggravation of the Seminole tribes which currently enjoy a monopoly. State Representative Ron Sanders is being term limited out of office this election so I suppose he needs a new gig, but still, gambling..?
Further into town plans are afoot to build a hotel complex on open land that used to be a trailer park, it was affordable winter housing almost on the Key West waterfront, across from Schooner Wharf Bar.
A group of ad hoc local developers bought the land and tried to build homes on it. That got felled by the economy and after Cortex went bust the land lay fallow. Now Pritam Singh, he of Truman Annex fame, has decided to build a hotel on the land. A group of neighbors has filed suit to try to stop it, but I wonder how they will manage. (More on that next Monday). They got Cortex on the ropes long enough to drive them bust but Singh is a wiley developer, he has to be in a town where everyone has an opinion and most of them are negative. The owners of Schooner Wharf had an opinion piece in last Sunday's Citizen complaining that they aren't being given credit for sharing their portion of the waterfront with the city, and aren't given credit for helping revive Key West Bight when it needed help. Schooner Wharf is a tourist attraction that bills itself as the last piece of old Key West, whatever that is, grunge is part of it I think.
But they do have fun, the tourists at Schooner Wharf, and let's face it, if the bar hadn't been there I wonder how well the city would have drawn people in to the rest of the waterfront. In fact Key West Bight is now coming in for scrutiny from the city with plans to clean up, dare I say gentrify the docks.
The Bight Board (there is such an entity!) is talking of cleaning things up by limiting advertising and the like. The night is city property but it is freewheeling to some extent and it does ooze tourist appeal with the funky boats, tours and salty characters.
I can't say I'm a great fan of the Half Shell Raw bar, but it is a definite destination bar, just as it is.
And it too exhibits it's share of funk. I mean, look at this old bicycle rack, this is pure Key West where a bicycle is basic transportation not an expensive lifestyle statement:
People who came to Key West thirty years ago, and are still alive, bitch all the time about how Key West has changed over the years and I suppose they are right. Gentrification is after all a perception. What seems gentrified to a commercial fisherman is a place made pretty when viewed by a millionaire's arm ornament from the deck of a very expensive floating palace. However the pace and ferocity of change is quite startling when you take into account how much stuff is being planned or built and with so little public input or approval.
Take Truman Waterfront. Plans for a retirement home on six of 34 acres deeded to the city by the retreating Navy have sort of been swept away. A sleek upscale Spottswood marina has been proposed to much condemnation but is still the leading candidate to replace the open space on the waterfront. The best part is the developers want the city to foot the bill for construction then pay the developers to manage the city property once completed. As though the city's port authority couldn't do that job. They got rid of the World War Two Mohawk cutter which was getting in the way but the Ingham soldiers on as the sole remaining floating museum.
Even these grandiose developments aren't enough for the developers in Key West who apparently want to make changes offshore as well. The Conch Republic under siege?
Or being improved?
Labels: Florida, Key West Blog, North Roosevelt Boulevard