Wednesday, 14 March 2012
Create a Radar HUD for Phoenix or Firestorm
Most HUD radars in Secondlife use LSL scripts to scan for avatars in a maximum range of 96m.
If you use the third party viewers Phoenix or Firestorm, you can make use of their built-in full sim radar by creating a one prim HUD that will report EVERYONE in the sim and their distance from you.
Because this information is gathered by the viewer from sim data, there are less script delays and lag than having to ping the sim every second as most radars do.
First;
In Phoenix/Firestorm open the menu named Phoenix or Firestorm then open the Avatar List.
In the options tab, enable Update AND Announce keys to HUD.
Next;
Copy the open source script here.
Create a prim and drop this script in to it.
Profit!
That's it.
Attach it to any HUD position or even wear it.
It will display hovertext above the prim with avatar names and relative distance from your position.
You can modify the script to integrate with your own HUD if you are making one and relay messages in other ways (llOwnerSay, llInstantMessage, llRegionSay [if it's communicating with other objects in the same sim]).
For more information check Phoenix/Firestorm Avatar List.
Saturday, 10 March 2012
Secondlife: Reducing Lag
The Secondlife viewer is a system hog!
It eats virtual memory constantly, creates a gazillion heavily fragmented cached textures and objects which in turn creates client-side lag after which you crash.
Sound familiar?!
Besides the obvious options of turning down graphics in preferences, lowering your draw distance, etc, there are a number of things you can do to postpone the inevitable.
Scenario # 1:
You've been in-world for a while, everything's been going ok.
No lag to speak of.
Textures loading fine then all of a sudden movement gets jerky and lag sets in.
Minimise the Secondlife viewer to the task bar.
Wait a few seconds.
Maximise the viewer.
That's a *bit* better.
What you didn't see, unless you had Task Manager open in Windows, was the Memory Usage drop from well over 300,000K to less than 80K.
As soon as you maximise the viewer that number is going to climb again substantially.
I DO keep Task Manager open on a second screen and if the viewer starts getting up into the 500,000K range, I minimise the viewer window for a few seconds and maximise it again.
It's simple but effective.

Scenario # 2:
You're listening to a musician at a club and the stream starts to jump.
Adjust your viewers bandwidth in preferences.
This slider determines how much of your available bandwidth will be hogged by your Secondlife viewer.
The music stream is independent of Secondlife servers so if you have the bandwidth slider turned way up in your viewer you're making it more difficult for that music stream to keep a good connection with your computer.
I usually run my bandwidth at 5000, being the half way point of the maximum 10,000.
Even this is probably too much but I'm not always listening to music and it doesn't seem to be an issue when I do.
That said, most people's download speeds are less than 5000K for their entire home usage.
So in a heavily populated sim with a lot of lag, I find turning the viewers bandwidth down to between 3,200K - 3,600K gives more resources to the audio stream.
In these circumstances, grab a seat or at least don't move your camera around too much to perv at all the people because that lag is client-side!
Sure the sim is struggling too feeding out all those textures, objects and math.
The server has to send all sim textures including your avatars textures to each and every avatar in the sim and there's to you.
But your viewer is furiously squirrelling these cached textures and objects into folders.
It does this quite inefficiently creating a lot of fragmentation.
When you revisit a texture (swing your camera around and gawk at that girl you were checking out 5mins ago!), your viewer has to check through the texture and object cache first to see if it already has those things.
While caching like this saves some bandwidth rather than have to retrieve them again from the Secondlife servers, it's all very labour intensive on your CPU.
Currently I don't have a good solution to the problem of heavily fragmented cached files other than to defrag* my hard drive after every SL session.
*I recommend Defraggler by Piriform as a free alternative to Windows built-in defragmenter. It allows you to defrag only the files that are fragmented rather than the entire drive saving a lot of time.
Scenario # 3:
You like to run Photoshop or some other heavy usage program at the same time as you run Secondlife OR you are running multiple viewers and it's really laggy! OR you are trying to make a movie in Secondlife (machinima) and the viewer window that's not 'in focus' is really jerky.
Open the Advanced Menu.
If you don't know where it is perhaps you shouldn't be playing with it!
Lol. The SL Wiki has those details.
Next open Debug Settings and type in "BackgroundYieldTime".
If you are running Photoshop or multiple viewers, try upping the Background Yield Time to 200 or more.
This will make the viewer window(s) NOT in focus become very jerky but it will reduce lag in the window you have in focus by updating background viewer windows less often.
Reduce the number to 1 in BackgroundYieldTime for the best possible frame rate in all open viewer windows.
The above are just a few of the undocumented viewer features I've discovered and wanted to share.
Reducing the number of worn scripts and complex attachments can help especially if you are having difficulty teleporting.
Turning off chat logging will also reduce client-side lag.
There are no sure fire solutions or cure-all's when it comes to lag in Secondlife.
More often than not the lag will pass or at least get bearable in time.
In the meantime, you can try some of these options to minimise your own lag.
Edit to add:
Network Lag Discovery Tools:
The Internet Traffic Report provides data in real time on the state of global web traffic.
A quick glance at their home page reveals the current Global Traffic Index ("a score from 0 to 100 where 0 is "slow" and 100 is "fast" determined by comparing the current response of a ping echo to all previous responses from the same router over the past 7 days." - from the FAQ), Global Response Time and Global Packet Loss.
This is a handy way to determine if the lag is 'just you' or the network as a whole.
The Internet Traffic Report (ITR) also breaks down each of these indexes into regional data so while your country may have a good average you might see that North America has a lot of traffic and high packet loss.
In this scenario, you'd expect response times to be high as well and as Secondlife is run by Linden Lab out of San Francisco with server farms in Dallas, Tuscon and Reston, this *could* be the source of your lag.
You can grab a code snippet from the Internet Traffic Report website to add a small image to a web page that includes a handy real time graph of Global Response Time.
I made a simple framed page I built as my browsers start page that includes the Secondlife Grid Status Report, My Secondlife Dashboard, application links to launch Secondlife, Phoenix and some other TPV's direct from the web browser, an iframe with Yahoo's Babelfish translator (you never know who you might have a conversation with in Secondlife!), my current local time and Secondlife current time, links to the SL Wiki, SL Scripting Portal, etc AND the ITR's Global Response Time widget so at a glance I can see the state of the world's connectivity or lack thereof.
A similar website with real time network data is Akamai's Real Time Web Monitor. Here you can view a map of the world and the amount of traffic, latency (response time) and network attacks! Yes, they're going on all the time and DDoS (Distributed Denial of Service Attacks) can greatly affect response time depending on which servers they are aimed at.
WinMTR is a brilliant little free download that can trace the route from your computer, via your ISP, through network hops to any website or server.
It will identify each hop in the journey first by its numerical IP address and if it can, it's 'friendly' name.
So I can discover the IP address of a Secondlife region in the viewer's Help/About menu and enter that into WinMTR and it will trace the route measuring response times at all hops.
Now you can determine if that lag is happening between you and your ISP or further down the line.
Perhaps it's one of the USA's gateway routers in Los Angeles that has hiccuped or maybe one of Linden Lab's server farms has sneezed.
After playing with WinMTR for a while, you'll get to know what a good response time is compared to a bad one. Of course everyone has different speeds and distance from their exchange so results may vary but you can get a good average for your own personal situation and when the dreaded lag sets in, check WinMTR to see where it's coming from.
Monday, 27 February 2012
Linden Lab announce drastic changes to Third Party Viewer policy
Photo taken using the third party viewer Firestorm with shadows and depth of field enabled.
Linden Labs, the creators of Secondlife have announced policy changes to developers of third party viewers (TPV's).
The open source viewer code has been modified by numerous programmers who have introduced innovations that enhance the user experience.
The history of TPV's is a chequered one.
Maliciously scripted viewers have been able to copy other peoples creations and crash other users.
These security issues are usually shut down soon after they appear.
What these new policies mean to the average user of a TPV will be minor cosmetic changes like not being able to see viewer tags that identify other users viewers or true online status.
Linden Lab plan to remove the ability to see online status server side.
For power users or those using RLV and other interactive multi-user options, these policy changes could be a disaster.
RLV is used for role playing within Secondlife.
Not being able to know the online status of another RLV player will destroy parts of that RP.
Thousands of shopkeepers have message boards for customers to communicate with them.
These boards show the owners online status no matter where they are on the grid.
These too could break although Owner Only code changes may retain this option.
Beyond the actual changes that Linden Lab is making, the bigger story here is the ultimate demise of the volunteer development and innovation followed in swift order of the demise of Third Party Viewers altogether.
The Lab are basically saying, if we didn't invent it, you can't.
This is certainly a backward step for Linden Lab and Secondlife.
It indicates the Lab's corporate mentality that has deemed that innovation and the raw enthusiasm of it's own user base that has led to some incredible developments like Advanced Shadows/Lighting/Depth of Field, Parcel Windlight Settings, client-side Animation Override, Area Search, Double-Click Teleport and many more features is cutting too close to their own bottom line.
And TPV's make them look bad.
Because the official LL Secondlife Viewer is nowhere near as good as most TPV's.
Several years ago LL decided to change their old viewer and create V2.0.
V2.0 stunk.
Several iterations later and it still does although it's getting slightly less offensive.
But by comparison to any number of TPV's, V2.0 is unintuitive, clunky, search NEVER works... I could go on but there isn't enough room on this endless blog!
Suffice to say I avoid the official viewer like botulism.
TPV's became a viable option for many users including myself at this juncture because many of them were built on the old version one code.
The look and feel was the same as the old LL viewer so it was more comfortable and underneath the bonnet, they had some cool features.
Now it looks like these good times are over.
The sun has set on these wild west days when a viewer update brings a slew of new toys to play with and a wide-eyed amazement at the creativity and dedication of their developers.
The Lab have effectively signed the death warrant of Third Party Viewers and that is a very bad thing.
Already forum chatter is urging these developers to concentrate on OpenSim and other metaverses where such restrictions are not stifling progress.
Here's a link to TPV Phoenix/Firestorm blog where they report they have been contacted by LL who insist they and all other TPV developers implement their latest policy without delay.
http://phoenixviewer.blogspot.com/2012/02/new-additions-to-third-party-viewer.html
Here's a link to a Secondlife users blog with a link to an audio recording of Oz Linden explaining the Lab's changes.
The author has helpfully noted time stamps for some of the important bits.
http://yournymph.blogspot.com/2012/02/policy-on-third-party-viewers-changed.html
Friday, 24 February 2012
Live Music in Secondlife
One of the greatest things about the 3D virtual world Secondlife is the amazing live music available 24/7.
Bands and solo artists from all around the globe stream live from their locations.
An ever changing, long list of events is available in search.
There is everything from karaoke singers warbling away to backing tracks, jazz virtuosos, rap artists, rock bands and even 'tribute' bands that perform to pre-recorded 'live' shows created by the original band.
Teleport to the virtual venue and interact with other avatars and the band.
Being able to sit in my lounge watching, listening and dancing along to a Japanese Hip-Hop group or rocking out with one of my favourite virtual bands "The Follow" from the USA is a blast.
Via chat, I can communicate with the often bizarre collection of avatars in the audience, request a song from the band or hold private conversations in Instant Message.
Most venues and musicians rely on tips to continue to be able to do what they do.
It can cost a lot of money to run and operate a venue in Secondlife so it's only fair to offer a small tip for the privilege of being able to enjoy live music at their establishment.
The diversity of acts and time zones means there is generally always something happening in-world however the New Zealand time zone isn't that great because most of the US and European acts perform during their evening being my morning.
Check out Secondlife and the amazing range of live music available.
Bands and solo artists from all around the globe stream live from their locations.
An ever changing, long list of events is available in search.
There is everything from karaoke singers warbling away to backing tracks, jazz virtuosos, rap artists, rock bands and even 'tribute' bands that perform to pre-recorded 'live' shows created by the original band.
Teleport to the virtual venue and interact with other avatars and the band.
Being able to sit in my lounge watching, listening and dancing along to a Japanese Hip-Hop group or rocking out with one of my favourite virtual bands "The Follow" from the USA is a blast.
Via chat, I can communicate with the often bizarre collection of avatars in the audience, request a song from the band or hold private conversations in Instant Message.
Most venues and musicians rely on tips to continue to be able to do what they do.
It can cost a lot of money to run and operate a venue in Secondlife so it's only fair to offer a small tip for the privilege of being able to enjoy live music at their establishment.
The diversity of acts and time zones means there is generally always something happening in-world however the New Zealand time zone isn't that great because most of the US and European acts perform during their evening being my morning.
Check out Secondlife and the amazing range of live music available.
Monday, 20 February 2012
Secondlife Camera Control Script
A script to control your avatar's camera.
Relatively easy to follow. You could add your own camera presets to the menu.
<CODE>
integer CHANNEL; // dialog channel
list MENU_MAIN = ["Butt Cam", "God Cam", "Back Cam", "Trip Cam", "Ghost Cam", "Worm Cam", "Me Cam", "Fly Cam", "More...", "Cam ON", "Cam OFF"]; // the main menu
list MENU_2 = ["More...", "...Back"]; // menu 2
integer on = FALSE;
integer flying;
integer falling;
integer spaz = 0;
integer trap = 0;
take_camera_control(key agent)
{
llOwnerSay("take_camera_control"); // say function name for debugging
llOwnerSay( (string)agent);
llRequestPermissions(agent, PERMISSION_CONTROL_CAMERA);
llSetCameraParams([CAMERA_ACTIVE, 1]); // 1 is active, 0 is inactive
on = TRUE;
}
release_camera_control(key agent)
{
llOwnerSay("release_camera_control"); // say function name for debugging
llSetCameraParams([CAMERA_ACTIVE, 0]); // 1 is active, 0 is inactive
llReleaseCamera(agent);
on = FALSE;
}
focus_on_me()
{
llOwnerSay("focus_on_me"); // say function name for debugging
// llClearCameraParams(); // reset camera to default
vector here = llGetPos();
llSetCameraParams([
CAMERA_ACTIVE, 1, // 1 is active, 0 is inactive
CAMERA_BEHINDNESS_ANGLE, 0.0, // (0 to 180) degrees
CAMERA_BEHINDNESS_LAG, 0.0, // (0 to 3) seconds
CAMERA_DISTANCE, 0.0, // ( 0.5 to 10) meters
CAMERA_FOCUS, here, // region relative position
CAMERA_FOCUS_LAG, 0.0 , // (0 to 3) seconds
CAMERA_FOCUS_LOCKED, TRUE, // (TRUE or FALSE)
CAMERA_FOCUS_THRESHOLD, 0.0, // (0 to 4) meters
// CAMERA_PITCH, 80.0, // (-45 to 80) degrees
CAMERA_POSITION, here + <4,4,4>, // region relative position
CAMERA_POSITION_LAG, 0.0, // (0 to 3) seconds
CAMERA_POSITION_LOCKED, TRUE, // (TRUE or FALSE)
CAMERA_POSITION_THRESHOLD, 0.0, // (0 to 4) meters
CAMERA_FOCUS_OFFSET, ZERO_VECTOR // <-10,-10,-10> to <10,10,10> meters
]);
}
butt_cam()
{
// llOwnerSay("butt_cam"); // say function name for debugging
llClearCameraParams(); // reset camera to default
llSetCameraParams([CAMERA_ACTIVE, 1]);
}
fly_cam()
{
llOwnerSay("fly_cam"); // say function name for debugging
butt_cam();
llSetCameraParams([
CAMERA_ACTIVE, 1, // 1 is active, 0 is inactive
CAMERA_BEHINDNESS_ANGLE, 45.0, // (0 to 180) degrees
CAMERA_BEHINDNESS_LAG, 0.5, // (0 to 3) seconds
CAMERA_DISTANCE, 8.0, // ( 0.5 to 10) meters
//CAMERA_FOCUS, <0,0,5>, // region relative position
CAMERA_FOCUS_LAG, 0.05 , // (0 to 3) seconds
CAMERA_FOCUS_LOCKED, FALSE, // (TRUE or FALSE)
CAMERA_FOCUS_THRESHOLD, 0.0, // (0 to 4) meters
CAMERA_PITCH, 30.0, // (-45 to 80) degrees
//CAMERA_POSITION, <0,0,0>, // region relative position
CAMERA_POSITION_LAG, 0.1, // (0 to 3) seconds
CAMERA_POSITION_LOCKED, FALSE, // (TRUE or FALSE)
CAMERA_POSITION_THRESHOLD, 0.0, // (0 to 4) meters
CAMERA_FOCUS_OFFSET, <0,0,0> // <-10,-10,-10> to <10,10,10> meters
]);
}
me_cam()
{
llOwnerSay("me_cam"); // say function name for debugging
llClearCameraParams(); // reset camera to default
llSetCameraParams([
CAMERA_ACTIVE, 1, // 1 is active, 0 is inactive
CAMERA_BEHINDNESS_ANGLE, 180.0, // (0 to 180) degrees
CAMERA_BEHINDNESS_LAG, 0.2, // (0 to 3) seconds
CAMERA_DISTANCE, 3.0, // ( 0.5 to 10) meters
//CAMERA_FOCUS, <0,0,5>, // region relative position
CAMERA_FOCUS_LAG, 0.02 , // (0 to 3) seconds
CAMERA_FOCUS_LOCKED, FALSE, // (TRUE or FALSE)
CAMERA_FOCUS_THRESHOLD, 0.0, // (0 to 4) meters
CAMERA_PITCH, 10.0, // (-45 to 80) degrees
//CAMERA_POSITION, <0,0,0>, // region relative position
CAMERA_POSITION_LAG, 0.15, // (0 to 3) seconds
CAMERA_POSITION_LOCKED, FALSE, // (TRUE or FALSE)
CAMERA_POSITION_THRESHOLD, 0.0, // (0 to 4) meters
CAMERA_FOCUS_OFFSET, <0,0,0> // <-10,-10,-10> to <10,10,10> meters
]);
}
trip_cam()
{
llOwnerSay("trip_cam"); // say function name for debugging
llSetCameraParams([
CAMERA_ACTIVE, 1, // 1 is active, 0 is inactive
CAMERA_BEHINDNESS_ANGLE, 180.0, // (0 to 180) degrees
CAMERA_BEHINDNESS_LAG, 0.0, // (0 to 3) seconds
// CAMERA_DISTANCE, 10.0, // ( 0.5 to 10) meters
//CAMERA_FOCUS, <0,0,5>, // region relative position
CAMERA_FOCUS_LAG, 3.0 , // (0 to 3) seconds
// CAMERA_FOCUS_LOCKED, FALSE, // (TRUE or FALSE)
CAMERA_FOCUS_THRESHOLD, 0.0, // (0 to 4) meters
// CAMERA_PITCH, 80.0, // (-45 to 80) degrees
//CAMERA_POSITION, <0,0,0>, // region relative position
// CAMERA_POSITION_LAG, 0.0, // (0 to 3) seconds
// CAMERA_POSITION_LOCKED, FALSE, // (TRUE or FALSE)
CAMERA_POSITION_THRESHOLD, 0.0, // (0 to 4) meters
CAMERA_FOCUS_OFFSET, <5,2,-2> // <-10,-10,-10> to <10,10,10> meters
]);
}
god_cam()
{
llOwnerSay("god_cam"); // say function name for debugging
butt_cam();
llSetCameraParams([
CAMERA_ACTIVE, 1, // 1 is active, 0 is inactive
CAMERA_BEHINDNESS_ANGLE, 180.0, // (0 to 180) degrees
CAMERA_BEHINDNESS_LAG, 0.5, // (0 to 3) seconds
CAMERA_DISTANCE, 10.0, // ( 0.5 to 10) meters
//CAMERA_FOCUS, <0,0,5>, // region relative position
CAMERA_FOCUS_LAG, 0.05 , // (0 to 3) seconds
CAMERA_FOCUS_LOCKED, FALSE, // (TRUE or FALSE)
CAMERA_FOCUS_THRESHOLD, 0.0, // (0 to 4) meters
CAMERA_PITCH, 80.0, // (-45 to 80) degrees
//CAMERA_POSITION, <0,0,0>, // region relative position
CAMERA_POSITION_LAG, 0.0, // (0 to 3) seconds
CAMERA_POSITION_LOCKED, FALSE, // (TRUE or FALSE)
CAMERA_POSITION_THRESHOLD, 0.0, // (0 to 4) meters
CAMERA_FOCUS_OFFSET, <0,0,0> // <-10,-10,-10> to <10,10,10> meters
]);
}
ghost_cam()
{
llOwnerSay("ghost_cam"); // say function name for debugging
llSetCameraParams([
CAMERA_ACTIVE, 1, // 1 is active, 0 is inactive
CAMERA_BEHINDNESS_ANGLE, 0.0, // (0 to 180) degrees
CAMERA_BEHINDNESS_LAG, 0.5, // (0 to 3) seconds
CAMERA_DISTANCE, 3.0, // ( 0.5 to 10) meters
//CAMERA_FOCUS, <0,0,5>, // region relative position
CAMERA_FOCUS_LAG, 2.0, // (0 to 3) seconds
CAMERA_FOCUS_LOCKED, FALSE, // (TRUE or FALSE)
CAMERA_FOCUS_THRESHOLD, 0.0, // (0 to 4) meters
CAMERA_PITCH, 0.0, // (-45 to 80) degrees
//CAMERA_POSITION, <0,0,0>, // region relative position
CAMERA_POSITION_LAG, 0.05, // (0 to 3) seconds
CAMERA_POSITION_LOCKED, TRUE, // (TRUE or FALSE)
CAMERA_POSITION_THRESHOLD, 0.0, // (0 to 4) meters
CAMERA_FOCUS_OFFSET, <0,0,0> // <-10,-10,-10> to <10,10,10> meters
]);
llSleep(5);
butt_cam();
}
worm_cam()
{
llOwnerSay("worm_cam"); // say function name for debugging
llSetCameraParams([
CAMERA_ACTIVE, 1, // 1 is active, 0 is inactive
CAMERA_BEHINDNESS_ANGLE, 180.0, // (0 to 180) degrees
CAMERA_BEHINDNESS_LAG, 0.0, // (0 to 3) seconds
CAMERA_DISTANCE, 8.0, // ( 0.5 to 10) meters
//CAMERA_FOCUS, <0,0,5>, // region relative position
CAMERA_FOCUS_LAG, 0.0 , // (0 to 3) seconds
CAMERA_FOCUS_LOCKED, FALSE, // (TRUE or FALSE)
CAMERA_FOCUS_THRESHOLD, 4.0, // (0 to 4) meters
CAMERA_PITCH, -45.0, // (-45 to 80) degrees
//CAMERA_POSITION, <0,0,0>, // region relative position
CAMERA_POSITION_LAG, 1.0, // (0 to 3) seconds
CAMERA_POSITION_LOCKED, FALSE, // (TRUE or FALSE)
CAMERA_POSITION_THRESHOLD, 1.0, // (0 to 4) meters
CAMERA_FOCUS_OFFSET, <0,0,0> // <-10,-10,-10> to <10,10,10> meters
]);
}
spaz_cam()
{
llOwnerSay("spaz_cam for 5 seconds"); // say function name for debugging
float i;
for (i=0; i< 50; i+=1)
{
vector xyz = llGetPos() + <llFrand(80) - 40, llFrand(80) - 40, llFrand(10)>;
// llOwnerSay((string)xyz);
vector xyz2 = llGetPos() + <llFrand(80) - 40, llFrand(80) - 40, llFrand(10)>;
llSetCameraParams([
CAMERA_ACTIVE, 1, // 1 is active, 0 is inactive
CAMERA_BEHINDNESS_ANGLE, 180.0, // (0 to 180) degrees
CAMERA_BEHINDNESS_LAG, llFrand(3), // (0 to 3) seconds
CAMERA_DISTANCE, llFrand(10), // ( 0.5 to 10) meters
//CAMERA_FOCUS, xyz, // region relative position
CAMERA_FOCUS_LAG, llFrand(3), // (0 to 3) seconds
CAMERA_FOCUS_LOCKED, TRUE, // (TRUE or FALSE)
CAMERA_FOCUS_THRESHOLD, llFrand(4), // (0 to 4) meters
CAMERA_PITCH, llFrand(125) - 45, // (-45 to 80) degrees
CAMERA_POSITION, xyz2, // region relative position
CAMERA_POSITION_LAG, llFrand(3), // (0 to 3) seconds
CAMERA_POSITION_LOCKED, TRUE, // (TRUE or FALSE)
CAMERA_POSITION_THRESHOLD, llFrand(4), // (0 to 4) meters
CAMERA_FOCUS_OFFSET, <llFrand(20) - 10, llFrand(20) - 10, llFrand(20) - 10> // <-10,-10,-10> to <10,10,10> meters
]);
llSleep(0.1);
}
butt_cam();
}
back_cam()
{
llSetCameraParams([
CAMERA_ACTIVE, 1, // 1 is active, 0 is inactive
CAMERA_DISTANCE, 5.0, // ( 0.5 to 10) meters
CAMERA_PITCH, 10.0, // (-45 to 80) degrees
CAMERA_BEHINDNESS_ANGLE, 0.0, // (0 to 180) degrees
CAMERA_BEHINDNESS_LAG, 0.1, // (0 to 3) seconds
CAMERA_FOCUS_OFFSET, <0.0,0.0,1.5>, // <-10,-10,-10> to <10,10,10> meters
CAMERA_FOCUS, llGetPos(), // region-relative position
CAMERA_FOCUS_LAG, 0.1, // (0 to 3) seconds
CAMERA_FOCUS_THRESHOLD, 0.1, // (0 to 4) meters
CAMERA_FOCUS_LOCKED, FALSE, // (TRUE or FALSE)
CAMERA_POSITION, llGetPos(), // region-relative position
CAMERA_POSITION_LAG, 0.5, // (0 to 3) seconds
CAMERA_POSITION_THRESHOLD, 0.5, // (0 to 4) meters
CAMERA_POSITION_LOCKED, FALSE // (TRUE or FALSE)
]);
}
setup_listen()
{
llListenRemove(1);
CHANNEL = llRound(llFrand(1) * 100000);
integer x = llListen(CHANNEL, "", "", ""); // listen for dialog answers
}
default
{
state_entry()
{
setup_listen();
llSetTimerEvent(2);
}
touch_start(integer total_number)
{
integer perm = llGetPermissions();
if (perm & PERMISSION_DEBIT)
{ llOwnerSay(llGetScriptName() + " has PERMISSION_DEBIT perms for "+(string)llGetPermissionsKey()); }
if (perm & PERMISSION_TAKE_CONTROLS)
{ llOwnerSay(llGetScriptName() + " has PERMISSION_TAKE_CONTROLS perms for "+(string)llGetPermissionsKey()); }
if (perm & PERMISSION_TRIGGER_ANIMATION)
{ llOwnerSay(llGetScriptName() + " has PERMISSION_TRIGGER_ANIMATION perms for "+(string)llGetPermissionsKey()); }
if (perm & PERMISSION_ATTACH)
{ llOwnerSay(llGetScriptName() + " has PERMISSION_ATTACH perms for "+(string)llGetPermissionsKey()); }
if (perm & PERMISSION_CHANGE_LINKS)
{ llOwnerSay(llGetScriptName() + " has PERMISSION_CHANGE_LINKS perms for "+(string)llGetPermissionsKey()); }
if (perm & PERMISSION_TRACK_CAMERA)
{ llOwnerSay(llGetScriptName() + " has PERMISSION_TRACK_CAMERA perms for "+(string)llGetPermissionsKey()); }
if (perm & PERMISSION_CONTROL_CAMERA)
{ llOwnerSay(llGetScriptName() + " has PERMISSION_CONTROL_CAMERA perms for "+(string)llGetPermissionsKey()); }
if (perm == 0)
{ llOwnerSay(llGetScriptName() + " has NO perms for "+(string)llGetPermissionsKey()); }
llDialog(llDetectedKey(0), "What do you want to do?", MENU_MAIN, CHANNEL); // present dialog on click
}
listen(integer channel, string name, key id, string message)
{
if (llListFindList(MENU_MAIN + MENU_2, [message]) != -1) // verify dialog choice
// if (llListFindList(MENU_MAIN, [message]) != -1) // verify dialog choice
{
// llOwnerSay(name + " picked the option '" + message + "'."); // output the answer
if (message == "More...")
llDialog(id, "Pick an option!", MENU_2, CHANNEL); // present submenu on request
else if (message == "...Back")
llDialog(id, "What do you want to do?", MENU_MAIN, CHANNEL); // present main menu on request to go back
else if (message == "Cam ON")
{
take_camera_control(id);
}
else if (message == "Cam OFF")
{
release_camera_control(id);
}
else if (message == "Butt Cam")
{
butt_cam();
}
else if (message == "Fly Cam")
{
fly_cam();
}
else if (message == "Worm Cam")
{
worm_cam();
}
else if (message == "God Cam")
{
god_cam();
}
else if (message == "Trip Cam")
{
trip_cam();
}
else if (message == "Me Cam")
{
me_cam();
}
else if (message == "Ghost Cam")
{
ghost_cam();
}
else if (message == "Trap Toggle")
{
trap = !trap;
if (trap == 1) {
llOwnerSay("trap is on");
}
else {
llOwnerSay("trap is off");
}
}
else if (message == "Back Cam")
{
back_cam();
}
} else
llOwnerSay(name + " picked invalid option '" + llToLower(message) + "'."); // not a valid dialog choice
}
run_time_permissions(integer perm) {
if ((perm & PERMISSION_CONTROL_CAMERA) == PERMISSION_CONTROL_CAMERA) {
llSetCameraParams([CAMERA_ACTIVE, 1]); // 1 is active, 0 is inactive
llOwnerSay("Camera permissions have been taken");
}
}
changed(integer change)
{
if (change & CHANGED_LINK)
{
key agent = llAvatarOnSitTarget();
if (agent)
{
setup_listen();
llRequestPermissions(agent, PERMISSION_CONTROL_CAMERA);
}
}
}
attach(key agent)
{
if (agent != NULL_KEY)
{
setup_listen();
llRequestPermissions(agent, PERMISSION_CONTROL_CAMERA);
}
}
timer()
{
if (trap == 1)
{
focus_on_me();
}
}
}
</CODE>
Relatively easy to follow. You could add your own camera presets to the menu.
<CODE>
integer CHANNEL; // dialog channel
list MENU_MAIN = ["Butt Cam", "God Cam", "Back Cam", "Trip Cam", "Ghost Cam", "Worm Cam", "Me Cam", "Fly Cam", "More...", "Cam ON", "Cam OFF"]; // the main menu
list MENU_2 = ["More...", "...Back"]; // menu 2
integer on = FALSE;
integer flying;
integer falling;
integer spaz = 0;
integer trap = 0;
take_camera_control(key agent)
{
llOwnerSay("take_camera_control"); // say function name for debugging
llOwnerSay( (string)agent);
llRequestPermissions(agent, PERMISSION_CONTROL_CAMERA);
llSetCameraParams([CAMERA_ACTIVE, 1]); // 1 is active, 0 is inactive
on = TRUE;
}
release_camera_control(key agent)
{
llOwnerSay("release_camera_control"); // say function name for debugging
llSetCameraParams([CAMERA_ACTIVE, 0]); // 1 is active, 0 is inactive
llReleaseCamera(agent);
on = FALSE;
}
focus_on_me()
{
llOwnerSay("focus_on_me"); // say function name for debugging
// llClearCameraParams(); // reset camera to default
vector here = llGetPos();
llSetCameraParams([
CAMERA_ACTIVE, 1, // 1 is active, 0 is inactive
CAMERA_BEHINDNESS_ANGLE, 0.0, // (0 to 180) degrees
CAMERA_BEHINDNESS_LAG, 0.0, // (0 to 3) seconds
CAMERA_DISTANCE, 0.0, // ( 0.5 to 10) meters
CAMERA_FOCUS, here, // region relative position
CAMERA_FOCUS_LAG, 0.0 , // (0 to 3) seconds
CAMERA_FOCUS_LOCKED, TRUE, // (TRUE or FALSE)
CAMERA_FOCUS_THRESHOLD, 0.0, // (0 to 4) meters
// CAMERA_PITCH, 80.0, // (-45 to 80) degrees
CAMERA_POSITION, here + <4,4,4>, // region relative position
CAMERA_POSITION_LAG, 0.0, // (0 to 3) seconds
CAMERA_POSITION_LOCKED, TRUE, // (TRUE or FALSE)
CAMERA_POSITION_THRESHOLD, 0.0, // (0 to 4) meters
CAMERA_FOCUS_OFFSET, ZERO_VECTOR // <-10,-10,-10> to <10,10,10> meters
]);
}
butt_cam()
{
// llOwnerSay("butt_cam"); // say function name for debugging
llClearCameraParams(); // reset camera to default
llSetCameraParams([CAMERA_ACTIVE, 1]);
}
fly_cam()
{
llOwnerSay("fly_cam"); // say function name for debugging
butt_cam();
llSetCameraParams([
CAMERA_ACTIVE, 1, // 1 is active, 0 is inactive
CAMERA_BEHINDNESS_ANGLE, 45.0, // (0 to 180) degrees
CAMERA_BEHINDNESS_LAG, 0.5, // (0 to 3) seconds
CAMERA_DISTANCE, 8.0, // ( 0.5 to 10) meters
//CAMERA_FOCUS, <0,0,5>, // region relative position
CAMERA_FOCUS_LAG, 0.05 , // (0 to 3) seconds
CAMERA_FOCUS_LOCKED, FALSE, // (TRUE or FALSE)
CAMERA_FOCUS_THRESHOLD, 0.0, // (0 to 4) meters
CAMERA_PITCH, 30.0, // (-45 to 80) degrees
//CAMERA_POSITION, <0,0,0>, // region relative position
CAMERA_POSITION_LAG, 0.1, // (0 to 3) seconds
CAMERA_POSITION_LOCKED, FALSE, // (TRUE or FALSE)
CAMERA_POSITION_THRESHOLD, 0.0, // (0 to 4) meters
CAMERA_FOCUS_OFFSET, <0,0,0> // <-10,-10,-10> to <10,10,10> meters
]);
}
me_cam()
{
llOwnerSay("me_cam"); // say function name for debugging
llClearCameraParams(); // reset camera to default
llSetCameraParams([
CAMERA_ACTIVE, 1, // 1 is active, 0 is inactive
CAMERA_BEHINDNESS_ANGLE, 180.0, // (0 to 180) degrees
CAMERA_BEHINDNESS_LAG, 0.2, // (0 to 3) seconds
CAMERA_DISTANCE, 3.0, // ( 0.5 to 10) meters
//CAMERA_FOCUS, <0,0,5>, // region relative position
CAMERA_FOCUS_LAG, 0.02 , // (0 to 3) seconds
CAMERA_FOCUS_LOCKED, FALSE, // (TRUE or FALSE)
CAMERA_FOCUS_THRESHOLD, 0.0, // (0 to 4) meters
CAMERA_PITCH, 10.0, // (-45 to 80) degrees
//CAMERA_POSITION, <0,0,0>, // region relative position
CAMERA_POSITION_LAG, 0.15, // (0 to 3) seconds
CAMERA_POSITION_LOCKED, FALSE, // (TRUE or FALSE)
CAMERA_POSITION_THRESHOLD, 0.0, // (0 to 4) meters
CAMERA_FOCUS_OFFSET, <0,0,0> // <-10,-10,-10> to <10,10,10> meters
]);
}
trip_cam()
{
llOwnerSay("trip_cam"); // say function name for debugging
llSetCameraParams([
CAMERA_ACTIVE, 1, // 1 is active, 0 is inactive
CAMERA_BEHINDNESS_ANGLE, 180.0, // (0 to 180) degrees
CAMERA_BEHINDNESS_LAG, 0.0, // (0 to 3) seconds
// CAMERA_DISTANCE, 10.0, // ( 0.5 to 10) meters
//CAMERA_FOCUS, <0,0,5>, // region relative position
CAMERA_FOCUS_LAG, 3.0 , // (0 to 3) seconds
// CAMERA_FOCUS_LOCKED, FALSE, // (TRUE or FALSE)
CAMERA_FOCUS_THRESHOLD, 0.0, // (0 to 4) meters
// CAMERA_PITCH, 80.0, // (-45 to 80) degrees
//CAMERA_POSITION, <0,0,0>, // region relative position
// CAMERA_POSITION_LAG, 0.0, // (0 to 3) seconds
// CAMERA_POSITION_LOCKED, FALSE, // (TRUE or FALSE)
CAMERA_POSITION_THRESHOLD, 0.0, // (0 to 4) meters
CAMERA_FOCUS_OFFSET, <5,2,-2> // <-10,-10,-10> to <10,10,10> meters
]);
}
god_cam()
{
llOwnerSay("god_cam"); // say function name for debugging
butt_cam();
llSetCameraParams([
CAMERA_ACTIVE, 1, // 1 is active, 0 is inactive
CAMERA_BEHINDNESS_ANGLE, 180.0, // (0 to 180) degrees
CAMERA_BEHINDNESS_LAG, 0.5, // (0 to 3) seconds
CAMERA_DISTANCE, 10.0, // ( 0.5 to 10) meters
//CAMERA_FOCUS, <0,0,5>, // region relative position
CAMERA_FOCUS_LAG, 0.05 , // (0 to 3) seconds
CAMERA_FOCUS_LOCKED, FALSE, // (TRUE or FALSE)
CAMERA_FOCUS_THRESHOLD, 0.0, // (0 to 4) meters
CAMERA_PITCH, 80.0, // (-45 to 80) degrees
//CAMERA_POSITION, <0,0,0>, // region relative position
CAMERA_POSITION_LAG, 0.0, // (0 to 3) seconds
CAMERA_POSITION_LOCKED, FALSE, // (TRUE or FALSE)
CAMERA_POSITION_THRESHOLD, 0.0, // (0 to 4) meters
CAMERA_FOCUS_OFFSET, <0,0,0> // <-10,-10,-10> to <10,10,10> meters
]);
}
ghost_cam()
{
llOwnerSay("ghost_cam"); // say function name for debugging
llSetCameraParams([
CAMERA_ACTIVE, 1, // 1 is active, 0 is inactive
CAMERA_BEHINDNESS_ANGLE, 0.0, // (0 to 180) degrees
CAMERA_BEHINDNESS_LAG, 0.5, // (0 to 3) seconds
CAMERA_DISTANCE, 3.0, // ( 0.5 to 10) meters
//CAMERA_FOCUS, <0,0,5>, // region relative position
CAMERA_FOCUS_LAG, 2.0, // (0 to 3) seconds
CAMERA_FOCUS_LOCKED, FALSE, // (TRUE or FALSE)
CAMERA_FOCUS_THRESHOLD, 0.0, // (0 to 4) meters
CAMERA_PITCH, 0.0, // (-45 to 80) degrees
//CAMERA_POSITION, <0,0,0>, // region relative position
CAMERA_POSITION_LAG, 0.05, // (0 to 3) seconds
CAMERA_POSITION_LOCKED, TRUE, // (TRUE or FALSE)
CAMERA_POSITION_THRESHOLD, 0.0, // (0 to 4) meters
CAMERA_FOCUS_OFFSET, <0,0,0> // <-10,-10,-10> to <10,10,10> meters
]);
llSleep(5);
butt_cam();
}
worm_cam()
{
llOwnerSay("worm_cam"); // say function name for debugging
llSetCameraParams([
CAMERA_ACTIVE, 1, // 1 is active, 0 is inactive
CAMERA_BEHINDNESS_ANGLE, 180.0, // (0 to 180) degrees
CAMERA_BEHINDNESS_LAG, 0.0, // (0 to 3) seconds
CAMERA_DISTANCE, 8.0, // ( 0.5 to 10) meters
//CAMERA_FOCUS, <0,0,5>, // region relative position
CAMERA_FOCUS_LAG, 0.0 , // (0 to 3) seconds
CAMERA_FOCUS_LOCKED, FALSE, // (TRUE or FALSE)
CAMERA_FOCUS_THRESHOLD, 4.0, // (0 to 4) meters
CAMERA_PITCH, -45.0, // (-45 to 80) degrees
//CAMERA_POSITION, <0,0,0>, // region relative position
CAMERA_POSITION_LAG, 1.0, // (0 to 3) seconds
CAMERA_POSITION_LOCKED, FALSE, // (TRUE or FALSE)
CAMERA_POSITION_THRESHOLD, 1.0, // (0 to 4) meters
CAMERA_FOCUS_OFFSET, <0,0,0> // <-10,-10,-10> to <10,10,10> meters
]);
}
spaz_cam()
{
llOwnerSay("spaz_cam for 5 seconds"); // say function name for debugging
float i;
for (i=0; i< 50; i+=1)
{
vector xyz = llGetPos() + <llFrand(80) - 40, llFrand(80) - 40, llFrand(10)>;
// llOwnerSay((string)xyz);
vector xyz2 = llGetPos() + <llFrand(80) - 40, llFrand(80) - 40, llFrand(10)>;
llSetCameraParams([
CAMERA_ACTIVE, 1, // 1 is active, 0 is inactive
CAMERA_BEHINDNESS_ANGLE, 180.0, // (0 to 180) degrees
CAMERA_BEHINDNESS_LAG, llFrand(3), // (0 to 3) seconds
CAMERA_DISTANCE, llFrand(10), // ( 0.5 to 10) meters
//CAMERA_FOCUS, xyz, // region relative position
CAMERA_FOCUS_LAG, llFrand(3), // (0 to 3) seconds
CAMERA_FOCUS_LOCKED, TRUE, // (TRUE or FALSE)
CAMERA_FOCUS_THRESHOLD, llFrand(4), // (0 to 4) meters
CAMERA_PITCH, llFrand(125) - 45, // (-45 to 80) degrees
CAMERA_POSITION, xyz2, // region relative position
CAMERA_POSITION_LAG, llFrand(3), // (0 to 3) seconds
CAMERA_POSITION_LOCKED, TRUE, // (TRUE or FALSE)
CAMERA_POSITION_THRESHOLD, llFrand(4), // (0 to 4) meters
CAMERA_FOCUS_OFFSET, <llFrand(20) - 10, llFrand(20) - 10, llFrand(20) - 10> // <-10,-10,-10> to <10,10,10> meters
]);
llSleep(0.1);
}
butt_cam();
}
back_cam()
{
llSetCameraParams([
CAMERA_ACTIVE, 1, // 1 is active, 0 is inactive
CAMERA_DISTANCE, 5.0, // ( 0.5 to 10) meters
CAMERA_PITCH, 10.0, // (-45 to 80) degrees
CAMERA_BEHINDNESS_ANGLE, 0.0, // (0 to 180) degrees
CAMERA_BEHINDNESS_LAG, 0.1, // (0 to 3) seconds
CAMERA_FOCUS_OFFSET, <0.0,0.0,1.5>, // <-10,-10,-10> to <10,10,10> meters
CAMERA_FOCUS, llGetPos(), // region-relative position
CAMERA_FOCUS_LAG, 0.1, // (0 to 3) seconds
CAMERA_FOCUS_THRESHOLD, 0.1, // (0 to 4) meters
CAMERA_FOCUS_LOCKED, FALSE, // (TRUE or FALSE)
CAMERA_POSITION, llGetPos(), // region-relative position
CAMERA_POSITION_LAG, 0.5, // (0 to 3) seconds
CAMERA_POSITION_THRESHOLD, 0.5, // (0 to 4) meters
CAMERA_POSITION_LOCKED, FALSE // (TRUE or FALSE)
]);
}
setup_listen()
{
llListenRemove(1);
CHANNEL = llRound(llFrand(1) * 100000);
integer x = llListen(CHANNEL, "", "", ""); // listen for dialog answers
}
default
{
state_entry()
{
setup_listen();
llSetTimerEvent(2);
}
touch_start(integer total_number)
{
integer perm = llGetPermissions();
if (perm & PERMISSION_DEBIT)
{ llOwnerSay(llGetScriptName() + " has PERMISSION_DEBIT perms for "+(string)llGetPermissionsKey()); }
if (perm & PERMISSION_TAKE_CONTROLS)
{ llOwnerSay(llGetScriptName() + " has PERMISSION_TAKE_CONTROLS perms for "+(string)llGetPermissionsKey()); }
if (perm & PERMISSION_TRIGGER_ANIMATION)
{ llOwnerSay(llGetScriptName() + " has PERMISSION_TRIGGER_ANIMATION perms for "+(string)llGetPermissionsKey()); }
if (perm & PERMISSION_ATTACH)
{ llOwnerSay(llGetScriptName() + " has PERMISSION_ATTACH perms for "+(string)llGetPermissionsKey()); }
if (perm & PERMISSION_CHANGE_LINKS)
{ llOwnerSay(llGetScriptName() + " has PERMISSION_CHANGE_LINKS perms for "+(string)llGetPermissionsKey()); }
if (perm & PERMISSION_TRACK_CAMERA)
{ llOwnerSay(llGetScriptName() + " has PERMISSION_TRACK_CAMERA perms for "+(string)llGetPermissionsKey()); }
if (perm & PERMISSION_CONTROL_CAMERA)
{ llOwnerSay(llGetScriptName() + " has PERMISSION_CONTROL_CAMERA perms for "+(string)llGetPermissionsKey()); }
if (perm == 0)
{ llOwnerSay(llGetScriptName() + " has NO perms for "+(string)llGetPermissionsKey()); }
llDialog(llDetectedKey(0), "What do you want to do?", MENU_MAIN, CHANNEL); // present dialog on click
}
listen(integer channel, string name, key id, string message)
{
if (llListFindList(MENU_MAIN + MENU_2, [message]) != -1) // verify dialog choice
// if (llListFindList(MENU_MAIN, [message]) != -1) // verify dialog choice
{
// llOwnerSay(name + " picked the option '" + message + "'."); // output the answer
if (message == "More...")
llDialog(id, "Pick an option!", MENU_2, CHANNEL); // present submenu on request
else if (message == "...Back")
llDialog(id, "What do you want to do?", MENU_MAIN, CHANNEL); // present main menu on request to go back
else if (message == "Cam ON")
{
take_camera_control(id);
}
else if (message == "Cam OFF")
{
release_camera_control(id);
}
else if (message == "Butt Cam")
{
butt_cam();
}
else if (message == "Fly Cam")
{
fly_cam();
}
else if (message == "Worm Cam")
{
worm_cam();
}
else if (message == "God Cam")
{
god_cam();
}
else if (message == "Trip Cam")
{
trip_cam();
}
else if (message == "Me Cam")
{
me_cam();
}
else if (message == "Ghost Cam")
{
ghost_cam();
}
else if (message == "Trap Toggle")
{
trap = !trap;
if (trap == 1) {
llOwnerSay("trap is on");
}
else {
llOwnerSay("trap is off");
}
}
else if (message == "Back Cam")
{
back_cam();
}
} else
llOwnerSay(name + " picked invalid option '" + llToLower(message) + "'."); // not a valid dialog choice
}
run_time_permissions(integer perm) {
if ((perm & PERMISSION_CONTROL_CAMERA) == PERMISSION_CONTROL_CAMERA) {
llSetCameraParams([CAMERA_ACTIVE, 1]); // 1 is active, 0 is inactive
llOwnerSay("Camera permissions have been taken");
}
}
changed(integer change)
{
if (change & CHANGED_LINK)
{
key agent = llAvatarOnSitTarget();
if (agent)
{
setup_listen();
llRequestPermissions(agent, PERMISSION_CONTROL_CAMERA);
}
}
}
attach(key agent)
{
if (agent != NULL_KEY)
{
setup_listen();
llRequestPermissions(agent, PERMISSION_CONTROL_CAMERA);
}
}
timer()
{
if (trap == 1)
{
focus_on_me();
}
}
}
</CODE>
Safety Pin - Attachment Tool for Secondlife Creators
Here's a nice little freebie called Safety Pin that could save you hours of time realigning objects on new attachment points.
Also useful for building a 'mannequin' of the attachments on the supplied pose stand that will remember your exact size and placement.
Information is money and you're giving it away!
Internet security is back in the news as ad tracking companies apparently circumvented Safari's privacy settings and uploaded users contact lists to their servers without their permission.
I run a fairly tight ship when it comes to internet security so here are my recommendations for safe web browsing.
I run Mozilla Firefox as my primary browser believing it to be more secure than IE and very stable.
I've played around with Chrome and I use Safari on my iPhone.
Firefox has a great selection of 'add-ons' so you start with the basic setup and add the things you want from their website.
The first add-on you want to grab off the Firefox website is "No Script".
This little baby allows websites on a page by page basis.
In fact element by element. You can choose to allow only certain parts of a website to run.
Often a web page will be made up from all different sources combined into one cohesive page.
No Script allows you to see all the various sources and allow or disallow them by 'friendly name' IP.
So if the content I want to view on CNN.com is the news part but I don't care about seeing their ads which come from their ad server, I can block them and just see the news part. Brilliant!
If you come across a malicious web page that runs scripts as soon as you land on it, chances are you'll get infected immediately.
No Script has all scripts off by default and then it's up to your judgement whether you should allow a page to run its scripts. So it's not entirely foolproof!
Another plus is I can open several youtube tabs at a time and by disallowing youtube.com in the No Script options, the videos won't all simultaneously start playing. I can go to each tab and allow just that video to play then move to the next one and do the same. This works on any website with streaming content.
I've been using No Script for a couple of years now and I wouldn't not use it.
It requires you to be more aware of what various parts of a web page are doing but that's a good thing and as it's all off by default, you have maximum protection from 'drive-by' hijackings!
The BBC's tech program Click featured another add-on for Firefox recently called "Do Not Track Plus" from security company abine.com.
The ad tracking story had just broken and so I checked out what this thing does.
Besides 'third party cookies' that track your web browsing and target advertising towards your apparent demographic, there are other ways of data scraping most people aren't aware of.
"Social Buttons" like Facebook, Twitter, Digg, etc allow the website you are visiting to share that information with these companies. So if you're logged in to facebook and decide to look at other websites, that is being tracked. The friendly facebook icon on that page is coded in such a way, no cookie is required.
Then there's the inevitable ad farming companies that show up all the time like doubleclick, and google analytics. The more popular a website, the more likely it is 'affiliated' with other data sharers.
Besides all this happening without you even realising it. Despite companies growing rich by selling on your information while you blissfully enter personal data into web forms on a redirected site in Latvia, there are serious privacy issues involved.
A lot of this information collected is apparently 'anonymous' but not all of it.
And break-ins are to be expected.
Hackers are getting more sophisticated and backed by huge money.
If we can encrypt it, someone will work out how to unencrypt it.
In the meantime, Do Not Track Plus stops all data sharing on every page you visit.
None of these are important to the viewing of the page.
In fact for each IP that has to be contacted it costs a few miliseconds.
These data trackers are slowing you down!
I also run Avira anti-virus and Comodo firewall on my computer and have automatic updates set for each.
Both are great free products that will save you a lot of angst from a virus, trojan or worm.
You should never connect to a network without anti-virus and a good firewall already set up.
The threats are real and in a test I read recently, it took as little as 17 seconds for an unprotected machine to be infected by automated port sniffing bots.
This affects all Safari users on all platforms including Apples iOS devices.
I run a fairly tight ship when it comes to internet security so here are my recommendations for safe web browsing. I run Mozilla Firefox as my primary browser believing it to be more secure than IE and very stable.
I've played around with Chrome and I use Safari on my iPhone.
Firefox has a great selection of 'add-ons' so you start with the basic setup and add the things you want from their website.
The first add-on you want to grab off the Firefox website is "No Script".
This little baby allows websites on a page by page basis.
In fact element by element. You can choose to allow only certain parts of a website to run.
Often a web page will be made up from all different sources combined into one cohesive page.
No Script allows you to see all the various sources and allow or disallow them by 'friendly name' IP.
So if the content I want to view on CNN.com is the news part but I don't care about seeing their ads which come from their ad server, I can block them and just see the news part. Brilliant!
If you come across a malicious web page that runs scripts as soon as you land on it, chances are you'll get infected immediately.
No Script has all scripts off by default and then it's up to your judgement whether you should allow a page to run its scripts. So it's not entirely foolproof!
Another plus is I can open several youtube tabs at a time and by disallowing youtube.com in the No Script options, the videos won't all simultaneously start playing. I can go to each tab and allow just that video to play then move to the next one and do the same. This works on any website with streaming content.
I've been using No Script for a couple of years now and I wouldn't not use it.
It requires you to be more aware of what various parts of a web page are doing but that's a good thing and as it's all off by default, you have maximum protection from 'drive-by' hijackings!
The BBC's tech program Click featured another add-on for Firefox recently called "Do Not Track Plus" from security company abine.com.
The ad tracking story had just broken and so I checked out what this thing does.
Besides 'third party cookies' that track your web browsing and target advertising towards your apparent demographic, there are other ways of data scraping most people aren't aware of.
"Social Buttons" like Facebook, Twitter, Digg, etc allow the website you are visiting to share that information with these companies. So if you're logged in to facebook and decide to look at other websites, that is being tracked. The friendly facebook icon on that page is coded in such a way, no cookie is required.
Then there's the inevitable ad farming companies that show up all the time like doubleclick, and google analytics. The more popular a website, the more likely it is 'affiliated' with other data sharers.
Besides all this happening without you even realising it. Despite companies growing rich by selling on your information while you blissfully enter personal data into web forms on a redirected site in Latvia, there are serious privacy issues involved.
A lot of this information collected is apparently 'anonymous' but not all of it.
And break-ins are to be expected.
Hackers are getting more sophisticated and backed by huge money.
If we can encrypt it, someone will work out how to unencrypt it.
In the meantime, Do Not Track Plus stops all data sharing on every page you visit.
None of these are important to the viewing of the page.
In fact for each IP that has to be contacted it costs a few miliseconds.
These data trackers are slowing you down!
I also run Avira anti-virus and Comodo firewall on my computer and have automatic updates set for each.
Both are great free products that will save you a lot of angst from a virus, trojan or worm.
You should never connect to a network without anti-virus and a good firewall already set up.
The threats are real and in a test I read recently, it took as little as 17 seconds for an unprotected machine to be infected by automated port sniffing bots.
Subscribe to:
Comments (Atom)




