US President Donald Trump threatened Turkey with economic devastation if it attacks a US-allied Kurdish militia in Syria, drawing a sharp rebuke from Ankara today and reviving fears of another downturn in ties between the NATO allies.
Relations between the United States and Turkey have long been strained by Washington's support for the Kurdish YPG, which Turkey views as an extension of the outlawed Kurdistan Workers Party (PKK) that is waging a decades-long insurgency in Turkey. Speaking in Riyadh, Secretary of State Mike Pompeo said he did not think the threat would change plans to withdraw troops from Syria. Asked what Trump meant by economic devastation, he said: "You'll have to ask the president." Responding to the threat, Turkish Foreign Minister Nevlut Cavusoglu said: "You cannot get anywhere by threatening Turkey economically."
A Chinese court has sentenced a Canadian man to death over charges of drug smuggling after deeming his original sentence of 15 years in jail too lenient. Robert Schellenberg, 36, was convicted in November of being an accessory to drug smuggling. An appeal backfired when in December the court ordered a retrial after prosecutors claimed new evidence showed Schellenberg played an important role in drug trafficking operations.
The sentence is expected to escalate diplomatic tensions between China and Canada. The Canadian prime minister, Justin Trudeau, said Ottawa would continue to "engage strongly" with Beijing. On 1 December, Canadian authorities arrested Meng Wanzhou, a senior Huawei executive and Chinese citizen, for extradition to the US. Critics say Beijing is using Schellenberg's case to exert pressure on Ottawa.
A new Canadian radio telescope, not yet fully operational, has already detected more than a dozen mysteriously brief blasts from deep space known as fast radio bursts (FRBs). One is only the second known to flash repeatedly, researchers reported at the annual meeting of the American Astronomical Society. The early results from the Canadian Hydrogen Intensity Mapping Experiment (CHIME) suggest the scope is well on its way to adding hundreds or even thousands of FRBs to the 60 or so already known—hopefully revealing the source of these powerful milliseconds-long pulses in the process.
FRBs are one of the hottest topics in astronomy. Researchers not only want to figure out what they are, they also want to use them to gather information about the matter that resides in the vast reaches between galaxies.
As Dhaka Courier went to press this week, British MPs were preparing to vote on whether to back Theresa May's deal for leaving the European Union. The so-called "meaningful vote" was set to take place after five days of debate on Brexit came to an end. Mrs May has called for politicians to back her deal or risk "letting the British people down". But with many of her own MPs expected to join opposition parties to vote against the deal, it was widely expected to be defeated.
Attorney General Geoffrey Cox opened the last day of debate, with Mrs May due to close it with a speech. He called on MPs to recognise the "value of compromise" and "opt for order [over] chaos". Voting would take place on three or four backbench amendments that could reshape the deal and then the vote on the withdrawal agreement itself.


text:
VideoHunters
August 22, 2011 August 16, 2011 Mark Greentree Apps, iPad, Review Leave a comment
VideoHunters available from the iOS App Store
App Developer: The App Company
Version Reviewed: 1.4
Licence: US$0.99 – Compatible with iPad – Requires iOS 4.0 or later
VideoHunters will change the way you consume, collate, and experience YouTube.
At first you may ask why do I need an app for the iPad which delivers YouTube content? Doesn't Apple already have a built in YouTube app? You would be correct in this statement. You would also be mistaken to give this app a miss as there is a level of control for YouTube content that only this app can deliver.
The key difference can be immediately seen in the simple yet effective layout of content. The app developer has done a marvellous job of optimising the content for the iPad size screen. At no time do you feel frustrated when browsing or searching for content and associated YouTube channels.
The navigation process is fantastic. Users simply tap and flick from left to right to see additional content in each line of related theme videos. Unlike, the built-in YouTube app, The VideoHunters app just feels smoother and more responsive. Certainly, video playback and thumbnail previews load extraordinarily quickly in comparison to its counterpart.
I have long given up using the built-in YouTube application mainly because it never worked properly. Content would either fail to load or the streaming would halt midway through the video in question. Through my testing, I have been able to confirm that neither is the case, regardless of using a 3G or Wi-Fi network. The buffering would always remain well in advance of the video content. This is a significant deal when you are looking at the playback of high definition video content. High definition content will be played back in most cases but is limited to the initial upload quality.
Social networking options are built into this app. Users can announce on Twitter or Facebook a video they find interesting. They can also forward a link to the video via email. This social aspect is handled much better than the built-in YouTube app.
Content can also be saved to your Favorites, Playlists or Subscription areas provided you are logged into your YouTube account.
Playlists will be one of those areas that commuters will appreciate. Users can load up the playlist and have content ready to view over a 3G network whilst in transit.
Finding content on YouTube is always interesting. Sometimes you're spot on, but many times you are way off. VideoHunters as their name infers, takes hunting for interesting video clips to a completely new level. It is this browsing and searching ability that guarantees a higher rate of success when searching for content.
When searching for some of my favourite bands I came across interviews and live performances that I had never seen before despite spending several hours per week looking for this kind of content through traditional means. I credit this to their simple yet thorough search and browsing options.
Upon performing a search users are given access to more search criteria than the built-in YouTube app allows. This allows users to search by relevance, upload date and view count. Users can also specify when these events took place such as within the last month, this week or the last 24 hours.
A further button is available in the search menu. It currently only presents YouTube. In future editions of the application it appears that users may be able to select from a variety of video services, if the app developer decides to activate this option.
Browsing content was also as user friendly as that of searching. Browsing gave complete control and access to all categories of video content, along with their popularity and relevance to the time the video was uploaded. YouTube channels can also be browsed under similar conditions.
One additional area I initially didn't think much of but ended up really enjoying was the Staff PICKS. All the big name YouTube channels were included in areas such as News, Entertainment, Music, Comedy, App Reviews, Technology and Sports to name a few.
Themes is a significant feature of this app. It is a complete game changer when it comes to relating content of interest to the individual user. If your interest is in movies or music, you will be able to create a theme specifically suited to your needs. Perhaps you want to follow all related videos for your favourite movie star or music performer. Whenever a new video which matches your theme is uploaded the app will find and add the video in question to your viewable theme library.
You may find that in certain themes, you will see video which is not directly related to the content you are interested in. Well, the app developer thought of this and through a filtering option you can remove videos which are not of your interest. This is done through simply excluding certain words which will present unwelcome results.
Themes are in no way limiting. You can create hundreds of different themes within this app. I dare say you will run out of theme ideas before you find the apps limitation.
A large volume of preset themes are already available in the application, giving users a wide range of content areas such as American Idol, 80's Cartoons, World Of Warcraft, Pixar, and Space Exploration, just to name a few.
One of the best features in the app is the non-appearance of comments. How many times have you seen comments to videos which are purely spam and non informative, at the same time being generally degrading to the person who upload the video. If you still want comments you can always click on the YouTube button within the app which will then take you to a more traditional view of YouTube in order to read and add comments.
Users will also notice when first loading this app, VideoHunters has undertaken a series of instructional videos on how to use the application. They are complete and concise, allowing you to get fully aquatinted with the application in a very short amount of time.
This app has it all. It is video on demand done well. I only hope this app and the technology running in the background will one day be applied to our media centres and home television content. I believe the US$0.99 price point is a bargain for the control consumers will receive. You will not want to go back to the traditional YouTube application or website after using this app.
With that in mind I am awarding this app a MyMac review rating of 10 out of 10.
The App Company, Video On Demand, Video Themes, VideoHunters, YouTube
Tech Duck Hunt
TechFan Podcast #43
Adobe CS 5.5 InDesign
Review Part 1

redpajama_set_name: RedPajamaCommonCrawl


text:
Scott Ritter Explains Why Russia's Kherson Withdrawal is a Pyrrhic Ukrainian Victory
SPUTNIK, November 9, 2022 — Russian Defense Minister Sergei Shoigu has ordered the withdrawal of Russian troops from parts of Kherson to form defensive positions on the left bank of the Dnepr River, after commander of all Russian forces in Ukraine Sergei Surovikin warned of Kiev's plans to launch a massive missile attack on a local dam and indiscriminate strikes on civilians.
Speaking with Sputnik, Scott Ritter, a military analyst and former US Marine Corps intelligence officer, has explained why the decision to relocate Russian troops to the left bank of the Dnepr River shouldn't be viewed as a "Russian defeat," but rather as a "pyrrhic Ukrainian victory."
Sputnik: What are the main reasons for the Russian withdrawal from parts of Kherson? Is this a reasonable move, given circumstances such as the approaching winter?
Scott Ritter: I think the decision was made irregardless of the weather. This is a decision that seemed to focus on preserving the lives of thousands of Russian soldiers over holding on to territory which has no intrinsic value in the short term. I think it was a just decision, one that was made based upon purely military objectives. I think the decision had been made because it was too difficult to reliably supply the Russian troops stationed on the right bank of the river in the vicinity of Kherson with the materiel necessary to ensure their victory over attacking Ukrainian forces and that ultimately these lives could be saved by going back to the left bank, securing their defensive positions and then holding off the Ukrainians, until such time Russia was able to accumulate sufficient offensive military power necessary to retake Kherson, reoccupy the right bank and possibly advance further into Ukraine.
Russia's Special Operation in Ukraine
Russian MoD Announces Troop Withdrawal From Parts of Kherson Region to Left Bank of Dnepr River
9 November, 15:00 GMT
Sputnik: What does Ukraine win and lose by occupying the right bank?
Ritter: First and foremost, this will be a very big political victory for Ukraine. There should be no doubt about this. Ukraine will be capturing or recapturing from their perspective the only major administrative center that had been captured by the Russians in their special military operation. The recapture of Kherson has been a strategic objective of the Zelensky government and the Ukrainian military from the start of their major counter-offensive in September. And if they are able to put troops in Kherson, raise the Ukrainian flag over the administrative buildings of Kherson, this will be seen as an extraordinarily important political victory for them, one which will be able to be used to argue for continued military and financial support from NATO, from the United States and from other nations.
But it's a political victory only because unless the Ukrainian occupation of Kherson occured in partnership with a larger peace agreement that guaranteed them possession of Kherson in perpetuity, this is, I believe, simply a temporary state of affairs that ultimately, once Russia is able to assemble the totality of the 300,000 men that were mobilized and then carry out combat operations reflective of this new military capacity, that Russia will recapture Kherson, reoccupy the right bank of the Dnepr River and as I said before, have the possibility of advancing further into Ukraine up to and including the capture of the city of Odessa.
Sputnik: In his report to the defense minister, commander of Russian forces in Ukraine Surovikin pointed out that Ukraine's losses are 7-8 times greater than Russia's. Can Ukraine really continue to rely on rapid advances?
Ritter: This is ultimately the military math that must be considered by everybody who is assessing the situation. The fact of the matter is, Ukraine cannot continue to operate under conditions where it's suffering seven to eight times casualties as their Russian opponents and expect to emerge from this conflict victorious. The casualty rate is too high. It's unsustainable, and ultimately, if it continues, will lead to the strategic defeat of Ukraine.
This is why the Kherson operation must be viewed not as a Russians defeat, but as a pyrrhic Ukrainian victory, that means that Ukraine may have achieved a political victory, but the military cost that they take was too high, unsustainable and ultimately will lead to the defeat of Ukraine.
Sputnik: What does this move say about the Russian strategy? Is Moscow playing the long game in Ukraine? What are the advantages and disadvantages of such a strategy?
Ritter: First and foremost, this should demonstrate to the Russian mothers, wives and daughters that the Russian government takes the lives of their loved ones, the men who have been sent into combat very seriously and is not willing to sacrifice them needlessly. That's an extraordinarily important statement being made by the Russian government, where they are willing to accept short-term embarassment in exchange for preserving the lives of Russia's most precious asset, which is its human resources, in this case, the men who wear the uniform of the Russian army.
3 Reasons Russia is Withdrawing From Part of Kherson
It also shows that Russia is in no hurry to get this conflict over with, that Russia is willing to consolidate its defenses in order to preserve life potentially extending the conflict, but in a manner which allows Russia to gain the advantage at a time and place that's more beneficial to Russia, so that not only will Russia ultimately achieve the military victory it seeks, but it will do so without needlessly sacrificing thousands of Russian military lives.


