Long battery life. Sensors report battery status.
My primary interest in building this system was to get an accurate outdoor temperature especially on wet winter mornings in trying to determine if black ice would be a problem on the drive to work. I had two wireless thermometers and a remote reading mercury thermometer, and all three displayed different temperatures, several degrees apart.
Buildings, pavement, trees, and other objects that can store and radiate heat affect outdoor thermometers and also prevent proper sensor ventilation. Standards for air temperature measurements indicate that if a nearby object is x feet tall, the sensor should be at least 4x feet from the object. It should be five feet above the ground and be shielded from direct sunlight. Radiation shields/ Stevenson screens can be used to shield the sensor from rain and the effects of sunlight. This guide gives specifics on placement.
The problem with many department store wireless thermometers is the limited range. A unit advertised as "up to 75 feet" might only be good for 20 feet if the signal has to pass through a exterior wall. Because of this limitation, it is difficult to place the sensor far enough away from a house, trees, or other objects. This problem is the motivating factor for my building the BenjyMometer (portmanteau of "Benjy" and "Thermometer").
I began by experimenting with 315 MHz RF Link radios that I purchased from Sparkfun (see parts list section). These units use Amplitude-Shift Keying (ASK) and have an estimated range of 500 feet in the clear running at 4800 baud. My casual testing showed that the range outside was greater than 200 feet and over 100 feet through an exterior wall. (I did not test greater distances.) The transmitter can run at up to 12 volts, but I choose 6 volts as a compromise. I also decided to run the units at 1200 baud to improve reliability.
ASK is sensitive to noise and issues with clock synchronization between the send and receiver, so I used the VirtualWire library for the Arduino. The library includes error detection and a protocol that mitigates sender/receiver clock differences.
Remote sensors use battery power. In the case of outdoor sensors, the batteries must be reliable even during the cold of winter. Battery life is also critical since the electronics of my unit are in a watertight box with screw fasteners, making frequent battery replacement inconvenient. The final design used a 3.3 volt Arduino Pro Mini with a 3 volt AA battery power supply and a 6 volt AA battery supply for the transmitter. The Arduino is put into deep sleep mode except when measuring the temperature and transmitting it. The transmitter draws little current when not transmitting, so no mechanism is needed to turn off the transmitter.
To save battery power, the unit only reads and transmits the temperature every two minutes. A longer period would extend battery life, but battery life is typically more than six months. Each sending unit has an extra delay of several seconds based on its unit number. This allows multiple units to transmit on the same frequency. If transmissions from multiple units collide, the variable delay based on the unit number insures that they will eventually be able to send a temperature message in the clear.
The units also report their battery voltages to the receiving units so that the user can monitor battery status.
The final design goal of displaying temperatures on the web was implemented but is not currently in use by me. I find it easier to glance at a temperature display than to navigate to a web page or run an app.
I experimented with putting the temperature on the web with an ESP8266. While this approach worked, I didn't want to invest the time in writing a minimal C web server that would format the temperature display. I then tried running Lua on the ESP8266 but abandoned the effort when the code was in beta mode due to some stability concerns.
The final version of the BenjyMometer receiver provides a 3 volt logic serial port that outputs the temperature and sensor battery information. I wrote a Java program for the BeagleBone Black that parses this information and displays it in a formatted table on the web. But after using the system, I found I liked glancing at a large 7-segment display rather than using the web to access the outdoor temperature.
Connectors for the batteries and temperature sensor. The sensor can be plugged directly into the board for indoor units and via a cable for outdoor units.
As described in the design goals section, the Arduino code reads and reports the temperature every two minutes. It reports the battery voltages twice a day. When not performing these tasks, it is put in a deep sleep mode to conserve battery power. The AVR ATMega328, the Pro Mini processor, can only sleep 8 seconds before waking up. The processor wakes every 8 seconds, checks to see if the two-minute sleep period has expired, and goes back to sleep if more sleep time is required.
The system uses the Low-Power library for the Arduino to enter sleep mode. See this page for details after running the Pro Mini in low-power mode. Note that the current version of the Pro Mini has a jumper to disable the on-board regulator and power LED to reduce power consumption. The jumper points are connected with solder which I removed to turn off the LED and regulator.
To measure and report the 3 volt power supply that powers the Arduino is straight forward. The ATMega328 has a bandgap reference against which Vcc can be measured. The technique is explained on this page.
Measuring the 6 volt supply is more difficult. First, a resistor divider is used to drop the voltage to below 3 volts so it can be measured by the 3 volt Pro Mini. Normally, a low impedance divider is required to charge the analog-to-digital converter's sample and hold capacitor; however, such a divider will drain the battery faster. This page offers a solution by bypassing the high-impedance resistor network with a capacitor to allow the sample-and-hold to charge. I am not sure the value reported by the analog-to-digital converter in this setup is accurate; however, as long as the value reported can be mapped to a low battery, the setup is adequate. I'm still collecting data on the reported battery voltages.
For the outdoor unit, I made a poor man's Stevenson Screen using some PVC pipe. Unfortunately, the unit does not prevent some solar heating in direct sunlight. The electronics hang under the shield with a cable going to the DS18b20 temperature sensor. I followed this video to make a watertight probe using the sensor.
The first two images below show the indoor sensor in a 3D printed case (a prototype version). The image on the right is my poor-man's radiation shield made from PVC pipe and a water tight electrical box. Notice its similarity to Nomad.
On July 1, 2018, I replaced the poor man's shield with an AcuRite 06054M sun shield. The shield is meant to be used with a commercial wireless temperature sensor that pushes into the shield. Modifying the shield for the BenjyMometer sensor was easy because the shield snaps apart and back together, giving me easy access to the internal part of the shield.
At first I thought the new shield was working better than my homemade shield, but that seems to be a misunderstanding on my part. I plan to take more data and update the page.
3 volt serial to a BeagleBone Black (or other processor) for web temperature reporting.
See the PCB without the Arduino installed.
If the unit is configured for a 7-segment display, two switches can be connected to the circuit board to control the display. One button switches between the different sensor units. The temperature is displayed for the selected sensor until another button press occurs. The second button causes the battery voltages and high and low temperatures for the selected sensor, along with the times the high and low temperatures occurred, to be displayed briefly. If the unit uses an LCD display, the temperature and battery voltages for two sensors are displayed.
One problem with the receiver is that 7-segment display boards typically generate a lot of noise on their power lines which interferes with the 315 MHz. receiver. The noise is generated as the digits are swept to display each digit. Rather than powering the 7-segment display and an Arduino from a single regulated power supply, a 7 volt unregulated supply is used which is connected to the on-board regulators on the display and the Arduino. This arrangement improves the performance of the system along with filter capacitors and ferrite beads. But the receiver performance is reduced a bit over a receiver using only an LCD display. When using a 7-segment display, the 315 MHz. receiver is powered from the Arduino Pro Mini regulator. When using an LCD display, the board can be configured to be powered from a regulated 5 volt supply.
Optional OpenSegment 7-Segment Display. An optional potentiometer can be used to set the brightness of the display.
The Arduino code waits for messages from the sensors, parses them, and updates its tables of current values. It also checks for missing messages from the sensors and indicates if a sensor reading is not up to date. The system records the high and low temperatures for each sensor with a time stamp read from the real-time clock. It also monitors switches that can be used to change the display or set the clock. To set the clock, the brightness potentiometer is used to select individual hour and minute values.
Each time a temperature or battery value message is received, the Arduino also sends the message to an optional BeagleBone Black which parses the messages and formats a web page with current temperature and battery values.
There were two problem during the implementation phase of the receiver. First, I used a DS3231 layout for the RTC that I found on the web; however, the layout was for an SO-16 IC, not an SO-16W (wide) that matches the chip. So a new PCB was fabricated. Second, the RTC can generate a square wave with a precise period. I do not use this feature, but I made a connection on the PCB from the square wave pin to the Arduino for future use. I found that if I enabled the square wave during start up, the RTC would forget the time although it was backed up by a watch battery. I had not enabled the pull-up resistor in the Arduino for this pin, so the oscillator line was floating and being capacitively coupled to the RTC reset line. Enabling the pull-up or turning off the oscillator remedies the problem.
This project seemed to drag on as I experimented with different temperature probes and the 315 MHz. radios. I also experimented with the ESP3822 and wrote code for the BeagleBone Black for the web display of temperature. Additional time was required to produce custom printed circuit boards and 3D cases. Time was used to resolve the interference issue with the 7-segment display and the 315 MHz. receiver. During much of the experimentation time, I used prototype versions of the system and began to rely on it.
I need to do more work on the outdoor radiation shield or purchase a Stevenson Screen. Due to the many tall trees near my house, probe placement is problematic, so additional experimentation is needed.
I am pleased with the electronics and meeting my design goals. I'm less pleased with the radiation shield.
Given the time and materials costs, the purchase of a commercial weather station would have been easier. However, I enjoyed designing and building the BenjyMometer and customizing it with features I wanted.
As with many of my projects, my wife Sue Ellen was supportive throughout the process as was Mike Barts. Thanks to both for the encouragement and suggestions.


Since 1957, The Women's Home has helped women in the greater Houston area build whole lives.
Our services focus on meeting the needs of women who have histories of addiction, mental illness, homelessness, past abuse and a lack of job skills or education. These issues often form a tragic cycle that strip a woman of her dignity and ability to realize her full potential.
We offer our residents a home and an individualized WholeLife(SM) program based on six wellness areas: emotional, financial, physical, social, spiritual and vocational. We have two unique residential campuses that provide individually tailored services to our residents. Our treatment and transitional housing program has 50 beds and offers residents up to 18 months of support. In addition, The Women's Home owns and operates an 87-unit apartment community, called Jane Cizik Garden Place, which offers permanent supportive housing specializing in women centered services. Both residential programs offer a solution to women who seek a safe, sober and drug-free community where they can recognize and reach their unique potential for success.
Our mission is to help women in crisis regain their self-esteem and dignity, empowering them to return to society as productive, self-sufficient individuals.


