text:
Home » Floor Designs , Innovations , Top » 10 coolest floor designs
10 coolest floor designs
By Jalal HB6 comments
Architects and designers are always coming up something different and unique. But when it comes to innovating new ideas, there is no limit. Herein under are 10 coolest floor designs, which speak both of aesthetics and innovation. See for yourself:
Optical Illusion Floor
This optical illusion carpet, spotted in a Paris video game store, provides an illusion of a vortex floor.
Floor made of Leather Belts
(Belt) strapped for cash? Forget 'affordable' for a minute and just imagine the curious combination of feeling aged leather beneath your feet, and the look of vintage belts lining the floors of your home. Leather flooring is fairly unusual, but these upcycled belt designs are unique – each one hand-crafted and with individually-selected old belts.
OK, but the price? Over 600 dollars for the round mat shown above from BranchHome and over 70 dollars per square foot for the floor tiles from Ting. (Link | Via)
Penny Floor
A floor literally tiled with thousands of copper pennies… it's pretty surprising to look down and see them when you walk into The Standard Grill in The Standard Hotel, New York. The design was selected by the restaurant's designers, Robin Standefer and Stephen Alesch of New York design firm - Roman and Williams.
Radiant Heat Floor
Take off your shoes and feel the warmth coming up through that radiant heat flooring. It's not only one of the coolest ways to get warm (no pun intended), but it's also really energy efficient because, unlike traditional heating systems, you don't lose the heat. With traditional baseboard heating or forced hot air heating, a lot of the energy you use to heat your home is wasted because much of the heat produced is immediately lost. But with radiant floors, that warmth is transferred directly to you as you come in contact with the floor. And it takes advantage of something we all know - hot air rises - so when the heat is generated underneath the floor, it does what it's supposed to, which is go directly up. Aside from the fact that it keeps your indoor temperature up, and your heating bills down, it's just plain fantastic.
Aerial Photo Floor
Check out the Flying Carpet next time you're in Sacramento. Created by California-based artist Seyed Alavi, the carpet is an aerial view of the Sacramento River as it flows for 50 miles, between the California towns of Colusa and Chico. The 18-foot-wide, 150-foot-long image is woven and dyed into the carpet covering a walkway that connects the main parking lot and Terminal A. Alavi won a competition of more than 100 artists that submitted proposals for upgrading the walkway.
Salt Floor
Every once in a while, though, we run across someone who has taken the industry to a whole new level. Japanese Artist Motoi Yamamoto has found his medium in grains of salt - billions and billions of them. Yamamoto adheres plain table salt to floor surfaces, creating extremely intricate patterns & landscapes. The result is pretty amazing and can be a dizzying optical illusion if you stare too long. To prep, the artist draws the most complex mazes and labyrinths imaginable, plotting out his design.
His creations are for exhibition only and aren't meant for permanent floor design, which is fortunate, because it'd take just one mildly rude friend to undo hours upon hours of work.
Puzzle Floor
This floor is something that stands out from the crowd. The new Puzzle Floor elicits expressions of surprise and amazement. A perfect solution for children's bedrooms, but not only. Available in 13 colors, the tiles can be mixed for unique, personalized installations.
Human Traffic Floor
Alistair Bramley's Dimension laminate flooring is a futuristic take on laminate floor design. The patterns are created using the natural movement of people within a set environment. Obstacles such as furniture are incorporated into the floor design. Video footage of how people used the room space was captured, processed and then printed onto the floor. This takes bespoke flooring to the next level.
Etched Floor
Some prefer the raw texture of hand-scraped hardwood floors, while others want the modern look (and low costs) of laminate wood flooring. These patterned wooden planks provide artistic relief somewhere in between – an honest contemporary take on classic material and installation approaches.
This decorative flooring series from Mafi provides a fresh outlook on manufactured floors, etching designs that range from abstract floral patterns to playfully embossed stick figures. The pre-engraved slats are shallow enough not to collect dirt and dust (at least in theory), but deep enough to be felt underfoot by bare feet or with socks – each features a darker 'burned' look or a consistent surface treatment where variation is seen only by reflection, light and shadow.
Billed as the world's first truly "sustainable dance club", Club Watt is based in Rotterdam in the Netherlands and aims to use 50 per cent less waste and 30 per cent less energy than a typical club. To achieve its goals, it's working to the green guidelines of a non-profit organization known as the Sustainable Dance Club.
As well as generating energy, the dance floor has an interactive element. As you dance, its appearance changes through the LED lighting embedded in the panels, which are made from recycled materials.
Source: Techzug
Henry Murray March 12, 2012 at 12:23 AM
Just look at what art can do to our floors. Amazing illusions, specially the floor of that video game store in Paris. It's really cool!
timber flooring perth
I agree with the last comment. These designs are amazing. I like the idea of adding optical illusion on these designs. People will surely be compelled to take photos because of these designs. I would love to have at least one of these designs in my house. perth home renovations
I have to say this post was certainly informative and contains useful content for enthusiastic visitors. I will definitely bookmark this blog for future reference and further viewing. Thanks a bunch for sharing this with us!
chenlina July 21, 2016 at 10:57 PM
toms shoes outlet online
kids lebron shoes
nike trainers men
fake rolex watches
nfl jerseys cheap
jjjjjjjjjjjjj April 27, 2018 at 8:58 PM
fenty puma


text:
Ukraine says bodies of all 11 Ukrainians in Iran plane crash identified
KIEV (Reuters) – The bodies of all 11 Ukrainians who died in last week's plane crash in Iran have been identified and will be transported back to Ukraine on Jan. 19, the interior ministry said in a statement to Reuters on Thursday. The five countries whose citizens died when Iran shot down a Ukrainian passenger plane have said Tehran should pay compensation to the families of the victims, saying the world is watching for its response.
UPDATE 4-Bombardier shares dive on profit warning, A220 writedown fears
Atalanta coach hits out at Fiorentina fans as tensions rise

redpajama_set_name: RedPajamaCommonCrawl


My name is Nicole and I have lived through uncertainty and dissatisfaction. I was obese, suffering from depression and polycystic ovarian syndrome. For years I tried diets, detoxes, supplements, vitamins and incorporated them with exercising to fix my health.
The only tool which helped me to break this cycle of unhappiness was a meditation technique called 'ThetaHealing®'. After discovering ThetaHealing®, I released more than 20kgs and no longer have PCOS or Depression. This lead me to inspire and educate others to live a meaningful life.
I see clients one on one, lead Shift Your Space workshops and teach Certified Thetahealing Courses. I specialise in guiding women to release weight, be with their most compatible soul mate and live their life's purpose.
If you would like to find out how I can help you, contact 'hello@shiftyourspace.com'.


Lace-up shoes are the must-have for this spring. Lace-up shoes are the perfect style to rock now with dresses or cut offs, as well as in the fall with jeans or tights, both edgy and classic. Take your polished style to the next level. Stand out in the hottest lace up shoes in trend with Chiko Shoes lace up sandals, oxfords, loafers, pumps, flats and flatforms.


The three-time state champion St. James girls golf team captured the Region 6-5A tournament title on a breezy Monday at River Oaks Golf Plantation, but two-time reigning state champion Smith Knaffle had to share individual medalist honors with another up-and-comer.
Carolina Forest eighth-grader Mia Gray went shot for shot with the senior and South Carolina commit Knaffle, turning in identical 18-hole scores of 1-under 71. Time constraints forced the two to share co-medalist honors rather than a playoff.
The Lady Sharks shot a team total of 315 to beat runner-up Carolina Forest (329) and third-place Conway (389). West Florence (433) edged Socastee (436) and South Florence (469) for the fourth and final bid to next week's Class 5A Lower State Tournament in Florence.
St. James also got a solid round from freshman Adrian Anderson (76), and teammates Amanda Meno and Katie Smith shot matching 84s. Playing for the first year in Class 5A, the Lady Sharks are strong contenders for another state title.
Carolina Forest also has a chance to make some noise in the Lower State. The Lady Panthers saw Alayna Fortenberry (75) finish tied for third individually and Victoria Callahan (80) take sixth to earn all-region honors.
Conway's Lora Ledbetter led the Lady Tigers with a 75, good for a share of third place. and eighth-grader Taylor Reaves finished in seventh place with an 81.
Socastee's Joey Kirkman shot 98 to qualify as an individual for the Class 5A Lower State Tournament, which will be held at the Columbia Country Club next Monday.


text:
Q: I am not getting why is the error coming up "illegal parenthesized expression" import java.util.*;
public class scan2
{
void main ()
{
Scanner sc = new Scanner (System.in);

System.out.println("enter sides of cube ");
double s = sc.nextDouble();

System.out.println("enter sides of sphere ");
double r = sc.nextDouble();

System.out.println("enter sides of cuboid ");
double l = sc.nextDouble();
double b = sc.nextDouble();
double h = sc.nextDouble();

switch (option)
{
case '1':
double cube = s*s*s;
System.out.println("volume of cube " +cube);
break;

case '2':
double sph = 4/3*22/7*r*r*r;
System.out.println("volume of sphere " +sph);
break;

case '3':
double cuboid = l*b*h;
System.out.println("enter sides of cuboid ");
break;
}
}
}

I am not getting why is the error coming up with "illegal parenthesized expression". It's coming on switch(option) line. And when option is removed inside brackets its showing an error as "illegal start of expression".

A: You haven't define option
For variable you should declare before use.
I advise you can use IDE like InteliJ IDEA to format your code and find error.

redpajama_set_name: RedPajamaStackExchange