We never really talked, but you seem like a nice person to talk to!
You are an incredibly kind and caring individual. I have had nothing short of a pleasant time every time I've interacted with you.
Ah, Dregran. I rather enjoy reading your posts both here and on the discord. Your use of humor is very entertaining.
You seem to be a nice person from what I have seen.
You're fairly assertive and measure that similarly in a well-defined art style! Overall, you emit a healthy amount of confidence.
You take my relentless banter well, you're a good sport about it and I can respect that. You're a good kid.
You seem like a nice guy, from what we've seen.
I still don't know you well yet, but I think it's cool how open you are about yourself. Not many people can be like that!
From what I've seen of you, you seem to be a very nice and giving person.
I like your idea behind the Nuzlocke Hunger Games.
I've probably said this many times, but it will always be true. You're a wonderful person, a dedicated friend, and one of the kindest and brightest souls on the discord.
I don't know you too well, but from what I do know you seem like a really great guy!
you seem a lot more positive and confident in yourself these days=) major growth!!


text:
Ascensión del Señor parish complex
Hostal Generator
Lleida Municipal Police Building
A five-star hotel building
Adaptation of the old Veterinary School building into a new rector's office at the University of Cordoba
Building rehabilitation for the Municipal School of Fine Arts
Construction and development of an underground parking garage at the existing facility in Tortosa
Construction of 2 indoor pools at the Atarfe recreation center
Construction of 28 housing units, storefronts, and a parking lot in Barcelona
Construction of Antonio Reyes CEIP* in Ginés. Phase I
Construction of a building for the Lleida Municipal Police Department
Construction of a commercial facility at the Santa Margarida Industrial Park in Cabrera de Mar
Construction of a headquarters for the Regional Branches of the Government of Catalonia in Terres de l'Ebre
Construction of a multi-sport pavilion, 40 housing units, stores, and an underground parking area in Seville
Construction of the 4-star Prestige Congress Hotel in L'Hospitalet de Llobregat
Construction of the Ascensión del Señor parish complex in Seville
Construction of the Gran Sol Primary Care Center in Badalona
Construction of the Medina Elvira Cultural Center in Atarfe
Construction of the Moisès Broggi Hospital and parking area in Sant Joan Despí
Construction of the School of Medicine building at the Health Sciences Technology Park in Granada
Construction of the new La Mina Primary Care Center at Sant Adrià de Besós
Construction of the new headquarters of Acsa, Obras e Infraestructuras, S.A. in Granada
Cultural Centre Medina Elvira
Design and construction of a building for a 5-star hotel, spa, and restaurant in Lleida
Execution of Phase One of the Centro Parroquial San Juan Pablo II in Dos Hermanas
Hotel Prestige Congress****
Law School building at the University of Barcelona
Multiple-Use Building in the Infrastructure Area of the Córdoba Town Hall
Renovation of existing building for use as a hotel****
Renovation of the Bullfighting Museum of Cordoba Phase II
Renovation of the New Young Hostel and 1-Star Hotel on calle Córcega in Barcelona
Renovation of the building on calle Aragón in Barcelona and adaptation to a 4-star hotel
Rental housing units
Sant Joan Despí Moisès Broggi hospital
Structural renovation and new construction at Vil·la Urània to create a facility complex in Sarrià – Sant Gervasi
Alting Grupo Inmobiliario
Jordi Vinyoles
Renovation of the existing building, converting it for use as a hotel. The building has a total floor area of 3,407.98 m2, and it has a basement and seven floors, a loft level, and a rooftop level.
The project included demolition of the original structure and construction of a new structure, part of which was completely redone in order to create a central transportation area for the hotel.


Firemongery – a quick and easy way of choosing the right products for fire doors.
We have carefully selected a range of products which are fully tested and CE marked where needed. Where available, we also have the additional reassurance of Certifire accreditation for complete peace of mind.


On this month's bonus, Patreon sponsored SWU Podcast, Chris, Ben, and Dominic are joined by Patreon supporter Jacob to talk Star Wars Celebration. With two Celebrations within the next 12 months, the guys share some tips for making your Celebration the best possible experience and tell some stories from Celebrations past. They also offer some suggested Star Wars reading material and fan films. Plus, a quick spoiler update and some more A New Hope memories. All this and much more!
On this episode Chris, Ben, and Dominic celebrate the 39th anniversary of the release of Star Wars (aka REAL Star Wars Day, aka Star Wars Festivus) by looking back on the Original Trilogy. They also look ahead at Rogue One, Episode VIII, and Lego Star Wars: The Force Awakens. Plus a Celebration Europe announcement, some thoughts on the most recent leaked photos from the Episode VIII set, and another intriguing spoiler alert. All this and much more!
On this episode, Chris, Ben, and Dominic look back and share some memories about The Phantom Menace and Revenge of the Sith in honor of their anniversaries this week. They also look at this week's news and rumors, including: what's going on in Ireland, recent comments from John Boyega, who should end up with who in the sequel trilogy, Celebration updates, Rogue One leaks, and video game news. Plus, a very exciting spoiler report. All this and much more!
On this episode Chris, Ben, and Dominic are joined by long time SWU contributor Trey Atwood to talk about the latest Star Wars video gaming news. They discuss the end of Disney Infinity and what that means for Star Wars, the future of Star Wars Battlefront, and the the other upcoming video games. They also discuss John Williams recent comments about his future with Star Wars, some remarks by Pablo Hidalgo about Star Wars: Bloodline, and Rogue One at Celebration Europe. All this and much more!
On this episode Chris, Ben, and Dominic, are joined by long time SWU contributor Trey Atwood and SWU Patreon supporter Rusty to look back at Season Two of Star Wars Rebels. They look back at each character's storyline. as well as the season long arcs. Plus, their favorite episodes, what didn't work so well this season, and what they hope to see in Season Three. All this and much more!
On this episode Chris, Ben, and Dominic break down all the news and announcements from Star Wars Day! From Celebration returning to Orlando to "Jabba Flow" being released, to some video game updates and more. They also have some breaking news about the "Hanthology" film, Mads Mikkelsen reveals more about Rogue One, and some set pics from Episode VIII. Plus, they discuss how to make Star Wars Day into a bigger holiday, including what the traditional Star Wars Day meal should be. All this and much more!


text:
package com.nearme.freeupgrade.lib.download;

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.SocketException;
import java.net.SocketTimeoutException;
import java.net.URL;
import java.net.UnknownHostException;

import org.apache.http.conn.ConnectTimeoutException;

import android.content.Context;
import android.os.Process;
import android.text.TextUtils;

import com.nearme.freeupgrade.lib.db.PluginInfo;
import com.nearme.freeupgrade.lib.util.Constants;
import com.nearme.freeupgrade.lib.util.InnerUtil;
import com.nearme.freeupgrade.lib.util.LogUtil;
import com.nearme.freeupgrade.lib.util.NetUtil;

public class DownloadThread extends Thread {

	boolean bFirst = true; // 是否第一次取文件
	boolean bStop = false; // 停止标志
	private FileAccessI fileAccessI = null;
	private long flagPos;
	private double flagProgress;
	private DownloadListener mListener;
	DataOutputStream output; // 输出到文件的输出流
	private int retryTime = 0;
	private int mNewVersionCode = 0;
	PluginInfo siteInfoBean = null; // 文件信息Bean
	// byte[] key = DigestUtils.md5("oppo_comoppo_com");
	// Crypter sCrypter = new Crypter();
	private Context mContext;
	private boolean confirmNet = false;
	private boolean lastUseProxy = true;
	private boolean startFromZero = false;// 标志是否从0开始下载的
	private long startTime = 0;// 下载开始的时间
	private long endTime = 0;// 下载结束的时间
	private int BACK_SIZE = 1024;// 用于下载中断,继续下载时回退的字节数
	private int BUFFER_SIZE = 4096;// 下载的buffer大小
	private URL mUrl;

	public DownloadThread(Context ctx, PluginInfo bean, DownloadListener listener,
			int newVersionCode, boolean needDownloadPreparation) {
		mContext = ctx;
		siteInfoBean = bean;
		mListener = listener;
		mNewVersionCode = newVersionCode;
	}

	public void broacastDowloadUpdate() {
		if (mListener != null)
			mListener.onDownloadUpdate(siteInfoBean.pkgName);
	}

	public void broadcastDownloadFail(String errorMsg) {
		if (mListener != null)
			mListener.onDownloadFail(siteInfoBean.pkgName);
	}