In Hinduism, the Rudra Sampradaya is one of four Vaishnava sampradayas, a tradition of disciplic succession in the religion. Vaishnavism is distinguished from other schools of Hinduism by its primary worship of deities Vishnu and/or Krishna and their Avatars as the Supreme forms of God. The ascetic Vishnuswami formed the Rudra-Sampradaya, though the sampradaya is believed to have traced its origins to the Hindu deity Shiva, also known as Rudra, who passed on the knowledge imparted to him by Vishnu (or Krishna), on mankind. According to Vaishnavism, Shiva, who has the Shaivism school dedicated to his worship as the Supreme God, is the first and foremost Vaishnava, or follower of Vishnu. According to the tradition, Vishnuswami was fifteenth in the line of passing of the knowledge from teacher to student. The date of formation of the sampradaya is disputed. While James Hastings dates Vishnuswami to the early 15th century, and Carl Olson dates him to the 13th century, followers of the sampradaya says that Vishnuswami was born 4500 years earlier. Not much about the historical Vishnuswami is known and all his works are thought to have been lost in time. The Sampradaya originated in Sri Kshetra(Odisha) but currently is mainly present in Gujarat/Rajasthan, through the Vallabha sampradaya. The beliefs of the sampradaya was further propagated by Vallabha Acharya (1479–1531).
Rudra sampradaya has two main divisions: Vishnuswamis, that is, followers of Vishnuswami and the Vallabhas or Pushtimarg sect, founded by Vallabha. According to William Deadwyler, the sampradaya has disappeared, except for the Pushtimarg group.
The philosophy of the sampradaya is Shuddhadvaita, or pure monism.
This page was last edited on 23 February 2018, at 05:24 (UTC).


worst part is when the person asking the question is a Non-Pilipinx Person of Color though. I'll be drawing some thing up tomorrow.
oddly enough, i was buying listerine when this happened. but no mouth wash can cleanse the microaggression taste left in my mouth.
i'm writing my thesis right now and fortunately, experiences like this get to be put in my thesis as a way to engage people who are to read my thesis.


text:
/ Stephen N. Limbaugh Jr.
Stephen N. Limbaugh Jr.
Trustee and Former President
Stephen N. Limbaugh Jr. is a US District Judge for the Eastern District of Missouri. He previously served sixteen years as a judge on the Supreme Court of Missouri, including a two-year term as Chief Justice. He began his legal career with the family firm of Limbaugh, Limbaugh & Russell, in Cape Girardeau, and was elected prosecuting attorney of Cape Girardeau County in 1978. After serving a four-year term, he returned to private practice and in 1987 was appointed circuit judge for the 32nd Judicial Circuit, a position he held until his appointment to the Supreme Court in 1992. Judge Limbaugh is active in many professional, civic, and charitable organizations. He has been a Society trustee since 2004 and a member of the executive committee since 2006.

redpajama_set_name: RedPajamaCommonCrawl


text:
EPUB Ò MOBI Dangerous in Diamonds í 9780515149340
KINDLE ✓ Dangerous in Diamonds Þ Madeline Hunter
Dangerous in Diamonds Ploy his considerable mental faculties to finding answers to the uestions that fascinate himWhen Daphne Joyes rejects this notorious hedonist's seduction she assumes that he will forget about her and continue on his path to hell Instead her beauty grace and formidable composure captivate him and she becomes one of those fascin 35 stars I enjoyed the read but it wasn't as good as the Rothwell Brothers series which I recently read It might have been better if I'd read the earlier books in this series actually as there were some plot points that clearly resonated with earlier books This one is about a powerful duke Castleford LOL I'm getting a little tired of the 'duke' trope who was apparently well known as a drunken manwhre Until of course he takes up with our lovely heroine Daphne The good old reform of a rake storyline Fortunately he is revealed as not such a wastrel as society likes to think him although he's certainly no angel And once he connects with Daphne there is no cheating either So that's good I didn't like him writing the saucy book though a guide to London's best brothels Yes I know there were such books some of them are apparently now available on the Internet LOL but I found it a bit too salacious for my taste that our hero would want to write and publish such a book I like a hero with a little integrity and moral self worthI wonder if this book published in 2011 would be published as is today because Castleford is very determined to seduce Daphne and there are some scenes where he's assuming no means yes It's a tad non PC these days and I was verging on uncomfortable in some scenes where Daphne was saying no and he was really pushing her to give in But later when Daphne's horrible history is revealed he is understanding and nothing but supportive so that was goodI did find there was a bit of overlap in the plot concerning the nasty antagonist with another Hunter book I read a few weeks ago which also featured an abusive character It was handled differently in this book than in the other one but still it was a little disappointing to me as a reader to see such a similar plot point I also couldn't really see the relevance of including the Peterloo Massacre in Manchester a real historical event of 1819 in this book It did not serve much of a function in the plot of this book and could easily have been left out It was just not very relevant to the story and it wasn't introduced to the storyline very well IMO Seemed a rather pointless inclusion to meI was not that keen on the heroine Daphne and her background I don't always need to read about characters from the Upper 10000 but in this case something seemed to be missing I was uncomfortable with her apparent acceptance of being Castleford's mistress I'm not usually keen on 'mistress' books But again maybe it was the fact that she'd been introduced in earlier books which I haven't read which made her character feel a little undefined for me In that case my bad Or if it's going to be presented as a potential standalone the author perhaps could pay a little attention to this A tricky aspect of writing a series no doubtBut with all of my uibbles and cavilling I did enjoy the read overall and I will consider reading other books in the series The reviews seem to be saying this is the best one but we'll see I suppose
> Dangerous in Diamonds
Madeline Hunter Þ Dangerous in Diamonds TEXT
The Duke of Castleford has been so bad for so long that scandal can't be bothered to rise up around him any To alleviate the boredom of his privileged life he occupies himself with drinking and whoring not to mention the occasional duel When something piues his interest however he has been known to emerge from his ennui and em 45 starsI haven't read or listened to any of the other books in this series but I picked this up in the recent Tantor Audio sale gawd bless 'em and was immediately hooked by the superb narration by Kate ReadingThe story is pretty much a variant of your "jaded rake meets woman who finally interests him" plot but what marks it out as a bit different is the inclusion of the historical detail around the Peterloo Massacre in 1819 plus Daphne's network of "sisters" women who have been through similar experiences to herself at the hands of unscrupulous menAt the beginning of the story Tristan the Duke of Castleford is surprised by the beuest of several plots of land he has received in the will of the Duke of Becksbridge a distant relation He doesn't need the money or the land and the late Duke's accompanying missive is cryptic to say the least but while Castleford might spend six days out of every seven drinking and whoring he does tend to his estates – on Tuesdays – and by all accounts has a very shrewd head for business and managementHe decides to visit the closest of these packets of land and finds himself at the "Rarest Blooms" which is currently inhabited by Mrs Daphne Joyes the widow of a soldier and a younger rather nervous woman named Katherine Johnson The property houses Mrs Joyes' flower growing business and is also a sort of refuge for women who need to escape from the eyes of the world or worse things and live in peace and anonymity for a whileCastleford is immediately captivated by the beautiful and intelligent Mrs Joyes and sets about trying to seduce her As far as that element of the story goes it's not especially original but it does have some delightful dialogue between the pair as they develop a friendship of sorts and as Daphne begins to realise that there is to the Duke than many people believe – or rather than he allows many people to believeBut Daphne is a mystery and Castleford's acute mind won't leave it alone – he has to find out just who she is and why she is living alone as well as working out why on earth he was left the properties in Becksbridge's will which are all dotted around in different parts of England He begins to piece the puzzle together slowly and it's likely the readerlistener is a bit ahead of him but Daphne's story when it is finally revealed packs no less a punch for thatI admit that I really liked Castleford as a character He's jaded and he's a rake and makes no bones about admitting it but he's fiercely intelligent and honourable at the same time He's witty has a great sense of humour and he doesn't lie to Daphne He makes it clear to her that he wants her to become his mistress and that theirs will be a finite relationship but he also shows her a lot of consideration especially when he makes her a promise that most men would have found it impossible to fulfil The trouble is that it's hard to believe that this intelligent witty kind man only manages to stay sober on one day each week During the course of the book we only see him after he has received the beuests and has become intrigued enough by Daphne and her situation to want to devote time to delving into her past and the mystery that surrounds her but it's still difficult to believe that someone with his proclivities hasn't drunk himself to death or gambled away the family fortune long before nowDaphne is obviously his perfect mate She can match him in intelligence determination and wit but she is not completely honest with him I suppose this is understandable given her history and Castleford's reputation for insobriety and dissipation but I did feel as though her insistence on not giving him her trust got a little wearying especially after she'd given in to his blandishments and become his loverThe sexual tension between the pair crackles from their first meeting Daphne is adamant that she does not want to be seduced but is unable to stop herself becoming and fascinated by Castleford who is such an odd mixture of depravity and astuteness as well as someone she is pretty sure knows how to show a girl a good time Even simple kisses raise the temperature and the love scenes while not graphic are very sensualThere are some fascinating glimpses of the political situation of the day in the novel too England after the Napoleonic Wars was still suffering great hardships There was widespread famine and chronic unemployment and conditions were made even worse by the introduction of the first corn laws which meant it was illegal to import cheap wheat even when there were shortages In the earlier part of the novel we hear about the civil unrest that is spreading in the north of England and Castleford takes part in several discussions about what is happening and about what parliament should be doing in order to prevent disaster When he follows Daphne to Failsworth five miles outside Manchester they both get to experience first hand the effects of the meeting at St Peter's field and the subseuent military chargeBut the book is first and foremost a romance and these events take place in the background so the progress of the central relationship is not slowed down in favour of a history lessonAs with so many other books in my TBR mountain this is a title I opted to listen to rather than read and I'm so glad I made that choice because Kate Reading's narration was outstanding Each of the characters in the book was voiced distinctly and there was never any confusion as to who was speaking Not only were the male and female voices different – I think Ms Reading is one of a handful of female narrators who is able to lower the pitch of her voice sufficiently to sound reasonably convincing as a man – but her portrayal of characters of the same sex was also very clearly delineated I noticed as well that even when she was narrating what was in a character's head she tended to speak using a tone similar to the one she used for that character's speech so that it was very clear when we were hearing Castleford's thoughts or when we were hearing Daphne's I was so impressed with her delivery in this that I immediately headed over to Audible to see if I could find what other books Ms Reading has narrated I'm pleased to say that she has worked on the Lauren Willig Pink Carnation series several of which are already on my TBR pile but it doesn't look as though she has narrated many historical romances at all which is a great loss to the genre IMOIn the end I opted to give Dangerous in Diamonds 45 stars While I liked Castleford it's impossible not to be a little distracted by the inconsistencies in his character and that together Daphne's repeated refusals to trust him did unbalance things a little for me in terms of the story But the narration is stellar and I thought it than made up for the things I found problematic I haven't listened to any of the other books in this series and I'm not sure I'll be doing so any time soon Had they been narrated by Kate Reading I'd probably be glomming them right now but the other three books use someone else I'm not familiar with so I might wait a while before I pick any of them up
READER Dangerous in Diamonds
EPUB Ò MOBI Dangerous in Diamonds í 9780515149340 â The Duke of Castleford has been so bad for so long that scandal can't be bothered to rise up around him any To alleviate the boredom of his privileged life he occupies himself with drinking and whoring not to mention the occasional duel When something piues his intAtions to him That he intends to have her and soon is actually the least of the dangers that his pursuit of her presents More troublesome is his interest in her past and her history and the way he keeps poking his nose into the secrets behind the distant relative's beuest that gave him ownership of the property where she lives 45 Devilish Duke Stars