text:
Q: Querying mongoDB via graphene with arguments Good morning,
I would like to be able to make a GraphQL request that "ask" MongoDB the following question :
query
{ user(firstname:"Pierre}
    { lastname}
}

*

*To do so I have defined a model.py :

from mongoengine import Document
from mongoengine.fields import StringField
class User(Document):
    meta = {'collection': 'user'}
    firstname = StringField(required=True)
    lastname = StringField(required=True)

*

*Then I have defined in Schema.py :

from graphene_mongo import MongoengineObjectType
from graphene import connect
from models import User as UserModel

connect(db="graphene-mongo-example",host="127.0.0.1:27017",alias="default")

class User(MongoengineObjectType):
    class Meta:
        model = UserModel

class Query(graphene.ObjectType):

    users = graphene.List(User)

    def resolve_users(self, info,firstname):
        return list(UserModel.objects.all(firstname))

schema = graphene.Schema(query=Query)

I do not succeed in having only the user with the given firstname..
Could you please help me ?
Many thanks
B.

A: query
{ user(firstname:"Pierre} { lastname}}
if above is your graphql query then it should be
query
{ user(firstname:"Pierre"){ lastname} }
Next read this parameter firstname in your code and fetch the document accordingly

A: The models.py did not change.
Here is the code I have wrote to answer the problem I had :
import graphene
from graphene.relay import Node
from flask import Flask
from flask_graphql import GraphQLView
from graphene_mongo import MongoengineObjectType
from models import User as UserModel
from mongoengine import connect

connect(db="graphene-mongo-example",host="127.0.0.1:27017",alias="default")

class User(MongoengineObjectType):
    class Meta:
        model = UserModel
        filter_fields = ['fisrt_name']
        interfaces = (Node,)

class Query(graphene.ObjectType):
    user_by_name = graphene.Field(User,gName=graphene.String())

    def resolve_user_by_name(parent,info,gName):
       return UserModel.objects.get(first_name=gName)

schema = graphene.Schema(query=Query)

#==================================================================

app = Flask(__name__)
app.debug = True
app.add_url_rule(
    "/graphql", view_func=GraphQLView.as_view("graphql", schema=schema, graphiql=True)
  )

if __name__ == "__main__":
    app.run()

I am then able to query with GraphQL this kind of request :
query {
userByName(gName:"Pierre")
  {lastName
   firstName
  }
}


text:
//
//  MyController.m

// Conor Dearden, Daniel Jalkut, Mark Johnston, FZiegler

#import "MyController.h"

// HTML Code that gets inserted for header and footer of page. Includes CSS attributes and search field header
#define HTML_HEADER_INDEX @"<!DOCTYPE html><META CHARSET=\"UTF-8\"><title>Manual Pages</title><form name=\"form1\" method=\"get\" action=\"man:\">
Refreshman: <input name=\"a\" type=\"text\"><input type=\"submit\" value=\"Search\">
</form> "

#define HTML_HEADER_MAN @"<!DOCTYPE html><META CHARSET=\"iso-8859-1\"><title>Manual Page for %@</title><form name=\"form1\" method=\"get\" action=\"man:\">
Indexman: <input name=\"a\" type=\"text\"><input type=\"submit\" value=\"Search\">
</form>
 "

#define HTML_FOOTER @"
Bwana
"

@interface MyController (private)
- (void)showManualPage:(NSString *)manualPage inNewWindow:(BOOL)openInNewWindow;
- (NSString *)manualPageFor:(NSString *)manualPage section:(NSString *)section;
- (NSString *)unzip:(NSString *)aPath;
- (NSString *)asciiFormatForManualPath:(NSString *)manualPagePath;
- (NSString *)formatForHTML:(NSString *)asciiFormatedInput manual:(NSString *)manualPage;
- (void)openInBrowserThePath:(NSString *)aPath inNewWindow:(BOOL)openInNewWindow;
- (void)handleAppleEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent;
- (void) showIndexWithFilter:(NSString*)indexFilter inNewWindow:(BOOL)openInNewWindow;
- (void) showIndexWithFilter:(NSString*)indexFilter inNewWindow:(BOOL)openInNewWindow usingCache:(BOOL)useCache;
- (BOOL)isLeopard;
- (NSMutableString *)encodeForHTML:(NSString *)aString;
@end

@implementation MyController

#pragma mark -
#pragma mark Service Menu
- (void)searchFor:(NSPasteboard *)pboard userData:(NSString *)data error:(NSString **)error {
	NSString *searchTerm;
	if ([[pboard types] containsObject:NSStringPboardType]){
        searchTerm = [pboard stringForType:NSStringPboardType];
        if (searchTerm && ![searchTerm isEqualToString:@""])  {
			[self showManualPage:searchTerm inNewWindow:NO];
		}
	}
}

#pragma mark Apple Event
- (void)handleAppleEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent {
	dontDisplayWindow = YES;
	NSString *URLString = [[event paramDescriptorForKeyword:keyDirectObject] stringValue];
	URLString = [URLString stringByReplacingPercentEscapesUsingEncoding:NSASCIIStringEncoding];

	//Find out what browser called it
	[callingApplication release];
	callingApplication = [[[[NSWorkspace sharedWorkspace] activeApplication] objectForKey:@"NSApplicationName"] retain];

	//Remove and prefix that is not relevant
	//Remove and prefix that is not relevant
	if ([URLString hasPrefix:@"x-man-page://"])
		URLString = [URLString substringFromIndex:13];
	if ([URLString hasPrefix:@"man:"]) {
		URLString = [URLString substringFromIndex:4];
		if ([URLString hasPrefix:@"//"])
			URLString = [URLString substringFromIndex:2];
		//From the form post
		if ([URLString hasPrefix:@"?a="])
			URLString = [URLString substringFromIndex:3];
	}

	// Call the index if it's blank and call it with an object to refresh it
	// Also do a filter search on the index with man:foo.?
	if ([URLString isEqualToString:@""])
		[self masterIndex:nil];
	else if ([URLString hasPrefix:@"index_refresh"] || [URLString hasSuffix:@".?"])
	{
		NSString *filter = nil;

		// if the URLString is just "index_refresh" then we don't have a filter,
		// otherwise we parse the filter off the end
		if ([URLString isEqualToString:@"index_refresh"] == NO)
		{
			if ([URLString hasSuffix:@".?"])
				filter = [URLString substringToIndex:[URLString length] -2];
			else {
				NSRange prefixRange = [URLString rangeOfString:@"index_refresh"];
				filter = [URLString substringFromIndex:prefixRange.length];
			}
		}
		[self showIndexWithFilter:filter inNewWindow:NO usingCache:NO];
	}
	else
		[self showManualPage:URLString inNewWindow:NO];

}

#pragma mark -
#pragma mark Main Functions
- (void)showManualPage:(NSString *)manualPage inNewWindow:(BOOL)openInNewWindow {
	NSFileManager *manager = [NSFileManager defaultManager];
	NSString *section = nil, *tempLocationOfFile;
	BOOL foundManPage = NO;

	//check for shell command injections and cut string short
	NSCharacterSet *charSet = [NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz:-_.0123456789/"];
	charSet = [charSet invertedSet];
	int aLocation = [manualPage rangeOfCharacterFromSet:charSet].location;
	if (aLocation  != NSNotFound ) {
		manualPage = [manualPage substringToIndex:aLocation];
	}

	// Separate the section part from the manual page
	// If the path has slashes in it, it's a path directly do not seperate the section at the end.
	if ([manualPage rangeOfString:@"/" options:NSLiteralSearch].location == NSNotFound) {
		if ((aLocation = [manualPage rangeOfString:@"." options:NSBackwardsSearch].location) != NSNotFound) {
			section = [manualPage substringFromIndex:aLocation +1];

			NSCharacterSet *sectionCharSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789nlpo"];

			//The section should be 1-9, n, p, l, o, 0p, 1p, 3p or tcl. Otherwise leave intact
			if (([section length] == 1 && [section rangeOfCharacterFromSet:sectionCharSet].location != NSNotFound) || [section isEqualToString:@"tcl"] || [section isEqualToString:@"0p"] || [section isEqualToString:@"1p"] || [section isEqualToString:@"2p"]) {
				manualPage = [manualPage substringToIndex:aLocation];
			}
			else
				section = nil;
		}
	}

	// Creeate the path to save the file at
	if (section)
		tempLocationOfFile = [NSString stringWithFormat:@"%@/%@.%@.html", cachesFolder, [manualPage lastPathComponent], section];
	else
		tempLocationOfFile = [NSString stringWithFormat:@"%@/%@.html", cachesFolder, [manualPage lastPathComponent]];

	// If the file doesn't exist in the path then we need to create it from the manual pages
	// ### For debbugging turn this off as the caching of pages can confuse
	if ([manager fileExistsAtPath:tempLocationOfFile]) {
		// redo caches for pages older than a month
		NSDictionary *fileAttributes = [manager fileAttributesAtPath:tempLocationOfFile traverseLink:NO];
		NSDate *modificationDate = [fileAttributes objectForKey:NSFileModificationDate];
		if ([modificationDate timeIntervalSinceNow] > -2592000.00) // a month
			foundManPage = YES;
	}

	if (foundManPage == NO) {
		//Ask man for the path to the page
		NSString *manualPagePath = [self manualPageFor:manualPage section:section];

		if (manualPagePath) {
			NSString *manFile = [NSString stringWithContentsOfFile: manualPagePath encoding: NSUTF8StringEncoding error: NULL];

			//It's a redirection
			if ([manFile hasPrefix:@".so"]) {
				NSArray *parts = [manFile componentsSeparatedByString:@"\n"];
				parts = [[parts objectAtIndex:0] componentsSeparatedByString:@" "];
				manualPagePath = [NSString stringWithFormat:@"%@/%@", [manualPagePath stringByDeletingLastPathComponent], [parts objectAtIndex:1]];
			}

			//Get Ascii man page
			NSString *asciiFormatedOutput = [self asciiFormatForManualPath:manualPagePath];

			// If successful, turn it into HTML and save it to disk
			if (asciiFormatedOutput) {
				NSString *HTMLFormatted = [self formatForHTML:asciiFormatedOutput manual:manualPage];
				[HTMLFormatted writeToFile:tempLocationOfFile atomically:NO encoding: NSUTF8StringEncoding error: NULL];
				foundManPage = YES;
			}
		}
	}

	//Daniel Jalkut: filtered index if not found
	if (foundManPage == NO)
	{
		[self showIndexWithFilter:manualPage inNewWindow:openInNewWindow];
	}
	else
	{
		[self openInBrowserThePath:tempLocationOfFile inNewWindow:openInNewWindow];
	}
	[NSApp terminate:self];
}

- (NSString *)formatForHTML:(NSString *)asciiFormatedInput manual:(NSString *)manualPage {

	NSMutableString *webPage = [NSMutableString string];

	//header of web file
	[webPage appendString:[NSString stringWithFormat:HTML_HEADER_MAN, manualPage]];

	int count = [asciiFormatedInput length], noEight = 0, noUnderline = 0;
	BOOL checkForUnderline = NO, checkForRed = NO;

	int i;
	for (i = 0; i < count ; i++) {

		if (checkForUnderline) {
			if(noUnderline == 1) {
				if ([asciiFormatedInput characterAtIndex:i] != 95) {
					[webPage appendString:@""];
					checkForUnderline = NO;
					noUnderline = 0;
				}
			}
			else
				noUnderline++;
		}

		if (checkForRed) {
			if(noEight == 1) {
				if ([asciiFormatedInput characterAtIndex:i] != 8 /*|| ([asciiFormatedInput characterAtIndex:i-1] == 95 && [asciiFormatedInput characterAtIndex:i+1] != 95) */) {
//					if ([webPage hasSuffix:@""])
//						[webPage insertString:@"" atIndex:[webPage length]-4];
//					else
					if ([webPage hasSuffix:@""])
						[webPage insertString:@"" atIndex:[webPage length]-3];
					else
						[webPage insertString:@"" atIndex:[webPage length]-1];

					checkForRed = NO;
					noEight = 0;
				}
			}
			else
				noEight++;
		}

		if ([asciiFormatedInput characterAtIndex:i] == 8) {
			//red
			if (!checkForRed) {
				if ([webPage hasSuffix:@">"])
					[webPage appendString:@""];
				else if ([webPage hasSuffix:@"<"])
					[webPage insertString:@"" atIndex:[webPage length]-4];
				else if ([webPage hasSuffix:@">"]) // By Mark Johnston
					[webPage insertString:@"" atIndex:[webPage length]-4];
				else
					[webPage insertString:@"" atIndex:[webPage length]-1];

				checkForRed = YES;
			}
			i++;
			noEight = 0;
		}
		else if ([asciiFormatedInput characterAtIndex:i] == 95) {
			if ([asciiFormatedInput characterAtIndex:i +1] == 8) {
				//underline
				if ([asciiFormatedInput characterAtIndex:i +2] == 95) {
					[webPage appendString:@"_"];
					//i += 2;
					//noEight = 0;
				}
				else {

					if (!checkForUnderline) {
						[webPage appendString:@""];
						checkForUnderline = YES;
					}
					i++;
					noUnderline = 0;

				}
				//noUnderline = 0;
			}
			else {
				[webPage appendString:@"_"];
			}
		}
		else {

			//http and mailto as well as < >
			if ([asciiFormatedInput characterAtIndex:i] == '<') {
				unsigned int count = [asciiFormatedInput length];
				BOOL email = NO, htmlPage = NO;
				if (i +6 < count) {

					if ([[asciiFormatedInput substringWithRange:NSMakeRange(i, 6)] isEqualToString:@"<http:"]) {
						htmlPage = YES;
					}
					else {
						int j;
						for (j =i; j < i+15 && j < count; j++) {
							if ([asciiFormatedInput characterAtIndex:j] == '>')
								break;
							if ([asciiFormatedInput characterAtIndex:j] == '@') {
								email = YES;
								break;
							}
						}
					}

					if (email || htmlPage) {

						unsigned int end = [asciiFormatedInput rangeOfString:@">" options:NSLiteralSearch range:NSMakeRange(i, count - i)].location;
						if (end != NSNotFound) {
							NSMutableString *link = [NSMutableString string];
							[link setString:[asciiFormatedInput substringWithRange:NSMakeRange(i+1, (end -i) -1)]];
							i = end;
							unsigned int loc;
							while ((loc = [link rangeOfString:[NSString stringWithFormat:@"%c", 8]].location) != NSNotFound) {
								[link deleteCharactersInRange:NSMakeRange(loc, 2)];
							}

							if (email)
								[webPage appendString:[NSString stringWithFormat:@"%@", link, link]];
							else if (htmlPage) {
								[webPage appendString:[NSString stringWithFormat:@"%@", link, link]];
							}
						}
					}
				}
				if (!email && !htmlPage)
					[webPage appendString:@"<"];

			}
			else if ([asciiFormatedInput characterAtIndex:i] == '>') {
				[webPage appendString:@">"];
			}
			else {

				[webPage appendString:[NSString stringWithFormat:@"%c", [asciiFormatedInput characterAtIndex:i]]];

				//makeLinks
				if ([asciiFormatedInput characterAtIndex:i] == ')') {
					int end = [webPage length];
					if ([webPage characterAtIndex:end-3] == '(') {
						if ([webPage characterAtIndex:end-2] >48 && [webPage characterAtIndex:end-2] < 58) {
							//do replacement
							int j, lengthMan = 0;
							BOOL continueB = YES;
							for (j = end -4; continueB && j > 0 ; j--) {
								if ([webPage characterAtIndex:j] == ' ') {
									NSMutableString *manCommand = [NSMutableString string];
									[manCommand setString:[webPage substringWithRange:NSMakeRange(j+1, lengthMan)]];
									[manCommand replaceOccurrencesOfString:@"" withString:@"" options:NSLiteralSearch range:NSMakeRange(0,[manCommand length])];
									int replacedRed = [manCommand replaceOccurrencesOfString:@"class=\"red\">" withString:@"" options:NSLiteralSearch range:NSMakeRange(0,[manCommand length])];

									NSMutableString *manClean = [NSMutableString string];
									[manClean setString:manCommand];
									[manClean replaceOccurrencesOfString:@"" withString:@"" options:NSLiteralSearch range:NSMakeRange(0, [manClean length])];
									[manClean replaceOccurrencesOfString:@"" withString:@"" options:NSLiteralSearch range:NSMakeRange(0, [manClean length])];

									NSString *htmlLink = [NSString stringWithFormat:@"%@(%c)", manClean, [webPage characterAtIndex:end-2], manCommand, [webPage characterAtIndex:end-2]];
									[webPage deleteCharactersInRange:NSMakeRange(j +1, lengthMan + 3)];
									if (replacedRed)
										[webPage deleteCharactersInRange:NSMakeRange(j-5, 6)];
									[webPage appendString:htmlLink];
									continueB = NO;
								}
								lengthMan++;
							}

						}
					}
				}
			}

		}
	}

	if (checkForUnderline) {
		[webPage appendString:@""];
	}
	if (checkForRed) {
		[webPage appendString:@""];
	}

	// Change the headers from red CSS style to the dark CSS style
	// They are regonized as they are preceded by a new line
	[webPage replaceOccurrencesOfString:@"\n" withString:@"\n" options:NSLiteralSearch range:NSMakeRange(0, [webPage length])];

	//[webPage replaceOccurrencesOfString:@"SEE " withString:@"SEE " options:NSLiteralSearch range:NSMakeRange(0, [webPage length])];

	NSRange section;
	section = [webPage rangeOfString:@""];
	while (section.location != NSNotFound) {
		//check to the end of line
		NSRange newLine = [webPage rangeOfString:@"\n" options:NSLiteralSearch range:NSMakeRange(section.location, [webPage length] - section.location)];
		[webPage replaceOccurrencesOfString:@" " withString:@" " options:NSLiteralSearch range:NSMakeRange(section.location, (newLine.location - section.location) - 6)];

		//search again
		section = [webPage rangeOfString:@"" options:NSLiteralSearch range:NSMakeRange(newLine.location, [webPage length] - newLine.location)];
	}

	//footer
	[webPage appendString:@"
"];
	[webPage appendString:HTML_FOOTER];

	return webPage;
}

- (void)openInBrowserThePath:(NSString *)aPath inNewWindow:(BOOL)openInNewWindow {

	// Open in a new window, explorer is special and needs a script
	// Otherwise open with script from the script.string file
	if (openInNewWindow) {
		if ([[preferences objectForKey:@"Browser"] isEqualToString:@"Explorer"]) {

			NSString *scriptSource = [NSString stringWithFormat:@"tell application \"Internet Explorer\"\nOpenURL \"file://%@\" toWindow 0\nend tell", aPath];
			NSAppleScript *script = [[[NSAppleScript alloc] initWithSource:scriptSource] autorelease];
			[script executeAndReturnError:nil];
		}
		else
			[[NSWorkspace sharedWorkspace] openFile:aPath withApplication:callingApplication];
	}
	else {

		//Other wise open with the script in current browser
		NSString *scriptSource = [NSString stringWithFormat:[[NSBundle mainBundle] localizedStringForKey:callingApplication value:@"" table:@"scripts"], aPath];

		// The calling application was not a browser we know of open in a new window in the last used browser
		if ([scriptSource isEqualToString:callingApplication]) {
			[callingApplication release];
			callingApplication = [[preferences objectForKey:@"Browser"] retain];
			[self openInBrowserThePath:aPath inNewWindow:YES];
		}
		else {

			// Run the script
			NSAppleScript *script = [[[NSAppleScript alloc] initWithSource:scriptSource] autorelease];
			[script executeAndReturnError:nil];

			// Save last used browser in preference if different from current preference
			if (![callingApplication isEqualToString:[preferences objectForKey:@"Browser"]])
				[preferences setObject:callingApplication forKey:@"Browser"];
		}
	}

}

#pragma mark -
#pragma mark IBAction
- (IBAction)manualPage:(id)sender {
	[self showManualPage:[manTextField stringValue] inNewWindow:YES];
}

- (IBAction)openBruji:(id)sender {
	[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"http://www.bruji.com/"]];
}

- (IBAction)masterIndex:(id)sender {
	// If we were asked to index by a button, it must be from the app's UI, so we'll open in new window
	[self showIndexWithFilter:nil inNewWindow:[sender isKindOfClass:[NSButton class]]];
}

// Daniel Jalkut was kind enough to add this code
- (void) showIndexWithFilter:(NSString*)indexFilter inNewWindow:(BOOL)openInNewWindow
{
	[self showIndexWithFilter:indexFilter inNewWindow:openInNewWindow usingCache:YES];
}

- (void) showIndexWithFilter:(NSString*)indexFilter inNewWindow:(BOOL)openInNewWindow usingCache:(BOOL)useCache
{
	//NSLog(@"Index with filter: %@", indexFilter ? indexFilter : @"none");
	NSMutableString *webPage = [NSMutableString string];
	NSFileManager *manager = [NSFileManager defaultManager];

	// Figure the name for our cached index given the filter (or lack thereof)
	NSString *thisIndexCacheFilePath = [NSString stringWithFormat:@"%@/manindex-%@.html", cachesFolder, indexFilter ? indexFilter : @""];

	// If we don't have an index cached, try to build one
	if ((useCache == NO) || ([manager fileExistsAtPath:thisIndexCacheFilePath] == NO)) {
		// Show the "loading" page while we get things organized
		NSString *creatingIndexFile = [[NSBundle mainBundle] pathForResource:@"loading" ofType:@"html"];
		[self openInBrowserThePath:creatingIndexFile inNewWindow:openInNewWindow];

		[webPage appendString:[NSString stringWithFormat:HTML_HEADER_INDEX, indexFilter ? indexFilter : @""]];

		NSMutableArray *manPathsToUse = [NSMutableArray array];
		NSString *nextLine;

		//Get all the man paths from  /usr/share/misc/man.conf
		NSString *manConfFile;
		if ([self isLeopard])
			manConfFile = [NSString stringWithContentsOfFile:@"/private/etc/man.conf" encoding: NSUTF8StringEncoding error: NULL];
		else
			manConfFile = [NSString stringWithContentsOfFile:@"/usr/share/misc/man.conf" encoding: NSUTF8StringEncoding error: NULL];

		NSEnumerator *linesOfFileEnum = [[manConfFile componentsSeparatedByString:@"\n"] objectEnumerator];

		while (nextLine = [linesOfFileEnum nextObject]) {
			if (![nextLine hasPrefix:@"#"] && ([nextLine hasPrefix:@"MANPATH "] || [nextLine hasPrefix:@"MANPATH\t"]))
				[manPathsToUse addObject:[nextLine substringFromIndex:8]];
		}

		//Get all the man paths from man -w in login shell
		// By Tetsuro Kurita from the forum
		// http://homepage.mac.com/tkurita/scriptfactory/en/
		NSTask *listManPathTask = [[NSTask alloc] init];
		NSPipe *listManPathPipe = [NSPipe pipe];
		NSFileHandle *listManPathHandle = [listManPathPipe fileHandleForReading];
		[listManPathTask setStandardOutput:listManPathPipe];

		//char *login_shell = getenv("SHELL");
		[listManPathTask setLaunchPath:@"/bin/bash"];
		[listManPathTask setArguments:[NSArray arrayWithObjects:@"-lc", @"/usr/bin/man -w", nil]];
		[listManPathTask launch];

		NSData *dataRecieved = [listManPathHandle readDataToEndOfFile];
		NSString *manPathes = [[[NSString alloc] initWithData:dataRecieved encoding:NSUTF8StringEncoding] autorelease];
		if ([manPathes hasSuffix:@"\n"])
			manPathes = [manPathes substringToIndex:[manPathes length] - 1];

		//int status = [listManPathTask terminationStatus];
		[listManPathTask terminate];
		[listManPathTask release];

		NSEnumerator *shellPaths = [[manPathes componentsSeparatedByString:@":"] objectEnumerator];
		while (nextLine = [shellPaths nextObject]) {
			if (![manPathsToUse containsObject:nextLine])
				[manPathsToUse addObject:nextLine];
		}

		int i;
		NSEnumerator *manPagePaths = [manPathsToUse objectEnumerator];
		NSString *manDirectory;

		//HTML structure should be updated to not use tables
		int itemsAdded = 0;

		while (manDirectory = [manPagePaths nextObject]) {
			BOOL addedDirectoryHTML = NO;

			for (i = 1; i < 10; i++) {
				// To continue if not all sections exist
				// Done by Nathaniel Gray n8gray [at] caltech [dot] edu
				if ([manager fileExistsAtPath:[NSString stringWithFormat:@"%@/man%d", manDirectory, i]]) {

					int j = 0;
				BOOL addedSectionHTML = NO;

				[webPage appendString:@"
"];

				NSEnumerator *e = [[manager directoryContentsAtPath:[NSString stringWithFormat:@"%@/man%d", manDirectory, i]] objectEnumerator];
				NSString *currItem;
				while (currItem = [e nextObject]) {
					NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
					NSRange sections;
					if (![currItem hasPrefix:@"."] && (sections = [currItem rangeOfString:@"."]).location != NSNotFound) {
						NSString *manName = [currItem substringToIndex:sections.location];

						NSRange filterRange = {NSNotFound, 0};
						if (indexFilter != nil) filterRange = [manName rangeOfString:indexFilter];
						if ((indexFilter == nil) || (filterRange.location != NSNotFound))
						{
							if (indexFilter != nil)
							{
								// Adjust manName to contain emboldened substring
								manName = [[[NSMutableString alloc] initWithString:manName] autorelease];
								[(NSMutableString*)manName replaceOccurrencesOfString:indexFilter withString:[NSString stringWithFormat:@"%@", indexFilter] options:0 range:NSMakeRange(0, [manName length])];
							}

							// We're showing an item, if we haven't put a directory header in yet, do it now
							if (addedDirectoryHTML == NO)
							{
								[webPage appendString:[NSString stringWithFormat:@"
Manual pages under %@.
", manDirectory]];
								addedDirectoryHTML = YES;
							}

							// Add section HTML if we haven't yet
							if (addedSectionHTML == NO)
							{
								switch (i) {
									case 1:
										[webPage appendString:@"
General Commands
"];
										break;
									case 2:
										[webPage appendString:@"
System Calls
"];
										break;
									case 3:
										[webPage appendString:@"
Library Calls
"];
										break;
									case 4:
										[webPage appendString:@"
Kernel Interfaces
"];
										break;
									case 5:
										[webPage appendString:@"
File Formats
"];
										break;
									case 6:
										[webPage appendString:@"
Games
"];
										break;
									case 7:
										[webPage appendString:@"
Miscellaneous Information
"];
										break;
									case 8:
										[webPage appendString:@"
System Manager's Manuals
"];
										break;
									case 9:
										[webPage appendString:@"
Kernel Developers Guide
"];
										break;
									default:
										[webPage appendString:@"
Unknown
"];
										break;
								}
								addedSectionHTML = YES;
							}

							// Add a cell for this item, and a new row if appropriate
							if (j == 0)
								[webPage appendString:@"
"];
							else
								[webPage appendString:@""];

							[webPage appendString:[NSString stringWithFormat:@"%@(%d) - ", currItem, manName, i]];

							NSString *manFilePath = [NSString stringWithFormat:@"%@/man%d/%@", manDirectory, i, currItem];

							//Unstuff if necessary
							if ([manFilePath hasSuffix:@".gz"]) {
								manFilePath = [self unzip:manFilePath];
							}

							NSString *manFile = [NSString stringWithContentsOfFile:manFilePath encoding: NSUTF8StringEncoding error: NULL];

							if ([manFile hasPrefix:@".so"]) {
								NSArray *parts = [manFile componentsSeparatedByString:@"\n"];
								parts = [[parts objectAtIndex:0] componentsSeparatedByString:@" "];

								NSString *newLocationOfFile = [NSString stringWithFormat:@"%@/%@", manDirectory, [parts objectAtIndex:1]];
								//Unstuff if necessary
								if ([manFilePath hasSuffix:@".gz"]) {
									newLocationOfFile = [self unzip:newLocationOfFile];
								}

								manFile = [NSString stringWithContentsOfFile:newLocationOfFile encoding: NSUTF8StringEncoding error: NULL];
							}

							if ((sections = [manFile rangeOfString:@".Nd"]).location != NSNotFound) {
								NSRange newLine = [manFile lineRangeForRange:NSMakeRange(sections.location, 2)];

								if (newLine.location != NSNotFound) {
									NSString *description = [manFile substringWithRange:newLine];

									if ([description hasPrefix:@".Nd "])
										description = [description substringFromIndex:4];
									if (description)
										[webPage appendString:[self encodeForHTML:description]];
								}
							}
							else if ((sections = [manFile rangeOfString:@".SH NAME" options:NSCaseInsensitiveSearch]).location != NSNotFound || (sections = [manFile rangeOfString:@".SH \"NAME\"" options:NSCaseInsensitiveSearch]).location != NSNotFound) {

								// move forward to next line
								NSRange newLine = [manFile lineRangeForRange:NSMakeRange(sections.location + 15, 2)];

								NSString *description = [manFile substringWithRange:newLine];
								unsigned int dashLocation = [description rangeOfString:@"-"].location;

								// Move forward to next line for multi-line descriptions
								while (dashLocation == NSNotFound) {
									newLine = [manFile lineRangeForRange:NSMakeRange(newLine.location + newLine.length + 2, 1)];
									description = [manFile substringWithRange:newLine];
									if ([description hasPrefix:@"."]) //already not description
										break;
									dashLocation = [description rangeOfString:@"-"].location;
								}

								if (dashLocation != NSNotFound) {
									description = [description substringFromIndex:dashLocation +2];
									if (description)
										[webPage appendString:[self encodeForHTML:description]];
								}
							}

							if (j == 0) {
								[webPage appendString:@"	"];
								j++;
							}
							else {
								j = 0;
								[webPage appendString:@"
"];
							}

							itemsAdded += 1;
						}
					}
					//else {
					//	[webPage appendString:@"Unknown File"];
					//}
					[pool release];
				}
				[webPage appendString:@"
"];
				}
			}
		}

		// IF we didn't add any results, then we let the user know there were no matches
		if (itemsAdded == 0)
		{
			[webPage appendString:[NSString stringWithFormat:@"
Sorry, no man page names contain the string \"%@\"
", indexFilter]];
		}

		[webPage appendString:HTML_FOOTER];

		// Cache this index
		[webPage writeToFile:thisIndexCacheFilePath atomically:NO encoding: NSUTF8StringEncoding error: NULL];
	}

	// Try to open whatever we've got
	[self openInBrowserThePath:thisIndexCacheFilePath inNewWindow:openInNewWindow];
	[NSApp terminate:self];
}

#pragma mark -
#pragma mark NSTasks
- (NSString *)manualPageFor:(NSString *)manualPage section:(NSString *)section {

	NSTask *findPathTask = [[[NSTask alloc] init] autorelease];
	NSPipe *findPathPipe = [NSPipe pipe];
	NSFileHandle *findPathHandle = [findPathPipe fileHandleForReading];
	[findPathTask setStandardOutput:findPathPipe];
	// Changes by Tetsuro Kurita
	// http://homepage.mac.com/tkurita/scriptfactory/en/
	//[findPathTask setLaunchPath:@"/usr/bin/man"];
	//char *login_shell = getenv("SHELL");
	[findPathTask setLaunchPath:@"/bin/bash"];
	//-M use the -M option with the paths listed
	if (section)
		 [findPathTask setArguments:[NSArray arrayWithObjects:@"-lc", @"/usr/bin/man -w $0 $1", section, manualPage, nil]];
		//[findPathTask setArguments:[NSArray arrayWithObjects:@"-w", section, manualPage, nil]];
	else
		[findPathTask setArguments:[NSArray arrayWithObjects:@"-lc", @"/usr/bin/man -w $0", manualPage, nil]];
		//[findPathTask setArguments:[NSArray arrayWithObjects:@"-w", manualPage, nil]];

	[findPathTask launch];

	/*
	NSString *findManPageCommand;
	if (section)
		findManPageCommand = [NSString stringWithFormat:@"/usr/bin/man -w %@ %@", section, manualPage];
	else
		findManPageCommand = [NSString stringWithFormat:@"/usr/bin/man -w %@", manualPage];
	[findPathTask setArguments:[NSArray arrayWithObjects:@"-lc", findManPageCommand, nil]];
	 */

	NSString *pathToManual = nil;
	NSData *dataRecieved = [findPathHandle readDataToEndOfFile];
	if ([dataRecieved length]) {
		pathToManual = [[[NSString alloc] initWithData:dataRecieved encoding:NSASCIIStringEncoding] autorelease];

		//remove EOF
		pathToManual = [pathToManual substringToIndex:[pathToManual length] -1];

		// by billyw forum
		//To get just the last line of the output in case fortune or other programs that output data during login are installed
		NSArray *cmdLines = [pathToManual componentsSeparatedByString: @"\n"];
		pathToManual = [cmdLines lastObject];

		//make sure it starts with a / otherwise make nil
		if (![pathToManual hasPrefix:@"/"])
			pathToManual = nil;
	}
	[findPathHandle closeFile]; //FZiegler
	//[findPathTask terminate];
	//[findPathTask release];

	//	Try lowercase string if not already lowercase
	// try removing any period extensions
	if (pathToManual == nil) {
		int aLocation;
		if ((aLocation = [manualPage rangeOfString:@"." options:NSBackwardsSearch].location) != NSNotFound) {
			manualPage = [manualPage substringToIndex:aLocation];
			return [self manualPageFor:manualPage section:section];
		}

		NSString *lowerCaseManualPage = [manualPage lowercaseString];
		if (![lowerCaseManualPage isEqualToString:manualPage])
			return [self manualPageFor:lowerCaseManualPage section:section];
	}

	//unzip man path if necessary into temp
	if ([pathToManual hasSuffix:@".gz"]) {
		pathToManual = [self unzip:pathToManual];
	}

	//If the path was not found recursively remove path extensions see if the path can be found
	if (pathToManual == nil && ![[manualPage pathExtension] isEqualToString:@""]) {
		pathToManual = [self manualPageFor:[manualPage stringByDeletingPathExtension] section:section];
	}

	return pathToManual;
}

//bzip unzip
//usr/bin/bzip2 -c -d  .bz2
///usr/bin/zcat .z
// Better if done with the zlib library in order to avoid opening many threads when building the index
//#include "/usr/include/zlib.h"
- (NSString *)unzip:(NSString *)aPath {
	/*
	gzFile fileOpened = gzopen([aPath UTF8String], "rb");

	if( file_exists($mygzfile) {
	   $zd = gzopen($mygzfile);
	   char buffer;
	   while(gzread($zd, , 10000)) != EOF ) {
	   $bytes += strlen($zdcontents);
	   }
	   gzclose($zd);
	   echo "The uncompressed file has $bytes bytes in it\n";
	   }

	 Byte*        uncompressedBytes;
	 uLong        len, comprLen;
	 int            err;
	 int            memFile, bytesWritten;
	 gzFile        gzmemFile;

	 //    uncompressedBytes and len have been initialized (I've check in the
	 debugger)

	 memFile = shm_open("/memfile", O_RDWR | O_CREAT, 0777);

	 gzmemFile = gzdopen(memFile, "wb");
	 //    if I write to "tmpFile" (instead of an in-memory file) then
	 everything works
	 //    gzmemFile = gzopen("tmpFile", "wb");
	 bytesWritten = gzwrite(gzmemFile, uncompressedBytes, len);

	 err = gzclose(gzmemFile);

	 //    Do some fun stuff

	 shm_unlink("/memfile");

	gzclose(fileOpened);
	*/
	NSTask *gunzipTask = [[NSTask alloc] init];
	NSPipe *gunzipPipe = [NSPipe pipe];
	NSFileHandle *gunzipHandle = [gunzipPipe fileHandleForReading];
	[gunzipTask setStandardOutput:gunzipPipe];
	[gunzipTask setLaunchPath:@"/usr/bin/gunzip"];
	[gunzipTask setArguments:[NSArray arrayWithObjects:@"-c", aPath, nil]];
	//[gunzipTask waitUntilExit];
	[gunzipTask launch];

	NSString *unzippedPath = nil;
	NSData *dataRecieved = [gunzipHandle readDataToEndOfFile];
	if ([dataRecieved length]) {
		NSString *unzippedString = [[[NSString alloc] initWithData:dataRecieved encoding:NSASCIIStringEncoding] autorelease];

		//remove EOF
		unzippedString = [unzippedString substringToIndex:[unzippedString length] -1];

		unzippedPath = [NSString stringWithFormat:@"%@/%@.txt", NSTemporaryDirectory(), [[aPath lastPathComponent] stringByDeletingPathExtension]];
		[unzippedString writeToFile:unzippedPath atomically:NO encoding: NSUTF8StringEncoding error: NULL];
	}

	[gunzipHandle closeFile];  //FZiegler
	[gunzipTask terminate];
	[gunzipTask release];
	return unzippedPath;
}

// /usr/bin/groff -Wall -mtty-char -Tascii -mandoc -c /Users/fa/Desktop/mysql.1
- (NSString *)asciiFormatForManualPath:(NSString *)manualPagePath  {
	NSString *asciiFormatedOutput = nil;

	 // We should pass the string through tbl in order to handle tables

	//pass to tbl
	// Get the output for the man path formated by groff for ascii
	NSTask *tblTask = [[[NSTask alloc] init] autorelease];
	NSPipe *tblPipe = [NSPipe pipe];
	NSFileHandle *tblHandle = [tblPipe fileHandleForReading];
	[tblTask setLaunchPath:@"/usr/bin/tbl"];
	[tblTask setStandardOutput:tblPipe];
	[tblTask setArguments:[NSArray arrayWithObjects:manualPagePath, nil]];
	[tblTask launch];

	NSData *dataRecieved = [tblHandle readDataToEndOfFile];
	if ([dataRecieved length]) {
		asciiFormatedOutput = [[[NSString alloc] initWithData:dataRecieved encoding:NSASCIIStringEncoding] autorelease];
	}

	// NSLog(@"%@", asciiFormatedOutput);
	[tblHandle closeFile];  //FZiegler

	//pass to groff
	NSString *tempLocation = [NSTemporaryDirectory() stringByAppendingPathComponent:@"BwanaTemp.txt"];
	// NSLog(@"%@", tempLocation);
	[asciiFormatedOutput writeToFile:tempLocation atomically:NO encoding: NSUTF8StringEncoding error: NULL];

	 // Get the output for the man path formated by groff for ascii
	 NSTask *groffTask = [[[NSTask alloc] init] autorelease];
	 NSPipe *groffPipe = [NSPipe pipe];
	 NSFileHandle *groffHandle = [groffPipe fileHandleForReading];
	 [groffTask setLaunchPath:@"/usr/bin/groff"];
	 [groffTask setStandardOutput:groffPipe];
	 [groffTask setArguments:[NSArray arrayWithObjects:@"-Wall", @"-mandoc", @"-Tascii", tempLocation, nil]];
	 [groffTask launch];

	 dataRecieved = [groffHandle readDataToEndOfFile];
	 if ([dataRecieved length]) {
		asciiFormatedOutput = [[[NSString alloc] initWithData:dataRecieved encoding:NSASCIIStringEncoding] autorelease];
	 }

	 [groffHandle closeFile];  //FZiegler

	/*
	// Get the output for the man path formated by groff for ascii
	NSTask *groffTask = [[[NSTask alloc] init] autorelease];
	NSPipe *groffPipe = [NSPipe pipe];
	NSFileHandle *groffHandle = [groffPipe fileHandleForReading];
	[groffTask setLaunchPath:@"/usr/bin/groff"];
	[groffTask setStandardOutput:groffPipe];
	[groffTask setArguments:[NSArray arrayWithObjects:@"-mandoc", @"-Tascii", manualPagePath, nil]];
	[groffTask launch];

	NSData *dataRecieved = [groffHandle readDataToEndOfFile];
	if ([dataRecieved length]) {
		asciiFormatedOutput = [[[NSString alloc] initWithData:dataRecieved encoding:NSASCIIStringEncoding] autorelease];
	}

	[groffHandle closeFile];  //FZiegler
	 */

	return asciiFormatedOutput;
}

- (BOOL)isLeopard {
	if (osVersion == 0) {
		Gestalt(gestaltSystemVersion,&osVersion);
		if (osVersion >= 0x00001050)
			isLeopard = YES;
	}

	return isLeopard;
}

#pragma mark -
#pragma mark Helpers
- (NSMutableString *)encodeForHTML:(NSString *)aString {
	if (aString == nil)
		return nil;

	NSMutableString *stringToEncode = [NSMutableString stringWithString:aString];

	unsigned int i, count = [stringToEncode length];
	for (i =0; i < count; i++) {
		//as we replacce working repeat it grows
		unichar character = [stringToEncode characterAtIndex:i];

		if (character == '&') {
			[stringToEncode replaceCharactersInRange:NSMakeRange(i,1) withString:@"&"];
			count = [stringToEncode length];
			i += 4; //Move forward the amp;
		}
		else if (character == '<') {
			[stringToEncode replaceCharactersInRange:NSMakeRange(i,1) withString:@"<"];
			count = [stringToEncode length];
			i += 3; //Move forward the lt;
		}
		else if (character == '>') {
			[stringToEncode replaceCharactersInRange:NSMakeRange(i,1) withString:@">"];
			count = [stringToEncode length];
			i += 3; //Move forward the lt;
		}
	}

	return stringToEncode;
}

#pragma mark NSWindow Delegate
- (BOOL)windowShouldClose:(id)sender {
	[NSApp terminate:self];
	return YES;
}

@end

#pragma mark -
@implementation MyController (ApplicationNotifications)

- (void)applicationWillFinishLaunching:(NSNotification *)aNotification {

	//create cache folder if it doesn't exist
	cachesFolder = [[@"~/Library/Caches/Bwana" stringByExpandingTildeInPath] retain];
	if (![[NSFileManager defaultManager] fileExistsAtPath:cachesFolder])
		[[NSFileManager defaultManager] createDirectoryAtPath:cachesFolder attributes:nil];

	//Register for the URL get event
	[[NSAppleEventManager sharedAppleEventManager] setEventHandler:self andSelector:@selector(handleAppleEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL];
}

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
	// The program was opened with a double clik not by the system, show the main window
	if (!dontDisplayWindow) {
		callingApplication = [@"Safari" retain];

		[versionTextField setStringValue:[NSString stringWithFormat:@"Version: %@",[[[NSBundle bundleForClass:[self class]] infoDictionary] objectForKey:@"CFBundleVersion"] ]];
		[[versionTextField window] makeKeyAndOrderFront:self];
	}
}

- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag {
	if (!flag) {
		[versionTextField setStringValue:[NSString stringWithFormat:@"Version: %@",[[[NSBundle bundleForClass:[self class]] infoDictionary] objectForKey:@"CFBundleVersion"] ]];
		[[versionTextField window] makeKeyAndOrderFront:self];
	}

	return NO;
}

@end

redpajama_set_name: RedPajamaGithub


Much of the United States is an ancient sea bed. This makes those areas, and the sand floored barn prime areas for the alpaca to ingest sand. Horses, cows, alpacas and probably goats and sheep can all suffer or die from sand ingestion. Sand colic is easy to control in the alpaca once the danger is acknowledged and the symptoms are recognized.
At the beginning of the growing season, those on natural pastures and dry lots, will notice everything turning green and the alpacas nipping the new shoots close to the ground and will pull up fragile roots full of moist sandy soil. This is how the alpaca gets a belly full of sand. Other ways they pick up sand is by the owner spilling salt or minerals on a sandy floor, debris in the hay and supplement, feeding on the ground or barn flooring or by pica (they just eat dirt usually due to mineral defiencies) or the alpaca is eating small leafy hay (alfalfa, clover or trefoil) off of a sandy feeding area.
How to tell if your alpaca is picking up sand is to check the bottom of the water source. Are they leaving sand from their mouth when they drink? Do they have a dirt lining on the side of their mouth after having access to plants growing in pens or fields? Do you have sand or gravel tailings as a barn floor? Do you have your minerals and salt where they leach on to sand, dirt or tailings?
Check their feces for sand by placing feces in a glove or Ziploc bag with water, smoosh it until it is dissolved, hold the bag or glove with your fingers on one side and run your thumb nail down the bag feeling for sand. Seeds also feel like sand but are visually identifiable.
Symptoms are only visible in cases of a severe sand load. Alpacas carrying sand will be the last in line leaving the barn to run into a field. They won't run far. Their bellies bounce funny when they do run. Look for a sinking in of the high abdomen between the hips and the ribs. This will even show on heavy alpacas. It is the weight of the sand that causes this. An alpaca with a severe load will walk like their feet hurt and they will have soft stool. Always check for sand in the feces and check for foot problems. Older females are the most severely affected especially in their third trimester.
Bellies full of sand hurt. When this happens the alpaca will not drink cold water. Sand without water will stop moving through the gut. When the weather is cold carry warm water to your alpacas and keep them hydrated.
A sand load can also be diagnosed buy ultrasound and x-ray. The bag or glove is cheaper.
if you suspect sand colic, it is time to seek the advice of a vet.
Feed safe by keeping leafy hay off of sandy floors and the ground. Clean up all salt and mineral spills. Provide warm water in cold weather. Check often for sand and the sand symptoms. Be aware that well nurtured alpacas can ingest sand. May your alpacas always be well.
"When near the buildings I met a white man, in such an unexpected elegance of get-up that in the first moment I took him for a sort of vision. I saw a high starched collar, white cuffs, a light alpaca jacket, snowy trousers, a clean necktie, and varnished boots. No hat. Hair parted, brushed, oiled, under a green-lined parasol held in a big white hand. He was amazing, and had a pen holder behind his ear..."


text:
Q: Pycharm: How to build and install (on other computer) custom module? In pycharm (2018.3.5 community edition) I have created a new project my_module. In my_module dir, I have created a new (python) file mymodule.py in which I have put:
LOG_LEVEL = 1

def print_text(text):
    print(text)

class MyClass:
    def __init__(self, text):
        self.text = text

    def print(self):
        print(self.text)

if __name__ == '__main__':
    print('LOG_LEVEL =', LOG_LEVEL)
    print_text('abc')
    obj = MyClass('test')
    obj.print()

If run mymodule.py I get output:
LOG_LEVEL = 1
abc
test

which is OK.
I would like to use this mymodule.py privately on several computers by simple import mymodule (from any location).
I found out that I can use pycharm's menu Tools > Create setup.py to create setup.py with the contents:
from setuptools import setup

setup(
    name='mymodule',
    version='0.0.1',
    packages=[''],
    url='',
    license='',
    author='myself',
    author_email='',
    description=''
)

If I enter (cwd) my_module directory (in which is mymodule.py) and execute:
sudo pip3 install .

Processing /home/user/Python/my_module
Installing collected packages: mymodule
  Running setup.py install for mymodule ... done
Successfully installed mymodule-0.0.1

After this action I can start python interpreter out of pycharm in any folder and execute:
Python 3.7.2 (default, Jan 10 2019, 23:51:51)
[GCC 8.2.1 20181127] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import mymodule
>>> mymodule.LOG_LEVEL
1
>>> mymodule.print_text('abc')
abc
>>> obj = mymodule.MyClass('test')
>>> obj.print()
test

Which is OK. I read that instead of sudo pip3 install . I can use sudo install -e . which will update mymodule in python repository with each change of mymodule.py (haven't tried it yet, but I would rather update mymodule from version to version manually).
For development computer so far is so good.
But if I want to install mymodule on some other computer, what should I do? I believe that I should build a tar.gz from my_module directory with all necessary files, transfer this tar.gz file to other computer and than execute there... what?
mymodule should stay private, I don't want to expose it publically (I am still in the learning process).
I noticed that pycharm has menu option Tools > Run setup.py Task, that provides (not all options are visible) something like this:

Can someone give to me a hint how to:

*

*update module on development computer? Should I just increment the
version in setup.py and afterwards execute sudo pip3 install . if I
would like to manually control when new version is released locally?
Is there a better way (less steps) to do it directly from pycharm somehow?

*What would be the easiest way (I would like to use a script to copy and install mymodule on some other computers) to install/update mymodule on other computers (privately)?

A: If you don't want to publish your module on pypi then the simplest version of private publishing is to put your code in github and declare it as a VCS dependency in other projects. See this for more details.
Or even simpler just checkout a git tag that versions your library and pip install the local checked out code.
By the way pycharm has nothing to do with this. I'd recommend you also get used to the command line python tools.


Gift of Code - Create A Better Future with Code!
GIFT OF CODE believes that every young person should have an opportunity to succeed by having access to a computer, internet, and quality training in computer programming.
We give underprivileged youth a computer, monitor, mouse, and internet service. We provide them with the right mentors, trainings, and assist with internship & employment opportunities.
We support our projects by offering affordable online and in-person workshops, classes, coding events, and trainings to the public.
50% of our profits goes to the Gift of C.O.D.E. projects that helps inner city youth, foster kids, and kids from third world countries.


This is the Shared Security Weekly Blaze for August 6, 2018 sponsored by Security Perspectives – Your Source for Tailored Security Awareness Training and Assessment Solutions and Silent Pocket. This episode was hosted by Tom Eston. Listen to this episode and previous ones direct via your web browser by clicking here!
This is your Shared Security Weekly Blaze for August 6, 2018 with your host, Tom Eston. In this week's episode: The Quiet Skies TSA surveillance program, SIM hijacking and the Reddit data breach and Sextortion scams.
If you like our weekly podcast we would really appreciate you leaving a five star review in iTunes. We'll be sure to thank you on the show! Click the iTunes link in our show notes for this episode to leave us a review and thank you for your support!
Ever feel like you're being followed when you're at the airport or while on a flight recently? Well you may actually may have been followed as the Boston Globe reported last week that federal air marshals are following US citizens that are not suspected of a crime at airports and on airplanes. The previously unknown program called "Quiet Skies" has caused controversy within the Transportation Security Administration (aka: the TSA) as thousands of US citizens that are not on any watch list are being surveilled and observed to see if they violate 15 rules which are part of a checklist that air marshals need to follow. Characteristics that air marshals look for include things like: excessive fidgeting, wide-open staring eyes and even if the subject slept on the flight or went to the bathroom. According to the report, about 35 passengers are targeted every day and there are 2,000 to 3,000 federal air marshals that conduct this and other air marshal duties across airports in the United States.
What I find interesting is that federal air marshal's themselves are questioning the need for the Quiet Skies program. One air marshal said to the Boston Globe "What we are doing [in Quiet Skies] is troubling and raising some serious questions as to the validity and legality of what we are doing and how we are doing it". Groups such as the ACLU are now involved questioning if passenger's constitutional rights are being violated by this program given that people's race, religion or mental health may put someone under surveillance. Of course, the TSA declined to discuss the Quiet Skies program but noted that "federal air marshals leverage multiple internal and external intelligence sources in its deployment strategy".
As many of you are hopefully aware, the TSA in the United States has come under much scrutiny over the last several years due to treatment of passengers during screening as well as the federal air marshal program itself. It should be interesting to see how this recent revelation about the previously secret "Quiet Skies" program puts more pressure on Congress to further scrutinize the activities of the TSA and the Department of Homeland Security.
Last Thursday, the popular news and social media site Reddit announced that they had a data breach. The data breach apparently happened in June and exposed some user data including current email addresses and a backup database which had usernames and hashed passwords from 2007. The attackers apparently targeted several Reddit employee accounts that were being used with Reddit's cloud and source code providers. Reddit noted that while they did secure these employee accounts with SMS based two-factor authentication, the attackers were still able to compromise these accounts even with two-factor authentication enabled. It's important to note that the attackers did not compromise further Reddit systems or user accounts.
This most recent data breach example further demonstrates that sites and services need to move away from using SMS based two-factor authentication and start using authenticator apps like Google Authenticator or provide methods to use a hardware token or solution such as a YubiKey. As we've mentioned before on the podcast, there has been an large increase in attacks targeting SMS two-factor authentication called SIM hijacking or also known as SIM port out scams.
SIM hijacking is where an attacker will either call your mobile phone company or show up at the mobile phone store, impersonating you in an attempt to request a new SIM card for your phone number. In some cases the attacker may also attempt to move your mobile number over to a new carrier. Once the attacker has control of your mobile number, they now have access to reset credentials or request SMS two-factor authentication codes for any sites that use a mobile phone number for access.
The way to help prevent this attack is to create a validation code with your mobile carrier. Depending on the mobile carrier you use this may be described as a "port validation" code but some carriers may call this a phone passcode or PIN. Once this code is enabled on your account, you'll need to provide this to the mobile carrier in order to obtain a new SIM card or port your number to a new carrier. Our advice is to enable this feature with your mobile carrier to help prevent this attack from happening to you. You may have to research this process on your mobile carrier's website as each company has a different procedure for enabling this feature. Also note, you should ensure that this passcode or PIN is unique and different than any other passcode or PIN that may be in use with your mobile carrier such as the password for accessing your account for online access. Lastly, the other option if you find a site that does not allow any other form of two-factor authentication besides SMS, is to set up a free virtual phone number through a service like Google Voice and use that number to receive SMS based text messages. Check out our show notes for a link to further reading about preventing SIM hijacking attacks.
The EFF released a really good guide last week regarding what to do if you're the victim of a sextortion scam. A sextortion scam is when a scammer will send thousands of emails to victims noting that they have your password that can be used to blackmail you. The scammer will say they have a video of you watching adult videos and will send it to your email contacts you if you don't pay a ransom in Bitcoin. The scam works because the password noted in the email may actually be a password that you've used or are currently using. The scammer does not get this password by hacking you or your accounts but rather through a previously disclosed data breach where your email address and password have been publicly disclosed. The scam email uses typical phishing tactics of a threat as well as the typical bad grammar which should indicate to you that this is a scam. Check out our show notes for the guide from the EFF about this scam as well as to view several email variations that might end up in your inbox. As always, be sure to use complex and unique passwords, utilize a password manager and always enable two-factor authentication on any online accounts that you use to prevent becoming a victim of a real attack.
This entry was posted in Podcast Episodes, Weekly Blaze Podcast and tagged ACLU, Cybersecurity, Data Breach, EFF, Mobile, Privacy, Quiet Skies, Reddit, Sextortion, SIM Hijacking, SMS, Surveillance, TSA, Two Factor Authentication, YubiKey. Bookmark the permalink.


A rendering of the University Place project, including the RIVET luxury apartments.
RIVET, a luxury apartment building in Jersey City, has opened leasing, it announced Wednesday.
The 163-unit property at 23 University Place Blvd. was developed by the Hampshire Cos. and Claremont Cos. Units range from 550 square feet to 1,300 square feet in studio, one- and two-bedroom layouts. The building is part of the University Place redevelopment plan.
Rents start at $1,600 a month, with occupancy to begin in July.
"RIVET offers all of the luxury and lifestyle amenities of comparable waterfront/downtown properties at affordable price points," Richard Sciaretta, a director with Far Hills-based Claremont Cos., said in a prepared statement.
Amenities include a cybercafe, a courtyard with sundeck and more, an indoor lounge, a fitness center and more.
The property also includes 10,000 square feet of retail space, as well as parking.


text:
About ZFNZ
Jewish Youth Leadership Development Worker
Info for Jewish Youth
The Hague Initiative for International Cooperation
The Hague Initiative for International Cooperation (thinc.) is an initiative dedicated to the promotion of the Rule of Law in international relations to advance peace and security, friendly relations among nations, and the peaceful resolution of conflicts. The focus of our initiative is the Israel-Palestine conflict.
https://www.thinc.info
info@zfnz.org.nz
PO Box 26442, Epsom,
Auckland. 1344
ZFNZ Donation
Please donate to The Zionist Federation of New Zealand by clicking on the button below.
Donations are made securely via Stripe.
Donate by Credit or Debit Card »
© 2022 Zionist Federation of New Zealand | Privacy


text:
CA Officer Awarded $4.8 Million in Disability Discrimination Suit
October 9, 2017 • by Staff Writer
A Los Angeles jury has awarded $4.8 million to a former South Pasadena police officer who alleged he was fired by the city because of a disability.
After a two-week trial, the jury on Thursday found unanimously in favor of Timothy Patrick Green, an 18-year veteran who was dismissed from the Police Department in 2013.
Green's lawsuit said the reason given for his dismissal, dishonesty, was untrue and that the real reason was discrimination based on his attention-deficit/hyper-active disorder.
South Pasadena City Atty. Teresa L. Highsmith did not return a call from The Times.
Former Police Chief Joseph Payne, who retired before Green's dismissal, testified on his behalf, saying he was "a good officer, a good man, perhaps the best cop in the department at community policing," said Green's attorney, Vincent Miller.
Read more about Lawsuits Discrimination Claims California the west California agencies


Are you looking for an extravagant and elegant limousine for your next event? If so, then look no further. Our EWR NJ Limo is a top most limo company offering a finest Hummer Limo Service NJ. Whether you are celebrating a birthday or taking an entire bachelorette or bachelor party out for a night or enjoying with your friends to get ultimate prom experience, let our New Jersey escalade limo service arrange the whole event in style. Our elegant, reliable and affordable Hummer limo service can get you and your guests in utmost comfort and safety. With extensive knowledge and experience, we will able to maintain a high level of customer satisfaction from our clients.
Our diverse fleets of latest model vehicles are professionally maintained to offer you a higher level of wellbeing while riding. We are committed to provide exceptionally equipped Cheap Limo Service on the day of your event in pristine and picture perfect condition. Our well-trained, knowledgeable courteous chauffeurs are readily available to fulfill your needs. They think that you are more than a passenger. As a valuable client, our Escalade limo service NJ promise you to meet and exceed your expectations for your partying event. Without offering any stress, our professional chauffeur will drive you safely and comfortably to your desirable venue.


Well done with the seeds, Caroline! I think all you can do is try to enjoy whatever you can in each day. The storms will come along anyway and usually out of the blue, so you have to make the most of the calm and good days. Keep going, Caroline. You are doing really well.
I have been wondering about keeping a rabbit - there is one up for adoption from the animal rescue place - but i know absolutely nothing about rabbits and this one says he would make a good house rabbit which worried me slighlty as i have other peoples dogs who come for their holidays sometimes, so not sure it would work very well with a free range tasty house rabbit around. - To cap it off though a friend of my daughters has a landlord who is putting the house on the market and he might need some temporary accomodation for his pets if he ends up sofa surfing - two terrapins, two house cats and wait for it - two chickens - one of which is a permanant house chicken because its blind and a bit lame and old but he couldnt bear to kill it ( the other is a bit poorly but might be better and back out on his allotment where his others are kept by then hopefully ) - to explain how this happens, i already have three fish tanks - each one containing a fish that has been rescued and then brought to my door - each fish not able to live with any of the others - two of them were accomdated "temporarilly" allegedly -one i expected a couple of years tops (what did i know about parrot fish he has been here 8 now ) and now terrrapins - who will also have to be housed separately - my living room is going to look like a pet shop aquarium section soon.- house cats i assume dont go out, so thats going to mean litter trays (yuk) - and a house chicken which apparently gets on well with the cats - i assume that isnt house trained at all - although chickens do like scratching - maybe it can empty the litter tray and maybe it could spend some time at least during the day in a nice (padded) run in the garden - or maybe i should have a nice padded run and a strait jacket. :rolleyes:so anyway - it looks like i wont be adopting benjamin bunny or any other bunnies until that is sorted.
This is precisely why i dont have chickens, because they would be named, and be pets and taken to vets and kept nice and cozy, and then everyone would bring me their old lame ones knowing i am a soft touch.I also get poorly pigeons , blackbirds and hedgehogs dropped off from time to time.
In the middle of all the pain that brings us here, its important to be able to giggle i think.


I think I'm looking for the same thing. Did you ever find them? If so, sure would like the info on where.
I have been trying to find "seats" for a Vogue Flair LX above ground pool. Mine are all cracked and have popped up......In other words, they are history!! Thank you.
Looking for same pool connectors #1490001. Did you find them?
Does anyone have any pictures of the Vogue Portico Oval Pool.
I found that Morgan Building and Spas in Texas may have part 1490001 pool connectors for old Haugh's above ground pools.
I am looking for top rails for a haugh's 27 ft round above ground pool.Does anyone have any idea where to find some.
I am helping a friend setup an above ground pool and some of the plates for the base are rusted and broken. We are trying to find these parts and so far have had no luck. I have pictures I can share but I was wondering what the base is called? And where can we could find replacement parts for this metal ring pieces? Any help is appreciated.
We cannot find the manufacturer name on the pool. It is a 24 foot above ground round pool. I have read that you can make most any bottom rim work as long as it is the same size as the top, is this true?
Did you ever find the parts? I need the exact same ones.
I am looking for replacement plastic connectors (caps) for an old Haugh's 15 foot above ground pool. I believe the part # is 1490001.
I am looking for the same part # 1490001. Have you had any luck?
My problem is that I bought a 2009 Vogue 15' X 30' Oval Pool still in the box from an individual. Problem is that it was missing the box with the bottom metal straps , nuts and bolts, and the top parts of the posts (like metal clamps that hold the walls) also the metal sheets on the straps.
My question is, will any straps, clamps, etc from any 15' X 30' pool work? I understand Vogue has sold out and I can't find any parts online.
I am looking for 6 top plates for my pool. They are identical to the foot plates. It is approximately 6 inches wide, 4 inches tall, and the rail it goes over is around 7/8 inch - 1 inch wide. I have looked everywhere with no luck. The pool is 24ft round and 54 inch deep. I have no idea the brand of pool it is. Any help would be greatly appreciated. Thank You!!
Did you find these plates? I am having the same problem.
I have a Baycrest pool made by Seaspray. I need new resin top caps. Where can I find these?
I am looking for replacement seats to a 24' above ground Artesian pool.
I have a 24ft Caribbean pool I'm looking to replace the top rail connectors , do know where I can find them?
I Need to know where to find coping covers for my Silverado 27' pool. Any help would be appreciated.
Hi, my name is Melinda. We recently bought a pool from a friend. The pool is 25 years old. When we got the pool we realized that the bottom tracts were rusted and that we needed clips..the pool is a Superior Hayward however we cannot find any place that sells these parts...do you know where we can find find these parts?
Just replaced the liner in a Patriot Bravado 24' x 52" pool. In the process one of the top clips was lost. The part number according to the BOM is T2983. Pool was purchased in summer of 2003.
I am also looking for T2983 bottom plate both top and bottom are the same so I got this number from top plate all bottoms are rusted this pool was purchased in 2002 I don't know the name of it I got it second hand so I can't find these parts anywhere any help would be appreciated.


text:
Zackary Napolitano
Bleacher Report gives the Steelers an A for Re-Signing JuJu Smith-Schuster
Big news came on Friday when JuJu Smith-Schuster decided to sign back with the Pittsburgh Steelers for another season. In JuJu's mind, this will give both sides more time to negotiate on a longer-term contract while still staying in Pittsburgh. It makes sense for both sides to get a deal done like this. JuJu will get paid $8 million for the 2021 season and the Steelers will have their cap issues fixed in 2022. There should be no reason why JuJu Smith-Schuster and the Pittsburgh Steelers can not get a deal done before he becomes a free agent again in 2022.
Just recently Bleacher Report gave grades out for Friday's signings throughout the NFL. They acknowledge that the 2021 offseason has not been friendly to the Pittsburgh Steelers. This is true because the Steelers are losing some key players like Bud Dupree, Mike Hilton, Matt Feiler, and now they could be losing Steven Nelson. With that being said the news on JuJu Smith-Schuster signing with the Pittsburgh Steelers yesterday gave Steeler fans a sigh of relief finally.
Bleacher Report says the market in 2021 for wide receivers has been ice-cold. That has forced some wide receivers to look at short-term "prove-it" deals in 2021 and it opened the door for JuJu Smith-Schuster to return back to the Pittsburgh Steelers. They say getting the fifth-year pro back on a one-year, $8 million dollar deal is a best-case scenario for Steelers general manager Kevin Colbert and quarterback Ben Roethlisberger. Therefore Bleacher Report gives the Steelers an A for bringing JuJu Smith-Schuster back to Pittsburgh.
Ahkello Witherspoon could be in line for a breakout year with the Steelers
Terrell Edmunds thinks Minkah Fitzpatrick deserves 'to get that top dollar'
Mike Tomlin called George Pickens 'raw' but also someone with 'a lot of talent'


text:
Q: Asynchronous MPI with SysV shared memory We have a large Fortran/MPI code-base which makes use of system-V shared memory segments on a node. We run on fat nodes with 32 processors, but only 2 or 4 NICs, and relatively little memory per CPU; so the idea is that we set up a shared memory segment, on which each CPU performs its calculation (in its block of the SMP array). MPI is then used to handle inter-node communications, but only on the master in the SMP group. The procedure is double-buffered, and has worked nicely for us.
The problem came when we decided to switch to asynchronous comms, for a bit of latency hiding.  Since only a couple of CPUs on the node communicate over MPI, but all of the CPUs see the received array (via shared memory), a CPU doesn't know when the communicating CPU has finished, unless we enact some kind of barrier, and then why do asynchronous comms?
The ideal, hypothetical solution would be to put the request tags in an SMP segment and run mpi_request_get_status on the CPU which needs to know. Of course, the request tag is only registered on the communicating CPU, so it doesn't work! Another proposed possibility was to branch a thread off on the communicating thread and use it to run mpi_request_get_status in a loop, with the flag argument in a shared memory segment, so all the other images can see. Unfortunately, that's not an option either, since we are constrained not to use threading libraries.
The only viable option we've come up with seems to work, but feels like a dirty hack. We put an impossible value in the upper-bound address of the receive buffer, that way once the mpi_irecv has completed, the value has changed and hence every CPU knows when it can safely use the buffer. Is that ok? It seems that it would only work reliably if the MPI implementation can be guaranteed to transfer data consecutively. That almost sounds convincing, since we've written this thing in Fortran and so our arrays are contiguous; I would imagine that the access would be also.
Any thoughts?
Thanks,
Joly
Here's a pseudo-code template of the kind of thing I'm doing. Haven't got the code as a reference at home, so I hope I haven't forgotten anything crucial, but I'll make sure when I'm back to the office...
pseudo(array_arg1(:,:), array_arg2(:,:)...)

  integer,      parameter : num_buffers=2
  Complex64bit, smp       : buffer(:,:,num_buffers)
  integer                 : prev_node, next_node
  integer                 : send_tag(num_buffers), recv_tag(num_buffers)
  integer                 : current, next
  integer                 : num_nodes

  boolean                 : do_comms
  boolean,      smp       : safe(num_buffers)
  boolean,      smp       : calc_complete(num_cores_on_node,num_buffers)

  allocate_arrays(...)

  work_out_neighbours(prev_node,next_node)

  am_i_a_slave(do_comms)

  setup_ipc(buffer,...)

  setup_ipc(safe,...)

  setup_ipc(calc_complete,...)

  current = 1
  next = mod(current,num_buffers)+1

  safe=true

  calc_complete=false

  work_out_num_nodes_in_ring(num_nodes)

  do i=1,num_nodes

    if(do_comms)
      check_all_tags_and_set_safe_flags(send_tag, recv_tag, safe) # just in case anything else has finished.
      check_tags_and_wait_if_need_be(current, send_tag, recv_tag)
      safe(current)=true
    else
      wait_until_true(safe(current))
    end if

    calc_complete(my_rank,current)=false
    calc_complete(my_rank,current)=calculate_stuff(array_arg1,array_arg2..., buffer(current), bounds_on_process)
    if(not calc_complete(my_rank,current)) error("fail!")

    if(do_comms)
      check_all_tags_and_set_safe(send_tag, recv_tag, safe)

      check_tags_and_wait_if_need_be(next, send_tag, recv_tag)
      recv(prev_node, buffer(next), recv_tag(next))
      safe(next)=false

      wait_until_true(all(calc_complete(:,current)))
      check_tags_and_wait_if_need_be(current, send_tag, recv_tag)
      send(next_node, buffer(current), send_tag(current))
      safe(current)=false
    end if

    work_out_new_bounds()

    current=next
    next=mod(next,num_buffers)+1

  end do
end pseudo

So ideally, I would have liked to have run "check_all_tags_and_set_safe_flags" in a loop in another thread on the communicating process, or even better: do away with "safe flags" and make the handle to the sends / receives available on the slaves, then I could run: "check_tags_and_wait_if_need_be(current, send_tag, recv_tag)" (mpi_wait) before the calculation on the slaves instead of "wait_until_true(safe(current))".

A: "...unless we enact some kind of barrier, and then why do asynchronous comms?"
That sentence is a bit confused.  The purpose of asynchrononous communications is to overlap communications and computations; that you can hopefully get some real work done while the communications is going on.   But this means you now have two tasks occuring which eventually have to be synchronized, so there has to be something which blocks the tasks at the end of the first communications phase before they go onto the second computation phase (or whatever).
The question of what to do in this case to implement things nicely (it seems like what you've got now works but you're rightly concerned about the fragility of the result) depends on how you're doing the implementation.    You use the word threads, but (a) you're using sysv shared memory segments, which you wouldn't need to do if you had threads, and (b) you're constrained not to be using threading libraries, so presumably you actually mean you're fork()ing processes after MPI_Init() or something?
I agree with Hristo that your best bet is almost certainly to use OpenMP for on-node distribution of computation, and would probably greatly simplify your code.   It would help to know more about your constraint to not use threading libraries.
Another approach which would still avoid you having to "roll your own" process-based communication layer that you use in addition to MPI would be to have all the processes on the node be MPI processes, but create a few communicators - one to do the global communications, and one "local" communicator per node.   Only a couple of processes per node would be a part of a communicator which actually does off-node communications, and the others do work on the shared memory segment.  Then you could use MPI-based methods for synchronization (Wait, or Barrier) for the on-node synchronization.   The upcoming MPI3 will actually have some explicit support for using local shared memory segments this way.
Finally, if you're absolutely bound and determined to keep doing things through what's essentially your own local-node-only IPC implementation --- since you're already using SysV shared memory segments, you might as well use SysV semaphores to do the synchronization.   You're already using your own (somewhat delicate) semaphore-like mechanism to "flag" when the data is ready for computation; here you could use a more robust, already-written semaphore to let the non-MPI processes know when the data is ready for computation (and a similar mechanism to let the MPI process know when the others are done with the computation).


text:
Q: ionic dailymotion iframe player "ERR_FILE_NOT_FOUND" when i use the browser to preview the app the video player works but on the phone it gives the error below i think the problem is that 'file:' that is added is what causing the problem but i cant seem to get rid of it with string.replace('file:','') :
The webpage at file://wwwdailymotion.com/embed/video/{video_id} could not be loaded becuase:

net::ERR_FILE_NOT_FOUND

player.ts:
this.video_link = "//www.dailymotion.com/embed/video/"+this.video_id;

player.html:
<iframe [src]="sanitizer.bypassSecurityTrustResourceUrl(video_link)" allowfullscreen frameborder="0" width="100%" height="200px" ></iframe>

A: This is because of how Cordova works. It loads your site from the file system on the device, so by not providing a protocol it assumes file://
Change your link to use https and I suspect it will work:
this.video_link = "https://www.dailymotion.com/embed/video/"+this.video_id;


text:
Publication of the FSF-Funded White Papers on Questions around Copilot
posted by martyb on Tuesday March 01 2022, @02:22AM
from the acquisition-for-30x-annual-recurring-revenue dept.
canopic jug writes:
The Free Software Foundation (FSF) has published five of the white papers it funded regarding questions about Microsoft Copilot. After Microsoft acquired GitHub, it set up a machine learning system to cull through its archive of software, called Copilot. The approach chosen and even the basic activity raises many questions starting with those of licensing.
Microsoft GitHub's announcement of an AI-driven Service as a Software Substitute (SaaSS) program called Copilot -- which uses machine learning to autocomplete code for developers as they write software -- immediately raised serious questions for the free software movement and our ability to safeguard user and developer freedom. We felt these questions needed to be addressed, as a variety of serious implications were foreseen for the free software community and developers who use GitHub. These inquiries -- and others possibly yet to be discovered -- needed to be reviewed in depth.
In our call for papers, we set forth several areas of interest. Most of these areas centered around copyright law, questions of ownership for AI-generated code, and legal impacts for GitHub authors who use a GNU or other copyleft license(s) for their works. We are pleased to announce the community-provided research into these areas, and much more.
First, we want to thank everyone who participated by sending in their papers. We received a healthy response of twenty-two papers from members of the community. The papers weighed-in on the multiple areas of interest we had indicated in our announcement. Using an anonymous review process, we concluded there were five papers that would be best suited to inform the community and foster critical conversations to help guide our actions in the search for solutions.
These five submissions are not ranked, and we decided it best to just let the papers speak for themselves. The papers contain opinions with which the Free Software Foundation (FSF) may or may not agree, and any views expressed by the authors do not necessarily represent the FSF. They were selected because we thought they advanced discussion of important questions, and did so clearly. To that end, the FSF is not providing any summaries of the papers or elaborating on our developing positions until we can learn further, through the community, how best to view the situation.
The FSF has also arranged upcoming discussions regarding these white papers. Microsoft bought GitHub in 2018 for $7.5 billion in stock, which if it had been real money instead it would have been 30 times the annual recurring revenue brought in by GitHub.
(2021) GitHub's Automatic Coding Tool Rests on Untested Legal Ground
(2020) GitHub Revamps Copyright Takedown Policy After Restoring YouTube-dl
(2018) Microsoft Agrees to Acquire GitHub... for $7.5 Billion [Updated]
(2014) Atom, GitHub's Editor Now Open Source
Publication of the FSF-Funded White Papers on Questions around Copilot | Log In/Create an Account | Top | 16 comments | Search Discussion
How many ways can we write "Hello World"? (Score: 4, Insightful) by JoeMerchant on Tuesday March 01 2022, @02:54AM
by JoeMerchant (3937) on Tuesday March 01 2022, @02:54AM (#1225758)
The Melancholy Elephants of C++ may be more numerous, with greater combinatorial space than the ones plying a 12 tone musical scale, but in the end... there are only so many ways to write certain phrases of code.
Much of my best Qt code is lifted verbatim from the API documentation. It's clear, readable, and anybody who doesn't understand what it is doing can copy it into a Google search and get the full API documentation around the snippet.
I suppose I should try CoPilot before taking a position, but until CoPilot starts coughing up nuggets like: "It looks like you're writing a music playlist database, would you like to try one of these?" copying little code snippets is like accidentally quoting movie lines - there are so many movies already made that you can't avoid repeating short phrases from several every time you speak.
Україна досі не є частиною Росії. https://en.interfax.com.ua/news/general/878601.html Слава Україні 🌻
Starting Score:
Moderation +2
Insightful=2, Total=2
Extra 'Insightful' Modifier 0
Karma-Bonus Modifier +1
Total Score: 4
Most public domain software is free, at least at first glance.


Join us on an Epic Bicycle Adventure experiencing the sights, sounds, and smells that makes Seattle a gem of a city. We meet up at Pier 54 on Seattle's Waterfront. This is where we equip you with your bicycle and helmet. After gearing up we bicycle through Seattle's Olympic Sculpture Park on our way to the Ballard Locks. You will get a chance to rest and explore this amazing area and really cool fish ladder. Our bicycle guides navigate you through the hipster neighborhoods of Ballard, Fremont, South Lake Union, Seattle Center, and Queen Anne on an amazing interurban bicycle trail. You will experience breathtaking views, old railroad bridges, a boat museum, and so much more. We end our adventure biking through the Heart of Seattle on our way back to Pier 54. Must be at least 12-years-old and 5 feet tall. $69 per person. Rider Experience: Intermediate. Must be somewhat in shape as there are a few minor hills on this tour. Most of the the elevation gain is done early in the tour with a relaxing restroom/water break after the toughest section. Must be a confident bike rider as we navigate through many trails and city biking on this Golden City Tour.


Have a code? Promotion Code Corporate Group IATA/TIDS Have a code?
Put your mind – and wallet – at ease. Book directly with us to enjoy the best rate on every reservation.
Savour more days for less with a longer break. Book ahead for time-limited savings. Explore special offers at Anantara Baan Rajprasong Bangkok Serviced Suites.
Book in advance to save up to 25%.
The longer you stay, the more you save. Extend your journey and luxuriate in savings of up to 30%.
*Foreign currency conversions are given as guidance only and are non-binding. Only the currency confirmed at time of booking is guaranteed.
Life is filled with opportunities to seek the exceptional, encounter the new and widen our horizons. Find your next extraordinary moment with Anantara.


Don't see the size you need? Message me! I love custom orders!
This beauty is made from a high quality yellow and green burlap fabric and a burlap ribbon center. This is the largest sunflower wreath I make and its widest point it is approximately 30 inches by 30 inches. See the additional photos for up-close color comparisons for matching. This wreath is now customizable! The photo depicts it as it looks with the avocado option for the leaves, but you can select from five different shades of green burlap for the leaves to make this wreath all your own! New color options for the flower center are now here! Please see the photo of options and indicate what center color you would like at checkout – the wreath pictured has a natural center.


ResinBound UVR Pro is specially formulated for the use of resin bound driveways and resin paving. Our resin is the most refined in the industry. It is one of the strongest and flexible available on the market. Mix with any colour resin bound mix to create a SuDs compliant, permeable surface. At Homelogic we only use the best materials installed to the highest standards.


Use Survitech Checkin to tell your colleagues where you are and what you're doing. This app tracks users' availability for a call centre. There's a rich set of permissions to determine who can see whose availability. The iOS app and HTML app both allow users to clock on and clock off. Users with View permissions can see who is on-site.


text:
Q: ¿Como puedo actualizar tabla sin recargar la pagina al insertar? En codeigniter Estoy intentando acualizar la tabla al insertar en un formulario que se encuentra arriba de la tabla. intente con un table.reload pero no consigo el objetivo. Alguien me podria ayudar por favor. estoy usanso ajax al enviar formulario. Utilizo codeigniter.
Este es mi formulario
  <form action="" id="recep"  method="post">

                                CLAVE:
                                <input  list="medicamento_id" name="medicamento_id" id="medicamento_id" type="text" class="form-control" style="text-transform:uppercase;" required>

                                DESCRIPCIÓN:
                                <input name="medicamento_desc" id="medicamento_desc" type="text" class="form-control"   style="text-transform:uppercase;" readonly>
                                <input name="stock" id="stock" type="hidden" class="form-control"   style="text-transform:uppercase;" >

                            FECHA RECEPCIÓN
                            <input required name="fecha_de_entrada" id="fecha_de_entrada" type="date" class="form-control"   style="text-transform:uppercase;" required>

                            ORDEN COMPRA
                            <input required name="orden_compra" id="orden_compra" type="text" class="form-control"  style="text-transform:uppercase;">

                          <button type="submit" id="butsave" class="btn btn-primary waves-effect waves-light">Guardar</button>

                      </form>

Esta es mi tabla para actualizar, la tabla esta debajo del formulario

                            CLAVE
                            DESCRIPCIÓN
                            FECHA RECEPCIÓN
                            CANTIDAD
                            CADUCIDAD
                            LOTE
                            ORDEN DE COMRA

                            <?php //print_r($pacientes); die();?>
                            <?php foreach($recepciones as $recepcion): ?>

                                <?= $recepcion->medicamento_id ?>
                                <?= $recepcion->medicamento_desc ?>
                                <?= $recepcion->fecha_de_entrada ?>
                                <?= $recepcion->entrante ?>
                                <?= $recepcion->fecha_caducidad ?>
                                <?= $recepcion->lote ?>
                                <?= $recepcion->orden_compra ?>

                                <?php if($this->session->userdata('modificar')== 1): ?>

                                <?php endif; ?>

                        <?php endforeach; ?>

Este es mi codigo al enviar fomulario. Estoy utlizando ajax. Mi objetivo es hacer que se al mandar alerta se logre actualizar la tabla sin recargar la pagina.

A: Mi solución seria crear un nuevo div que encierre a la tabla y luego actualizar el div. Por ejemplo:

        NOMBRE
        APELLIDO

        MAIKEL
        SANDOVAL

Y para actualizar, una vez la petición haya sido exitosa agrego en jquery:
$("#table_refresh").load(" #table_refresh");

Puedes actualizar directamente la tabla sin crear el div pero yo recomiendo con div, prueba y veras porqué!

A: En javascript, puedes hacer con lo siguiente:
setInterval(PonesElNombreDeLaFuncion, 0);

En donde el 0 es el tiempo a establecer para su actuación cada vez que lo requieras y se va actualizando.

Recuerda que debes incluirlo cuando sepas que terminaste todo bien o tendrás conflicto con tu código.


Jamaica's original all-inclusive resort captures the essence of Old Jamaica charm mixed with breath-taking beauty. The hotel itself stands impressive as its white exterior is beautifully contrasted by all of nature's gifts. The ambiance combines the allure of a 50's Hollywood hangout with a preserved feeling of lush tropical splendors.
The powder y white beach is awaiting your footprints. The fresh-water pool overlooking the sea is ready to refresh you. At Couples Tower Isle in Ocho Rios, it's all about you and the simple ways to please you.
Enjoy gourmet meals, 24-hour food service, unlimited premium brand beverages, all land and watersports and a variety of off-site excursions. It's your vacation, and it needs to be special!
All rooms have king size bed, A/C, satellite TV, telephone, CD player and radio, shower, bath, hairdryer, coffee maker, iron and ironing board, in-room safe, and a balcony or patio overlooking the Caribbean Sea, mountains or gardens. The ocean or garden view one-bedroom suites have all of the above, plus a Jacuzzi and fully stocked bar.
Gourmet restaurants include French, Italian and Jamaican cuisine, along with a beach grill and buffet restaurant. Four bars, including an elegant patio bar, all serve premium brands.
The main bar is open from 10 am to 1 am. The Piano Bar opens for cocktails at 6:30 pm and closes when the last couple retires. The bar at Bayside is open during dinner hours. The private island bar is open from 9 am to 5 pm daily.
Tower Isle is Couples' own private island for au natural sunbathing. The island has a swim-up pool bar, hammocks, and lounge chairs. Snacks are available, and include foods such as chicken, sandwiches, patties, fries, hamburgers and hot dogs. To get to the island, you may be transported by boat, or swim, if you are able. There are two swim platforms along the way where swimmers may rest.
Couples Tower Isle in Ocho Rios has a vast array of spa services available at a reasonable rate. Enjoy being pampered with the following indulgences: Swedish, Trigger Point, Deep Tissue, Sports, Aromatherapy & Deluxe Massages, facials, reflexology, body wraps, body scrubs, body polish, waxing and much more.
Ready to book your stay at Couples Tower Isle? For prices & do-it-yourself booking, Click here for instant, online prices 24 hours each day.