	public void broadcastDownloadFatal(String errorMsg) {
		siteInfoBean.currentSize = 0;
		InnerUtil.getDownloadTempFile(siteInfoBean.fileName).delete();
		if (mListener != null)
			mListener.onDownloadFatal(siteInfoBean.pkgName);
	}

	public void broadcastDownloadStart() {
		if (mListener != null)
			mListener.onDownloadStart(siteInfoBean.pkgName);
	}

	public void broadcastDownloadSuccess(long time) {
		if (mListener != null) {
			mListener.onDownloadSuccess(siteInfoBean);
		}
	}

	public PluginInfo getDownloadInfo() {
		PluginInfo info = new PluginInfo();
		synchronized (siteInfoBean) {
			info = (PluginInfo) siteInfoBean.clone();
		}
		return info;
	}

	/**
	 * 获取主下载文件
	 *
	 * @param info
	 * @return
	 */
	private File getMainfile(PluginInfo info) {
		File mainFile = InnerUtil.getDownloadTempFile(info.fileName);
		return mainFile;
	}

	public void run() {
		Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
		siteInfoBean.status = Constants.STATUS_DOWNLOADING;
		broadcastDownloadStart();

		File mainFile = getMainfile(siteInfoBean);

		// 标示是否从0开始下载
		if (siteInfoBean.currentSize == 0) {
			startFromZero = true;
			startTime = System.currentTimeMillis();
		} else if (siteInfoBean.currentSize != siteInfoBean.fileSize) {
			// 不是从0开始的回退BACK_SIZE个字节,用于减少丢包情况
			siteInfoBean.currentSize = siteInfoBean.currentSize - BACK_SIZE > 0 ? siteInfoBean.currentSize
					- BACK_SIZE
					: 0;
		}

		HttpURLConnection httpConnection = null;
		HttpURLConnection mainConnection = null;
		/**
		 * 下载过程
		 */
		while (true && !bStop) {
			try {
				// 如果版本改变则清空所有的
				if (mNewVersionCode != -1 && siteInfoBean.versionCode != -1
						&& siteInfoBean.versionCode != mNewVersionCode) {
					LogUtil.i(Constants.TAG, "version not equal:" + siteInfoBean.versionCode + ":"
							+ mNewVersionCode);
					mainFile.delete();
					siteInfoBean.versionCode = mNewVersionCode;
				}
				if (siteInfoBean.versionCode == -1) {
					siteInfoBean.versionCode = mNewVersionCode;
				}

				LogUtil.i(Constants.TAG,
						"mainfile:" + siteInfoBean.currentSize + ":" + mainFile.length());
				// 主文件不存在或者
				if (!mainFile.exists()) {
					LogUtil.i(Constants.TAG, "restart mainfile");
					mainFile.delete();
					mainFile.createNewFile();
					siteInfoBean.currentSize = 0;
				}

				if (siteInfoBean.currentSize > siteInfoBean.fileSize) {
					LogUtil.i(Constants.TAG, "mainfile length fatal:" + siteInfoBean.currentSize
							+ ":" + siteInfoBean.fileSize);
					broadcastDownloadFatal("DOWNLOAD_FIAL_CURRENT_MORE_FILE");
					return;
				} else if (siteInfoBean.currentSize == 0
						|| siteInfoBean.currentSize < siteInfoBean.fileSize) {
					String deUrl = siteInfoBean.fileUrl;
					// if (!deUrl.startsWith("http://")) {
					// byte[] result =
					// Base64.decodeBase64(Util.getUTF8Bytes(deUrl));
					// deUrl = Util.getUTF8String(sCrypter.decrypt(result,
					// key));
					// }
					LogUtil.i(Constants.TAG, "mainfile download:" + siteInfoBean.currentSize + ":"
							+ siteInfoBean.fileSize + ":" + deUrl);
					mUrl = new URL(deUrl);
					mainConnection = getUrlConnecttion(mUrl);

					String sProperty = "bytes=" + siteInfoBean.currentSize + "-";
					mainConnection.setRequestProperty("RANGE", sProperty);
					mainConnection.setDoInput(true);
					mainConnection.connect();
					LogUtil.i(
							Constants.TAG,
							"content-length:" + mainConnection.getContentLength() + ":"
									+ mainConnection.getResponseCode() + ":"
									+ mainConnection.getResponseMessage());
					if (mainConnection.getContentLength() == 0) {
						LogUtil.i(Constants.TAG, "mainfile content-length=0");
						siteInfoBean.status = Constants.STATUS_PAUSE;
						broadcastDownloadFatal("DOWNLOAD_FAIL_CONTENTLENGHT_EQUAL_0");
						return;
					} else if (mainConnection.getContentLength() < 0) {
						LogUtil.i(Constants.TAG,
								"mainfile content-length<0:" + mainConnection.getContentLength()
										+ ":" + mainConnection.getResponseCode() + ":"
										+ mainConnection.getResponseMessage());
						if (retryTime++ > 30) {
							siteInfoBean.status = Constants.STATUS_PAUSE;
							broadcastDownloadFail("DOWNLOAD_FAIL_CONTENTLENGHT_LESS_0");
							return;
						}
						try {
							Thread.sleep(1000);
						} catch (Exception e) {
						}
						continue;
					}

					if (siteInfoBean.currentSize == 0) {
						siteInfoBean.fileSize = mainConnection.getContentLength()
								+ siteInfoBean.currentSize;
						LogUtil.i(Constants.TAG, "siteInfoBean.currentSize == 0:"
								+ siteInfoBean.fileSize);
					} else if (mainConnection.getContentLength() + siteInfoBean.currentSize != siteInfoBean.fileSize) {
						LogUtil.i(Constants.TAG, mainConnection.getContentLength()
								+ siteInfoBean.currentSize + "!=" + siteInfoBean.fileSize);
						siteInfoBean.status = Constants.STATUS_PAUSE;
						siteInfoBean.currentSize = 0;
						siteInfoBean.fileSize = 0;
						broadcastDownloadFail("DOWNLOAD_FAIL_SIZE_NOT_EQUAL");
						return;
					}

					InputStream input = mainConnection.getInputStream();
					byte[] b = new byte[BUFFER_SIZE];
					int nRead;
					flagProgress = (double) siteInfoBean.currentSize
							/ (double) siteInfoBean.fileSize;
					flagPos = siteInfoBean.currentSize;
					fileAccessI = new FileAccessI(mainFile.getAbsolutePath(),
							siteInfoBean.currentSize);
					while ((nRead = input.read(b, 0, BUFFER_SIZE)) > 0 && !bStop) {
						confirmNet = true;
						siteInfoBean.currentSize += fileAccessI.write(b, 0, nRead);
						double currentProgress = (double) siteInfoBean.currentSize
								/ (double) siteInfoBean.fileSize;
						if (currentProgress - flagProgress > 0.02
								&& siteInfoBean.currentSize - flagPos > 50 * 1024) {
							LogUtil.i(Constants.TAG, "progress=" + (currentProgress - flagProgress)
									+ ":" + lastUseProxy);
							flagProgress = currentProgress;
							flagPos = siteInfoBean.currentSize;
							broacastDowloadUpdate();
						}
					}
					input.close();
					broacastDowloadUpdate();
				}

				/**
				 * 文件下载完成后处理方式:
				 */
				if (siteInfoBean.currentSize == siteInfoBean.fileSize) {
					siteInfoBean.status = Constants.STATUS_DOWNLOADED;
					// 如果是从0开始下载的,统计下载速度
					if (startFromZero) {
						endTime = System.currentTimeMillis();
						long time = endTime - startTime;
						broadcastDownloadSuccess(time);
					} else {
						broadcastDownloadSuccess(-1);
					}
					return;
				} else if (siteInfoBean.currentSize > siteInfoBean.fileSize) {
					LogUtil.i(Constants.TAG, "download finish length fial:"
							+ siteInfoBean.currentSize + ":" + siteInfoBean.fileSize);
					siteInfoBean.status = Constants.STATUS_PAUSE;
					broadcastDownloadFatal("DOWNLOAD_FIAL_CURRENT_MORE_FILE");
					return;
				}

			} catch (FileNotFoundException ex) {
				ex.printStackTrace();
				if (siteInfoBean.currentSize == siteInfoBean.fileSize) {
					siteInfoBean.status = Constants.STATUS_DOWNLOADED;
					// 如果是从0开始下载的,统计下载速度
					if (startFromZero) {
						endTime = System.currentTimeMillis();
						long time = endTime - startTime;
						broadcastDownloadSuccess(time);
					} else {
						broadcastDownloadSuccess(-1);
					}
					return;
				} else {
					siteInfoBean.status = Constants.STATUS_PAUSE;
					broadcastDownloadFail(ex.toString());
					return;
				}
			} catch (SocketTimeoutException ex1) {
				if (retryTime++ > 30) {
					ex1.printStackTrace();
					siteInfoBean.status = Constants.STATUS_PAUSE;
					broadcastDownloadFail(ex1.toString());
					return;
				}
			} catch (SocketException ex3) {
				if (retryTime++ > 30) {
					ex3.printStackTrace();
					siteInfoBean.status = Constants.STATUS_PAUSE;
					broadcastDownloadFail(ex3.toString());
					return;
				}
			} catch (ConnectTimeoutException ex2) {
				if (retryTime++ > 30) {
					ex2.printStackTrace();
					siteInfoBean.status = Constants.STATUS_PAUSE;
					broadcastDownloadFail(ex2.toString());
					return;
				}
			} catch (UnknownHostException ex2) {
				if (retryTime++ > 30) {
					ex2.printStackTrace();
					siteInfoBean.status = Constants.STATUS_PAUSE;
					broadcastDownloadFail(ex2.toString());
					return;
				}
			} catch (Exception e) {
				if (retryTime++ > 30) {
					e.printStackTrace();
					siteInfoBean.status = Constants.STATUS_PAUSE;
					broadcastDownloadFail(e.toString());
					return;
				}
			} finally {
				try {
					if (httpConnection != null) {
						httpConnection.getInputStream().close();
						httpConnection.disconnect();
					}
				} catch (Exception e) {
				}
				try {
					if (mainConnection != null) {
						mainConnection.getInputStream().close();
						mainConnection.disconnect();
					}
				} catch (Exception e) {
				}
			}
		}
	}