text:
UAE President, Minister of State for Defense Affairs Receive French Defense Minister
Photo: WAM WAM28.11.2022 UAE
UAE President His Highness Sheikh Mohamed bin Zayed Al Nahyan, received Thursday at Qasr Al Shati Palace in Abu Dhabi, French Defense Minister Sébastien Lecornu.
During the meeting, His Highness Sheikh Mohamed and the French Minister discussed the growing defense cooperation between the two countries that have contributed to strengthening their bilateral relations and cooperation.
The two sides also exchanged views on a number of issues of interest, UAE national news agency reported.
The meeting was attended by H.H. Lt. General Sheikh Saif bin Zayed Al Nahyan, Deputy Prime Minister and Minister of the Interior; H.H. Sheikh Mansour bin Zayed Al Nahyan, Deputy Prime Minister and Minister of the Presidential Court; H.H. Sheikh Hamdan bin Mohamed bin Zayed Al Nahyan; Sheikh Mohamed bin Hamad bin Tahnoon Al Nahyan, Special Affairs Advisor at the Presidential Court; and Mohammed bin Ahmed Al Bowardi, Minister of State for Defense Affairs; Khaldoun Khalifa Al Mubarak, Chairman of the Executive Affairs Authority, Member of the Executive Council, along with a number of officials and the delegation accompanying the French Minister.
For his part, Mohammed bin Ahmed Al Bowardi, UAE Minister of State for Defense Affairs, also received the visiting French Defense Minister at the Ministry's headquarters in Abu Dhabi.
During the meeting, they reviewed the prospects of developing bilateral relations in various fields, with special emphasis on areas of defense.
A number of issues of common concern featured high in the meeting.
Previous PostBahrain's Chief of Staff Receives UAE National Defense College Delegation
Next PostUAE President Receives Turkish Minister of Interior
UAE Chief of Staff Receives French General Delegate for Armaments
Staff Lieutenant General Engineer Issa Saif Mohammed Al Mazrouei, Chief of Staff of the UAE Armed Forces, met Wednesday with Emmanuel
UAE, Korea Agree to Bolster Special Strategic Partnership
At the invitation of His Highness Sheikh Mohamed bin Zayed Al Nahyan, President of the United Arab Emirates (UAE), Yoon Suk Yeol,
UAE President Receives Pakistan's New Chief of Army Staff
UAE President His Highness Sheikh Mohamed bin Zayed Al Nahyan, received Monday General Asim Munir, Chief of Army Staff of the Islamic
Abu Dhabi Ship Building Starts Production of Falaj Class Vessels for UAE Navy
EDGE Group's Abu Dhabi Shipbuilding (ADSB) announced the commencement of the production of the Falaj3 Class Fast Patrol Vessels with a
Issa Al Mazrouei Named Chief of Staff of UAE Armed Forces
UAE President His Highness Sheikh Mohamed bin Zayed Al Nahyan on Tuesday issued a Federal Decree appointing Staff Lieutenant General
Higher Organizing Committee for IDEX & NAVDEX 2023 Holds Third Meeting
The Higher Organizing Committee for the 16th edition of International Defence Exhibition (IDEX 2023), and the 7th edition of the Naval


