Q:

Android - How to limit activity instances to one per list item?

I have FooListActivity (one instance, showing a list of all the foos) and FooActivity (zero or one instance per foo).
FooActivities can be started from the FooListActivity, but also from a long-running service with no user intervention.
How can I make sure that, at most, one FooActivity exists per foo?
i.e. If I try to start a FooActivity for a foo which already has a FooActivity, it should bring the existing FooActivity to the front, rather than creating an unneeded instance.

A:

If I understand you correctly you do not want just a single instance of your activity (which you can control with android:launchMode="singleInstance"), but you want single instance per displayed content? If so, you will have to keep track of this yourself.
Also, I am not sure this is a good idea at all. While I can imagine some usage patterns for this on tablet (but then with Fragments, not Activities), then on phone user need to get back to list to see another data anyway (and if setting up FooActivity to display data is heavy, then you should perhaps think of some caching instead?


cell_type: code

source: # Copyright 2014 Brett Slatkin, Pearson Education Inc.

source: # Licensed under the Apache License, Version 2.0 (the "License");

source: # you may not use this file except in compliance with the License.

source: # You may obtain a copy of the License at

source: #     http://www.apache.org/licenses/LICENSE-2.0

source: # Unless required by applicable law or agreed to in writing, software

source: # distributed under the License is distributed on an "AS IS" BASIS,

source: # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

source: # See the License for the specific language governing permissions and

source: """Return True if the given word is a palindrome."""

stdout

text: 'Return True if the given word is a palindrome.'

text/plain: "Library for testing words for various linguistic patterns.\n\nTesting how words relate to each other can be tricky sometimes!\nThis module provides easy ways to determine when words you've\nfound have special properties.\n\nAvailable functions:\n- palindrome: Determine if a word is a palindrome.\n- check_anagram: Determine if two words are anagrams.\n...\n"

source: """Library for testing words for various linguistic patterns.

source: Testing how words relate to each other can be tricky sometimes!

source: This module provides easy ways to determine when words you've

source: - palindrome: Determine if a word is a palindrome.

source: - check_anagram: Determine if two words are anagrams.

source: Subclasses may override the 'tick' method to provide

source: custom animations for the player's movement depending

source: - power: Unused power-ups (float between 0 and 1).

source: - coins: Coins found during the level (integer).

source: This function only runs as fast as the test for

source: membership in the 'dictionary' container. It will

source: be slow if the dictionary is a list and fast if

source: dictionary: Container with all strings that

source: List of anagrams that were found. Empty if

source: permutations = itertools.permutations(word, len(word))

source: possible = (''.join(x) for x in permutations)

source: found = {word for word in possible if word in dictionary}

source: assert find_anagrams('pancakes', ['scanpeak']) == ['scanpeak']

display_name: Python 3

python

file_extension: .py

mimetype: text/x-python

nbconvert_exporter: python


I like flea markets and power tools, parties and pillows. I’m a mommy and a decorator, and a diehard DIYer. Join me and my little family as we renovate our new (old) home with lots of love and plenty of elbow grease.

Give Away: $100 in Fabric from L&S!

Do you have a big project coming up that needs a lot (or even a little) fabric? L&S Fabrics is having a huge sale that lasts through the end of the year. If you buy $250, you'll get 10% off your order. Spend $500 and get 15% off. $1000 gets you 20% off!

Also, L&S is giving away a $100 gift card here today! They have some really great new patterns to check out. Here are a few (or maybe a bunch!) of my new favorites:

What a nice company - so much in one place. Fabric, trim, furniture, and also rugs and furniture? Hard to decide on my favorite. I need new pillow covers on the couch, and chair seats redone - so many beautiful, bright fabrics!

Wow. The range of fabrics is awesome. I'm caught somewhre between bedroom curtains (a plain silk) and outdoor fabric for new cushions for a vintage set. I'll spend days picking the perfect thing. Thanks for the giveaway. Jo @ Let's Face the Music

There are soooo many wonderful options to choose from, but I think that the Mercury P6324 would go a long way towards brightening up my sad, tiny, dark, single-girl, grad-student apartment, maybe in the way of drapes? The geometric patterns are also pretty lovely...

My immediate favorite is Style Maye P6919. I have a tangerine/coral mid century sofa and I'd love to experiment with this fabric in my living room. I don't think I could ever look at that fabric and not get a little smile!

I am converting my daughter’s nursery into a big girl room, we moved when she was born so I didn’t get to put together the sophisticated room that would transition with her that I had wanted. I LOVE Sensations – the colors are amazing, I might even pair it with Just Buckhead in pink from the StaceAge line!!!

My husband and I have just bought our first house together and are planning a Scandinavian cabin feel-I'm imagining buffalo check curtains in the living area made with this fabric:http://lsfabrics.com/fabric/hl-brisbane


#include "StdInc.h"
#include <ConsoleHost.h>

#include <imgui.h>

#include <Streaming.h>

#include <grcTexture.h>
#include <CoreConsole.h>

#include <VFSManager.h>
#include <VFSWin32.h>

#include <wrl.h>
#include <wincodec.h>

using Microsoft::WRL::ComPtr;

#include <imguilistview.h>

class StreamingListView : public ImGui::ListViewBase
{
public:
	inline StreamingListView(streaming::Manager* streaming)
		: m_streaming(streaming)
	{
		m_indexMap.resize(streaming->numEntries);
	}

	inline void updateCount(const char* filterText, bool requested, bool loading, bool loaded)
	{
		m_indexMap.clear();

		for (int i = 0; i < m_streaming->numEntries; i++)
		{
			if (m_streaming->Entries[i].handle)
			{
				int state = m_streaming->Entries[i].flags & 3;

				if (!state ||
					(state == 1 && !loaded) ||
					(state == 2 && !requested) ||
					(state == 3 && !loading))
				{
					continue;
				}

				if (!filterText[0] || strstr(streaming::GetStreamingNameForIndex(i).c_str(), filterText) != nullptr)
				{
					m_indexMap.push_back(i);
				}
			}
		}
	}

	virtual size_t getNumColumns() const override;
	virtual size_t getNumRows() const override;

	virtual void getHeaderData(size_t column, HeaderData& headerDataOut) const override;
	virtual void getCellData(size_t row, size_t column, CellData& cellDataOut) const override;

private:
	streaming::Manager* m_streaming;

	std::vector<size_t> m_indexMap;
};

// TODO: share this code somewhere
#pragma comment(lib, "windowscodecs.lib")

ComPtr<IWICImagingFactory> g_imagingFactory;

static rage::grcTexture* MakeIcon(const std::string& filename)
{
	if (!g_imagingFactory)
	{
		HRESULT hr = CoCreateInstance(CLSID_WICImagingFactory1, nullptr, CLSCTX_INPROC_SERVER, __uuidof(IWICImagingFactory), (void**)g_imagingFactory.GetAddressOf());
	}

	ComPtr<IWICBitmapDecoder> decoder;

	auto s = vfs::OpenRead(filename);

	if (!s.GetRef())
	{
		return nullptr;
	}

	ComPtr<IStream> stream = vfs::CreateComStream(s);

	HRESULT hr = g_imagingFactory->CreateDecoderFromStream(stream.Get(), nullptr, WICDecodeMetadataCacheOnDemand, decoder.GetAddressOf());

	if (SUCCEEDED(hr))
	{
		ComPtr<IWICBitmapFrameDecode> frame;

		hr = decoder->GetFrame(0, frame.GetAddressOf());

		if (SUCCEEDED(hr))
		{
			ComPtr<IWICBitmapSource> source;
			ComPtr<IWICBitmapSource> convertedSource;

			UINT width = 0, height = 0;

			frame->GetSize(&width, &height);

			// try to convert to a pixel format we like
			frame.As(&source);

			hr = WICConvertBitmapSource(GUID_WICPixelFormat32bppBGRA, source.Get(), convertedSource.GetAddressOf());

			if (SUCCEEDED(hr))
			{
				source = convertedSource;
			}

			// create a pixel data buffer
			uint32_t* pixelData = new uint32_t[width * height];

			hr = source->CopyPixels(nullptr, width * 4, width * height * 4, reinterpret_cast<BYTE*>(pixelData));

			if (SUCCEEDED(hr))
			{
				rage::grcTextureReference reference;
				memset(&reference, 0, sizeof(reference));
				reference.width = width;
				reference.height = height;
				reference.depth = 1;
				reference.stride = width * 4;
				reference.format = 11; // should correspond to DXGI_FORMAT_B8G8R8A8_UNORM
				reference.pixelData = (uint8_t*)pixelData;

				return rage::grcTextureFactory::getInstance()->createImage(&reference, nullptr);
			}
		}
	}

	return nullptr;
}

static std::map<uint32_t, rage::grcTexture*> MakeIcons()
{
	return {
		{ HashString("rage::strPackfileStreamingModule"), MakeIcon("citizen:/resources/icons/rpf.png") },
		{ HashString("CCutsceneStore"), MakeIcon("citizen:/resources/icons/cube.png") },
		{ HashString("CScaleformStore"), MakeIcon("citizen:/resources/icons/gfx.png") },
		{ HashString("CPathFind"), MakeIcon("citizen:/resources/icons/node.png") },
		{ HashString("CWaypointRecordingStreamingInterface"), MakeIcon("citizen:/resources/icons/recording.png") },
		{ HashString("CVehicleRecordingStreamingModule"), MakeIcon("citizen:/resources/icons/recording.png") },
		{ HashString("rage::fwClipDictionaryStore"), MakeIcon("citizen:/resources/icons/animation.png") },
		{ HashString("rage::fwNetworkDefStore"), MakeIcon("citizen:/resources/icons/move.png") },
		{ HashString("rage::fwStaticBoundsStore"), MakeIcon("citizen:/resources/icons/bounds.png") },
		{ HashString("CStreamedScripts"), MakeIcon("citizen:/resources/icons/script.png") },
		{ HashString("rage::fwPoseMatcherStore"), MakeIcon("citizen:/resources/icons/pose.png") },
		{ HashString("rage::fwMetaDataStore"), MakeIcon("citizen:/resources/icons/xmlfile.png") },
		{ HashString("rage::fwMapDataStore"), MakeIcon("citizen:/resources/icons/instance.png") },
		{ HashString("rage::fwMapTypesStore"), MakeIcon("citizen:/resources/icons/class.png") },
		{ HashString("rage::fwTxdStore"), MakeIcon("citizen:/resources/icons/image.png") },
		{ HashString("rage::ptfxAssetStore"), MakeIcon("citizen:/resources/icons/effect.png") },
		{ HashString("rage::fwClothStore"), MakeIcon("citizen:/resources/icons/cloth.png") },
		{ HashString("rage::aiNavMeshStore"), MakeIcon("citizen:/resources/icons/navigationpath.png") },
		{ HashString("rage::fwDrawableStore"), MakeIcon("citizen:/resources/icons/cube.png") },
		{ HashString("rage::fwDwdStore"), MakeIcon("citizen:/resources/icons/dict.png") },
		{ HashString("rage::fwFragmentStore"), MakeIcon("citizen:/resources/icons/part.png") },
		{ HashString("CModelInfoStreamingModule"), MakeIcon("citizen:/resources/icons/modelthreed.png") },
	};
}

static std::map<uint32_t, ImGui::ListViewBase::CellData::IconData> MakeIconDatas(const std::map<uint32_t, rage::grcTexture*>& icons)
{
	std::map<uint32_t, ImGui::ListViewBase::CellData::IconData> ids;

	for (auto& [ key, tex ] : icons)
	{
		ids.emplace(key, ImGui::ListViewBase::CellData::IconData{ ImTextureID{ tex }, ImVec2{ 0.0f, 0.0f }, ImVec2{ 1.0f, 1.0f }, ImVec4{ 0.0f, 0.0f, 0.0f, 0.0f } });
	}

	return ids;
}

void StreamingListView::getCellData(size_t row, size_t column, CellData& cellDataOut) const
{
	// ok, got i
	auto num = m_indexMap[row];

	auto& entry = m_streaming->Entries[num];
	auto strModule = m_streaming->moduleMgr.GetStreamingModule(num);
	auto relativeIndex = (num - strModule->baseIdx);

	static std::map<uint32_t, rage::grcTexture*> icons = MakeIcons();
	static std::map<uint32_t, CellData::IconData> iconDatas = MakeIconDatas(icons);

	switch (column)
	{
	case 0:
	{
		cellDataOut.fieldPtr = &iconDatas[HashString(&typeid(*strModule).name()[6])];

		break;
	}
	case 1:
	{
		// icon
		// ^ not yet

		auto type = std::string(typeid(*strModule).name());

		cellDataOut.customText = va("%s", type.substr(6));
		break;
	}
	case 2:
	{
		const auto& entryName = streaming::GetStreamingNameForIndex(num);

		cellDataOut.customText = entryName.c_str();
		break;
	}
	case 3:
		cellDataOut.fieldPtr = &entry.flags;
		break;
	case 4:
	{
		static int refCount;
		refCount = strModule->GetNumRefs(relativeIndex);

		cellDataOut.fieldPtr = &refCount;
	}
	}

	static bool dummy;
	cellDataOut.selectedRowPtr = &dummy;
}

void StreamingListView::getHeaderData(size_t column, HeaderData& headerDataOut) const
{
	headerDataOut.editing.editable = false;

	switch (column)
	{
	case 0:
		headerDataOut.sorting.sortable = false;
		headerDataOut.name = "";
		headerDataOut.type.headerType = ImGui::ListViewBase::HT_ICON;
		headerDataOut.formatting.columnWidth = 36;
		break;
	case 1:
		headerDataOut.sorting.sortable = false;
		headerDataOut.name = "Type";
		headerDataOut.type.headerType = ImGui::ListViewBase::HT_CUSTOM;
		break;
	case 2:
		headerDataOut.sorting.sortable = false;
		headerDataOut.name = "Name";
		headerDataOut.type.headerType = ImGui::ListViewBase::HT_CUSTOM;
		break;
	case 3:
		headerDataOut.sorting.sortable = false;
		headerDataOut.name = "State";
		headerDataOut.type.headerType = ImGui::ListViewBase::HT_ENUM;
		headerDataOut.type.textFromEnumFunctionPointer = [](void*, int type, const char** out)
		{
			switch (type & 3)
			{
			case 0:
				*out = "UNLOADED";
				return true;
			case 1:
				*out = "LOADED";
				return true;
			case 2:
				*out = "REQUESTED";
				return true;
			case 3:
				*out = "LOADING";
				return true;
			}

			return false;
		};
		headerDataOut.formatting.columnWidth = 200;
		break;
	case 4:
		headerDataOut.sorting.sortable = false;
		headerDataOut.name = "Refs";
		headerDataOut.type.headerType = ImGui::ListViewBase::HT_INT;
		headerDataOut.formatting.columnWidth = 64;
		break;
	}
}

size_t StreamingListView::getNumColumns() const
{
	return 5;
}

size_t StreamingListView::getNumRows() const
{
	return m_indexMap.size();
}

size_t CountDependencyMemory(streaming::Manager* streaming, uint32_t strIdx)
{
	auto thisModule = streaming->moduleMgr.GetStreamingModule(strIdx);

	size_t memory = streaming->Entries[strIdx].ComputeVirtualSize(strIdx, nullptr, 0);

	uint32_t depList[32];
	int numDeps = thisModule->GetDependencies(strIdx - thisModule->baseIdx, depList, sizeof(depList) / sizeof(*depList));

	for (int dep = 0; dep < numDeps; dep++)
	{
		memory += CountDependencyMemory(streaming, depList[dep]);
	}

	return memory;
}

static InitFunction initFunction([]()
{
	static bool streamingDebugEnabled;
	static bool streamingListEnabled;
	static bool streamingMemoryEnabled;

	static ConVar<bool> streamingDebugVar("strdbg", ConVar_Archive, false, &streamingDebugEnabled);
	static ConVar<bool> streamingListVar("strlist", ConVar_Archive, false, &streamingListEnabled);
	static ConVar<bool> streamingMemoryVar("strmem", ConVar_Archive, false, &streamingMemoryEnabled);

	ConHost::OnShouldDrawGui.Connect([](bool* should)
	{
		*should = *should || streamingDebugEnabled || streamingListEnabled || streamingMemoryEnabled;
	});

	ConHost::OnDrawGui.Connect([]()
	{
		if (!streamingMemoryEnabled)
		{
			return;
		}

		static bool streamingMemoryOpen;

		auto streaming = streaming::Manager::GetInstance();
		auto streamingAllocator = rage::strStreamingAllocator::GetInstance();

		ImGui::SetNextWindowSize(ImVec2(500.0f, 300.0f), ImGuiCond_FirstUseEver);

		struct StreamingMemoryInfo : ImGui::ListView::ItemBase
		{
			uint32_t idx;
			size_t physicalMemory;
			size_t virtualMemory;

			virtual const char* getCustomText(size_t column) const
			{
				switch (column)
				{
				case 0:
					return streaming::GetStreamingNameForIndex(idx).c_str();
				case 1:
					return va("%.2f MiB", virtualMemory / 1024.0 / 1024.0);
				case 2:
					return va("%.2f MiB", physicalMemory / 1024.0 / 1024.0);
				}
			}

			virtual const void* getDataPtr(size_t column) const
			{
				switch (column)
				{
				case 0:
					return &idx;
				case 1:
					return &virtualMemory;
				case 2:
					return &physicalMemory;
				}
			}
		};

		auto avMem = 0x40000000;//streamingAllocator->GetMemoryAvailable()

		if (ImGui::Begin("Streaming Memory", &streamingMemoryOpen))
		{
			static std::vector<StreamingMemoryInfo> entryList(streaming->numEntries);
			entryList.resize(streaming->numEntries);

			int entryIdx = 0;
			size_t lockedMem = 0;
			size_t flag10Mem = 0;
			size_t usedMem = 0;
			size_t usedPhys = 0;

			for (int i = 0; i < streaming->numEntries; i++)
			{
				auto& entry = streaming->Entries[i];

				if ((entry.flags & 3) == 1) // loaded
				{
					StreamingMemoryInfo info;
					info.idx = i;
					info.virtualMemory = entry.ComputeVirtualSize(i, nullptr, false);
					info.physicalMemory = entry.ComputePhysicalSize(i);

					if (entryIdx < entryList.size())
					{
						entryList[entryIdx] = info;

						entryIdx++;
					}

					if (!streaming->IsObjectReadyToDelete(i, 0xF1 | 8))
					{
						lockedMem += info.virtualMemory;
					}

					if ((entry.flags >> 16) & 0x10)
					{
						flag10Mem += info.virtualMemory;

						flag10Mem += CountDependencyMemory(streaming, i);
						// wrong way around
						/*atArray<uint32_t> depArray;
						streaming->FindAllDependents(depArray, i);

						for (uint32_t dependent : depArray)
						{
							flag10Mem += streaming->Entries[dependent].ComputeVirtualSize(dependent, nullptr, false);
						}*/
					}

					usedMem += info.virtualMemory;
					usedPhys += info.physicalMemory;
				}
			}

			ImGui::Text("Virtual memory: %.2f MiB",
				usedMem / 1024.0 / 1024.0);

			ImGui::Text("Locked virtual memory: %.2f MiB (%d%%)",
				lockedMem / 1024.0 / 1024.0,
				int((lockedMem / (double)usedMem) * 100.0));

			ImGui::Text("Script virtual memory: %.2f MiB (%d%%)",
				flag10Mem / 1024.0 / 1024.0,
				int((flag10Mem / (double)usedMem) * 100.0));

			ImGui::Text("Physical memory: %.2f MiB", usedPhys / 1024.0 / 1024.0);

			static ImGui::ListView lv;

			if (lv.headers.empty())
			{
				lv.headers.push_back(ImGui::ListView::Header{ "Name", "", ImGui::ListViewBase::HT_CUSTOM, 0, 16.0f });
				lv.headers.push_back(ImGui::ListView::Header{ "Virt", "", ImGui::ListViewBase::HT_CUSTOM, 0, 16.0f });
				lv.headers.push_back(ImGui::ListView::Header{ "Phys", "", ImGui::ListViewBase::HT_CUSTOM, 0, 16.0f });
			}

			lv.items.clear();

			for (int i = 0; i < entryIdx; i++)
			{
				lv.items.push_back(&entryList[i]);
			}

			std::sort(lv.items.begin(), lv.items.end(), [](const ImGui::ListView::ItemBase* leftPtr, const ImGui::ListView::ItemBase* rightPtr)
			{
				auto& left = *(const StreamingMemoryInfo*)leftPtr;
				auto& right = *(const StreamingMemoryInfo*)rightPtr;

				return (left.physicalMemory + left.virtualMemory) > (right.physicalMemory + right.virtualMemory);
			});

			lv.render();
		}

		ImGui::End();
	});

	ConHost::OnDrawGui.Connect([]()
	{
		if (!streamingListEnabled)
		{
			return;
		}

		static bool streamingStatsOpen;

		auto streaming = streaming::Manager::GetInstance();

		ImGui::SetNextWindowSize(ImVec2(500.0f, 300.0f), ImGuiCond_FirstUseEver);

		if (ImGui::Begin("Streaming List", &streamingStatsOpen))
		{
			static StreamingListView lv(streaming);

			static uint32_t lastTime;

			static char filterText[512];
			static char lastFilterText[512];
			static bool loading = true;
			static bool lastLoading;
			static bool loaded = true;
			static bool lastLoaded;
			static bool requested = true;
			static bool lastRequested;

			ImGui::InputText("Filter", filterText, sizeof(filterText));
			ImGui::SameLine();
			ImGui::Checkbox("Req'd", &requested);
			ImGui::SameLine();
			ImGui::Checkbox("Loading", &loading);
			ImGui::SameLine();
			ImGui::Checkbox("Loaded", &loaded);

			ImGui::BeginChild("InnerRegion");
			if ((GetTickCount() - lastTime) > 1500 || strcmp(filterText, lastFilterText) != 0 ||
				requested != lastRequested || loaded != lastLoaded || loading != lastLoading)
			{
				lv.updateCount(filterText, requested, loading, loaded);
				memcpy(lastFilterText, filterText, sizeof(filterText));
				lastRequested = requested;
				lastLoaded = loaded;
				lastLoading = loading;

				lastTime = GetTickCount();
			}

			lv.render();

			ImGui::EndChild();
		}

		ImGui::End();
	});

	ConHost::OnDrawGui.Connect([]()
	{
		if (!streamingDebugEnabled)
		{
			return;
		}

		static bool streamingStatsOpen;

		auto streaming = streaming::Manager::GetInstance();

		if (ImGui::Begin("Streaming Stats", &streamingStatsOpen))
		{
			ImGui::Text("Pending requests: %d", streaming->NumPendingRequests);

			ImGui::Text("Pending prio requests: %d", streaming->NumPendingRequestsPrio);

			ImGui::Text("Pending resource requests: %d", streaming->NumPendingRequests3);

			std::vector<uint32_t> ifrs;
			int ifr = 0;

			auto es = streaming->Entries;

			if (es)
			{
				for (int i = 0; i < streaming->numEntries; i++)
				{
					auto& entry = es[i];

					if ((entry.flags & 3) == 3) // loading
					{
						ifrs.push_back(i);
						ifr++;
					}
				}
			}

			ImGui::Text("In-Flight Requests: %d", ifr);

			auto push = [streaming](uint32_t idx)
			{
				auto entryName = streaming::GetStreamingNameForIndex(idx);
				auto data = &streaming->Entries[idx];

				// try getting streaming data
				StreamingPackfileEntry* spf = streaming::GetStreamingPackfileForEntry(data);

				if (spf)
				{
					if (entryName.empty() && spf->packfile)
					{
						rage::fiCollection* collection = (rage::fiCollection*)spf->packfile;

						char nameBuffer[256] = { 0 };
						collection->GetEntryNameToBuffer(data->handle & 0xFFFF, nameBuffer, 255);

						entryName = nameBuffer;
					}

					if (!entryName.empty())
					{
						// is this a networked packfile?
						if (!spf->isHdd)
						{
							entryName += " [NET]";
						}

						// is this a known packfile?
						if (spf->packfile)
						{
							const char* name = spf->packfile->GetName();

							// strip from any / at the end
							const char* lastChar = strrchr(name, '/');

							if (lastChar)
							{
								name = lastChar + 1;
							}

							entryName += std::string(" (") + name + ")";
						}
					}
				}

				if (!entryName.empty())
				{
					// replace .y* with .#*
					auto yPos = entryName.find(".y");

					if (yPos != std::string::npos)
					{
						entryName = entryName.substr(0, yPos) + ".#" + entryName.substr(yPos + 2);
					}

					// add to imgui
					ImGui::Selectable(entryName.c_str());
				}
			};

			if (ImGui::CollapsingHeader("IFRs"))
			{
				for (uint32_t entry : ifrs)
				{
					push(entry);
				}
			}

			if (ImGui::CollapsingHeader("Request list"))
			{
				for (const auto* entry = streaming->RequestListHead; entry; entry = entry->Next)
				{
					push(entry->Index);
				}
			}
		}

		ImGui::End();
	});
});


Background {#s1}
==========

Coeliac disease is a genetically determined chronic inflammatory disease of the small intestine where symptoms are induced by the environmental precipitant gluten. It affects approximately 1% of the population though a significant number remain undiagnosed (Lebwohl *et al.*, [@ref9]). Coeliac disease is also associated with a number of extraintestinal symptoms, one of which being functional hyposplenism or splenic atrophy. The prevalence of hyposplenism in patients with coeliac disease is not well known with different investigators reporting an incidence of 21% to 60% (Halfdanarson *et al.*, [@ref5]). It appears to be more common when coeliac disease coexists with other autoimmune conditions such as insulin-dependent diabetes mellitus and when there has been prolonged exposure to gluten. It is far less common in children (Corazza *et al.*, [@ref1]; Di Sabatino *et al.*, [@ref4]).

Functional hyposplenism is characterised by defective immune responses against infectious agents, particularly encapsulated organisms. This is because the spleen is crucial for the maturation and maintenance in the circulation of IgM memory B-lymphocytes. Encapsulated organisms are able to initially evade immunity mediated through T-lymphocytes and complement as their polysaccharide capsule hides the protein components of the cell membrane that would trigger their response. Thus, the elements of humoral immunity produced by the spleen are indispensable against these organisms. The spleen also produces opsonins which when attached to a microorganism will enhance phagocytosis by macrophages (Kirkineska *et al.*, [@ref7]).

As well as an increased incidence of infections caused by encapsulated organisms, these infections can also be life-threatening and result in overwhelming post-splenectomy infection (OPSI) syndrome which is a septic syndrome characterised by a massive bacteraemia, no obvious primary source of infection, septic shock and disseminated intravascular coagulopathy. Studies have shown a relationship between coeliac disease and increased incidence of invasive pneumococcal disease (Röckert Tjernberg *et al.*, [@ref10]); there have also been cases of fatal infections due to coeliac disease-associated hyposplenism (Simons *et al.*, [@ref13]). Zingone *et al.* ([@ref14]) concluded in 2016 that unvaccinated patients with coeliac disease under the age of 65 had an increased risk of community-acquired pneumonia that was not found in vaccinated patients. They suggested that the low vaccination uptake in coeliac patients was a missed opportunity to protect patients from pneumonia. The commonest organisms associated with severe infection were pneumococcus (Streptococcus pneumoniae), Haemophilus influenzae type b and Neisseria meningitidis.

The Green Book detailing information on immunisations states that in the presence of a dysfunctional spleen, alongside the national schedule, these patients should be offered a vaccination against pneumococcal infection and an annual influenza vaccine due to the zrisk of secondary bacterial infection. It also recommends vaccination against haemophilus influenzae type b and against meningococcal types A, C, W, Y and B. There is currently limited literature on uptake of these vaccinations in the coeliac disease population. The aim of this audit was to initially establish the uptake of the above vaccinations within a single UK practice and then assess whether the use of a single invitation letter resulted in an increase in the vaccine uptake and thus number of patients up to date with vaccinations.

Methods {#s2}
=======

Electronic patient records at a single merged UK general practice with a registered population of 25 859 were searched retrospectively using a single eligibility criterion of whether patients had a formal diagnosis of coeliac disease. Fifty-four (0.2%) patients were identified. Each patient's immunisation history was then searched on 23 October 2017 to establish if they adhered to the following seven binary data points: pneumococcal vaccine (PPV23) in the last five years, influenza vaccine in the last year, haemophilus influenzae type b vaccine ever, meningococcal C vaccine ever, meningococcal groups A, C, W, Y vaccine ever (MenACWY), meningococcal group B vaccine (MenB) and a meningococcal group B booster dose one month after the first dose.

These specific immunisations are recommended in chapter 7 of the Green Book (Department of Health, [@ref3]) which was last updated on 29 September 2016. They are intended for individuals with asplenia, splenic dysfunction or complement disorders. Since over 30% of adults with coeliac disease are thought to have defective splenic function (Corazza *et al.*, [@ref2]), these patients are offered these vaccines routinely at the practice.

After establishing the number of patients that were due vaccinations and the specific types that they required, an invitation letter (Figure [1](#f1){ref-type="fig"}) was then sent to all patients who were not up to date with vaccines (54 patients) in November 2017. This coincides with the beginning of the UK flu season (December--March).

Figure 1.Picture of invitation letter sent to patients.

Data were then collected again on 27 March 2018 from patient records to ascertain the vaccination uptake in the cohort. This was then compared to the initial data to establish the effect of the invitation letter.

Results {#s3}
=======

In October 2017, 54 patients were identified with coeliac disease at the practice; the majority (*n* = 32, 59%) were female patients and the age distribution of the cohort was between 18 and 86 years, with the mean age of 53 years. Invitation letters offering an appointment were sent to all 54 patients identified, as all required at least one vaccination, with the average patient due 4.30 vaccinations. All patients were due MenB (*n* = 54), 57.4% due influenza, 48.1% due MenACWY, 59.3% due PPV, 35.2% due HiB and 33.3% due MenC (Table [1](#tbl1){ref-type="table"}). The total percentage vaccine uptake was 38.6%, as calculated by the formula: 1 -- \[total pending vaccines\]/\[total expected vaccines\].

Table 1.Vaccination status of coeliac disease patients in October 2017 and April 2018Vaccine recommended according to\
Green Book (Department of Health)Patients up to date with vaccine\
(*n* = 54), *n* (%) in October 2017Patients up to date with vaccine\
(*n* = 54), *n* (%) in April 2018Meningitis B2 (3.7)19 (35.2)Meningitis B 1/12 booster0 (0.0)11 (20.4)HiB35 (64.8)37 (68.5)Meningitis C36 (66.7)38 (70.4)Pneumococcal ever39 (72.2)40 (74.1)Pneumococcal up to date (five years)22 (40.7)19 (35.2)Men ACWY (MENVEO)28 (51.9)31 (57.4)Influenza ever35 (64.8)36 (66.7)Influenza up to date (one year)23 (42.6)31 (57.4)

By April 2018, of the 54 coeliac disease patients, 25 (45%) attended an appointment for the vaccine clinic following recommendation by letter. From this intervention, the total percentage uptake of vaccines across all patients increased from 38.6% to 49.2%. The post-intervention percentage coverage per vaccination were as follows: MenB with booster 20.4%, Influenza 57.4%, MenACWY 57.4%, PPV 35.2%, HiB 68.5%, MenC 70.4% (Table [1](#tbl1){ref-type="table"}). Furthermore, by April 2018, 14.8% (*n* = 8) patients were fully up to date with all their vaccinations related to management of their coeliac disease.

Discussion {#s4}
==========

The aim of this audit was to examine whether a single letter inviting patients with coeliac disease to book an appointment for vaccines was effective in increasing vaccine uptake. Our results show a 10.6% increase in total vaccine uptake five months after the letter was sent out. This indicates that patients did to a certain extent respond to the letter and that in this cohort it was an effective prompt to increase vaccine uptake. However, it was not completely successful as after the letters had been sent only 46% attended the surgery and thus a number of people had ignored the prompt. Additionally, only eight patients were fully up to date at the end of the study. This may be due to a large variation in public perception of vaccines and their necessity. In Europe, 82% of people declared a positive opinion on vaccinations; however, of this number 45% indicated the more reserved 'somewhat positive' stance (Schmitt *et al.*, [@ref12]). Coeliac patients who diligently avoid gluten remain well and while well, they may feel it unnecessary to receive extra vaccinations.

Another interesting finding was the differing uptakes of different vaccinations. The most marked rise in vaccine uptake was the meningitis B and the meningitis B one-month (1/12) booster. The meningococcal B (MenB) vaccination was only introduced into the UK national infant immunisation programme from 1 September 2015 where infants were offered a reduced two-dose primary immunisation at 2 and 4 months followed by a booster at 12 months (Ladhani *et al.*, [@ref8]). Thus, it is likely that a large proportion of our patients with coeliac disease whose age ranged from 18 to 86 years will have never come across this vaccine before. Another large increase in uptake was an up-to-date Influenza vaccination, with the proportion of patients who were up to date increasing from 42.6% to 57.4%. This increase in uptake could be partially attributed to media coverage and recent flu pandemic scares. All the other vaccinations experienced modest increases in uptake except for an up-to-date pneumococcal vaccine which actually experienced a decrease in the number of people up to date over the six months (40.7% to 35.2%). At the practice, there was a previous attempt to increase vaccine uptake nearly exactly five years ago, and so a disproportionate number of patients were due the five-year booster vaccine within our audit cycle. This could explain the measured decrease in patients being up to date with the pneumococcal vaccine.

The letter did seem to be at least partially effective as described above. This was, however, a small sample in a single practice and it is difficult to assess whether the audit reflects the wider population. A potential confounding factor is that this study was conducted during the UK flu season, which may itself alter the awareness of patients about flu vaccination and may independently increase vaccination rates, as well as affecting the responses to letter invitation. It may be useful to repeat this study away from the flu season to better single out the effects of the intervention.

There is limited data on the impact of letters inviting patients for vaccinations. However, letters have been shown to be effective in inviting patients to NHS health checks for cardiovascular risk assessment (Sallis *et al.*, [@ref11]) and inviting mental health patients for primary care physical health checks (Hardy and Gray, [@ref6]). Public Health England has produced an invitation letter template for the flu vaccine for at-risk patients and NICE guidelines encourage awareness of eligibility possibly through the use of letters. We live in an increasingly modern society where the primary means of contacting people is changing from letters to electronic methods of communication. The use of texts or emails to contact patients requiring vaccinations is another avenue which could be investigated. SystmOne has a feature to automatically text people which could be utilised, and this would be cost-effective and convenient for patients who could call to book an appointment on their phones.

Conclusion {#s5}
==========

Vaccines are an essential public health strategy to protect at-risk patients such as those with coeliac disease from serious consequences of infection by encapsulated organisms. We have shown that a simple intervention such as a single reminder letter can increase vaccine uptake in these patients.

We thank Dr J. Bisset for her general supervision and advice during this study.

Financial Support {#s6}
=================

This research received no specific grant from any funding agency, commercial or not-for-profit sectors.

Conflicts of Interest {#s7}
=====================

None.

Grants & Financial Interests Pertinent to the Paper {#s8}
===================================================

J Moneim, H Asad, E Butt, JS Foridi, Y Khan, S Patel, J Qureshi, R Thakar -- None declared.


The South African newspapers went ballistic in response to the 1st test victory. The AB team and NZ media followed the match reports in the English newspapers; as is to be to expected they were not overly ecstatic with the euphoric reactions but agreed in general with most of the post-mortem analyses. Gabriel David writes:

As can be imagined, the All Blacks scarcely enjoyed their Sunday morning reading as two DC3's carried the tourists to South Africa's famous Kruger Park. Coach Ivan Vodanovich was pensive in the back seat of one aircraft.

The Sunday Express exclaimed right across its pages - "GREAT, BOKS; YOU HAD US ALL Fooled!"

The Johannesburg Star splashed across its front page - "WONDER, THE SPRINGBOKS BEAT THE ALL BLACKS!" Inside the Star carried another bold headline "WHAT A DAY FOR SOUTH AFRICA'S MIGHTY MEN!"

Consensus was that the Springboks won the game in the first 11 minutes. The common theme of most reports was that defence and ability to capitalize on pressure induced mistakes were at least one of the reasons for the Springboks' success.

Various old Springboks and All Blacks made specific mention of the lacklustre performance of the All Black forwards. Wilf Rosenberg –Springbok centre of the 1956 team to New Zealand and rugby league player in the North of England for a number of years during which he seen the 1953/64 and 1967 All Blacks in England- could not believe the current All Black forwards belonged to the same family; “They simply wouldn’t compare”, he said.

Kelvin Kelleher –the Irish referee who send Colin Meads of the field at Murrayfield in 1967 was in South Africa at the time and watched the match- said the All Black forwards were “deplorable”: “I could not imagine that an All Black pack could play so badly” he said. He also made the observation that on occasion that All Black pack did play well there was clear signs of panic amongst the Springboks and he therefore believes that the All Blacks would win the remaining tests and the series.

The grapevine stories coming from the team had it that both Burk and Vodanovich had lashed out at the team in no uncertain terms demanding higher standards and improvements in code of conduct. Some bitterness boiled up and McCarthy a journalist for the New Zealand Truthsplashed a story that the All Blacks would have to play their “meanies” to win the second test.

The AB went to the Kruger Park for three days where they largely sought to put the first test behind them and to regroup for the rest of the tour. A report in the Rand Daily Mail which questioned Laidlaw's injury and went so far as saying it was faked in order to get him off the field left the All Black players and management moderately outraged and disgusted.

From Skukuza AB travelled per DC3 via Johannesburg and East London to Port Elizabeth for their next game against the EP. It was cold and wet in PE but spirits were high there was a positive atmosphere in the AB camp.

Eastern Province officials were quite confident that they were going to be the first provincial side to defeat the tourists but the All Blacks saw it was a chance to vindicate the debacle of the first test.

All Blacks 49 / Eastern Province 8

Eastern Province fielded a few Springboks including Hannes Marais the incumbent Springbok prop as Captain; Gawie Carelse a previous Springbok lock; S Cloete a previous Springbok tourist on hooker and Eben Olivier a previous Springbok centre in the backline.

Gabriel David’s account of this match can be summarized with these few paragraphs:

At the after-match function following the drubbing the All Blacks gave Eastern Province, the home captain and Springbok prop, Hannes Marais was not being altogether facetious when he said that the tourists played such magnificent rugby that quite often he stood still and enjoyed it.

The match produced the best rugby the All Blacks have played on this tour and some of the tries were exceptionally brilliant. Bryan Williams could well vie with Prime Minister Vorster as the best known personality in South Africa. This olive-skinned tornado on the All Black wing was the sensation of the match today. His two tries were masterpieces, incorporating speed, elusiveness and an incredible ability to deceive an opponent.

He continued and described both of Bryan Williams tries; solo efforts, created out of nothing with sheer individual brilliance.

Terry McLean provides the following sketch of Bryan Williams in the Eastern Province match:

And Williams –ah, what a man! When Laidlaw fielded a kick-out in the twenty-fourth minute, he passed to Williams 70 yards short of the Eastern Province goal line. With sidestep and speed, Williams beat Heunis and Adlam and sped to a try.

At the very end of the game, Williams, partly by his own fault, missed a pass from Davis. With his back turned, he accidentally kicked the ball with the back of his foot a yard or two up the field. When he turned and picked up the ball, he was 60 yards from goal, moving slowly, and cover-defenders were gathering like vultures.

By strength, sidestep and magical artifice, he beat five men, one after the other, who valiantly tried to tackle him. As he spun out of the last tackle, he had only 15 yards to go to the goal-line and by now Eastern Province were so completely flummoxed that he was able to walk there to score.

Surprisingly, McLean then goes on and state that the tries was not the most impressive part of Williams’s performance; the greatest part of his game was actually when he -on cover defence- tackled the fast and elusive ex-Springbok centre, Eben Olivier, preventing what looked like a certain try. An awe struck McLean goes into delightful patriotic approbation as he relates this incident:

Olivier was smart and fast and his second try of the match looked a stone-cold certainty. But all the way from the other wing, tearing along the goal-line, came Williams; and a yard short of the tryline Olivier was crashed down in a fabulous tackle. Williams –ah... Only the French have the words and gestures suitable to describe such a player.

Gabriel David also refers to Eben Olivier; the cover defence of Bryan Williams -when Olivier was about to score his second try- and the fact that Olivier had a reasonable solid game for EP against the All Blacks.

Eben Olivier

Eben Olivier at his best; known for his deceptive running. Notice how confused he has the French fullback on the photo.

16 Tests (1967-1969).

5 tries.

1.74 m; 77 kg.

Joined the 1965 tour to NZ as a replacement. Played in 4 tour matches during the 1965 tour; he did not score any tries.

Also went on the 69/70 end year tour during which he played in 12 matches, including the first two test matches (England and Scotland); he scored 4 tries in tour matches.

Terry McLean writes as follows about Eben Olivier:

...pronounced “Ohlerfeer”, was hoicked out of Stellenbosch to join the team as a late replacement (during the 1965 tour) and arrived in time only to play in four games. There were hopes that he might qualify for the final test (during the 1965 tour) and he had an earnest champion in Danie Craven when the latter arrived.

It was not his luck, however, to find the form which had all but put him into team at the South African trails until his last game, when his low-slung, scudding runs against the combined team at Rotorua revealed that he had an unusual capacity to run away from a tackle. Perhaps Olivier might have commended himself more, not least at the trials if he had not by nature, so unusually reserved and quiet. In a word, he was too solemn for his own good.

Alan Sutherland was included as lock but was placed in the lineouts on 6 with Lochore on 5 and this proved to be a huge success so much so that New Zealand dominated the lineouts despite EP having two excellent lock forwards namely Carelse an ex-Springbok lock and the very tall Rushmere. They (Lochore and Sutherland) dominated the lineouts winning the dual by 19-8. Sutherland also did his basic job as a lock very well namely staying in the rucks and scrums when pushing was required but still roamed effectively and powerfully in the open as well as doing the job of a no 6 flank in the lineouts namely protecting and supporting the leaper on 5. Laidlaw had a good game behind a forward pack that dominated in the scrums, lineouts and at the breakdowns.

The All Blacks scored 9 tries of which McCormick converted 5. Laidlaw was successful with a drop goal and McCormick added a further three penalties to NZ's total. Eben Olivier and Cloete (no 2) scored for EP, Adlam (no 15) converted the try.

The following paragraph by Gabriel David (Rugby and be damned) summarizes the Boland match:

The All Blacks had played some patternless and unauthoritative rugby to lead a weak Boland side by only 19 point to 9 with eight minutes to finish the match. Then all the formless play fell into a defined pattern and four tries exploded on the Wellington ground.

The AB again made many mistakes and there was no dominance and forward momentum at the break downs. It has also become clear that Kirton and Going did not combine well although both had good games as individuals. Going once again impressed with sharp and penetrating brakes from behind the scrum. Cottrell was average on inside centre (2nd five-eight) while Graeme Thorne was a success on the left wing. Sutherland had a good game as no 6 flank.

Terry Mclean provides a nice short and illustrative description of some of the All Black tries in his book "Battling the Boks":

Thorne ran in the last of his three tries by beating three men on his inside. Milner scored a try by looping the loop with Kirton. Dick did a crisscross with Cottrell and bounded to the goal-line. And in the last minute, after pretty nearly every man in the New Zealand team had picked up the ball and run somewhere with it, Thorne and Lochore figuring prominently, Kirton took it last of all and dashed over.

About Boland, Gabriel David, writes:

The Boland lads played above themselves, but the most of these underrated sides do, and the All Blacks had some anxious moments during the early stages of the match.

Van der Merwe, Du Toit and O’Kennedy were a troublesome front-row for the All Blacks while Jennings and Basson were quite an embarrassment in the loose.

The Boland backs lacked initiative and unorthodoxy with Niewoudt strong on attack but weak on defense and Dirk Visser quite impressive on fullback even if reluctant to tackle at times.

Mike Jennings

Mike Jennings here in his Springbok blazer never played in a test for South Africa.

He was a Springbok tourist during the 69/70 end year tour to Britain during which he played in 11 matches scoring 4 tries.

His father CB Jennings was a Springbok loose-head prop forward who played in 1937 in the first test against New Zealand.

Jennings was Captain of the Boland team who played against the 1970 All Blacks.

Terry McLean has this classic piece on the Boland team:

The All Blacks were often pushed about rather unmercifully by an excellent pack of forwards. O’Kennedy, reputedly the strongest front-row forward in South Africa, had a considerable reputation, but most of us liked the look of van der Merwe, a solid, hardworking man on the other side. Du Toit, like Cloete of Eastern Province was an excellent hooker.

Then there were the locks, Joubert and Louw. Here at last, in each, was the kind of South African forward we had been expecting in every match. The two packed under the pelvic bones of their props. They got down very low. Their backs were straight, their knees bent, their heads up.

As the ball entered the tunnel, their knees momentarily straightened and the scrum thrust sharply forward a few inches. It was classic scrummaging, not improved as to technique by any pack on tour.

As was the case in Kimberley and Port Elizabeth, the All Blacks was enthusiastically supported by the Coloured community in the Wellington and surrounding areas. Approximately 3000 of the 20 000 spectators were coloureds, according the Gabriel David and Terry McLean, and they shrieked with delight and pleasure when Sid Going - a Maori- scored a grand solo try against Boland.

Hennie Niewoudt has Kember in close grasp, Ferdus Erasmus stands by, and Thorne and Milner are in states of distress of their comrade brought to his knees.

Thorne scored three tries for the All Blacks while Going, Milner, Dick and Kirton also crossed the Boland goal line. Kember converted four of the 7 tries and added 2 more penalties. Dirk Visser (no 15) kicked three penalties for Boland.


<?xml version="1.0"?>
<settings>
    <mirrors>
        <mirror>
            <!--This is used to direct the public snapshots repo in the profile below over to a different nexus group -->
            <id>nexus-public-snapshots</id>
            <mirrorOf>public-snapshots</mirrorOf>
            <url>http://maven.oschina.net/content/groups/public/</url>
        </mirror>
        <mirror>
            <!--This sends everything else to /public -->
            <id>nexus</id>
            <mirrorOf>*</mirrorOf>
            <url>http://maven.oschina.net/content/groups/public/</url>
        </mirror>
    </mirrors>
    <servers>
        <server>
            <id>nexus-releases</id>
            <username>admin</username>
            <password>danexus</password>
        </server>
        <server>
            <id>nexus-snapshots</id>
            <username>admin</username>
            <password>danexus</password>
        </server>
    </servers>
    <profiles>
        <profile>
            <id>development</id>
            <repositories>
                <repository>
                    <id>central</id>
                    <url>http://central</url>
                    <releases>
                        <enabled>true</enabled>
                        <updatePolicy>never</updatePolicy>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                        <updatePolicy>never</updatePolicy>
                    </snapshots>
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <id>central</id>
                    <url>http://central</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </pluginRepository>
            </pluginRepositories>
        </profile>
        <profile>
            <!--this profile will allow snapshots to be searched when activated-->
            <id>public-snapshots</id>
            <repositories>
                <repository>
                    <id>public-snapshots</id>
                    <url>http://public-snapshots</url>
                    <releases>
                        <enabled>false</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <id>public-snapshots</id>
                    <url>http://public-snapshots</url>
                    <releases>
                        <enabled>false</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    </profiles>
    <activeProfiles>
        <activeProfile>development</activeProfile>
    </activeProfiles>
</settings>


JavaScript and JQuery

I believe many of you want to know the real differences between JavaScript and JQuery. You are noticing that both of these softwares start with J but besides that there are many other similarities which we are going to explore here. The fact is that many professional web developers as well as amateur one are interested in knowing these differences and similarities for better productivity and overall improvement.

I know that JavaScript and JQuery may confuse you and you might feel lost sometimes, but the fact is that these softwares are actually same thing. It may sound surprising that without JavaScript we wouldn’t have JQuery. JQuery is big part of the JavaScript containing JavaScript libraries. In fact JQuery is designed particulaly in order to make HTML documents easier for animation, Ajax interactions, traversing and event handling.

In this article it will be discussed about differences and similarities between JavaScript and JQuery and basic scripting languages. Before doing anything you need basic foundation when it comes to the web development using one of these scripting languages. If you have poor knowledge and you never get used to working with these scripting languages, I recommend you to read article JavaScript Made Easy. After reading this article you will know for sure which scripting language is right for you and will give you best performance in your future web development assignments.

What is JavaScript?

We should begin with explaining basics and features of JavaScript. As you may already know JavaScript is computer scripting language which is created for inteface interactions and slideshows inside your web browser. It mainly means it is used for slideshows which you can notice while searching through web sites. You noticed on the internet while watching slideshows images. These flashy moving images are in fact JavaScript scriptingin the background.

Besides doing interface interactions in the background, there are many other uses of JavaScript in the process of web development. Every Gmail user is familiar with the real power of JavaScript. The fact is that many popular features of Gmail and overall improvement of Google clients are designed with the powerful features of JavaScript. Besides being used in improvement of many web clients JavaScript is used for game development, designing desktop applications and server-side programs.

There is no surprise that JavaScript is powerful scripting language which is widely used in web development. The greatest advantage is that it is really easy to learn it’s fetaures and basics which makes this computer language perfect for beginners in web development. It is designed in order to be really readable and modifiable.

You may be familiar with the issues of JavaScript in the past. These issues included problems with every web browser, so JavaScript developers invested great amount of time fixing these bugs and problems. Today these bugs are not great issue and JavaScript is working on all major web browsers with the integration of the technology so deep that even high competitive online industries like gambling and bingo sites started to heavy implement JavaScript and JQuery.

What is JQuery?

JavaScript frameworks were born before introducing and creating of JQuery. These frameworks represent group of codes which allowed the developers to invest more time in fixing the bugs and to improve overall features of JavaScript. These custom frameworks were the beginnings of JQuery. Group of codes in fact represent free to use and open source libraries. JQuery is so part of JavaScript including these open source libraries.

JavaScript contains man other libraries like MooTools, but JQuery became the most popular due to its great performance and powerful features which makes it perfect scripting language for beginners. You may think about JavaScript and JQuery as different computer languages but the fact is that both of them are actually JavaScript. The greatest difference between them is in their line of performance. JQuery is widely used for many scripting functions, requires fewer codes and gives same performance.

JavaScript vs JQuery

There is one question always asked by many web developers. There are many discussions about which scripting language is the best. There is no right answer to this question because neither is the best. The truth is the both of these computer languages have their particular roles and qualities. You may find yourself in situation where JQuery is not the right tool so you have to go straight to JavaScript. But while working on online applications in the past, JQuery was many times more than enough and all that was needed.

The main goal of web developers is to make decision on which particular tools are the best for their client. Someone who is first time coming into the world of web development needs to come across both with the JavaScript and JQuery. Using only one of these scripting languages will not give you greater performance and more knowledge unless you use both of them until you decide which one is better for you. It is known fact that JavaScript is slowing down projects and that JQuery framework is requiring fewer line of codes. The conclusion is that both of these scripting languages have their particular qualities and features.

JavaScript and JQuery Examples

When we talk about the advantages of JavaScript and its frameworks especially JQuery, which is the most popular JavaScript library, we have to mention amazing speed in which every code can be generated. Like I mentioned before every single code line can change interaction between user and project in short amount of time.

In the first example with the assistance of JQuery web developers can change background of your web site. This won’t take much time and requires less effort. For developers this particularly means greater speed and greater performance while developing online applications and programs.

When it comes to the writing program with the JavaScript as shown in example two, in order to achieve same goal web developers have to test and run it on different web browsers before writing any codes. This usually takes greater amount of time than writing codes in JQuery.
This is the example of changing the background color of particular body tag using JQuery

$('body').css('background', '#ccc');

When it comes to the changing background color using JavaScript, it requires processing onload function which is going to be placed within body tag

Should I use JavaScript or JQuery?

Depending on the circumstances, using JavaScript will provide you with most of the features you need while performing functions. When it comes to the JQuery, for most online applications and major websites it provides web developers with excellent performance.

In the conclusion, either option is good in order to achieve same effect while providing users with different perfomance. Like I mentiond before JQuery requires fewer lines of codes in order to perform a function. For most web development projects JQuery will be more than enough. You may come across other web development projects which are going to require only JavaScript. In both cases the better option and the safest one is to get to know both of these scripting language before making decision about which of these scripting language better suits your needs.


Q:

Razor view engine, how to write inbetween html?

i have some problem with a razor syntax. I would like to know how to write inbetween html.. see this sample..

    @foreach (var x in Model) {

            @x.Subject - Tags:

            @if (x.Tags != null)
            {

                foreach (var t in x.Tags)
                {
                    @t.Name
                }
            }
            else
            {
                No tags
            }

    }

I should be able to write "No Tags" but this doesnt work... No tags seem included in the code (which is not what i want.
Thanks

A:

You need to explicitly tell Razor that you're writing HTML, by writing @:No Tags or <text>No Tags</text>.

A:

Does using the <text> tag work? For example:
<text>No tags</text>


As Realtors, we are agents of change. With moving comes deciding what to take and what to leave.

Many homeowners have treasured items they don’t wish to merely donate or recycle. For those distinguished items there is a list of Auctioneers, Consignments, and Appraisers.

Other items are easily saved from the landfill and donated - often for a great cause. You’ll find included in this guide a diverse list of organizations that take items for a greater cause.

Lastly, for those things that cannot be sold or donated, there is a list of recycle centers. Save it from the landfill - sell it, donate it or recycle it instead!

Although this Donation Resource Guide names providers in one or more of these categories, the reader understands that Helen Adams Realty cannot guarantee the quality of service or level of expertise of any such provider.

Hall’s Auction
Estate, Personal Property and Business liquidation auctions. In business since 1980.
Danny Hallwww.donhallsautction.com
704-242-0488

SouthEnd Exchange
Whether liquidating a business, downsizing, or handling the estate of a loved one, South End Exchange can manage all assets of your sale. From taking inventory of your items, pricing, marketing and staffing the sale, to helping with clean up and donation of non saleable items. South End Exchange is a full service liquidation, estate, and tag sale business.www.southendexchange.com
704-353-4600

Clearing House
Consigning with Clearing House is the easiest way for you to sell your fine furniture and accessories. We specialize in attractive furniture, china, sterling, crystal, glassware, lamps, antiques, fine jewelry, paintings, small rugs, and similar quality items that will sell for at least $20.www.clearinghousesouth.com
704-375-7708

Classic Attic
Are you getting ready to move, redecorate or just clean out some rooms? Make some easy money with those things you no longer need. Empty YOUR attic into the CLASSIC ATTIC!www.classicattic.biz
704-521-3750

Hamilton-Stuart
At Hamilton-Stuart, we’ve developed a reputation for our knowledgeable staff, vast experience in the antique and consignment business, and ever-changing inventory. This foundation has led to an extensive following and makes us a great partner for your Estate Sale.
Patrick Land
patrick@hamiltonstuart.comwww.hamiltonstuart.com

Consignment 1st
Since 1987, Consignment 1st®has been the acknowledged leader for full service consignment. We specialize in the resale of upscale furniture, home décor, antiques, collectibles, silver, porcelain and nostalgia from homes and businesses just like yours.
704-847-2620
sellme@consignmentfirst.comwww.consignment1st.com

Donate: Clothing, Home Goods and Electronics

Goodwill

Goodwill uses 90% of the revenue generated by your donations to train and equip people for jobs that lead to family-sustaining employment. Bring us your gently used clothing, home accessories, computers and electronics…and see what a little good will do. All donations are tax-deductible.

Donations of used clothing and household items can be turned into valuable funding for health screenings, kidney disease education, research, patient advocacy, and much more. NKS welcomes a wide variety of donations, so it’s easy to find clothes and other items to donate the next time you move. NKS accepts: Men’s, women’s, and children’s clothing, Miscellaneous decorative items, Silverware, glassware, and tableware, Cookware, pots, and pans, Large and small furniture, Small appliances, Electronics, Books, Toys, Linens And more

Operates retail thrift stores accepting home and clothing donations. Proceeds from stores benefit The Salvation Army Adult Rehabilitation Center (132-bed free residential facility) for chemically addicted men. Schedule a pickup from your home or find drop off at a location near you by visiting www.satruck.org. Special Donations for the Salvation Army Center of Hope Shelter (280-bed homeless shelter for women and children) include: diapers, feminine products, toiletries, towels and washcloths and bed linens. Drop off at the shelter, 534 Spratt Street, Charlotte, NC. For more information call 704-716-2769 or visit www.salvationarmycharlotte.org.

Dress for Success

Allows women to interview for jobs and enter the workforce dressed in appropriate attire. Accepts professional attire and accessories for women. For any questions about donating to Dress for Success, please call 704-525-7706.

Donate: Furniture

Crisis Assistance Ministry

Furniture and appliances that are in good working condition such as stoves, refrigerators, beds, dressers, mattresses, kitchen tables, sofas and chairs are available at no cost to families in need. For information about limited pickup service or dropping these items at the Furniture Bank you can contact them at:

Furniture and appliances that are in good working condition such as stoves, refrigerators, beds, dressers, kitchen tables, sofas and chairs are available at no cost to families in need. Call the Donation Hotline to schedule a pick-up: (704) 392-4495.

Provides services to refugees and plays a vital role in the resettlement in the Charlotte area. Donations of furniture, house-hold items, and beds are needed to furnish refugee apartments. Call the office to schedule an appointment for a pick-up. No appliances.

Donate: Food Products

Second Harvest Food Bank of Metrolina

Second Harvest strives to eliminate hunger by the solicitation and distribution of food. They accept donations of unopened non-perishable food as well as pet food. You can host a Food Drive or donate at their location:

Through a system of 19 food pantries, Loaves & Fishes provides a week’s supply of nutritionally balanced groceries at no cost to families and individuals experiencing a short-term financial crisis. Food Drives are welcome as are donations of unexpired/unopened nonperishable foods.

Donate: Bicycles

Trips for Kids

A non-profit organization that accepts all types/sizes of “dusty not rusty” bicycles to help mentor children in the Charlotte area. If you are interested in helping out or donating visit their Re-Cyclery!

Can't Donate it? Recycle it!

The Charlotte-Mecklenburg area has a number of full-service and self-service recycling centers throughout town. Find one close to you to drop items that cannot be salvaged or donated to help keep them out of local landfills. http://charmeck.org/city/charlotte/SWS/

How to prepare for recycling:

Break down cardboard boxes/crates and remove any plastic or styrofoam packaging.

Clean and rinse all cartons and plastics of food and liquid waste prior to recycling.

Remove caps and lids from bottles and containers

Always check to make sure there are no non-recyclables mixed in with your items prior to dropping at a recycling location!

For a list of items that can be recycled and other frequently asked questions, click here.

Reminder:
According to state law, plastic numbers 1 & 2 and aluminum should always be recycled and never discarded in the garbage.

To find Recycling and Waste Centers in Mecklenburg County, Click Here.

Planning a Renovation or working on a construction project?
Worried about what to do with your extras or the items you’re removing?
Habitat For Humanity and the Habitat ReStore can help with that!

This service benefits in several ways:

Donations are tax deductible

Recycling saves landfill space

It provides Habitat an opportunity to sell the salvaged items in their ReStore

It saves the homeowner paying for demolition

“Sweet Spot” Salvage Items Include:

Kitchen Cabinets & Granite Counters

Kitchen Appliances up to 10 Years Old

Vanities, Toilets, Ceiling Fans, Light Fixtures

Doors - Interior and Exterior

Windows (Vinyl Replacement)

Heating and Air Systems

Claw Foot Tubs

Water Heaters Up to 8 Years Old

If you are working on a renovation, or have purchased a home that is a teardown, contact Habitat for Humanity. They can remove certain items from your home, free of charge, that will in turn benefit the Charlotte Metro Habitat ReStore. This list of “sweet spot” salvage items qualify for free pick-up service.


$60 Billion Spent on Pets

I continue to struggle with “cost” being used as a factor for why purebred dogs are declining in numbers when the Pet Care Industry continues to show growth in sales year upon year, touting itself as being recession proof. From the 2016 Pet Care Industry Analysis I’m reading the following and thinking that “cost” is not the issue we want to think it is: “The pet industry continues to prove itself nearly recession proof… Consumers may be cutting expenses in other areas of their household budgets, but they are still opening their wallets for their furry friends…Since 1988, pet ownership has expanded from 56% of households to 62%. That’s 71.4 million homes! Often one animal just isn’t enough: some 46% of all households own more than one pet.” Spending exceeds $60 BILLLION on pet products and services and this my friends does not include the “cost” of the pet.

So, if more households own more pets than ever before, how is it that the purebred dog continues to decline in numbers across most of our breeds when dogs are the most popular pet? Obviously, we haven’t priced ourselves out of the market as some believe, nor is the public skimping on spending on their pets, instead I would propose that we have not marketed our purebreds with the same ferocity nor the same expertise as that which has been employed by those promoting the mixed and designer mixed breeds, be they breeders or shelters. While we, as responsible breeders and purebred owners, continue to spend our dollars to do health certifications, to prove merit through show/performance events, and to contribute funding to canine health research, have the other dog markets been free to spend their dollars selling their dogs and puppies to the public, thus outpacing us to the point of a decline in purebred numbers? Are they selling their mixed breeds at the expense of the very health issues we are dedicated to controlling through our research and testing?

Perhaps we need to realize that we should go back to basics and recreate a more positive image for our purebreds and our breeders…we need to ensure that responsible breeders are completely separated from the vile puppy mill breeder and we need to sell why buying a purebred puppy is like buying a favorite brand of soap – you know what you’re getting and you know you’re going to like it (when it’s grown up)! Our general public is very brand conscious, yet we are not branding our dogs, nor are we marketing our brand (breed) to the same degree as the generic dogs now favored by the public. While this may not be the whole answer as to what needs to be done, it is food for thought and a place to start our effort to restore the purebred to it’s rightful place in the pet market.

Oh… PS: Maybe we should start putting a trademark on our breed names to stop others from using our breed’s name when describing a generic dog, why should it be OK to use Golden Retriever mix or Beagle mix when describing the dog in the same place where things like”Adopt don’t Shop” are said? If breed doesn’t matter why use it? Just smiling at the irony there!

Blog Stats

Follow Gordon Setter Expert by Email

We are dedicated to building a knowledge base and a sharing site for those who are involved in all of the various aspects of competition with Gordon Setters, competitions that showcase the Gordon Setter’s Beauty, Brains and Bird-Sense.

Contact us:

Gordon Setter Expert

I have been an active participant in the sport of showing and breeding purebred dogs since 1973. While I began my journey with an Irish Setter, Gordon Setters became my passion in 1977 and I've been breeding them exclusively ever since.


“My therapist Ramesh is awesome. His treatment and communication is exemplary, his skills & knowledge beyond compare. The clinic atmosphere is warm and pleasant. Most importantly Ramesh's treatments leave a feeling of hope and recovery. He is definitely making a difference to each and every patient.
I highly recommend Ramesh to anyone seeking physiotherapy. Thank you so much for the great experience.”

Karen G.

1 year ago

“In November 2016 I was assigned Nipun as my therapist to help with my diagnosis of vertigo. I was treated with the best of professionalism and care and would recommend him to anyone who requires vestibular physiotherapy as part of their health and wellness program. A job well done and I wish you continued success.”

Debi F.

1 year ago

“About one and half year ago, I was suffering from severe back pain and no amount of medicine or rest was turning out to be very effective. My physician advised to go for physiotherapy and I came across Genesis Physiotherapy. I opted for their Physiotherapy NE Calgary which proved to be a blessing for me.”

Greg S.

1 year ago

“Over the last 6 years I have made use of the services provided by Ramesh Bimagani. Since his relocation to the Genesis Centre, I have been treated several times for injury related therapy and for some more minor osteoarthritis in my hands. After my visits I have noticed remarkable improvement and continue to enjoy my life and age as a senior citizen without any prescriptive medicine (drugs). As I continue my daily exercises, there is every indication that my good health will continue to be enjoyed thanks to the Genesis Physiotherapy clinic! Greg Steiner, Member of the Board of Directors, Genesis Centre of Community Wellness.”

Karine R.

1 year ago

“Great Staff.Relaxing atmosphere and best of all pain relief. Ramesh is very professional and passionate about his work. He knows exactly how to help with any pain and gives just the right treatments necessary for recovery.”

Tony A.

1 year ago

“Motor vehicle accident is something which is one of the most trying times of life. Getting back into the regular life after recovering from the accident is not easy, because the pain is something which not going to vanish. The same happened to me and I went for the Motor Vehicle Accident Physiotherapy service from Genesis Physiotherapy and found that they are just the best.”

Robert B.

1 year ago

“When I first came to Genesis Physiotherapy for the first time, it was to try their Saddle Ridge Physiotherapy service. I was not very sure about the decision, but after the first two sessions, I was forced to change my mind about them. I would like to thank them for their extremely effective services.”

Kanwar K.

1 year ago

“Nipun Mehta is very professional and takes added responsibility to make sure patient gets the best treatment.. He also has vast knowledge and experience. Overall a great experience with administration staff also. Thumbs up !”

Jimmy T.

1 year ago

“As far as a cure to the vestibular disease is concerned then the Vestibular Physiotherapy, offered by Genesis Physiotherapy is truly the best. I have used their service. The finest of all!! Thank You for such great service!!”

Candida G.

1 year ago

“At the Genesis Centre, the Physiotherapist Ramesh is very professional and has excellent knowledge in the ability to treat his patients proudly. I have been in other clinics previously and never have I been treated so well and have recovering results like I do at Genesis. In addition, the staff is very friendly and respectful. I am very pleased with the services at Genesis for my treatments and I will be recommending this clinic to all my peers. Thank you for your extraordinary time and effort to treat my injury Ramesh.”

Arathi B.

1 year ago

“I used to suffer from neck pain for years but thanks to Genesis physiotherapy team, who helped me to relieve from ongoing neck pain as well as back pain. Staff and Physio Ramesh are simply superb. I would confidently recommend Genesis physiotherapy if you have same issues.”

Ashna S.

1 year ago

“Nipun Mehta is an exceptionally good physiotherapist. I am going to him currently for a sports injury and am extremely happy with his level of expertise and dedication. I would recommend him confidently.”

Azhur K.

1 year ago

“Exceptional service, very curious staff. Waiting time is next to none. I will definitely recommend this place. Keep up the good work guys.”

Shubum R.

1 year ago

“Coming here to help my back and neck has proven to be quite helpful. The therapists are great and the massage therapist is a cool dude with magical hands.”

Clement M.

1 year ago

“One of the best experiences here especially Ramesh who does an amazing job. He's well aware of my pain spots & his magic hands rids my pains from active sports. Would definitely recommend anyone looking for genuine care.”

Karan K.

1 year ago

“I would like to express my greatest thanks and appreciation to the Nipun Mehta. Thank you Nipun for high level of professionalism and the warmth, attention and devotion. I have complete trust in his evaluations and treatment. Would not go anywhere other than Nipun Mehta. I have so much neck soreness and pain, now I feel huge difference after his great treatment. A shining example of what every doctor should strive to be. Thanks Nipun Metha :)”

Shannon D.

1 year ago

“Nipun Metha was amazing! Open and inviting personality. You are not afraid to describe any issues or concerns you may have. He is very knowledgeable. He explains the problem and all the possible treatments you will need. I would not hesitate to recommend Nipun or return to his care.”

Johnathan K.

1 year ago

“Great service tried a few other places but was surprised that this place gave 100% service thanks”

M F.

1 year ago

“I have used the services at Genesis Physiotherapy over the past year and have been very happy with the treatment I have received. The Staff there are friendly, professional and very understanding.”

Belynda G.

1 year ago

“I came to Genesis in May of 2016. I had severe back pain, then hip pain. Vikas was my physiotherapist and from the start he was caring and professional right to the end. Him as well as all the staff were great with me and helped me the whole time. I appreciated all their hard professional work. If I need to go back I will always choose there. The gave 100%”

Sharif K.

1 year ago

“Ramesh Bhimagani is one of the best physiotherapists in the town. He takes great care of his patients I would strongly recommend his work! He was instrumental having ACL injury diagnosed and treated properly and recovery highly recommended.”

Shariff K.

1 year ago

“If you are looking for the best physiotherapist in the town, one should contact Ramesh Bhimagani. His diagnosis and attention to detail skills are fantastic. He is our go to person for all sports and personal injury needs I strongly recommend Genesis Physiotherapy Clinic.”

Karen G.

1 year ago

“Thank- you to Vikas. I had surgery the end of July and was encouraged by my family to start physio to help the healing process. Vikas has a professional and caring manner that is very much appreciated. He has a genuine concern about my healing process. It is nice to feel like a name versus a number. Thank you again Vikas and I wish you continued success.”


Q:

dircolors: rules for _ext (rather than .ext)

In UNIX, many file extensions do not contain the dot in front, as in bashrc rather than bash.rc or ssh_config rather than ssh.config
I would like to add dircolor rules for _config as well. However, when I add the line:
_config 01;31

I get an error: dircolors: `/etc/dircolors':126: unrecognized keyword _config
Is it possible to add extensions _ext to dircolors?

A:

You can do this with *_config 01;31.
From man 5 dir_colors:
*extension color-sequence
    Specifies the color used for any file that ends in extension.

.extension color-sequence
    Same as *.extension. Specifies the color used for any file that ends
    in .extension. Note that the period is included in the extension, which
    makes it impossible to specify an extension not starting with a period,
    such as ~ for emacs backup files. This form should be considered obsolete.

A:

As @Matt has corrected me, this is possible using dir_colors. To do this you need to add a line similar to this in one of a few locations.

/etc/DIR_COLORS
$HOME/.dircolors

excerpt from man page
found in a system default shell initialization file, like /etc/profile or
/etc/csh.cshrc.  (See  also  dircolors(1).)   Usually, the file used here is
/etc/DIR_COLORS and can be overridden by a .dir_colors file in one's home
directory.

These files are typically sourced from these files that are patched into your $HOME/.bashrc and $HOME/.bash_profile, assuming you're using Bash as your shell.
$ ls -l /etc/profile.d/|grep colorls
-rw-r--r--. 1 root root 1133 Nov  3  2010 colorls.csh
-rw-r--r--. 1 root root 1143 Nov  3  2010 colorls.sh

If you add your line to say your copy of $HOME/.dircolors:
_config 01;31

You can then update your environment using this command:
$ source /etc/profile.d/colorls.sh

You can then confirm that your environment now includes the change:
$ env|grep -o '*_config=01;31'
*_config=01;31

Finally you can test to see if your change is working:
$ touch afile_config
ls -l afile_config


Sunday, December 30, 2007
... /////

Two topics about the relationships of science and society were recently discussed in the physics blogosphere: funding cuts, especially for high-energy physics, and the desire of elite universities to absorb the top research in cutting-edge disciplines. Let me briefly say what I think about both.

Funding cuts

For the year 2008, high-energy physics has seen the heaviest losses in the U.S. but also the U.K. Fermilab is one of the major casualties and the resources will drop by 10 percent or so. Various scientists protest. Generally, I think it is usually good if science is getting enough funding but it is certainly no dogma.

There are at least two basic reasons why funding reductions for facilities such as Fermilab are justified:

Decreasing relative capacity of the facility to make dramatic discovery

Damaged public perception of high-energy physics

Because I think that the society should be deciding about some "microscopic" numbers determining the total resources for science and their separation to a few roughly defined subdisciplines (but not the internal detailed redistribution that should be decided by the experts), these two reasons make it natural that the funding simply has to go South.

Fermilab vs the LHC

Concerning the Fermilab, I find it obvious that when we expect that the facility is soon going to become obsolete and superseded by the CERN's new collider, the calculation whether it is a good idea to invest a lot of money into Fermilab inevitably shifts.

Well, the luminosity and the energy per particle will simply become cheaper in less than a year, unless a catastrophe occurs. The market of ideas and experiments has to respond to this fact. A rational response is that it is probably a better idea to save the money and wait for the LHC that will be able to transform the same amount of money into a greater expectation value of scientific results. Many people are dissatisfied but most of the dissatisfaction is driven by personal interests, not a genuine interest of science.

Public perception of science

The second reason that has almost certainly contributed to the cuts is a deteriorating perception of high-energy physics by the public. The two infamous books and the media campaign surrounding them is a finite part of the story.

As far as I know, every single high-energy physicist - graduate student, postdoc, professor - at every good enough place knows that the comments of people like Peter Woit or Lee Smolin about physics are completely worthless pieces of crap. Peter Woit is a sourball without a glimpse of creativity who only spreads bad mood and confused, superficial propaganda. He has never contributed anything substantial to science and it is likely that he will never contribute anything of this kind in the future.

He's a typical incompetent, power-thirsty, active moron of the kind that is capable to destroy whole countries if he gets a chance to do it: think about someone like Robert Mugabe.

Analogously, Lee Smolin is a prolific, full-fledged crackpot who has written dozens of papers and almost every single one is a meaningless sequence of absurdities and bad science. Once again, everyone in the field knows that. But a vast majority of the people in the field think and say that these two people and their companions don't matter; they don't have any influence, and so forth.

However, in many cases, this slogan only justifies scientists' escape from their broader responsibilities. In other cases, the formulation is a symptom of pacifism after it has lost any touch with reality. The reality is that the two pseudoscientific ideologues - and a few others - have a significant influence on the society. 99% of the public are simply unable to figure out that Smolin's or Woit's writing is just garbage that no well-informed person should pay any attention to. They are unable to do it themselves and they have virtually no channels where they can learn this otherwise obvious fact from the people who can figure it out.

So the public image of high-energy theoretical physics and many of its proxies inevitably deteriorates. The funding cuts are partly explained by this fact even though there are other reasons, too.

Concentration of brains

The second topic I want to discuss is concentration of brains. As Cosmic Variance reported, Drew Gilpin Faust, the new president of Harvard University, said that less elite universities should prepare that they won't have funds to compete with elite places such as Harvard in cutting-edge scientific fields.

Now, I find it obvious that this is what leaders of powerful places probably expect - or at least pretend to expect - and what they want others to expect, too. And it is mostly true, too - at least in the long run.

Skillful and lucky people can occassionally accumulate in a place that is not the most expected one. But these are statistical fluctuations that can go in both ways and that usually average out in the long term. For example, Rutgers University became one of the leading string-theoretical think tanks in the early 1990s. They group was kind of lucky with people and with funding, too. What has happening at Rutgers University could have occurred in some of the Ivy League schools instead.

However, these things are unlikely to last. If a place has superior financial capabilities, it will eventually attract the people it needs to attract to become the top place. Moreover, such an outcome is good for science for the same reasons that make big corporations more efficient than their small competitors in the commercial sector and that makes imperialism work better in most respects than primitive forms of capitalism. A certain critical mass, an increase of helpful interactions, and an efficient self-organizing distribution labor of contribute to exhanced power and creativity of places with a lot of brains and resources.

This result is only to be expected if things work properly. Of course that if they don't, a place with a lot of brains is also able to waste a lot. But once again, in the long run, things should work most of the time so the argument assuming that things work is likely to give at least the right sign of the result.

So I don't believe the ideas that a uniform distribution of places and scientists is the healthiest environment for scientific progress. Just like the concentration of capital is essential for capitalism to achieve many things, the concentration of intellectual capital (as well as ordinary capital that scientists sometimes need) is often necessary to achieve certain results in science, too.

In the case of accelerators, the most extensive experiments on Earth, there is no doubt about it. But even if you look at the following category of scientific activities according to the magnitude of their projects - such as various genome projects - it is still likely that the concentration of experts into a few places will be a superior arrangement that will lead to faster progress for the same money.

What I wrote above might agree with the words of the current president of Harvard University and others. On the other hand, every sane person should also realize that only one of us is making a pure intellectual analysis here. The other one is also playing a game expected from a particular job, attempting to achieve certain goals. Of course that it is expected that the president of an elite university tries to make his or her university more exceptional.

But others have different tasks. In the short term and medium term, there also exist other mechanisms that allow e.g. a prestigious biological center to appear at an unexpected place. So the leaders of places of different sizes will obviously simplify the situation in different way and present different visions about the future of science and technology simply because their roles justify different strategies. It is obvious that different opinions will be heard and one shouldn't be shocked about it.


The Chelsea High School girls' basketball team will have a new head coach for the 2018-19 season. The Buzz caught up with two players, Hannah Shamy (9th) and Molly LaHue (9th), to get their thoughts on having a new coach.
&nbsp...

In the Winter, Chelsea High School starts its wrestling season as many other schools do the same. Chelsea High’s team is constructed with many great people and is lead by head coach, Coach Butler and assistant coach, Mr. Oliver...

I decided to ask some people about a very popular topic which is their opinion on the NFL players kneeling down. I asked six people about this and this is their response
-------------
A1: “In my opinion I feel that the players...

Recently players in the NFL protested during the national anthem by kneeling. The opinions on this were varied but one opinion stands out from the crowd. President Donald Trump responded to the topic on Twitter.
“If a pl...