	public HttpURLConnection getUrlConnecttion(URL url) throws IOException {
		HttpURLConnection connection = null;
		LogUtil.i(Constants.TAG,
				NetUtil.getWapType(mContext) + ":" + android.net.Proxy.getDefaultHost() + ":"
						+ android.net.Proxy.getDefaultPort() + ":" + confirmNet + ":"
						+ lastUseProxy);
		if (NetUtil.isChinaMobileWap(mContext)) {
			String newUrl = "http://10.0.0.172" + url.getPath();
			String domain = url.getHost();
			int port = url.getPort();
			URL url2 = new URL(newUrl);
			connection = (HttpURLConnection) url2.openConnection();
			if (port != -1) {
				domain = domain + ":" + port;
			}
			connection.setConnectTimeout(30000);
			connection.setReadTimeout(30000);
			connection.setRequestProperty("X-Online-Host", domain);
		} else if (NetUtil.isMobileNotChinaUniocomWap(mContext)) {
			String proxyHost = android.net.Proxy.getDefaultHost();
			int proxyPort = android.net.Proxy.getDefaultPort();
			if (!TextUtils.isEmpty(proxyHost)) {
				java.net.Proxy proxy = new java.net.Proxy(java.net.Proxy.Type.HTTP,
						new InetSocketAddress(proxyHost, proxyPort));
				connection = (HttpURLConnection) url.openConnection(proxy);
				LogUtil.i(Constants.TAG, "set proxy");
				connection.setConnectTimeout(30000);
				connection.setReadTimeout(30000);
			}
		} else if (!NetUtil.isWifiWorking(mContext)) {
			boolean useProxy = false;
			if (confirmNet) {
				useProxy = lastUseProxy;
			} else {
				useProxy = !lastUseProxy;
			}
			if (useProxy) {
				String proxyHost = android.net.Proxy.getDefaultHost();
				int proxyPort = android.net.Proxy.getDefaultPort();
				if (!TextUtils.isEmpty(proxyHost)) {
					java.net.Proxy proxy = new java.net.Proxy(java.net.Proxy.Type.HTTP,
							new InetSocketAddress(proxyHost, proxyPort));
					connection = (HttpURLConnection) url.openConnection(proxy);
					connection.setConnectTimeout(30000);
					connection.setReadTimeout(30000);
					LogUtil.i(Constants.TAG, "set proxy");
				}
			}
			lastUseProxy = useProxy;
		}
		if (connection == null) {
			connection = (HttpURLConnection) url.openConnection();
			connection.setConnectTimeout(15000);
			connection.setReadTimeout(15000);
		}
		return connection;
	}

	public void stopDownload() {
		bStop = true;
	}
}

redpajama_set_name: RedPajamaGithub


text:
Home Human Rights Posts
Human Rights Posts
Rights activist says Malawi Police making progress on inclusion
Mar 15, 2022 Baxter Mkumba 0 &
Rights activist Ian Desmond Simbota says Malawi Police Service is making progress on inclusion following the recruitment of two people with albinism. Simbota over the weekend shared pictures of two Malawi Police officers who are… ...
Malawi Gender Minister Kaliati condemns stripping of women
Mar 09, 2022 Contributor* 0 &
Minister of Gender, Community Development and Social Welfare Patricia Kaliati on Tuesday described the act of stripping women naked as illegal and barbaric. Kaliati expressed her sentiments in Lilongwe during the 2022 commemoration of the… ...
A housewife is entitled share of matrimonial property – Court tells Dausi
Feb 28, 2022 Lindiwe Sambalikagwa 0 &
A court in Mzuzu has ruled that a housewife is entitled to matrimonial property since she contributes to the family through cooking, washing, cleaning the house, looking after the husband and children. The Principal Resident… ...
12 men arrested over sexual abuse of children
Feb 21, 2022 Malawi24 Reporter 0 &
Twelve men have been arrested at Bvumbwe Trading Centre in Thyolo during a police raid conducted following reports that businessmen at the market sexually abuse children aged between 13 and 16 years. The Malawi Police… ...
In the Malawi Constitutional Court: Challenging the offence of "defilement" in instances of consensual adolescent intercourse
Feb 18, 2022 Kondwani Mkhalipi-Manyungwa 0 &
On Tuesday, 15 February 2022 the High Court of Malawi sitting as the Constitutional Court will hear the case of AJ & TS v State and Others which deals with a Constitutional challenge to the… ...
Four foreign nationals in custody over illegal stay
Dec 09, 2021 Archangel Nzangaya 0 &
Malawi Immigration authorities in Lilongwe are keeping in custody a Tanzanian national, two Zimbabweans and a Nigerian national for illegal stay in the country. Confirming the development was Central Region immigration office publicist Inspector Pasqually… ...
Man, 57, arrested for raping 18-year-old maid in Chikwawa
Nov 29, 2021 Russell Kondowe 0 &
Police in Chikwawa have arrested a 57-year-old man for raping his 18-year-old maid. The man identified as Andsen Tembo allegedly raped the teenager on 24 November this year. According to Chikwawa Police Public Relations Officer,… ...
Genet trains girls on gender, life skills and HIV/AIDS
Nov 27, 2021 Contributor* 0 &
Girls Empowerment Network (Genet) has trained 150 girls in Mulanje on HIV and Aids prevention, various life skills and gender issues, including gender-based violence (GBV) to improve the well-being of girls in the country. The… ...
High cost of living worries Malawi Human Rights Commission
The Malawi Human Rights Commission has challenged Malawi Government to fast track processes of finding solutions to the economic hardships Malawians are facing, arguing that the situation is negatively affecting peoples' enjoyment of economic, social… ...
Malawi Govt pays K44 million compensation to Lule's widow
Malawi Government has paid K44 million compensation to the widow of Buleya Lule who died in police custody in 2019 after he was arrested over the abduction of a person with albinism. The widow, Charity… ...
Two Congolese nationals arrested for illegal entry
Nov 05, 2021 Mike Lyson Zgambo 0 &
Police at Jenda in Mzimba are keeping in custody two Congolese nationals for entering Malawi illegally. The men were arrested on November, 4th, 2021 at Jenda in Mzimba District. The Police who were manning Jenda… ...
UNHCR calls on governments to resolve plight of stateless people
Nov 04, 2021 Martha Chikoti 0 &
The United Nations High Commissioner for Refugees (UNHCR) has said more action is needed to resolve the plight of millions around the world who are still without citizenship. UN High Commissioner for Refugees, Filippo Grandi… ...
Organization develops radio play to encourage conversations on death penalty
Nov 03, 2021 Archangel Nzangaya 0 &
A radio play focusing on how the death penalty affects the society's pursuit for justice will be aired on MBC Radio 1 starting this Thursday at 6:30 PM. According to the play's producer, Chisomo Liwimbi,… ...
Man forced out of village over witchcraft allegations
Nov 02, 2021 Baxter Mkumba 0 &
Villagers from Benga Mwale Village in the area of Traditional Authority Mzukuzuku in Mzimba district have banished George Tembo from the village on allegation that he bewitched his 44-year-old son who died after getting sick… ...
Malawi's defilement law under scrutiny
Oct 30, 2021 Mwayi Mkandawire 0 &
A three-judge panel of the Constitutional Court will examine Malawi's law on defilement in relation to the way it criminalises consensual sexual relationships. The court will then determine constitutionality of law to the extent it… ...


The statistic shows the average period of use of mobile internet users per week in China in 2011. In 2011, 9.4 percent of mobile internet users in China were online for less than an hour a week.
Between December 2010 and May 12, 2011, 38,437 people were surveyed by means of online and mobile questionnaires.
The source does not provide information regarding missing percentage points to 100 percent.


A new group of hacking pranksters responsible for resurrecting Tupac, bringing Sony to its knees and breaking into the CIA's public Web site has drawn an unlikely set of admirers: the cyber security industry.
Through the taunting of some of the worlds biggest companies and by doling out corporate headaches by the hundreds, the mischievous group known as LulzSec has highlighted major security flaws that need to be addressed.
Named after a variant of LOL, which is Internet slang for "laugh out loud," the loosely organized group of hackers, also known as Lulz Security or the Lulz Boat, claims it merely provides high- quality entertainment at your expense.
Yet the group that has so far claimed responsibility for attacks on Sony (NYSE:SNE), Nintendo, PBS, FBI affiliate Infragard, security company Unveillance and even the U.S. Senate and CIA has proven to be an embarrassing adversary of opponents with penetrable security systems.
LulzSec seems to be thoroughly entertained by the mayhem it causes. The group is now even operating at least two switchboards and taking calls from fans.
They certainly seem to have a sense of humor, albeit a bit twisted, said Jason Glassberg, co-founder of Casaba, an Internet-security product and services company.
Underscoring the group's growing popularity, LulzSec has seen its Twitter fan base skyrocket since first entering to spotlight in May. Its followers have more than doubled to 180,000 this week alone.
Some say the group is just devouring media attention, but LulzSec claims its primary goal is to spread what it calls the lulz, which seems to be an effort to identify and expose security vulnerabilities of certain institutions, all while having a little fun and entertaining its supporters.
While there isnt too much information available about the group, it seems to be more of a grey hat protest organization filled with jokesters than a criminal black hat enterprise based on profit, Glassberg said.
I can only imagine their intentions are to show and demonstrate how poor the security actually is in some of these big companies, he said. People trust all their information on these large companies Web sites to be safe and its just not.
Even though LulzSec publicly mocks some flaws through its satirically written press releases and Tweets, the group has also shown a sensitive side. The Lulz Boat politely encouraged the U.K.s National Health Service last week to patch its security holes, saying in an email to the NHS that LulzSec means no harm and only want to help you fix your tech issues.
In that email, LulzSec called itself a band of pirate-ninjas and said it stumbled upon several administrative passwords some time ago as it was traversing the Internets for signs of enemy fleets.
While the NHS was quick to defend itself, LulzSec said on Twitter that it never planned to exploit those passwords. Shortly after, the NHS reportedly issued guidance to its local branches about how to protect and secure digital assets.
Similarly, after leaking information it stole about video game publisher Bethesda Softworks, LulzSec asked the company via Twitter to please fix your junk. It also encouraged video-game maker Sega to contact LulzSec for help destroying the hackers that attacked its system.
Some believe the FBI is on its tracks, but Lulz taunted officials last week by claiming it has yet to lose a member. Days later, LulzSec hacked the U.S. Senate Web site and claimed it doesnt like the U.S. government very much, before lightening the mood by saying its attack was just for kicks.
The U.S. Senate was quick to downplay the threat when LulzSec claimed responsibility. But the break-in still caused the government embarrassment and led it to review all of its Web sites.
Whether LulzSec is in it for publicity, money, heroism or just giggles, the groups ability to so seamlessly snag information from large companies or those organizations closest to national secrets only brightens the spotlight already shining on cyber threats.
LulzSec is running around pummeling some of the world's most powerful organizations into the ground... for laughs! For lulz! For (kicks) and giggles, Patrick Gray said in his popular cyber blog Risky Biz. Surely that tells you what you need to know about computer security: there isn't any.
In addition to LulzSecs hacks, security shortfalls have been the culprit behind attacks this year against Sony, government contractor Lockheed Martin (NYSE:LMT), EMC (NYSE:EMC) and Google (NASDAQ:GOOG), among others.
The hackings should be more than just an embarrassment for the victims and a source of comedy for others. Security experts say they should also serve as an important warning that many institutions security walls aren't nearly as thick as they think.
You marvel at some of the ridiculous and almost simple hacking tricks they are able to pull to get these really large companies, Glassberg said, noting LulzSec has been able to access sensitive information using only a basic SQL injection attack.
A lot of people are secretly rooting for these guys in the sense they are exposing just how weak some of these securities are, Glassberg said. Its a problem, and its only by actions such as these by the Lulz guys that it comes to light.
As the boundaries of the Internet continue to rapidly expand, and vulnerabilities become even greater, hackers discover more opportunities to exploit information from a number of different vantage points, SecureInfo CEO Christopher Fountain said.
There are guidelines to manage and mitigate risk, but there is no way to eliminate it, he said. Companies need to think about security from the very beginning when they are still designing their systems and use ethical "white hat" hackers, who simulate an attack, to patch any remaining vulnerabilities. From there, they have to keep up with the latest version of security software.
Dont underestimate the need for security because itll cost you, Glassberg said, doubly if you are processing payments or doing anything with personal identifiable information.