text:
Miscellaneous stuff
All things *not* Bukowski
About Bob Dylan
Thread starter Black Swan
Abord the Yorikke!
Well deserved Nobel Prize in literature for 2016!
https://www.theguardian.com/books/live/2016/oct/13/nobel-prize-in-literature-2016-liveblog?CMP=share_btn_fb#img-1
Reactions: Bukfan, Johannes and Purple Stickpin
PhillyDave
"The essential doesn't change." Beckett
Good for him. That's cool. Kinda funny that they chose a year that he didn't publish book and didn't release any original/new songs. "a poet in the grand English tradition." I agree. I think Lou Reed is a poet as well. Pretty much all other lyricists since rock n roll's inception, any that are/were considered poets, I think, are "poetic" at most. Jim Morrison was on his way and a few others were/are close but Bob is it. Leonard Cohen I guess...but he is rock n roll era but not rock n roll...
Reactions: Purple Stickpin
Purple Stickpin
More like a Lifetime Achievement Award than anything else, but I like it.
Reactions: Bukfan, Black Swan, Johannes and 1 other person
skiroomalum
Well, that's kinda the point. I'm sure Philip Roth is not pleased.
Reactions: Johannes and PhillyDave
I think the Nobel science guy(s) got an award the other day for something they wrote in 1977, so it's often a life's work thing.
As for Bob Dylan's lyrics being literature, no comment.
Reactions: PhillyDave
hoochmonkey9
Art should be its own hammer.
Love Bob, but that's wack.
Yes, I realize no one had said wack sinse 2009, but my outrage makes me all old Toney.
Pogue Mahone
Officials say drugs may have played a part
There is this story out there, that I kind of want to believe, but not because I want Dylan to take credit for the the Civil Rights white guy contribution. But supposedly Otis Redding was really upset/surprised that a white guy wrote "Blowing in the Wind". So that's what drove him to write "A Change Is Gonna Come." If true, I love the competition that drove Otis to make that kind of contribution. I'm any case, Bob should have gotten that reward back in 1965.
It's cool on one hand because it's Bob Dylan, it has never happened before and the Swedish Academy keeps throwing out surprising laureates every now and then, as if they want to show the world that they are not just a bunch of grey old farts in some office.
On the other hand there are probably few if not no other possible candidates who'd need the 8,000 000 Swedish krona and the sales hype in the wake of the Nobel less than Bob Dylan.
So I don't know. Coolest thing ever is rejecting the Nobel for Literature anyway, imo. Only two guys did this in the history of the prize. One, Boris Pasternak, was forced to do so by the Soviet Union. The other is Jean Paul Sartre and to this day I was never able to fully comprehend his written explanations why. Maybe he didn't understand himself either.
Reactions: Black Swan and PhillyDave
Of course I don't know Dylan personally and have no idea what he's gonna do w the money but I'm sure he'll take it. Have you seen some of the crap he's tried to sell on his site over the years?
mjp said:
That lyrics aren't poetry doesn't necessarily disqualify them as being literature. Is "the scientific literature" (a term used on a regular basis in my field) literature? Well, yes and no. I know I'm biased, but that doesn't necessarily disqualify me from having a legitimate opinion.
The guy knew how to lay the line down at a critical time in history. Why he gets the recognition now instead of then is anyone's guess...
It's because what Dylan did in '65-'66 was yet to be taken seriously. It was a kid's game, not a grown-up game; for better for for worse. And, at the end of the day, as mjp would likely state (if I understand his position well enough to state that), R&R is a kid's game, or a teenager's realm, for the most part. I have lost interest in much of what I listened to when I was a teenager, but not all of it. Some of it transcends the simple genre of R&R.
Reactions: Black Swan
I always marvelled at how Dylan could put heavy stuff into simple words. Isn't that what it is all about?
Reactions: gabilager
Skygazer
Over 500 posts
It's a long and winding road to the Nobel Prize anyhoo and the recipients tend to be grey haired by the time they get there, so they've earned it most of the time. Difficult to argue that lyrically speaking Dylan's words don't deserve.this accolade, but it is a surprise (a nice one) nonetheless.
Purple Stickpin said:
You know Dylan better than I do, but "The Times They are a-Changing" must have had a pretty big blip on the earthquake scale. Though I love many other Dylan songs, that one puts a nail in the coffin for the 1950s Daddy/Daughter relationship. I say daughter/daddy because I assume the father/son relationship was already strained.
At the end of the day, who remembers who won what award, prize, etc.
It's hard for me to work up a shit either way. Fucking James Joyce and Danny Valdez never won that thing, so how seriously can it be taken?
You really need to wake up about global warming and Danny Valdez... methane is dangerous...
Bukfan
"The law is wrong; I am right"
Funny we still have´nt heard Dylan's response to his Nobel prize, but I´m sure he´ll accept it just like he accepted the French Ordre des Arts et des Lettres and the Presidential Medal of Freedom and what not.
I still listen to Bob Dylan, loving the lyrics of Chimes of Freedom and It's Alright Ma (I'm Only Bleeding) and a few dozens more.
I feel like a Marvel Super Hero when I'm Driving through the streets of my one horse town listening to Bringing It All Back Home. :DD
Reactions: PhillyDave, Bukfan, Purple Stickpin and 1 other person
Black Swan said:
"Bringing It All Back Home" is one of his greatest albums just like "Blonde On Blonde". Of his later albums I like "Time Out Of Mind" the best.
Reactions: PhillyDave and Black Swan
Maybe Dylan won't respond at all. Not accept it, not reject it. Simply nothing, just keep touring and giving pissed off grumpy concerts like he has since dinosaurs inhabited the earth. Now THAT would be something. :D
Something new, too.
"You won the Nobel Prize."
"Yeah, whatever."
Reactions: Black Swan, PhillyDave and hoochmonkey9
esart
esart.com
I have to say that, for a songwriter, he should get whatever is even better than a Nobel Prize, but for literature? I don't think so.
So of all the writers out there that have studied and written prose, novels, fiction or non-fiction, poetry, essays, articles, stories over the span of their entire lives -- writers who have produced actual literature -- Bob Dylan's song lyrics win out over all of that?
Reactions: Bukfan and mjp
BukFan Brad
He's extremely overrated. I cannot appreciate a guy who sings through his nose. Not on any level.
His award was/is controversial and that's no bad thing, at least it sparks debate. But if literature is work of "written creative imagination that represents the culture and tradition of a people", then it is deserving. The cult of the Book shouldn't ignore other genres. Dramatists and playwrights including Shakespeare intended their words to be spoken primarily, so why should rich poetic lyrics intended to be sung be considered a lesser form.
What Dylan isn't telling us about his feelings on the award isn't atypical. He has described himself before when compared to a poet as just a "Song and Dance Man". Maybe we are missing the point, if we think literature is just words on a page - in a book. Shouldn't it be, wasn't it, spoken and sung language too?.
For me Positively 4th Street is a whole blockbuster of a novel right there, but it in no way comes close to his "better" songs.And :) he didn't get the award for his voice.
Reactions: Black Swan, esart and PhillyDave
They are awarding him the prize because his lyrics were original and reflecting a social climate which was absolutely troubled and rapidly changing :rolleyes:.
He reached every continent, influenced so many song writers and writers, how could that be ignored or questioned? I am very happy for him. What else could we give him, a cracker jack whistle?
Reactions: esart
Both of you guys have made good posts here (I'm not a fan of Shakespeare, but in using him as an example, you make a really compelling point that changes my view). I can admit when I'm wrong. And of course he deserves more than a fucking cracker jack whistle. Bob Dylan is one of biggest stand-alone icons there is. So, I'm not standing firm on my original ground. But I don't subscribe to the "cult of the book." I wasn't implying that, and if I did, I didn't mean to. I take back what I said about it not being literature. Sure, it's literature. And yes, it was some of the most influential literature of our time. So yeah, okay, give him an award, and not a whistle - a Nobel Prize. Happy?
Reactions: Skygazer and Black Swan
He'd probably rather the whistle.
esart said:
At my age, i don't stand firm on anything. The reason for that is that my opinion has changed on so many things that i firmly believed. As for Bob, i am happy for me too. I most likely learned how to speak English trying to figure out what he was talking about. I thought that i was winning a little. My family thought that i was listening to cracker jack music in comparaison to Guy Lombardo and Mantovani.
Reactions: hoochmonkey9, PhillyDave and Hosh
LickTheStar
Sad Flower in the Sand
At my age, i don't stand firm on anything.
There's pills for that. Or so I'm told.
I had a further retort but I've lost it. Alas.
Reactions: DaPrince34 and Black Swan
[... So, I'm not standing firm on my original ground...]
Neither did I, my absolute first reaction was, What? aren't there any proper writers out there, who've been slogging away for years, in need of a bloody good medal! then I persuaded myself too, his body of work is just as vocational and a damn sight more influential than some recipients. But I don't think there is a right or wrong to this, just different points of view.
It's his perogative to stay silent about it,, although I hope he will be secretly pleased. All that's left is next February's declaration of him as a Sovereign State and he's sorted.
Reactions: BukFan Brad and PhillyDave
Forum software by XenForo® © 2010-2019 XenForo Ltd. ~ Forum contents ©2006-2019 Michael Phillips & Millionaire Brand Bathtub Gin. All rights reserved.


The quotes attributed to Lewis on the preceding pages were all taken from the following publications and interviews.
0 I don't remember where I read this, but I know I did!
7 "This Is Your Life"
8 Spencer Leigh's "Twist and Shout"
16 "This Is Your Life"


A gem of historic Balluta Bay.
The Villa dates back to the 19th century as one of the oldest structures in the Balluta area. With unparalleled views of the bay, gorgeous interior design & grandiose terraces and garden, The Villa is the ideal location for a culinary & entertainment hotspot.
The team behind The Villa have created two culinary & beverage concepts that aim to expand its patrons' gastronomic horizons by providing memorable experiences and eclectic flavours.


영국의 하드 록 밴드 레드 제플린의 음반 목록은 정규 음반 9장과 싱글 15장, 영상 음반 3장, 컴필레이션 음반 9장으로 이루어져 있다.
↑ 가 나 다 "Artist Chart History: Led Zeppelin". Official Charts Company. 2010년 12월 15일에 확인함.
↑ 가 나 다 "Extended Search: Led Zeppelin". 《australian-charts.com》. Hung Medien. 2010년 12월 15일에 확인함.
↑ 가 나 다 "Extended Search: Led Zeppelin". 《austriancharts.at》 (독일어). Hung Medien. 2011년 4월 5일에 확인함.
↑ 가 나 다 "Led Zeppelin Top Albums/CDs positions". RPM. 2012년 10월 21일에 원본 문서에서 보존된 문서. 2010년 12월 18일에 확인함.
↑ 가 나 다 "French Chart" (프랑스어). infodisc. 3 November 2013에 원본 문서에서 보존된 문서. 2010년 12월 15일에 확인함.
↑ 가 나 다 "Musik-Charts durchsuchen: Led Zeppelin" (Enter "Led Zeppelin" in the search box). charts-surfer.de. 2011년 1월 25일에 확인함.
↑ 가 나 다 "Suche - Offizielle Deutsche Charts" (Enter "Led Zeppelin" in the search box). GfK Entertainment Charts. 2016년 5월 16일에 확인함.
↑ 가 나 다 "Extended Search: Led Zeppelin". 《dutchcharts.nl》 (네덜란드어). Hung Medien. 2010년 12월 15일에 확인함.
↑ 가 나 다 "Extended Search: Led Zeppelin". 《spanishcharts.com》. Hung Medien. 2010년 12월 15일에 확인함.
↑ 가 나 다 "Extended Search: Led Zeppelin". 《norwegiancharts.com》. Hung Medien. 2010년 12월 15일에 확인함.
↑ 가 나 다 "Led Zeppelin - Chart history". 《Billboard》. 2016년 5월 16일에 확인함.
↑ 가 나 다 "Allmusic -> Led Zeppelin -> Charts & Awards -> Billboard Albums". AllMusic. 2010년 12월 15일에 확인함.
↑ "ARIA Charts—Accreditations—1999 Albums". Australian Recording Industry Association. 2009년 10월 6일에 확인함.
↑ 가 나 다 라 마 바 사 아 자 차 카 타 파 하 거 너 더 러 "Certified Awards Search—Led Zeppelin". British Phonographic Industry. 2011년 8월 26일에 원본 문서에서 보존된 문서. 2009년 10월 6일에 확인함.
↑ 가 나 다 라 마 바 "Gold Platinum Database: Led Zeppelin". Music Canada. 2013년 6월 21일에 원본 문서에서 보존된 문서. 2011년 7월 10일에 확인함.
↑ 가 나 다 라 마 바 사 "The Official Swiss Charts and Music Community". 《Hung Medien》 (독일어). 2011년 9월 17일에 확인함.
↑ 가 나 다 "NVPI de branchevereniging van de entertainmentindustrie" (네덜란드어). 8 October 2011에 원본 문서에서 보존된 문서. 2011년 9월 24일에 확인함. Note: User needs to enter "Led Zeppelin" in the "Artiest" field and click the "zoek" button.
↑ 가 나 다 라 마 바 사 아 자 차 카 타 파 하 거 너 더 러 머 "Gold & Platinum Database Search: "Led Zeppelin"". Recording Industry Association of America. 2008년 9월 2일에 원본 문서에서 보존된 문서. 2009년 3월 26일에 확인함.
↑ 가 나 다 라 마 바 사 아 자 "French certifications—Led Zeppelin certifications search" (프랑스어). Syndicat National de l'Édition Phonographique. 21 June 2010에 원본 문서에서 보존된 문서. 2009년 12월 26일에 확인함.
↑ 가 나 다 "ARIA Charts—Accreditations—2007 Albums". Australian Recording Industry Association. 2009년 10월 6일에 확인함.
↑ 가 나 다 라 마 바 사 아 자 REGION을 지원하지 않거나 비어 있습니다: Germany.
↑ 가 나 다 "IFPI Austria" (독일어). International Federation of the Phonographic Industry. 2010년 2월 1일에 원본 문서에서 보존된 문서. 2011년 9월 16일에 확인함. Note: User needs to enter "Led Zeppelin" in the "Interpret" field and click the "Suchen" button.
↑ "ARIA Charts—Accreditations—2006 Albums". Australian Recording Industry Association. 2009년 10월 6일에 확인함.
↑ 가 나 Altman, Billy. "Led Zeppelin IV". Amazon.com, Inc. 2011년 4월 6일에 확인함.
↑ 가 나 Fast, Susan. "Led Zeppelin". Encyclopædia Britannica. 2011년 4월 6일에 확인함.
↑ 가 나 "ARIA Charts—Accreditations—2009 Albums". Australian Recording Industry Association. 2009년 12월 27일에 확인함.
↑ "ARIA Accreditations of 2012 albums". Australian Recording Industry Association. 2012년 12월 21일에 확인함.
↑ "IFPI" (스웨덴어). International Federation of the Phonographic Industry – Sweden. 11 February 2009에 원본 문서에서 보존된 문서. 2008년 6월 6일에 확인함.
↑ "The Official New Zealand Music Chart (24 December 2012)" (PDF). 2012년 12월 26일에 확인함.
↑ "CD Diamond". Polish Society of the Phonographic Industry. 18 April 2012에 원본 문서에서 보존된 문서. 2013년 1월 3일에 확인함.
↑ "IFPI Norsk platebransje". 24 July 2011에 원본 문서에서 보존된 문서. 2008년 8월 31일에 확인함.
↑ "ARIA Charts—Accreditations—2008 Albums". Australian Recording Industry Association. 2009년 1월 6일에 확인함.
↑ The fourth Led Zeppelin album was untitled and is generally known as Led Zeppelin IV. It is also referred to as Four Symbols, Runes, Untitled and Zoso.
↑ The liner notes for the Led Zeppelin Boxed Set 2 and the label attached to The Complete Studio Recordings boxed set categorise Coda as a studio album.
↑ Celebration Day was released on CD, DVD and Blu-ray on 19 November 2012. The vinyl edition was released on 12 February 2013.
이 문서는 2018년 7월 22일 (일) 07:23에 마지막으로 편집되었습니다.


80% of websites are created with open source web applications such as WordPress, Joomla, and Drupal due to their ease-of-use and flexibility to customize the way they look with thousands of free themes and plugins.
When a visitor enters a dynamic website such as WordPress, the visit triggers database queries and content access at the same time. With traditional web hosting plans that use spinning hard disk drives, access is slow due to the mechanical movement of the HDDs. To be more specific, HDDs store information on rotating disks and an actuator arm that reads the information has to move in order to access the stored data — physical movement takes a sizeable amount of time. With solid state drives, data is read and written simultaneously. Therefore, the browsing experience will significantly more pleasant thanks to the reduced loading time.
Also: We fully know (Google has announced it!) that all search engines out there incorporate page load timing in their search ranking factors.
By empowering your sites with our Premium SSD Servers, you are making your visitors and search engines very happy!


text:
package ohi.andre.consolelauncher.tuils;

import android.annotation.TargetApi;
import android.app.ActivityManager;
import android.app.ActivityManager.MemoryInfo;
import android.app.admin.DevicePolicyManager;
import android.content.BroadcastReceiver;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.net.Uri;
import android.os.BatteryManager;
import android.os.Build;
import android.os.Environment;
import android.os.Process;
import android.os.StatFs;
import android.provider.Settings;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.TextUtils;
import android.text.style.ForegroundColorSpan;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.TypedValue;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.MimeTypeMap;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.reflect.Array;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.Enumeration;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import dalvik.system.DexFile;
import ohi.andre.consolelauncher.BuildConfig;
import ohi.andre.consolelauncher.managers.SkinManager;
import ohi.andre.consolelauncher.managers.XMLPrefsManager;
import ohi.andre.consolelauncher.managers.music.MusicManager2;
import ohi.andre.consolelauncher.managers.music.Song;
import ohi.andre.consolelauncher.managers.notifications.NotificationService;
import ohi.andre.consolelauncher.tuils.interfaces.OnBatteryUpdate;
import ohi.andre.consolelauncher.tuils.stuff.FakeLauncherActivity;

public class Tuils {

    public static final String SPACE = " ";
    public static final String DOUBLE_SPACE = "  ";
    public static final String NEWLINE = "\n";
    public static final String TRIBLE_SPACE = "   ";
    public static final String DOT = ".";
    public static final String EMPTYSTRING = "";
    private static final String TUI_FOLDER = "t-ui";
    public static final String MINUS = "-";

    public static boolean notificationServiceIsRunning(Context context) {
        ComponentName collectorComponent = new ComponentName(context, NotificationService.class);
        ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        boolean collectorRunning = false;
        List<ActivityManager.RunningServiceInfo> runningServices = manager.getRunningServices(Integer.MAX_VALUE);
        if (runningServices == null ) {
            return false;
        }

        for (ActivityManager.RunningServiceInfo service : runningServices) {
            if (service.service.equals(collectorComponent)) {
                if (service.pid == Process.myPid()) {
                    collectorRunning = true;
                }
            }
        }

        return collectorRunning;
    }

    public static boolean arrayContains(int[] array, int value) {
        for(int i : array) {
            if(i == value) {
                return true;
            }
        }
        return false;
    }

    public static void registerBatteryReceiver(Context context, OnBatteryUpdate listener) {
        try {
            IntentFilter iFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
            context.registerReceiver(batteryReceiver, iFilter);

            batteryUpdate = listener;
        } catch (Exception e) {
            Tuils.toFile(e);
        }
    }

    private static OnBatteryUpdate batteryUpdate;
    private static BroadcastReceiver batteryReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if(batteryUpdate == null) return;

            int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
            batteryUpdate.update(level);
        }
    };

    public static boolean containsExtension(String[] array, String value) {
        try {
            value = value.toLowerCase().trim();
            for (String s : array) {
                if (value.endsWith(s)) {
                    return true;
                }
            }
            return false;
        } catch (Exception e) {
            return false;
        }
    }

    public static List<Song> getSongsInFolder(File folder) {
        List<Song> songs = new ArrayList<>();

        File[] files = folder.listFiles();
        if(files == null || files.length == 0) {
            return songs;
        }

        for (File file : files) {
            if (file.isDirectory()) {
                List<Song> s = getSongsInFolder(file);
                if(s != null) {
                    songs.addAll(s);
                }
            }
            else if (containsExtension(MusicManager2.MUSIC_EXTENSIONS, file.getName())) {
                songs.add(new Song(file));
            }
        }

        return songs;
    }

    public static float dpToPx(Context context, float valueInDp) {
        DisplayMetrics metrics = context.getResources().getDisplayMetrics();
        return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, valueInDp, metrics);
    }

    public static boolean hasNotificationAccess(Context context) {
        String pkgName = BuildConfig.APPLICATION_ID;
        final String flat = Settings.Secure.getString(context.getContentResolver(), "enabled_notification_listeners");
        if (!TextUtils.isEmpty(flat)) {
            final String[] names = flat.split(":");
            for (int i = 0; i < names.length; i++) {
                final ComponentName cn = ComponentName.unflattenFromString(names[i]);
                if (cn != null) {
                    if (TextUtils.equals(pkgName, cn.getPackageName())) {
                        return true;
                    }
                }
            }
        }
        return false;
    }

    public static void resetPreferredLauncherAndOpenChooser(Context context) {
        PackageManager packageManager = context.getPackageManager();
        ComponentName componentName = new ComponentName(context, FakeLauncherActivity.class);
        packageManager.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

        Intent selector = new Intent(Intent.ACTION_MAIN);
        selector.addCategory(Intent.CATEGORY_HOME);
        selector.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(selector);

        packageManager.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, PackageManager.DONT_KILL_APP);
    }

    @TargetApi(Build.VERSION_CODES.GINGERBREAD)
    public static void openSettingsPage(Context c, String packageName) {
        Intent intent = new Intent();
        intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
        Uri uri = Uri.fromParts("package", packageName, null);
        intent.setData(uri);
        c.startActivity(intent);
    }

    public static Intent requestAdmin(ComponentName component, String explanation) {
        Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
        intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, component);
        intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, explanation);
        return intent;
    }

    public static Intent webPage(String url) {
        return new Intent(Intent.ACTION_VIEW, Uri.parse(url));
    }

    public static double getAvailableInternalMemorySize(int unit) {
        return getAvailableSpace(Environment.getDataDirectory(), unit);
    }

    public static double getTotalInternalMemorySize(int unit) {
        return getTotaleSpace(Environment.getDataDirectory(), unit);
    }

    public static double getAvailableExternalMemorySize(int unit) {
        try {
            return getAvailableSpace(XMLPrefsManager.get(File.class, XMLPrefsManager.Behavior.external_storage_path), unit);
        } catch (Exception e) {
            return -1;
        }
    }

    public static double getTotalExternalMemorySize(int unit) {
        try {
            return getTotaleSpace(XMLPrefsManager.get(File.class, XMLPrefsManager.Behavior.external_storage_path), unit);
        } catch (Exception e) {
            return -1;
        }
    }

    public static double getAvailableSpace(File dir, int unit) {
        if(dir == null) return -1;

        StatFs statFs = new StatFs(dir.getAbsolutePath());
        long blocks = statFs.getAvailableBlocks();
        return formatSize(blocks * statFs.getBlockSize(), unit);
    }

    public static double getTotaleSpace(File dir, int unit) {
        if(dir == null) return -1;

        StatFs statFs = new StatFs(dir.getAbsolutePath());
        long blocks = statFs.getBlockCount();
        return formatSize(blocks * statFs.getBlockSize(), unit);
    }

    public static double percentage(double part, double total) {
        return round(part * 100 / total, 2);
    }

    public static double formatSize(long bytes, int unit) {
        double convert = 1048576.0;
        double smallConvert = 1024.0;

        double result;

        switch (unit) {
            case TERA:
                result = (bytes / convert) / convert;
                break;
            case GIGA:
                result = (bytes / convert) / smallConvert;
                break;
            case MEGA:
                result = bytes / convert;
                break;
            case KILO:
                result = bytes / smallConvert;
                break;
            case BYTE:
                result = bytes;
                break;
            default: return -1;
        }

        return round(result, 2);
    }

    public static SpannableString color(String text, int color) {
        SpannableString spannableString = new SpannableString(text);
        spannableString.setSpan(new ForegroundColorSpan(color), 0, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        return spannableString;
    }

    public static void delete(File dir) {
        for(File f : dir.listFiles()) {
            if(f.isDirectory()) delete(f);
            f.delete();
        }
        dir.delete();
    }

    public static boolean insertOld(File oldFile) {
        if(oldFile == null || !oldFile.exists()) return false;

        String oldPath = oldFile.getAbsolutePath();

        File oldFolder = new File(Tuils.getFolder(), "old");
        if(!oldFolder.exists()) oldFolder.mkdir();

        File dest = new File(oldFolder, oldFile.getName());
        if(dest.exists()) dest.delete();

        return oldFile.renameTo(dest) && new File(oldPath).delete();
    }

    public static File getOld(String name) {
        File old = new File(Tuils.getFolder(), "old");
        File file = new File(old, name);

        if(file.exists()) return file;
        return null;
    }

    public static void deepView(View v) {
        Tuils.log(v.toString());

        if(!(v instanceof ViewGroup)) return;
        ViewGroup g = (ViewGroup) v;

        Tuils.log(g.getChildCount());
        for(int c = 0; c < g.getChildCount(); c++) deepView(g.getChildAt(c));

        Tuils.log("end of parents of: " + v.toString());
    }

    public static void sendOutput(Context context, int res) {
        sendOutput(SkinManager.COLOR_NOT_SET, context, res);
    }

    public static void sendOutput(int color, Context context, int res) {
        sendOutput(color, context, context.getString(res));
    }

    public static void sendOutput(Context context, int res, int type) {
        sendOutput(SkinManager.COLOR_NOT_SET, context, res, type);
    }

    public static void sendOutput(int color, Context context, int res, int type) {
        sendOutput(color, context, context.getString(res), type);
    }

    public static void sendOutput(Context context, CharSequence s) {
        sendOutput(SkinManager.COLOR_NOT_SET, context, s);
    }

    public static void sendOutput(int color, Context context, CharSequence s) {
        sendOutput(color, context, s, -1);
    }

    public static void sendOutput(Context context, CharSequence s, int type) {
        sendOutput(SkinManager.COLOR_NOT_SET, context, s, type);
    }

    public static void sendOutput(int color, Context context, CharSequence s, int type) {
        Intent intent = new Intent(InputOutputReceiver.ACTION_OUTPUT);
        intent.putExtra(InputOutputReceiver.TEXT, s);
        intent.putExtra(InputOutputReceiver.COLOR, color);
        intent.putExtra(InputOutputReceiver.TYPE, type);
        context.sendBroadcast(intent);
    }

    public static final int TERA = 0;
    public static final int GIGA = 1;
    public static final int MEGA = 2;
    public static final int KILO = 3;
    public static final int BYTE = 4;

    private static long total = -1;

    public static double freeRam(ActivityManager mgr, MemoryInfo info) {
        mgr.getMemoryInfo(info);
        return info.availMem;
    }

    public static long totalRam() {
        if(total > 0) return total;

        BufferedReader reader;
        try {
            reader = new BufferedReader(new InputStreamReader(new FileInputStream("/proc/meminfo")));

            String line;
            while((line = reader.readLine()) != null) {
                if(line.startsWith("MemTotal")) {
                    line = line.replaceAll("\\D+", Tuils.EMPTYSTRING);
                    return Long.parseLong(line);
                }
            }
        } catch (Exception e) {}
        return 0;
    }

    public static double round(double value, int places) {
        if (places < 0) places = 0;

        try {
            BigDecimal bd = new BigDecimal(value);
            bd = bd.setScale(places, RoundingMode.HALF_UP);
            return bd.doubleValue();
        } catch (Exception e) {
            return value;
        }
    }

    public static List<String> getClassesInPackage(String packageName, Context c) throws IOException {
        List<String> classes = new ArrayList<>();
        String packageCodePath = c.getPackageCodePath();
        DexFile df = new DexFile(packageCodePath);
        for (Enumeration<String> iter = df.entries(); iter.hasMoreElements(); ) {
            String className = iter.nextElement();
            if (className.contains(packageName) && !className.contains("$")) {
                classes.add(className.substring(className.lastIndexOf(".") + 1, className.length()));
            }
        }

        return classes;
    }

    public static String[] toString(Enum[] enums) {
        String[] arr = new String[enums.length];
        for(int count = 0; count < enums.length; count++) arr[count] = enums[count].name();
        return arr;
    }

    private static String getNicePath(String filePath) {
        String home = XMLPrefsManager.get(File.class, XMLPrefsManager.Behavior.home_path).getAbsolutePath();

        if(filePath.equals(home)) {
            return "~";
        } else if(filePath.startsWith(home)) {
            return "~" + filePath.replace(home, Tuils.EMPTYSTRING);
        } else {
            return filePath;
        }
    }

    public static int find(Object o, Object[] array) {
        return find(o, Arrays.asList(array));
    }

    public static int find(Object o, List list) {
        for(int count = 0; count < list.size(); count++) {
            Object x = list.get(count);
            if(x == null) continue;

            if(o == x) return count;

            if (o instanceof XMLPrefsManager.XMLPrefsSave) {
                try {
                    if (((XMLPrefsManager.XMLPrefsSave) o).is((String) x)) return count;
                } catch (Exception e) {}
            }

            if (o instanceof String && x instanceof XMLPrefsManager.XMLPrefsSave) {
                try {
                    if (((XMLPrefsManager.XMLPrefsSave) x).is((String) o)) return count;
                } catch (Exception e) {}
            }

            try {
                if (o.equals(x) || x.equals(o)) return count;
            } catch (Exception e) {
                continue;
            }
        }
        return -1;
    }

    static Pattern pd = Pattern.compile("%d", Pattern.CASE_INSENSITIVE | Pattern.LITERAL);
    static Pattern pu = Pattern.compile("%u", Pattern.CASE_INSENSITIVE | Pattern.LITERAL);
    static Pattern pp = Pattern.compile("%p", Pattern.CASE_INSENSITIVE | Pattern.LITERAL);
    public static String getHint(SkinManager skinManager, String currentPath) {
        String format = skinManager.ssnInfoFormat;
        if(format.length() == 0) return null;

        format = pd.matcher(format).replaceAll(Matcher.quoteReplacement(skinManager.deviceName));
        format = pu.matcher(format).replaceAll(Matcher.quoteReplacement(skinManager.username));
        format = pp.matcher(format).replaceAll(Matcher.quoteReplacement(Tuils.getNicePath(currentPath)));

        return format;
    }

    public static int findPrefix(List<String> list, String prefix) {
        for (int count = 0; count < list.size(); count++)
            if (list.get(count).startsWith(prefix))
                return count;
        return -1;
    }

    public static int mmToPx(DisplayMetrics metrics, int mm) {
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_MM, mm, metrics);
    }

    public static void insertHeaders(List<String> s, boolean newLine) {
        char current = 0;
        for (int count = 0; count < s.size(); count++) {
            String st = s.get(count).trim().toUpperCase();
            if(st.length() < 0) continue;

            char c = st.charAt(0);
            if (current != c) {
                s.add(count, (newLine ? NEWLINE : EMPTYSTRING) + c + (newLine ? NEWLINE : EMPTYSTRING));
                current = c;
            }
        }
    }

    public static void addPrefix(List<String> list, String prefix) {
        for (int count = 0; count < list.size(); count++) {
            list.set(count, prefix.concat(list.get(count)));
        }
    }

    public static void addSeparator(List<String> list, String separator) {
        for (int count = 0; count < list.size(); count++)
            list.set(count, list.get(count).concat(separator));
    }

    public static String toPlanString(String[] strings, String separator) {
        if(strings == null) {
            return Tuils.EMPTYSTRING;
        }

        String output = Tuils.EMPTYSTRING;
        for (int count = 0; count < strings.length; count++) {
            output = output.concat(strings[count]);
            if (count < strings.length - 1) output = output.concat(separator);
        }
        return output;
    }

    public static String toPlanString(String[] strings) {
        if (strings != null) {
            return Tuils.toPlanString(strings, Tuils.NEWLINE);
        }
        return Tuils.EMPTYSTRING;
    }

    public static String toPlanString(String separator, List<? extends Compare.Stringable> strings) {
        if(strings == null) {
            return Tuils.EMPTYSTRING;
        }

        String output = Tuils.EMPTYSTRING;
        for (int count = 0; count < strings.size(); count++) {
            output = output.concat(strings.get(count).getString());
            if (count < strings.size() - 1) output = output.concat(separator);
        }
        return output;
    }

    public static void log(Object o) {
        if(o instanceof Throwable) {
            Log.e("andre", "", (Throwable) o);
        } else {
            Log.e("andre", String.valueOf(o));
        }
    }

    public static <T> T getDefaultValue(Class<T> clazz) {
        return (T) Array.get(Array.newInstance(clazz, 1), 0);
    }

    public static void toFile(Throwable e) {
        try {
            FileOutputStream out = new FileOutputStream(new File(Tuils.getFolder(), "crash.txt"), true);
            out.write((Tuils.NEWLINE + Tuils.NEWLINE + new Date().toString() + Tuils.NEWLINE).getBytes());
            e.printStackTrace(new PrintStream(out));
            out.close();
        } catch (Exception e1) {}
    }

    public static String toPlanString(List<String> strings, String separator) {
        if(strings != null) {
            String[] object = new String[strings.size()];
            return Tuils.toPlanString(strings.toArray(object), separator);
        }
        return Tuils.EMPTYSTRING;
    }

    public static String filesToPlanString(List<File> files, String separator) {
        if(files == null || files.size() == 0) {
            return null;
        }

        StringBuilder builder = new StringBuilder();
        int limit = files.size() - 1;
        for (int count = 0; count < files.size(); count++) {
            builder.append(files.get(count).getName());
            if (count < limit) {
                builder.append(separator);
            }
        }
        return builder.toString();
    }

    public static String toPlanString(List<String> strings) {
        return Tuils.toPlanString(strings, NEWLINE);
    }

    public static String toPlanString(Object[] objs, String separator) {
        if(objs == null) {
            return Tuils.EMPTYSTRING;
        }

        StringBuilder output = new StringBuilder();
        for(int count = 0; count < objs.length; count++) {
            output.append(objs[count]);
            if(count < objs.length - 1) {
                output.append(separator);
            }
        }
        return output.toString();
    }

    public static String removeUnncesarySpaces(String string) {
        while (string.contains(DOUBLE_SPACE)) {
            string = string.replace(DOUBLE_SPACE, SPACE);
        }
        return string;
    }

    public static String getStackTrace(final Throwable throwable) {
        final StringWriter sw = new StringWriter();
        final PrintWriter pw = new PrintWriter(sw, true);
        throwable.printStackTrace(pw);
        return sw.getBuffer().toString();
    }

    public static boolean isAlpha(String s) {
        if(s == null) {
            return false;
        }
        char[] chars = s.toCharArray();

        for (char c : chars)
            if (!Character.isLetter(c))
                return false;

        return true;
    }

    public static boolean isNumber(String s) {
        if(s == null) {
            return false;
        }
        char[] chars = s.toCharArray();

        for (char c : chars) {
            if (Character.isLetter(c)) {
                return false;
            }
        }

        return true;
    }

    public static Intent openFile(File url) {
        Uri u = Uri.fromFile(url);
        Intent intent = new Intent(android.content.Intent.ACTION_VIEW);

        String extension = MimeTypeMap.getFileExtensionFromUrl(u.toString());
        String mimetype = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);

        intent.setDataAndType(u,mimetype);
        return intent;
    }

    public static Intent shareFile(File url) {
        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        Uri u = Uri.fromFile(url);

        String extension = MimeTypeMap.getFileExtensionFromUrl(u.toString());
        String mimetype = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);

        intent.setDataAndType(u,mimetype);
        intent.putExtra(Intent.EXTRA_STREAM, u);

        return intent;
    }

    private static File getTuiFolder() {
        File internalDir = Environment.getExternalStorageDirectory();
        return new File(internalDir, TUI_FOLDER);
    }

    public static double eval(final String str) {
        return new Object() {
            int pos = -1, ch;

            void nextChar() {
                ch = (++pos < str.length()) ? str.charAt(pos) : -1;
            }

            boolean eat(int charToEat) {
                while (ch == ' ') nextChar();
                if (ch == charToEat) {
                    nextChar();
                    return true;
                }
                return false;
            }

            double parse() {
                nextChar();
                double x = parseExpression();
                if (pos < str.length()) throw new RuntimeException("Unexpected: " + (char)ch);
                return x;
            }

            double parseExpression() {
                double x = parseTerm();
                for (;;) {
                    if      (eat('+')) x += parseTerm(); // addition
                    else if (eat('-')) x -= parseTerm(); // subtraction
                    else return x;
                }
            }

            double parseTerm() {
                double x = parseFactor();
                for (;;) {
                    if      (eat('*')) x *= parseFactor(); // multiplication
                    else if (eat('/')) x /= parseFactor(); // division
                    else return x;
                }
            }

            double parseFactor() {
                if (eat('+')) return parseFactor(); // unary plus
                if (eat('-')) return -parseFactor(); // unary minus

                double x;
                int startPos = this.pos;
                if (eat('(')) { // parentheses
                    x = parseExpression();
                    eat(')');
                } else if ((ch >= '0' && ch <= '9') || ch == '.') { // numbers
                    while ((ch >= '0' && ch <= '9') || ch == '.') nextChar();
                    x = Double.parseDouble(str.substring(startPos, this.pos));
                } else if (ch >= 'a' && ch <= 'z') { // functions
                    while (ch >= 'a' && ch <= 'z') nextChar();
                    String func = str.substring(startPos, this.pos);
                    x = parseFactor();
                    if (func.equals("sqrt")) x = Math.sqrt(x);
                    else if (func.equals("sin")) x = Math.sin(Math.toRadians(x));
                    else if (func.equals("cos")) x = Math.cos(Math.toRadians(x));
                    else if (func.equals("tan")) x = Math.tan(Math.toRadians(x));
                    else throw new RuntimeException("Unknown function: " + func);
                } else {
                    throw new RuntimeException("Unexpected: " + (char)ch);
                }

                if (eat('^')) x = Math.pow(x, parseFactor()); // exponentiation

                return x;
            }
        }.parse();
    }

    public static String getTextFromClipboard(Context context) {
        try {
            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
                ClipboardManager manager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
                ClipData.Item item = manager.getPrimaryClip().getItemAt(0);
                return item.getText().toString();
            } else {
                android.text.ClipboardManager manager = (android.text.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
                return manager.getText().toString();
            }
        } catch (Exception e) {
            return null;
        }
    }

    public static int dpToPx(Resources resources, int dp) {
        DisplayMetrics displayMetrics = resources.getDisplayMetrics();
        return Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
    }

    private static final int FILEUPDATE_DELAY = 300;
    private static File folder = null;
    public static File getFolder() {
        if(folder != null) return folder;

        final File tuiFolder = Tuils.getTuiFolder();

        while (true) {
            if (tuiFolder != null && (tuiFolder.isDirectory() || tuiFolder.mkdir())) {
                break;
            }

            try {
                Thread.sleep(FILEUPDATE_DELAY);
            } catch (InterruptedException e) {}
        }

        folder = tuiFolder;
        return folder;
    }

    public static int alphabeticCompare(String s1, String s2) {
        String cmd1 = removeSpaces(s1).toLowerCase();
        String cmd2 = removeSpaces(s2).toLowerCase();

        for (int count = 0; count < cmd1.length() && count < cmd2.length(); count++) {
            char c1 = cmd1.charAt(count);
            char c2 = cmd2.charAt(count);

            if (c1 < c2) {
                return -1;
            } else if (c1 > c2) {
                return 1;
            }
        }

        if (s1.length() > s2.length()) {
            return 1;
        } else if (s1.length() < s2.length()) {
            return -1;
        }
        return 0;
    }

    private static final String SPACE_REGEXP = "\\s";
    public static String removeSpaces(String string) {
        return string.replaceAll(SPACE_REGEXP, EMPTYSTRING);
    }
}

