<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.thinkwiki.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=OkdSog</id>
	<title>ThinkWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.thinkwiki.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=OkdSog"/>
	<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/wiki/Special:Contributions/OkdSog"/>
	<updated>2026-05-14T02:13:12Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.12</generator>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Code/tp-theft-basic&amp;diff=29182</id>
		<title>Code/tp-theft-basic</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Code/tp-theft-basic&amp;diff=29182"/>
		<updated>2007-04-10T16:41:29Z</updated>

		<summary type="html">&lt;p&gt;OkdSog: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#!/usr/bin/perl&lt;br /&gt;
# tp-theft v0.1 (http://thinkwiki.org/wiki/Script_for_theft_alarm_using_HDAPS)&lt;br /&gt;
# This script uses the HDAPS accelerometer found on recent ThinkPad models&lt;br /&gt;
# to emit an audio alarm when the laptop is tilted. In sufficiently&lt;br /&gt;
# populated environments, it can be used as a laptop theft deterrent.&lt;br /&gt;
#&lt;br /&gt;
# This file is placed in the public domain and may be freely distributed.&lt;br /&gt;
&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
&lt;br /&gt;
##############################&lt;br /&gt;
# Siren volume and content&lt;br /&gt;
&lt;br /&gt;
# Audio volume (0..100)&lt;br /&gt;
my $volume = 70;&lt;br /&gt;
&lt;br /&gt;
# Synthesize a siren for 1.0 seconds:&lt;br /&gt;
my $play_cmd = &amp;quot;sox -t nul /dev/null -t ossdsp /dev/dsp synth 1.0 sine 2000-4000 sine 4000-2000&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Play a file:&lt;br /&gt;
# my $play_cmd = &amp;quot;play keep_your_hands_off_me.wav&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
##############################&lt;br /&gt;
# Other tweakables&lt;br /&gt;
&lt;br /&gt;
my $thresh = 0.20;   # tilt threshold (increase value to decrease sensitivity)&lt;br /&gt;
my $interval = 0.1;  # sampling interval in seconds&lt;br /&gt;
my $depth = 10;      # number of recent samples to analyze&lt;br /&gt;
my $pos_file='/sys/devices/platform/hdaps/position';&lt;br /&gt;
my $verbose = 1;&lt;br /&gt;
&lt;br /&gt;
##############################&lt;br /&gt;
# Code&lt;br /&gt;
&lt;br /&gt;
sub get_pos {&lt;br /&gt;
    open(POS,&amp;quot;&amp;lt;&amp;quot;,$pos_file) or die &amp;quot;Can't open HDAPS file $pos_file: $!\n&amp;quot;;&lt;br /&gt;
    $_=&amp;lt;POS&amp;gt;;&lt;br /&gt;
    m/^\((-?\d ),(-?\d )\)$/ or die &amp;quot;Can't parse $pos_file content\n&amp;quot;;&lt;br /&gt;
    return ($1,$2);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub stddev {&lt;br /&gt;
    my $sum=0;&lt;br /&gt;
    my $sumsq=0;&lt;br /&gt;
    my $n=$#_ 1;&lt;br /&gt;
    for my $v (@_) {&lt;br /&gt;
	$sum  = $v;&lt;br /&gt;
	$sumsq  = $v*$v;&lt;br /&gt;
    }&lt;br /&gt;
    return sqrt($n*$sumsq - $sum*$sum)/($n*($n-1));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
my (@XHIST, @YHIST);&lt;br /&gt;
my ($x,$y) = get_pos;&lt;br /&gt;
for (1..$depth) {&lt;br /&gt;
    push(@XHIST,$x);&lt;br /&gt;
    push(@YHIST,$y);&lt;br /&gt;
}&lt;br /&gt;
my $alarm_file; # flags ongoing alarm (and stores saved mixer settings)&lt;br /&gt;
&lt;br /&gt;
while (1) {&lt;br /&gt;
    my ($x,$y) = get_pos;&lt;br /&gt;
    shift(@XHIST); push(@XHIST,$x);&lt;br /&gt;
    shift(@YHIST); push(@YHIST,$y);&lt;br /&gt;
    my $xdev = stddev(@XHIST);&lt;br /&gt;
    my $ydev = stddev(@YHIST);&lt;br /&gt;
&lt;br /&gt;
    # Print variance and history&lt;br /&gt;
    print &amp;quot;X: v=$xdev (&amp;quot;.join(',',@XHIST).&amp;quot;)  Y: v=$ydev (&amp;quot;.join(&amp;quot;,&amp;quot;,@YHIST).&amp;quot;)\n&amp;quot; if $verbose&amp;gt;1;&lt;br /&gt;
&lt;br /&gt;
    my $tilted = $xdev&amp;gt;$thresh || $ydev&amp;gt;$thresh;&lt;br /&gt;
&lt;br /&gt;
    if ($tilted&lt;/div&gt;</summary>
		<author><name>OkdSog</name></author>
		
	</entry>
</feed>