text:
Emilie Townes to Give Anna Julia Cooper Lecture March 19
EDITOR'S NOTE: Due to ongoing concerns about the spread of the coronavirus, this event has been canceled. Check back for updates on any events that are being rescheduled for a later date.
Candler's Black Church Studies Program will welcome Emilie M. Townes as distinguished guest speaker for the annual Anna Julia Cooper Lecture on March 19 from 4:00 to 6:00 p.m. in Room 252 of Candler's Rita Anne Rollins Building. Townes will speak on "Colored Orneriness as Critical Companion in U.S. Democracy," exploring what she calls "colored orneriness" as a moral ideal that can provide a critical prophetic lens for black communities and churches in the U.S. that suffer and resist relentless systemic oppression. The event is free and registration is required. Register here.
Townes is Dean and E. Rhodes and Leona B. Carpenter Professor of Womanist Ethics and Society at Vanderbilt Divinity School, the first African American woman to hold the position of dean. Known as a pioneering scholar in womanist theology, she has a strong interest in thinking critically about womanist perspectives on issues such as health care, economic justice, poetry, and literary theory.
An ordained American Baptist clergywoman, Townes earned her DMin from the University of Chicago Divinity School and her PhD in Religion in Society and Personality from Northwestern University. Prior to coming to Vanderbilt, Townes served as the Andrew W. Mellon Professor of African American Religion and Theology at Yale University Divinity School, where she was the first African American and first woman to serve as associate dean for academic affairs.
Townes is the author of the groundbreaking book Womanist Ethics and the Cultural Production of Evil (Palgrave Macmillan Press, 2006). Other books include Breaking the Fine Rain of Death: African American Health Care and A Womanist Ethic of Care (Continuum, 1998), In a Blaze of Glory: Womanist Spirituality as Social Witness (Abingdon Press, 1995) and Womanist Justice, Womanist Hope (Scholars Press, 1993). She co-edited Womanist Theological Ethics: A Reader (Westminster John Knox Press, 2011) with Katie Geneva Cannon and Angela D. Simms.
In 2005, Townes was the first African American woman elected to the presidential line of the American Academy of Religion (AAR), and served as president in 2008. She was elected to the American Academy of Arts and Sciences (AAAS) in 2009. From 2012 to 2016, she served a four-year term as president of the Society for the Study of Black Religion.
This annual lecture of Candler's Black Church Studies Program is named for Anna Julia Cooper, one of the most influential black scholars of the 19th and 20th centuries. Born into slavery in 1858, Cooper graduated from Oberlin College and the Sorbonne, becoming the fourth African American woman in the U.S. to earn a PhD. She served as a public school teacher and principal in Washington, D.C. for more than 30 years, and remained a prominent educator, activist, and author until her death at age 105.
Events,
Black Church Studies,
Anna Julia Cooper Lecture


text:
'Hop' Director Tim Hill Jumps To 'Short Circuit' Reboot
'Hop' Director Tim Hill Jumps To 'Short Circuit' Reboot
Everybody forget about the nation's crumbling economy, the fact that "Hop" and "Alvin and the Chipmunks" director Tim Hill is bringing the beloved robot comedy "Short Circuit" back to life is cause for an outcry!
Clearly we jest, but Deadline is reporting that producers Ryan Heppe and John Hyde have approved the family-friendly director as their choice to helm this proposed "reboot" through the house of the Weinsteins' production shingle Dimension. Apparently the original film's producer David Wallace is also along for the ride. That film followed "The Breakfast Club" alumnus Ally Sheedy as she assisted the self-aware military experiment Number 5 in an effort to prove to his creator, played by Steve Guttenberg, that he is worthy of a real life. Naturally, the military is in hot pursuit of their robotic creation.
When we first heard about this reboot all the way back in 2009, the equally unsavory "Paul Blart: Mall Cop" director Steve Carr was onboard with a script by "Robot Chicken" scribe Dan Milano. It looks as if Milano has managed to hang around while Carr has moved on to a few surprisingly interesting-sounding projects like the star-studded comedy vignette film "Movie 43."
Perhaps Milano can bring some wit to this reboot, but we're kind of hoping that Dimension wears its badge of horror on this one and turns it into another technophobic robot slasher picture. Clearly that's not going to happen, but we're sure that Hill will deliver a (bland) family film that'll probably make some serious bank. We're guessing that casting news regarding the parts formerly occupied by Sheedy and Guttenberg is on the way, while Number 5 will probably just be voiced by an auto tuned Russell Brand. At the very least, we hope to see some sort of Steve Guttenberg cameo a la "Party Down."
This Article is related to: Uncategorized and tagged Films


Toilet Repair Services in Jacksonville FL | Call Us Today! Toilet Repair Services in Jacksonville FL | Call Us Today!
If You Need Immediate Solutions for Your Toilet, Call Our Professional Jacksonville Plumbers for Help Now!
Our toilets are often one of the most neglected appliances in our homes since they can withstand everyday use and can last for a very long time. But, like all other appliances inside our house, they can be susceptible to problems especially when age is taken into consideration.
When you are experiencing problems with your toilet, most often, it is easy to conclude that it needs replacement. Although having a new toilet installed can sometimes be the best option to eliminate the problem, it can be viable to seek alternatives to remedy the problem and avoid incurring costly expenses. Our qualified technicians can help find the best solution to your problem if such a case occurs.
Having your toilet diagnosed by our certified technicians can be the initial step you can take to make an informed decision. They can quickly pinpoint what is causing the problem and can help repair the issue if needed. Our expert Jacksonville plumbers can inform you if the problem is severe enough to be fixed or needs to be replaced instead.
You may have been experiencing the same problem over and over. When you do, and the problem is still persistent, it is best to call the immediate attention of our reliable technicians for help.
At Plumbers 911, we know how it can be frustrating to have your toilet break down in the middle of a crisis. And DIY toilet repairs can often be time-consuming and frustrating. The best thing about our certified contractors is they can help you fix the problem so it can be less of a burden and less of a hassle on your part.
A broken flapper – Located inside the tank, the flapper is responsible for releasing the needed water when the toilet is flushed. It is also responsible for sealing and holding the water inside the tank when the water cycle is finished. Flappers are susceptible to being bent, broken, or being warped which can lead to the toilet not flushing properly. When this happens, call us immediately to have it fixed or replaced. Doing it on your own can only worsen the problem or much worse, render the flappers useless.
Low water levels – Sometimes the tank does not store enough water to replace the water in the bowl. This can happen because of problems connected with the water supply. If you find yourself regularly adding water to the tank, it is best to call the attention of our experienced plumbers who can immediately fix the problem.
Lift chain issues – The lift chain is typically connected to the toilet handle and signals the pump that is it time to flush. When it is disconnected, broken, or is not tight enough, no matter how many times you hit the tank handle, the toilet will not flush. When this happens, call us immediately so we can adjust the lift chains.
If you experience any of these problems, call our skilled techs to help you work on the problem quickly and with efficiency. DIY projects and quick fixes can only aggravate the situation, so it is best to seek immediate help.
● It requires too many repairs – Your toilet has many small components that work together to form the unit as a whole. While most of them can be easily fixed by our local experts, weighing whether the repair costs can cost you much more money as opposed to having a new toilet installed can be a determining factor for you to consider.
Quite often, serious damages can be incurred by the handle, the fill valve, or the flapper with time and use, but they can be easily fixed. Though when these major components become damaged simultaneously, it can be quite costly. Knowing whether the repair or replacement can save you money can help you create an informed decision.
● Recurring and persistent clogs – While your toilet can be serviceable for a very long time, they can also be susceptible to problems like recurrent and persistent clogs. If your toilet is causing a major inconvenience and requires constant plunging, it can be better to have the problem fixed by our professional technicians, or better yet have it replaced by our local plumber.
Most often, this problem tends to appear with low-flush toilets which significantly uses less amount of water. You do not have to back down on the water saving, but having a newer model installed by our reliable plumbers can go a very long way.
● Cracks on the porcelain – Toilets are manufactured to be robust and sturdy. Although, there are some instances that they tend to appear with hairline cracks. This can lead to significant leaks especially if it appears on the tank or bowl. When your toilet bowl or tank cracks, it can result in flood water which can potentially damage other existing furnishings. Having it inspected by our qualified technicians before installation can save you from potential problems in the long run.
Cracks in the bowl may not be as demanding as one that is located on the tank, but it can be advisable to watch out for possible leaks when flushing. One that is left unseen can damage your floor with time.
● Scores and scratches on the porcelain – Over time, your toilet tank and bowl wear out and become scratched. When this happens, it can be hard to keep your toilet bowl clean. This appears with older toilets which have been around for some time. If your toilet bowl can be difficult to keep clean, it can be better to have a new one installed and save you from the inconvenience of having to scrub it many times.
When you find yourself in a situation where you need to have your toilet repaired or installed, do not hesitate to call Plumbers 911. We can quickly work to fix or replace your toilet so you can have it running in no time.