redpajama_set_name: RedPajamaGithub


text:
Q: Responsive Cross Browser and Flexible way of "cross-background" images Can anyone please point me out, or name some tecnhiques that may exist in order to achieve this effect, on a properly way:
Like this:

and again:

As you may notice, the point is to connect both lines. Some of those lines come from text boxes, that, since we wish to properly use EM unit for font-size, the box around the text, may change.
I have never done this before, I would appreciate any point outs, in order to investigate this "effect" further please.
Thanks in advance.

A: It doesn't matter if the fonts in the text boxes are in EM. If the font size change, the text boxes size will change, but that it doesn't mean that the space between them also has to change (it could has a fixed height -the background height-).
Here's a really basic example (try changing the body font-size):

      Lorem ipsum dolor sit amet, consectetur adipisicing elit.

      Eum, quis consequuntur culpa ex eius totam nemo.

If you do want the space between boxes height changing if the font-size change, you should set it height to EM and use a background images that's, lets say, doubled the container original height (so when the height change, more background it's revealed). You can see this changing height: 50px; to height: 7em; on the .line {} rule (the example image I've used it higher than the container).
This a really basic example. The markup depends on the design. If you need something more accurate (like: you need that the line starts and ends in specific spot), you should probably use absolute/relative positions.

redpajama_set_name: RedPajamaStackExchange


Jakarta: The Foreign Affairs Ministry has confirmed that at least two Indonesian citizens were injured in recent terror attacks in two mosques in New Zealand.
"Two Indonesian citizens were shot. They are father and child," Foreign Affairs Ministry spokesperson Arrmanatha Nasir told journalists on Friday.
"The father is receiving intensive case. The child is treated at the same hospital," the Foreign Affairs Ministry official noted.
Indonesia strongly condemned terror attacks in Al Noor and Linwood mosques. A suspected right-wing group attacked the two mosques at around 01.00 p.m. local time.
Indonesia condemns the shooting in Al Noor Mosque and Linwood Mosque in Christchurch, New Zealand," the Foreign Affairs Ministry said in a written statement received by Medcom.id.
"The Government and people of Indonesia convey our deepest condolences to all the victims and their families," the Foreign Affairs Ministry added.
The Embassy of Indonesia in Wellington is following every development of this case. It has sent a team to Christchurch to coordinate with local security authorities, hospitals, and the Indonesian Student Association.
The Government of Indonesia advises all Indonesian citizens in New Zealand to remain alert and safe. Families and friends who need further information and consular assistance may contact the Embassy of Indonesia in Wellington at +64211950980 and +64 22 3812 065.


The new Kickabout field at International School of Texas, Austin, TX.
The International School of Texas (IST) in Austin will host their Grand Opening on Thursday, Nov. 17, at 10 a.m., for their new, environmentally friendly Kickabout™ field. This new sports and playground concept is built by Hellas Construction, Inc., a nationwide sports construction company also located in Austin, TX.
"This field is taking our physical education and soccer leagues to a new level," said Tim Reilly, Head of School at IST. "We were starting team sports and wanted a top of the line facility for our students," he said. "We looked at everyone out there. We wanted the best of the best, which is why we chose Hellas," said Reilly.
The Hellas Kickabout project at IST is built with top-grade recyclable turf and a shock pad, organic infill, a nailer board made of recycled P.E.T. materials (plastic bottles), and a foundation of locally sourced stone. The Kickabout play surface is also utilizing the existing rainwater collection system to irrigate the organic infill. The project was completed in two weeks.
"We absolutely love it," Reilly said. "The soccer team uses the field everyday. All the kids are benefiting from the field," he said. They have also noticed a decline in injuries. "It's extremely safe," Reilly said. "Inevitably, children will fall. When they do, they just pop right back up and keep going," he said. "Any school, in any setting, would benefit from a Kickabout," said Reilly.
Kickabout is an innovative, customizable play surface that allows children to play a wide variety of sports in any weather, without the worry of potholes, mud, tall grass, or weeds. Hellas uses their exclusive Matrix® synthetic turf or Grasso® synthetic turf, a simple drainage system, and either organic infill or pea gravel infill to make this all-in-one, fun-packed play surface. Kickabout excites children and drives them to play and be active everyday, by providing a safe reliable place for games, sports, and activities. Construction and installation can take as little as one week depending on size and complexity.
Kickabout is customizable from 2,000 to 20,000 sq. ft., and made to fit into any existing space. Sports or games like soccer, funnel ball, hopscotch, tetherball, or four square can be added or combined to make one fun-packed playground. This low maintenance, environmentally friendly surface uses little or no water and additional shock pads may also be added for extra safety in areas under existing playground equipment or anywhere extra padding is requested. The Kickabout play surface offers a new generation of playground and sports surfacing for the next generation of pre-k and elementary students.
Kids at the International School of Texas playing soccer on their new Kickabout field.


We are a long ways from 1877, but an audacious claim made in that year - Walter Pater's insistence that "all art constantly aspires to the condition of music" - is still very much with us. Or, at the very least, we live in a time when artists are seen as "constantly aspiring" to be musicans, no matter how otherwise busy they may be with non-musical projects. Take the cases of artists like John Duncan and Masami Akita: both have curriculae vitae that are bursting with genre-defying cultural activities, and both can capably argue that their experience as multi-media artists or inter-media researchers either precedes their interest in sound recording, or should simply not be disassociated from their status as sound artists. Yet the romantic cultural bias towards 'music' as the queen of the arts - itself made more intoxicating in a networked computer age where visuo-centrism impoverishes the senses - has not passed these two by.
If either Masami or John are hoping to reverse this state of affairs, then it's a bit of a paradox that they are incredibly good at what they do sonically, guaranteeing some kind of heightened curiosity about their audio work for the foreseeable future. They've both taken their respective experiences with the modern world, and successfully distilled the eroticism and terror of these experiences into audio elixirs that are wholly their own. John Duncan is among the more notable artists to take the audio concept of the 'drone' beyond its associations with passivity and limited, pre-programmed functionality: in his hands it has become a versatile tool for self-reflection and, perhaps, correction. Meanwhile, Masami's appopriation of Kurt Schwitters' Merzbau for his similarly-named sound project [Merzbow] just becomes more apt as we progress further into an age where technological progress brings with it "monuments" of toxic waste with each successive smart-phone upgrade. Since the 1980s, Merzbow's psychotronic barrage of tape loops, later morphing into a metallized maelstrom and an interminable set of digital paroxysms, has been a tragi-comic distortion and a violent rebuke of the utilitarian Japanese society in which he has spent his lifetime.
The BLACK ALBUM shows what's going on in our heads.
A disc of actual verbal conversations along the lines mentioned above would itself be a worthy exchange for money - both these individuals are highly fluid communicators; Masami Akita in particular has a keen understanding of linguistics, and the cold grimness that music critics like to project onto him belies his genuine sense of humor. However, the sonic content of The Black Album consists instead of non-verbal soundmarks that will initially be identified with each of the artists, and which will eventually merge into a single current.
A frantic, percolating kind of audio synthesis dominates the A-side, seemingly bent on preventing the listener from discovering secrets contained in the layers of atmospheric sound just beneath. Of course, the longer this agitated, electrified dance is allowed to continue, the more this yawning backrop becomes an object of consuming curiosity. The one clue as to "source material" that Duncan provides us - that recordings were made in the Gran Sasso nuclear laboratory - is enough to make us want to know what this subdued mechanical roar is all about, and what implications (catastrophic or otherwise) it might have for us if we get closer to it. Just when it seems we are getting closer to finding on what goes on behind the curtain, though, a series of massive waves come crashing down to close out the first side, leaving any questions unresolved. The untitled B-side of the record leaves listeners with even fewer easy reference points, throwing them into an inner space where metal ribbons rain and, again, vie for attention with the plaintive song of undefined power sources. This time around, the journey ends with an abrupt silence rather than a wash-out.
It should come as little surprise that this is a noisy work - often reaching that threshold point in which the recording instruments seem to be gasping for air - but it's a noise that is satisfyingly removed from the kind of material that would actually take pride in being called "noise." Namely, this record steers well clear of the bells-and-whistles approach that brings this supposed anti-genre a little closer to the showbiz culture it supposedly abhors. It wisely cleaves to an artistic vision of saturated sound as a force that is already undergoing a number of permutations in the listener's mind, well before a multitude of effects boxes and custom patches are brought to bear on it. Akita and Duncan continue their work here as emissaries of the elemental, in all its perplexing majesty.
Quantify This: Evgeny Morozov and "Saving Everything"
Anyone who has come to know me, either 'in person' or through my published and recorded work, knows that I've recoiled from social media as it has become more omnipresent. When I finally pulled the plug on my Facebook account some years ago, most of my friends and supporters thankfully saw that for the non-event that it was, and didn't take it as a personal slight. There were a couple who did, though, and much of the flak I subsequently received from them was related to the supposed contrarian 'grandstanding' of this act: as if, by engaging in some desperate act of radical differentiation, I was trying to make up for some failure to truly innovate or express myself as a musician and an author. For quite a while, I tried to convince them that my intentions were not as petty as that - all the while I was aware that my explanations weren't that authoritative, and that I would need some intellectual reinforcements to fully explain my withdrawal from constant social media monitoring.
Thankfully, I didn't have to wait too long, as Evgeny Morozov's 2010 book The Net Delusion provided a devastating rebuttal to one of the more absurd claims of the Facebook fanatics: namely, that simply maximizing the number of available social connections would lead to greater social harmony. This type of thinking led to phenomena like the failed "Kony 2012" for intervention in Uganda, but, more insidiously, to the suspicion that individuals opting out of social networking were deviant outliers with "something to hide." Morozov's work was predictably seen as a curmudgeonly screed by all the expected parties, but his stock seemed to stealthily rise all the while.
Evgeny Morozov, though shrugging at the fact that he can't control the labels he will be associated with, is neither a techno-phile nor a techno-phobe, but simply a critic with an eye towards the overestimation of certain technologies' abilities. By his admission, seeds of doubt in Internet utopianism were sowed during his time working for the Berlin-based NGO "Transitions Online," where his early surveys of 'new media' initiatives led him to "see the hazards associated with the Western model of supporting new media […] people were trying to promote these things on the ground, but didn't seem to have thought about it much beyond saying: 'we need to have people online and talking.'"[i] Morozov's distate for over-eagerness in Western technological initiatives is a welcome companion to the recent (if decidedly 'blacked out' in mainstream media) resurgence of bi-partisan distaste for the West's rushing into military interventions. Both these disastrous foreign adventures, and the rise of cyber-utopianism, rise from a geopolitical naiveté that seemingly rejects a diversity in cultural attitudes and historical developments - and while Morozov spends little time in his last couple of volumes dealing with the military side of "exporting democracy," he is rapidly becoming a leading voice when it comes to the globalization of a standardized cyber-culture: a culture that has never really taken a full accounting of its shortcomings before being deemed worthy for exportation.
Newer editorials from Morozov, as well as his new full-length volume - To Save Everything, Click Here - launch a surgical strike on those who would join in the rush to globalize 'new media,' and repeatedly reject the claim that Internet "memes" or "trending" Twitter hashtags operate organically and autonomously. This skepticism of social networking certainly makes him a difficult one to 'pin down,' given his recent contributions to the liberal American journal - The New Republic - that now claims Facebook co-founder Chris Hughes as its editor-in-chief. Yet it is a testament to the strength of his convictions that his ideas can get a fair hearing even in such a journal: his core ideas speak to concerns that are, well, concerning enough to exist on multiple points along the socio-political spectrum.
What Morozov outlines in his new book is a consolidation of the information contained in The Net Delusion, but a much-needed extension of the critique to beliefs that are animating much more than just social networking. Whereas his earlier, more thematically limited book dealt with the hubristic view of social networking as solely a force for good, the newer book proves that this view is merely a symptom of a more deeply entrenched belief system. To this end, Morozov gives us a grim synopsis of the 'Quantified Self' movement and related social forces. As Morozov tells it, these would-be moral authorities believe that the moral improvement of humanity depends on an exhaustive recording of any activity that can in fact be recorded, and that the full disclosure of secrets will allow for a moral evolution of mankind. Innovations like the "BinCam" - which monitors the type and volume of waste products that one discards, in order to offer advice on what to consume or avoid consuming - are revealed by the author as the apex of this movement's desires. Morozov portrays "Quantified Self" adherents as believing that any form of quantifiable data accumulated through a regimen of technological self-tracking (and ideally synced to a public Facebook page) will provide the revelations necessary to spur personal and societal improvement. In his book and in related editorials, Morozov insists that the victory of such a movement will result in a perversion of morality, but also in an exploitation of the aforementioned scenario wherein refuseniks are perceived as having "something to hide": they will "no longer be seen as quirky individuals exercising their autonomy,"[ii] and should expect negative side effects like higher insurance payments as of their social ostracization.
It pains Morozov that an easily intuited fact - i.e. that such intense data mining may still not explain why a phenomenon occurs - is routinely brushed aside. Moreover, there is the troubling fact that anyone even asking for that 'why' should fear being spoken of in the same sentence as the Unabomber (a comparison that Morozov accuses Wired magazine's Kevin Kelly of making.) The "Quantified Self" movement's mania for monitoring and numerical quantification, and the substitution of these values for spontaneous individual expression, also come through in a reported quote from Gary Wolf ("you might not always have something to say, but you always have a number to report".) Morozov's exhibition of its distrust of any non-quantifiable value, such as "meaningfulness," is also sobering, especially since quantifiable values (e.g. alcohol abuse or obesity) are widely published, and yet these societal ills remain with us. Although Morozov seems like a committed realist who does indeed call for a "secularization" of the Internet, one almost discerns a bit of a Romanticist streak in him when he argues the value of a world where flaws and unknowns are - if not encouraged - then certainly permitted. His invocation of Nietzsche and 'dissing' of Comte certainly steers him close to that camp, and many of his protests aren't entirely dissimilar from the Romantics' sensuous revolt against pure rational positivism. As a free thinker and an artist (no, not the bloodless noun form of "creative" so beloved of Silicon Valley), I find this part of Morozov's philosophy particularly valuable. To me, the most truly lasting work seems to come from those who do not feel raw material must be domesticated before it can be aesthetically pleasing. As my late friend used to say, the true art communicates before it is really understood…let alone perfectly "quantified." Viewing zealous quantification measures ("lifelogging" in the parlance of its backers) as being somehow being a greater catalyst for individuality is something that cannot, should not, be taken seriously.
As with Morozov's previous work, I have to stop short of calling To Save Everything… a perfect read, although this is for reasons that have little to do with his thesis itself. As with many other books falling under the "jeremiad" category, there is little space spent on prescription for a cure. Maybe this is because the 'cure' in question - opting out of near-religious self-monitoring before it becomes any more of a reality - seems obvious to the author, and he feels this should also be evident to any educated reader. Morozov can occasionally be too simplistic when identifying the motivations of political actors, e.g. an aversion to "big government" is identified as being the province of "right-wing" extremists yet is not identified as also being a feature of left-anarchist ideology. Given that Morozov's attack is focused on a tech-utopian culture that emanates largely from the U.S., his focus on current American politics occasionally neglects the existence of a full spectrum of anti-state actors. Needless to say, any criticism of aversion to "big government" also seems a little awkward in a book that also praises F.A. Hayek's critique of central planning.
Strangely, aside from one notable mention about President Obama's prosecution of whistleblowers and 'leakers,' there is also little criticism in the new book about the bloated NSA and its sister spy agencies, which would seem to most readers to be natural allies of the "Quantified Self" vanguard. U.S. intellegence agencies, as much if not moreso than any other organization, have a vested interest in making Total Information Awareness into a moral duty that citizens will voluntarily subscribe to. Upon closer investigation, though, Morozov has indeed touched upon the collusion between the NSA and social networking sites in other editorials.
In the final estimation, there is a reason why tech-critics like Bruce Sterling have wryly proposed that this volume be bound in sandpaper and wedged neatly in between more tech-utopian tomes (I have to wonder if the late J.G. Ballard might have also reached a similar conclusion.) It is an abrasive work, that much is certain - but one that is much more valuable than the latest techno-palliative.
[i] Evgeny Morozov quoted in "The Books Interview: Evegeny Morozov" by Jonathan Derbyshire." The New Statesman, January 24 2011, p. 43.
[ii] Evgeny Morozov, "All The Privacy Solutions You Hear About Are On The Wrong Track." MIT Technology Review, Vol. 116 No. 6 (October 2013), pp. 33-43.
[iii] Evegeny Morozov quoted in "Interview: Technology Solutions" by Nick Smith. Engineering and Technology, October 13, pp. 58-62.
[iv] Evgeny Morozov, To Save Everything Click Here, pp. 356-357. Public Affairs Books, New York, 2013.
[v] See especially "All The Privacy Solutions You Hear About Are On The Wrong Track."