text:
Saratoga After Dark: The 2017 Wesley Foundation Gala
Hosted on May 20 at the Saratoga Golf and Polo Club, the gala had a James Bond theme.
by Kathleen Willcox
Kevin and Michele Madigan with Joyce and Joe Ure. (Kathleen Willcox)
Martinis were shaken, not stirred at the Saratoga Golf and Polo Club on May 20. The Wesley Foundation was throwing its annual gala, this time with a Bond theme.
The evening was as stylish, sleek and fun as an Ian Fleming plot racing toward the denouement. Many guests came dressed in 007-approved attire, with many men looking dapper in tuxes and women donning metallic or black frocks and sky-high heels.
Tom and Kristie Roohan were Honorary Chairs of the Wesley Foundation Gala and they greeted arriving guests. The couple have supported the Wesley Foundation for years, and have previously shared their appreciation for the organization's outreach and impact on the community. Tim Busch was the chairman of the Gala and managed to be everywhere at once, greeting guests, mingling and serving as MC. Several committee members, including Winnie Baden, Eliza Bianco, Alicia Butler, Geriann Eddy, Judy LeCain, Charlotte Mosso, Lorrie Shilling and Kimberlee Williams shared their time and expertise in the planning and execution of the highly successful event, and then showed up to relish the fruits of their labor (and hit the dance floor).
The evening's festivities commenced with the style James Bond aficionados would expect. The Martini bar and Chef John Ireland's hors d'oeuvres bar, buffet and dessert trolley cast their magical spell and The Refrigerators brought a high-energy horn-fueled party that kept the dance floor packed.
Bond style, of course, is synonymous with gorgeous gadgets. Several luxurious modes of transportation were on display, including a high-end motorcycle from Seymour's Motorized Sports and a high-speed jet boat from Alpin Haus. Some guests indulged in photo ops with them and, of course, 007's signature ride, the Aston Martin (on loan from a generous private supporter of the Foundation).
"There were 300 people there and we raised more than $92,000," Wesley Foundation executive director. "Our goal was to break last year's totals and we did. Our committee, chair and honorary chairs worked incredibly hard to pull off a successful and fun event and we were all thrilled with the results."
The Wesley Community supports and serves more than 700 Saratoga-area seniors and others with long-term disabilities. The funds for this year's gala have been earmarked for The Wesley Community's Resident Activities Room renovation project.
The Adirondack Trust recently donated $10,500 to the Wesley Foundation in support of all of its special events this year. Adirondack was the presenting sponsor of the Gala as well, with Roohan Realty, Marshall & Sterling Insurance, Fine Affairs, AOW Associates, The Fort Miller Group and Ray Martin/Crescent Hill Partners, LLC also lending significant support.
Saratoga Springs' Historic Homes Tour: A Glimpse Inside The City's Architectural Gems
The Erie Canal At 200: Celebrating the Birth of 'Clinton's Ditch'
Kathleen Willcox June 1, 2017


Essentially, the above means that the most secure VPN provider is a No Logs company that keeps absolutely no personally identifiable information about their users. No Logs VPN providers cannot match an assigned IP address with the real IP address and do not monitor users' browsing habits. A list of the best no logs VPN providers is provided in the Most Secure VPN guide.
VPN providers that keep Metadata Logs (Server Connection Logs), related to the date and time when the connection to the server was established and an IP address that was used, also do not monitor their users' online activity. This is the reason they tend to call themselves "No Logs" VPN providers. But since these providers know your real IP address and which VPN IP address you were assigned, they can decide to cooperate with the authorities when you break the law. So once you get the attention of the authorities, a specific law enforcement agency uses an IP address involved in a specific illegal activity and subpoenas a VPN provider to reveal the real IP address. This is different from logging the websites that you visit and spying, though, because a VPN provider doesn't know what you do online when you use their network.
Let's say John with a real IP 1.1.1.1 was assigned an IP address 2.2.2.2. When John accesses various websites, these websites store certain information about this user, including an IP address, OS, browser and screen resolution. When 2.2.2.2 is tagged by the authorities for, lets say, selling guns on the darknet, they reach out to a VPN provider with a court order to disclose the real info about this user, which in the case of Metadata Logging is an IP address. The provider can then match 2.2.2.2 to a real user 1.1.1.1. and this is how John gets caught.
However, when a Shared IP was used, there were multiple users who were connected to the same server. So law enforcement needs to employ additional techniques to determine an exact individual.
While we do not feel that criminal activity should be endorsed and enabled by the means of encryption tools, it's important to note that metadata logging is not suitable for whistleblowers, certain journalists or other illegal activities. Keeping server connection logs, however, in no way invades user privacy and is, therefore, an excellent choice to protect yourself from mass surveillance. When you're using encryption tools, nobody can intercept and steal your data, and ISPs no longer have access to your browsing history.
Full Traffic Logging (Browsing Activities), on the other hand, is unacceptable and critically invades our right to privacy! As evident from the table provided, full traffic logs contain highly personal sensitive information about browsing habits of the users and can be used to build personal profiles. Mandatory Data Retention laws in the UK, Europe and Australia force ISPs and telecom companies to store full browsing logs. Based on the privacy policies of the VPN providers we reviewed, none of them practice full logging. However, we'd like to note that some reserve the right to temporarily turn on logging for investigation purposes when they determine their network is being abused. Since they do not clarify exactly what constitutes abuse and do not specify what information they start logging in such cases, we feel that such companies should fall under the Full Traffic Logging VPN category and should be used with caution.
The following are the best no logging VPN providers.
PIA is a leading no logs VPN provider with a massive amount of servers (over 3,000) that deliver excellent speeds and a very reliable service. PIA VPN does a great job protecting users' privacy from surveillance, cyber attacks and other online threats. PIA network is protected behind NAT Firewall. Native apps offer a built-in Kill Switch and DNS leak protection features to secure connection from unexpected data leaks. PIA software also offers switching between UDP and TCP connections types, port forwarding to 443, 80, 110, 53, 8080, 9201. For faster streaming and torrenting, PIA allows using 128-bit or 256-bit encryption levels. To read a full PIA review click HERE.
Nathan, you can setup your VPN connection directly on your router. Try contacting CyberGhost support as they likely have setup instructions for your router.


This is a list of books that have shaped my life. I plan to keep adding to the list, and share them here in no particular order, but with the ardor that comes from having met something exciting and wanting to tell someone about it.
Because I read or post a title doesn't mean I love everything in the book, but that I have benefited substantially from the over-arching message. Reading with discernment is like eating fish, they say: chew it and spit out the bones.
Please keep adding books as you approve them. I'll be back to see if there's more.
I've got a $40 Barnes and Noble gift card burning a hole in my pocket. Since I don't have access to my beloved Queens library anymore, I might actually have to start buying books again. 🙂 I copied your list and plan to make a couple selections based on your recommendation.
How delightful to find someone who read Green Dolphin Street! I couldn't believe at the end that I really liked Marianne. I simply couldn't believe it. I had to reread the last chapter and sure enough, I liked that woman! So much that we named our youngest daughter Marianne.
I just found this list again and was tickled to see the "print" button. Now a copy of your list will hang out in an inner pocket of my purse with my own list of books I wish to read. Thanks for sharing!- You've introduced me to many books, places, and other delightful finds!
Wow! I love this! This gives me some great gift ideas!


A prison brawl in Ohio was sparked in an unusual way -- after a drone flew over the yard and dropped drugs and other contraband, according to an incident report.
The mayhem broke out on July 29 just after 2:30 p.m. at Mansfield Correctional Institution in Mansfield, Ohio.
According to the report, surveillance footage showed a drone that "passed over the recreation yards immediately before the fight began."
The drone dropped a package, which was intended for one inmate, but someone else picked up the package, sparking a fight.
"The package was purportedly then thrown over the fence to the south recreation yard," the report says.
Responding officers used pepper spray to break up the fight and ordered the inmates to get on the ground.
More than 200 inmates -- 75 from the north yard and 130 from the south -- were taken to the gyms where they were strip searched. It was not clear how many were involved in the fight.
No staff or inmates suffered injuries, the incident report said.
In one of the prison's equipment rooms, guards found a package containing 144.5 grams of tobacco, 65.4 grams of marijuana and 6.6 grams of heroin.
The housing units that were in the yards at the time were placed on restricted movement, the report said.
It was not clear if any inmates faced charges or were disciplined.
The Ohio Department of Rehabilitation and Correction declined to comment beyond the report.


With roughly 400,000 different species of plants in the world, it's no wonder that choosing the perfect houseplant can be not only tricky, but overwhelming. To help you out, we've created a quick, easy-to-use flow chart to guide you in the right direction. Follow along below to find out which indoor plant is best aligned with your lifestyle and environment.


text:
Home>Industries
Hohhot pushes industrial transformation and upgrading
2020-11-12 (chinadaily.com.cn)
Hohhot, capital city of North China's Inner Mongolia autonomous region [Photo provided to chinadaily.com.cn]
In recent years, Hohhot, capital city of North China's Inner Mongolia autonomous region, has accelerated the high-quality development of its industrial economy, paid close attention to the transformation and upgrading of its traditional industries, and vigorously developed its strategic emerging industries.
During the 13th Five-Year Plan (2016-2020) period, Hohhot formulated a series of policies and measures such as the 'Work Plan for the High-quality Development of the Industrial Economy' to promote the development of its industrial economy.
Hohhot has been taking great strides in accelerating the upgrading of its dairy industry, and has made some remarkable achievements. In order to further promote the dairy industry, Hohhot has issued strategies called the 'Three Opinions on Building an Upgraded Version of China's Dairy Capital', and the 'Three-Year Action Plan for Promoting the Upgrade of the Dairy Industry (2018-2020)'.
Yili and Mengniu, two dairy companies in China headquartered in Hohhot, now rank among the top 10 dairy companies globally.
Hohhot has a great many advantages for developing its new energy industry, with abundant silicon ore, water, wind and land resources that are suitable for photovoltaic and wind power.
The city has accelerated the development of strategic emerging industries including new materials, new energy vehicles, and big data cloud computing industries.
The cloud computing centers of the three major operators - China Mobile, China Unicom and China Telecom - have formed a 700,000 server capacity and attracted more than 60 e-commerce companies such as Baidu and Tencent.
It is speeding up the development of a national big data comprehensive experimental zone, and speeding up the construction of major industrial agglomeration projects such as Shuju Town and Inspur Big Data Industrial Park.
To boost the development of the modern service industry, Hohhot has carried out major modern logistics projects, including adding more logistics storage centers and e-commerce cluster area upgrades.
Of these new projects, Jinqiao E-commerce Industrial Park was selected as a national e-commerce demonstration base.


This tour is designed in order to help you understand deeply about the Cham people and their culture. After this tour, you will have the whole full picture of Cham culture. You also have time to relax on the beach.
Start from Nha Trang and take the No.1 National Highway to the South to Phan Rang City, a main land of "Cham" people culture & civilisation over several centuries. Don't forget to visit Po Nagar Temples in Nha Trang first to have the whole full picture of Cham Culture from Nha Trang to Phan Rang after the tour.
Stop at Ca Na Beach on the way for lunch, relax or swim for a while before going straight away to famous Cham Village of Bau Truc. You will enjoy all kinds of the hand-made & well-known porcelain products by Cham People and buy some of them as souvenirs.
On the way back, you will go on visiting Poklong Gia rai Temples and Porome Temples.
Go back to Nha Trang at around 17:00 .
Everything worked great Really enjoyed this trip, our guide was very charming, good knowledge.


Europe's latest research-funding programme includes, for the first time, money for 'low-performing' member states to set up research centres in their regions, in partnership with well-established institutions from other countries. But some observers were disappointed earlier this month when the European Union (EU) announced that the host countries will manage the centres — a rule that critics say could be challenging for fledgling institutions and perhaps perpetuate problems, such as nepotism, that have contributed to their poor performance in the first place.
"There are lots of really good scientists [in southern and eastern Europe] but it's the management of institutions that is inefficient, old style, corrupt," says Botond Roska, a neuroscientist at the Friedrich Miescher Institute for Biomedical Research in Basel, Switzerland.
Tropical climates are famously rich in biodiversity, perhaps because old lineages persist well in those regions instead of being simply replaced by new ones, or perhaps because the tropical environment promotes fast speciation. A new study of the ant family tree suggests that both these explanations may be right.
Men and women wanted for hazardous duty. Small wages. Bitter cold. Long months of complete darkness. Compensations include off-road driving, penguin spotting and no-hassle waste disposal.
That could be a job advertisement for station staff at Fildes Peninsula Antarctic research stations. It's not as noble as the apocryphal advertisement for explorer Ernest Shackleton's expedition in the early twentieth century, which promised honour and recognition, but then some of the site's modern occupants deserve neither, according to a report released last month by Germany's Federal Environment Agency.


Please find related posts published by Intersectionality Network below.
A lot of research has engaged with the connections of race and social class, race and disability, or gender and race. However, very little is known about the lived experiences of disabled women of colour in Higher Education. Therefore, our research aims to gather an understand. Please check back later for updates.


text:
Q: C# coding style: comments Most C# style guides recommend against the /* ... */ commenting style, in favor of // or ///. Why is the former style to be avoided?

A: One thing that /* */ can do that // can't is to comment an interior portion of a line. I'll sometimes use this to comment a parameter to a method where something isn't obvious:
        point = ConvertFromLatLon(lat, lon, 0.0 /* height */ ) ;

In this case the constant, 0.0, being passed as the third parameter is representing height.
Of course this might be better:
        double height = 0.0;
        point = ConvertFromLatLon(lat, lon, height) ;

(I'm more likely to use the /* */ intra-line temporarily, to just try out passing a specific value.)

A: There are a few reasons to prefer // to /*.. */.

*

*As JaredPar mentioned, there are weird comment-nesting issues that can crop up with /* */ usage.

*If you ever write/wrote some code that processes source code files, you'll be really happy if the // method is all that you have to deal with.

*It is far easier to visually detect a large block of commented code with the "//" method, particularly if syntax coloring is unavailable.  In fact, you'll often see the individual lines in a /* */ block prefixed with a *, just to be safe.

*The XML commenting style that can be used to produce code documentation requires "///" to be used.

A: One example that comes to mind is that it's possible to accidentally interrupt a /* style comment.  For example
/* This is the start of a comment that documents the
   behavior of the +-*/ operators in our program
*/

This code does not compile, while the // variant would.  Also the /// represents a specific style of documentation to which external tools respond differently.

A: /* */ is fine for multi-line code blocks. For instance at the top of a code file, copyright info etc.
// is easier for single line.
Always use /// for at least all public members in a class as your XML documentation gets generated from that from which you can create help files.

A: I wouldn't say I have a strong view against either - but IMO the biggest issue is that /* and */ get messy if you have it nested, with the side effect that you can't copy/paste blocks around safely (quite).
You can too-easily end up with the wrong code commented/enabled, or can end up with it not compiling because you've ended up with a /* /* */ */.
If you copy a block of // around, no harm - just those lines remain commented.

A: I think you comment as you want since most of us are commenting via shortcuts in Visual Studio.
I use ctr+K, ctrl+C all selected rows are comented and ctr+K ctrl+U to uncomment selected rows.

A: My opinion is that "//" is just easier to type in than /**/

A: I think /* */ will eventually go the way of the Dodo because in Visual Studio you can just select a block of code and hit CTRL-E,C to comment it out using the // style.

A: I always use // for actual COMMENTS, while I save the /* */ for code I temporarily do not want to run for debugging/development purposes.
By using only //, then you can be sure you can comment out a large block of lines/methods etc without nesting comments and making your compiler cry.

A: My guess is because one requires explicit syntax on EACH line and one creates comments that can comment out large sections of code if the closing */ is not used. It's just not as safe.

redpajama_set_name: RedPajamaStackExchange


text:
Ipswich Buses Industrial Action
It was announced yesterday that Ipswich Buses drivers are to stage a one day strike this coming Monday, 10th October. The reason cited is wages for new drivers, which is some 25% lower than that of established drivers. However I have been aware for sometime of unrest at Ipswich Buses and I'm sad but not surprised that relationships between management and unions have reached this low point.
However some of the figures are quite startling. According to the Ipswich Star two thirds of drivers have accepted an offer of £11.00 an hour, but it is the new driver rate of £8.66 which is the main bone of contention. The company has offered £8.81 an hour but the union wants £10ph.
Now it must be said that I would want a pretty high hourly rate to be persuaded to drive around Ipswich day in day out. But it's also worth comparing the rate Ipswich Buses drivers get compared to other operators. Rates around the region vary, I'm not going to name operators but I know of rates of £9ph, £10ph, £10.50ph, even an exceptionally low £8.08ph. I'm reliably informed that down in Kent the big operators pay between £10 - £11ph (I was on £3.31ph in 1987) and even in London where everything is so much more expensive and pressurised you'll be lucky to get £14ph. One Commercial Director I spoke to this afternoon confirmed it's fairly standard practice for new drivers to be on a lower rate for the first year or so. I couldn't be more against that practice. It should never be forgotten that bus drivers carry the most precious cargo there is - us! Our children, parents, grandmas, friends, spouses all entrust their lives to the skilled chaps and chapesses behind the wheel and the responsibility of that cargo doesn't change regardless of how long a driver has been on the company. Ironic that HGV drivers get considerably more than bus drivers yet who has the more valuable cargo?
Considering that the starter rate on Ipswich Buses is higher than some operators pay their established staff, and their enhanced rate is the highest in the region I can discover, then I am more and more convinced this dispute is about far more than just money. Having said that Ipswich Buses, like Hedingham are cancelling services on a daily basis due to "driver shortages".A starter rate that far below the enhanced rate isn't going to do much to attract new drivers to the firm.
I would suggest that something has to be done to settle this dispute and quick. Unions are flexing muscles at the moment in many areas and we don't want this dispute to become another Southern Trains dispute, which is now so far down the line (sorry couldn't resist that) neither side can afford to give in now without losing a whole lot of credibility.
Ipswich Buses say they will run a skeleton service on Monday but cannot guarantee any one service. If there are any further developments I will of course publish them here, but keep an eye on Twitter as I will also retweet anything coming out of Ipswich Buses - which has been strangely quiet on the subject thus far. Follow me @busandtrainpage
Sanders pay near enough the living wage - konect paid well when I was there (pre 2010), not sure if this changed when go ahead took over? Are they still the highest paid bus drivers in Norwich?
Steve W 5 October 2016 at 18:03
Don't think so. To the best of my knowledge Konect pay £10ph and First Norwich pay £10.45ph.
Trevor A 5 October 2016 at 17:50
I follow IB on twitter and to be honest,it has been very quiet for nearly 2 weeks.They don't seem to be answering tweets at the moment either,which is unusual because they are normally pretty reliable at getting back to people.
Currently what they are expecting to run on Monday should the strike go ahead
Ipswich Buses Emergency timetable on Monday 10th October
No buses will run on routes X1, 4, 11B, 12, 14, 16, 17, 19, 38, or 202.
A normal timetable will apply on schoolday routes 11A, 18A, 501, 502, 914, 988 and all Carter's Coaches routes (92-96 etc). A slightly altered timetable will apply on route 98/98A.
Park and Ride will operate approximately every 30 minutes. We intend to provide buses on routes X3, X5, 6, 6A, 8, 9, 10, 13, 15 and 15A. In some cases we hope to provide buses every 30 minutes between 0700 and 1900, but we may in fact have to run only once per hour if none of our drivers attend for work. The emergency timetable will be available on our website shortly.
There will be no departures from Tower Ramparts after 1900. We will use double-decker buses on all passable routes so that we can move as many people as possible.
There will be a standard fare of £1 for all journeys - passes will be valid as usual.
We understand that Suffolk County Council is endeavouring to make alternative arrangements for rural school contracts and subsidised rural services which are not mentioned in the notes above and which we normally provide for SCC.
Andrew Kleissner 5 October 2016 at 23:14
Interim emergency timetable now available on: http://www.ipswichbuses.co.uk/assets/timetables/10thoctobertimetable.pdf.
The strike has been called off!
Anglian website
"Fares RevisionThe planned fares revision on Monday 10th October 2016 has been postponed to Sunday 23rd October 2016. Most fares will increase to reflect increased operating costs."
They kept that one quiet...but inevitable...!
smurfuk 8 October 2016 at 15:46
I thought the dispute would be settled. Most are; industrial action rarely benefits anyone, and from what I can see in recent history the Eastern region has been pretty sensible.
It doesn't sort the basic problem of getting a quart from a pint pot. Operators have to try and balance fairness to the operational staff (who are not just drivers), service quality, fares and state of the fleet. They get the balance different, but there is no optimum. Often they end up robbing Peter to pay Paul.
Seeing it from the passenger point of view is hard. Which passengers, for a start? I think enthusiasts are a mixed blessing, they are atypical for a start. Normal people don't understand and aren't fascinated by the intricacies of the industry. Why should they be? But like the old British car industry, if it leaves them longer by the roadside than on the road, it's not an industry which is going to survive. It's day to day experience that counts, not so much the PR. But a bit of amusement never goes amiss, even if some of us are not amused. Is the operator that admits to problems better or worse than the one that doesn't? I think I know my answer and it's probably different from the rest of you.
So I think the industry doesn't help itself by too often presenting itself as something for the cognoscenti; and the rest of us don't help by our addiction (I use the word deliberately) to the car which makes running a bus service the nearly-impossible job. The operators just don't need to make it even harder for themselves, if possible.
As a driver myself strikes benefit no one.I like the Stagecoach way of dealing with strikes bring in drivers from all over the country.I remember one depot going on strike last year .A bus load of us turned up in a coach to route learn a week before.The strike was called off.
A Day Of Two Halves - Second Half
A Day Of Two Halves - First Half
Scania E400 MMC's & Gas Bus Taster
A Fugly Bus Demo & Gas Buses complete Journey
Rubber Duck We Have A Convoy
A Few Hours In Peterborough Part 2
Last Week of Gas Buses
Not Another Test Train!
Not So Bootiful Now Maybe
Credit Where It's Due


text:
import { BrowserWindow } from 'electron';
import { LastFmNode } from 'lastfm';
import path from 'path';

import { LASTFM_API_KEY, LASTFM_API_SECRET } from '../../../constants';

const lastfm = new LastFmNode({
  api_key: LASTFM_API_KEY,
  secret: LASTFM_API_SECRET,
  useragent: 'GPMDP',
});

const getLastFMToken = () =>
  new Promise((resolve, reject) => {
    lastfm.request('auth.getToken')
      .on('success', (json) => {
        resolve(json.token);
      })
      .on('error', () => {
        reject();
      });
  });

const authLastFMToken = (token) =>
  new Promise((resolve, reject) => {
    const authWindow = new BrowserWindow({
      width: 1280,
      height: 720,
      center: true,
      show: false,
      autoHideMenuBar: true,
      frame: Settings.get('nativeFrame'),
      icon: path.resolve(`${__dirname}/../../../../assets/img/main.${(process.platform === 'win32' ? 'ico' : 'png')}`), // eslint-disable-line
      title: 'Last.FM',
      webPreferences: {
        nodeIntegration: false,
        preload: path.resolve(`${__dirname}/../../../../renderer/lastFM.js`),
      },
    });
    authWindow.setMenu(null);
    authWindow.loadURL(`http://www.last.fm/api/auth/?api_key=${LASTFM_API_KEY}&token=${token}`);
    Emitter.once('lastfm:auth_result', (event, accepted) => {
      if (accepted.result) {
        resolve(token);
      } else {
        reject();
      }
    });
  });

export const getLastFMSession = () =>
  new Promise((resolve, reject) => {
    if (global.lastFMSession && Settings.get('lastFMKey')) {
      resolve(global.lastFMSession);
    } else if (Settings.get('lastFMKey')) {
      global.lastFMSession = lastfm.session({
        key: Settings.get('lastFMKey'),
        user: Settings.get('lastFMUser'),
      });
      resolve(global.lastFMSession);
    } else {
      getLastFMToken()
        .then((token) => authLastFMToken(token))
        .then((token) => {
          lastfm.session({
            token,
          })
            .on('success', (session) => {
              global.lastFMSession = session;
              Settings.set('lastFMKey', session.key);
              Settings.set('lastFMUser', session.user);
              resolve(session);
            })
            .on('error', reject);
        })
        .catch(reject);
    }
  });

// const resetLastFM = () => {
//   Settings.set('lastFMKey', null);
//   Settings.set('lastFMUser', null);
//   delete global.lastFMSession;
//   getLastFMSession();
// };

Emitter.on('lastfm:auth', () => {
  getLastFMSession()
    .then(() => {
      Emitter.sendToAll('lastfm:authcomplete', { result: true });
    })
    .catch(() => {
      Emitter.sendToAll('lastfm:authcomplete', { result: false });
    });
});

const updateNowPlaying = (track) => {
  if (Settings.get('lastFMKey')) {
    getLastFMSession()
      .then((session) => {
        lastfm.update('nowplaying', session, {
          track: track.title,
          artist: track.artist,
          album: track.album,
          duration: track.duration,
        }).on('error', (err) => Logger.error('LASTFM ERROR', err));
      })
      .catch((err) => Logger.error('LASTFM ERROR', err));
  }
};

const updateScrobble = (track, timestamp) => {
  if (Settings.get('lastFMKey')) {
    Logger.debug('updateScrobble', track);
    getLastFMSession()
      .then((session) => {
        lastfm.update('scrobble', session, {
          track: track.title,
          artist: track.artist,
          album: track.album,
          duration: track.duration,
          timestamp,
        })
        .on('error', (err) => Logger.error('LASTFM ERROR', err))
        .on('success', (details) => Logger.debug('success', details))
        .on('retrying', (details) => Logger.debug('retrying', details));
      })
      .catch((err) => Logger.error('LASTFM ERROR', err));
  }
};

const fixTrack = (_track) => {
  const track = Object.assign({}, _track);
  if (track.album === 'Unknown Album') track.album = undefined;
  track.duration = Math.round(track.duration / 1000);
  return track;
};

export const scrobbleTrack = (_track, timestamp) => {
  const track = fixTrack(_track);
  if (track.duration < 30) return;
  updateScrobble(track, timestamp);
};

export const nowPlayingTrack = (track) => {
  updateNowPlaying(fixTrack(track));
};


text:
Workshop targeting technology transfers on recombinant veterinary vaccines development and production is underway in the National Veterinary Institute for three...
The food and agriculture organization (FAO) of the united nations and the European Union (EU) donate the first ever thermo-tolerant vaccine production technology ("Lyophiliser") to Ethiopia's National Veterinary Institute (NVI), the country's single vaccine producing organization based in Bishoftu town.
The National Veterinary Institute (NVI) in collaboration with the Joint FAO/IAEA Division of Nuclear Techniques in Food and Agriculture will...
The National veterinary Institute has won a gold medal award in the 6th National Science, Technology and Innovation competition. The...
The National veterinary Institute has pointing up on research works in the second Growth and Transformation Plan. Producing effective veterinary...
The National Veterinary Institute steps forward in processing animal medicines as striving to realize its mission. As government development organization,...
The National Veterinary Institute awarded a good manufacturing Practice (GMP) certificate by local regulatory authority. The institute has awarded the...
The National Veterinary Institute 2008 Fiscal Year Vaccine Products and Sales Performance
Total Vaccine Production The Institute has planned to produce 249.53 million dose varieties of bacterial and viral vaccines in the...


In 1885, Woods patented a apparatus which was a combination of a telephone and a telegraph. The device, which he called "telegraphony," would allow a telegraph station to send voice and telegraph messages over a single wire. The device was so successful that he later sold it to the American Bell Telephone Company. In 1887, Woods developed his most important invention to date – a device he called Synchronous Multiplex Railway Telegraph. A variation of the "induction telegraph," it allowed for messages to be sent from moving trains and railway stations. By allowing dispatchers to know the location of each train, it provided for greater safety and a decrease in railway accidents.
Granville Woods often had difficulties in enjoying his success as other inventors made claims to his devices. Thomas Edison made one of these claims, stating that he had first created a similar telegraph and that he was entitled to the patent for the device. Woods was twice successful in defending himself, proving that there were no other devices upon which he could have depended or relied upon to make his device. After the second defeat, Edison decided that it would be better to work with Granville Woods than against him and thus offered him a position with the Edison Company.
In 1892, Woods used his knowledge of electrical systems in creating a method of supplying electricity to a train without any exposed wires or secondary batteries. Approximately every 12 feet, electricity would be passed to the train as it passed over an iron block. He first demonstrated the device as an amusement apparatus at the Coney Island amusement park and while it amused patrons, it would be a novel approach towards making safer travel for trains.
Many of Woods inventions attempted to increase efficiency and safety railroad cars, Woods developed the concept of a third rail which would allow a train to receive more electricity while also encountering less friction. This concept is still used on subway train platforms in major cities in the United States.
Over the course of his life time Granville Woods would obtain more than 50 patents for inventions including an automatic brake and an egg incubator and for improvements to other inventions such as safety circuits, telegraph, telephone, and phonograph. When he died on January 30, 1910 in New York City he had become an admired and well respected inventor, having sold a number of his devices to such giants as Westinghouse, General Electric and American Engineering – more importantly the world knew him as the Black Thomas Edison.
Is there a museum dedicated to the life and inventions of Granville T. woods? If so, where is it found?
Thank you for any information that you can provide for me.
giant that should be well world known in any/all the world!
check your data file you will see that I did not make that comment!
I did not leave that comment before it is new check your files & tube I think u blew a fuse!
he was what they were not that is why he needs his own identication not as someone else name! great great he is!


Discover your opportunity to transform lives and change communities around the world.
A unique characteristic of International Needs Canada is our commitment to substantive, sustainable change. Each year we travel with men and women to various countries around the world establishing hope in communities devastated by poverty and injustice. You can participate by joining us, supporting and serving alongside teams of men and women from communities in need.