Building AI-First DevOps: My very personal view on Vibe Coding and Autonomous Development

The Takeaway / TLDR

AI-First DevOps is not just an evolutionary step in software engineering—it’s a revolutionary shift in how we build, scale, and manage digital systems. The companies and teams that thrive won’t be those who simply bolt on AI add-ons, but those who fundamentally reimagine their workflows, culture, and infrastructure from the ground up, trusting in intelligent automation to unlock exponential gains. This moment demands more than tool adoption; it calls for a reinvention of roles, priorities, and even the web itself. The future belongs to those bold enough to embrace the autonomy and partnership AI offers, while building the guardrails and documentation that allow trust to flourish. The real risk isn’t being replaced by AI, but missing the race because you hesitated at the starting line. In the coming era, those who master AI-first principles will set the pace for the rest of the industry.

AspectTraditional DevelopmentAI-First Development
Code WritingManual coding by developersNatural-language–to-code generation (“vibe coding”)
DocumentationSeparate tools (Word, Confluence)Documentation-as-Code (README-driven)
TestingManual test creation & executionAI-generated tests, quality gates for AI generated code
Bug FixingManual debugging and patchesAutonomous bug detection & repair
Code ReviewsHuman peer reviewsAI-powered reviews with AI feedback loop
Knowledge ManagementTribal knowledge, silosLessons-learned files, AI memory
Architecture PlanningUp-front design documentsIterative AI-guided architecture, continous research on the internet
Development SpeedLinear, human-limitedExponential productivity growth
Quality AssuranceManual QA processesAI quality gates, continuous validation
Learning CurveYears of trainingWeeks-to-months for AI-tool mastery
Team StructureLarge, role-specialised teamsLean teams amplified by AI agents
Deployment ProcessManual or scripted CI/CDZero-touch, AI or automatically-triggered deployment pipelines
CollaborationMeetings, manual coordinationAI-assisted collaboration tools
SecurityPeriodic manual auditsContinuous AI scanning, hardening & patching
MaintenanceScheduled updates & patchesContinuous AI-led maintenance
Innovation SpeedFeature cadence gated by staff bandwidthRapid cycles driven by autonomous prototyping
Error HandlingReactive, ticket-basedProactive AI detection & self-healing
Cost StructureHigh payroll, slower ROICompute-heavy, low head-count
ScalabilityAdd head-count to scale outputScale via larger models & infra, not people
Compliance & GovernanceManual reviews & sign-offsPolicy-as-code, automated evidence capture and auditing, every prompt and output can be stored

In this article I will try to address each point and provide arguments for it.

Action speaks louder then words: I created an AI first automation cli tool, check it out.. You can be the change.

The Paradigm Shift: From Code-First to AI-First

The software development landscape is undergoing a seismic transformation that rivals the shift from assembly language to high-level programming languages While CEOs across LinkedIn declare their companies "AI-first," most teams lack the practical knowledge to implement this paradigm shift ^1. This comprehensive guide explores how to truly build AI-ready DevOps infrastructure, drawing from cutting-edge practices and real-world implementations.

The (bad) Automotive Analogy: Driving with Assistant Systems

The automotive analogy illuminates something important about the fundamental shift happening in software development, though the comparison has clear limitations. While automotive assistance systems represent sophisticated engineering rather than true AI, they demonstrate a crucial principle: the necessity of behavioral change when working alongside intelligent systems.

These systems force drivers to change their behavior patterns, often in ways that lead to measurably better outcomes. Research confirms this behavioral adaptation phenomenon - studies show that drivers using Adaptive Cruise Control exhibit different acceleration patterns, maintain more consistent following distances, and often achieve better fuel economy than manual driving^2 ^4.

The Trust and Behavioral Change Dynamic

What makes the automotive analogy instructive is how it reveals the psychological dimension of working with automated systems. Research on trust in automation shows that humans undergo significant behavioral adaptations when interacting with intelligent systems^5^7. The process involves learning to calibrate trust appropriately - understanding when to rely on the system and when to intervene^7.

Observation about monitoring system indicators ("Is lane control still active? Does the car recognize its surroundig correctly?") reflects a critical finding from automation research: successful human-machine collaboration requires continuous awareness of system state and capability^8^10.

Studies demonstrate that this behavioral change isn't just about using tools differently - it fundamentally alters how humans approach tasks^7. Improved driving efficiency and safety is only one benefit, humans often perform better when working collaboratively with well-designed automated systems^9.

Where the Analogy Breaks Down

However, the automotive analogy has significant limitations when applied to software development. Unlike driver assistance systems, which maintain clear human oversight, current trends in AI-powered software development suggest a trajectory toward more complete automation^11. Research indicates that "AI could replace software developers".

Software Engineering oder Software Coding is an AI solvable Problem and reflects a different magnitude of change than automotive assistance. While driver assistance systems enhance human capability, AI code generation tools increasingly handle entire development workflows autonomously^13.

The Uncertain Nature of This Transformation

Current evidence suggests we may be witnessing something more fundamental than the automotive assistance model implies. AI-powered development tools are already demonstrating capabilities that extend beyond assistance into autonomous task completion ^13. Unlike automotive systems that require continuous human supervision, AI development systems can operate with minimal human intervention for extended periods.

The behavioral changes required for AI-first development may be more profound than those needed for driver assistance systems. While drivers retain ultimate control and responsibility, AI-first development potentially shifts developers into supervisory or curatorial roles rather than direct executors^11^16.

The Value and Limits of the Analogy

The automotive comparison remains valuable for understanding the behavioral adaptation requirements and the trust calibration process that humans must undergo when working alongside intelligent systems^1. It demonstrates that effective collaboration with automated systems requires fundamental changes in human behavior patterns, not merely tool adoption.

However, the analogy may underestimate the potential scope of transformation in software development. The automotive model suggests augmentation within retained human control, while AI-first development trends point toward more substantial role redefinition for human developers^11^17.

The Vibe Coding Revolution

Andrej Karpathy, former Tesla AI director and OpenAI co-founder, introduced the term "vibe coding" in February 2025, describing a revolutionary approach where developers "fully give into the vibes" and "forget the code even exists" ^5. This methodology represents a shift from traditional syntax-focused programming to intuitive, conversation-based development using tools like Cursor for example ^5.

Karpathy's approach epitomizes the AI-first mindset: "I just see things, say things, run things, and copy-paste things, and it mostly works" ^5. This isn't hyperbole—it's a fundamental redefinition of the developer's role from manual coder to AI conductor ^7.

Understanding AI-First Development

What Makes Development "AI-First"?

AI-first development isn't simply adding AI tools to existing workflows—it's rebuilding the entire development process around artificial intelligence capabilities ^8. According to IDC research, "AI-first development is a transformative paradigm that integrates intelligence as a core attribute of applications from the outset" ^9.

The transformation parallels how AI-first companies like Mercor achieved $50 million in annual recurring revenue with just 30 employees, while Cursor reached $100 million ARR with fewer than 24 employees ^8. These companies didn't just use AI tools—they structured their entire operations around AI capabilities from day one.

Beyond Tools: A Cultural Transformation

AI-First DevOps Cycle
(My) AI-First DevOps Workflow: A Complete Autonomous Development Cycle

Recent studies show that AI-first companies are fundamentally different from traditional organizations ^8. They spend heavily on technology while maintaining lean high-performance teams, achieving operational scale that would traditionally require hundreds of employees ^8. Netflix exemplifies this approach, using AI-powered Chaos Monkey to achieve a 23% reduction in unexpected outages globally ^10.


The Foundation: Documentation as Code

READMEs as AI Prompts

In AI-first development, documentation isn't an afterthought—it's the primary interface between human intent and AI execution ^2. And even AI intent and AI execution! READMEs function as sophisticated prompts that guide AI behavior, replacing traditional requirements documents ^11. This "docs-as-code" approach treats documentation with the same rigor as source code, using version control and code reviews^11.

The paradigm shift is profound: while traditional development separates documentation from code, AI-first development integrates them completely ^12. As one practitioner noted, "docs-as-code allows engineers to tap into a deeper level of understanding, enabling them to push the boundaries of what's possible" ^13.

Architecture Documentation for AI Systems

AI systems require comprehensive context to function effectively. This includes technical specifications (AWS, Azure, or on-premise hosting), architectural patterns (hexagonal architecture, microservices), and integration details (responsibility, borders of concern etc.). Unlike human developers who can infer context, AI tools need explicit documentation to maintain consistency across large codebases ^14. The source code doesn't tell all the story, it only shows "What" is done, but not "Why" it is done in the way it is done. The overall strategy, intention and design decisions are not visible in the code, but in the documentation (and maybe inline doc-strings, written for and by AI).

Lessons Learned Files: Building AI Memory

Traditional development relies on "tribal knowledge"—information stored in developers' heads. AI-first development formalizes this through lessons learned files that capture successful patterns, failed approaches, and optimization discoveries ^2. These files serve as external memory for AI systems, enabling continuous learning and preventing repeated mistakes. Making AI developers even better with each iteration. It enables exponential improvement of the AI system. Large language models have now (at the time of writing) a context window of 1 million tokens, which is enough to store a lot of information about the project, the architecture, the design decisions and the lessons learned. As the project and the documentation grows, the LLMs become more and more powerful making the whole system better and better. A self-reinforcing cycle of improvement!

Vibe Coding: Programming with Natural Language

The Technical Reality

Vibe coding leverages sophisticated tools like Cursor's with SuperWhisper speech recognition, enabling developers to speak requirements and watch AI generate functional code ^16. This approach represents the culmination of advances in large language models, where "the hottest new programming language is English" ^5.

The methodology works because modern LLMs can interpret abstract concepts and translate them into concrete implementations ^17. However, as Simon Willison notes, true vibe coding means "accepting code without full understanding"—a fundamental departure from traditional programming practices ^5. To be able to fully trust the AI system, like we trust the car assistants is key to AI-first. But how to build trust?

Tools of the Trade

The ecosystem of AI coding tools has exploded, with over 70 AI code completion tools now available ^18. GitHub Copilot, the pioneer in this space, uses OpenAI Codex to suggest code and entire functions in real-time ^20. More advanced tools like Cursor offer comprehensive development environments built specifically for AI-first workflows ^4. But these tools are NOT the AI system of the future I imagine (yet).

AI Coding Tools: Market Leaders and Pricing (June 2025)

Tool Price (per user/month) Key Features Source
Cursor $20 Advanced codebase understanding, natural language editing Link
GitHub Copilot $19 Broad IDE integration, code completion, chat Link
Tabnine $39 Advanced code completion, domain-specific models Link
Anthropic Claude Code $20 (Pro), $100 (Max) Deep codebase awareness, terminal/IDE integration, Claude Opus 4 model Link
Amazon CodeWhisperer Free (Individual), $19 (Professional) Real-time code suggestions, security scans, IDE integration Link
Replit Ghostwriter $15 (Core), $40 (Teams) AI code completion, code explanations, multi-language support Link
Windsurf (formerly Codeium) $15 (Pro), $30 (Teams), $60 (Enterprise) Full-stack code generation, prompt credits, multi-model support Link
Codeium Free (Individual), $15 (Teams), $60 (Enterprise) AI autocomplete, chat, code search, IDE plugins Link
Phind $20 (Pro), $40 (Business) AI-powered code search, multi-model (GPT-4o, Claude), browser code execution Link
Mutable AI $10 (Basic), $25 (Pro) AI code completion, refactoring, codebase tools Link
AskCodi Free (Basic), $9.99 (Premium), $29.99 (Ultimate) AI code generation, documentation, test creation Link
aiXcoder Free AI code completion, IDE integration Link
CodeGPT Free, $9.99 (Pro), $19.99 (Teams) IDE integration, AI chat, code refactoring Link
CodeMate AI Free (Basic), $10 (Premium), $14.08 (Pro), $30 (Enterprise) Error fixing, code optimization, team features Link
Code Snippets AI $4 (Developer), $10 (Professional), $30 (Power User) Snippet management, AI code suggestions, team sharing Link
Codium AI $58 (Intermediate), $116 (Advanced) AI code review, project management, advanced business logic Link
Qodo Free (Developer), $30 (Teams), $45 (Enterprise) AI code review, testing, multi-agent platform Link

Note: Prices are for individual users unless otherwise specified. Some tools offer free tiers with limited features. Always check the vendor’s site for the latest pricing and feature updates.

AI-Ready DevOps Infrastructure

Quality Gates That Work with AI

Modern DevOps quality gates must account for AI-generated code, which requires different validation approaches than human-written code ^23. Traditional quality gates focus on human review processes, while AI-first quality gates emphasize automated validation, continuous testing, and behavioral verification ^23.

TDD for AI projects extends beyond traditional unit testing to include data preprocessing, model training, and deployment pipeline validation ^28. The "Red-Green-Refactor" cycle adapts to AI development by emphasizing automated test generation and continuous validation ^28. Each bug fix or feature addition is automatically accompanied by automated tests capturing the ill behaviour and validate the AI implemented fix, ensuring that the bug never happens again and do not introduce regressions or unexpected behavior.

Autonomous Bug Detection and Fixing

Research shows that AI-powered and (for) AI-adapted testing can identify issues before they manifest in production by analyzing code changes and execution paths ^25. Tools like MarsCode Agent demonstrate how AI can automate the entire bug-fixing lifecycle, from detection through patch validation ^26. The engineers have to design the quality gates, but the CI / CD pipeline must be fully automated, including the testing and validation of the AI-generated code. Bug-Fixing, monitoring, and PR reviewing must be fully automated as well. The AI system must be able to detect bugs, fix them, and validate the fixes without human intervention. Human review capacity becomes the limiting factor as AI generates code faster than humans can validate it. The only way to overcome this bottleneck is to automate the review process. The AI system must be able to review the code, validate it, and fix it if necessary. The human developer must only monitor the overall strategy and performance. AI-powered bug fixing represents one of the most transformative aspects of AI-first development ^25. Traditional approaches relied on manual debugging and human intuition, consuming approximately one-third of software companies' development resources ^30. Eliminating this bottleneck will unleash the full potential of AI-first development. The only thing left for the human developer, is the requirements engineering, the architecture design, the overall strategy and monitoring of the project. The AI system will take care of the rest.

The Human-AI Partnership

The Developer's New Role

The developer's role is evolving from manual coder to AI conductor and quality curator ^7. As one practitioner observed, "AI is about amplifying human potential, not replacing it" ^34. I don't think this is correct. Software Development as we know it will never come back. This transformation requires new skills: prompt engineering, AI tool optimization and curating the AI system. The developer of the future must understand the AI system, its limitations and its capabilities, and be able to design the overall architecture and strategy of the project. Curating and expanding the AI system's capabilities becomes the primary focus, with developers acting as AI engineers rather than manual coders ^2. The one with the best overall AI system wins.

"You won't lose your job to a tractor, but to a horse who learns how to drive a tractor" ^41

Managing the Exponential Productivity Curve

AI-first development enables exponential productivity growth rather than linear progression ^2. Companies report that after initial setup periods, AI tools can implement features autonomously with minimal human intervention.AI-First Web: Designing Sites for Large Language Models, Not Browsers

The next logical step after AI-first development is an AI-first Web—a public Internet whose primary consumer is no longer a human with a browser, but an autonomous language model able to read, reason over, and remix online content at scale ^38. As my friend Oscar correctly analysed in his very entertaining article worth reading, the primary consumer of blog articles like this one are already autonomous agents^39. 

From rich front-ends to machine-readable Markdown 

Traditional websites are optimised for visual appeal: multipage SPAs, heavy JavaScript bundles, hero images, and interactive widgets. None of this helps a language model. An AI-first site strips the presentation layer down to essentials—plain Markdown files linked through simple anchors, each document carrying the full context a model needs (title, purpose, example payloads, licence). The result is pages that load faster, require virtually no client-side resources, and can be parsed in a single pass by an LLM.

The future Web will probably not be built for people at all, but for the machines that speak on our behalf.

Performance and capability gains 

Because every byte counts when an agent is following hundreds of links a second, the Markdown-only pattern dramatically reduces latency and bandwidth. That efficiency compounds: agents that can fetch, interpret, and vector-index a page in milliseconds can chain far more sources together, producing answers that are richer than what even the best human search workflow can achieve.

Early adopters 

Some providers are already exposing their docs in exactly this form to advertise that they are AI-ready. A concise example is Vercel’s llms.txt, a single text file giving LLMs canonical instructions on how to navigate the company’s API surface^40. The file lives alongside conventional human-centric docs but is optimised for bots: no layout, no CSS, just structured prompts and endpoints.

Business upside

  • Faster on-boarding: An LLM integrating with your API does not need a month-long developer advocate programme—it just reads the Markdown and starts calling endpoints.
  • SEO for machines: When search traffic is driven by AI agents rather than humans, being “first page” means being parsed correctly, not being pixel-perfect.
  • Lower hosting costs: No video, no CSS frameworks—static text files served from the edge.

How to become AI-Web ready 

  • Convert existing knowledge bases to Markdown, one file per topic. – Embed explicit usage examples, error cases, and licence terms so an agent never has to guess. 
  • Publish an llms.txt or robots.txt-style manifest at the root of your domain that lists entry points, rate limits, and contact information for escalation.
  • Keep human-oriented pages, but treat them as a secondary rendering of the same canonical Markdown, not the other way around.

In short, an AI-first Web complements an AI-first development process: the code is written by machines and, increasingly, the documentation and discovery layer is also curated for machines. Companies that adapt early will find that the same content serves both audiences—just packaged so that one can be read by humans and the other can be understood by machines.

Building Your AI-First Organization

Cultural Transformation Requirements

Transitioning to AI-first development requires comprehensive cultural change beyond tool adoption. Organizations must shift from valuing lines of code written to features delivered, from individual expertise to AI-amplified team capability ^8.

Successful AI-first companies report that 94% plan to increase AI investment, with 40% willing to raise investment by 15% or more. This commitment reflects understanding that AI-first transformation is fundamental, not incremental ^36.

Tool Selection and Integration Strategy

The AI development tool landscape changes rapidly, requiring organizations to maintain flexibility while building core capabilities. Best practices include staying model and inference provider agnostic, experimenting with different architectures, and utilizing subject matter experts during experimentation phases ^14. Testing and experimenting a lot is crucial!

Integration strategies must account for the compound effect of AI tools working together. Documentation-as-code enables AI code generation, which feeds into automated testing, which enables autonomous deployment—each component amplifies the others' effectiveness. Good quality gates are a must, to build trust for the overall AI system.

Measuring Success with New Metrics

Traditional software metrics like lines of code per developer become irrelevant in AI-first development. New metrics focus on feature delivery velocity, autonomous development percentage, and AI-human collaboration effectiveness ^37.

Essential quality metrics include defect density reduction, automated test coverage, and mean time to repair (MTTR) for AI-generated code. Process metrics emphasize automation coverage, first-time pass rates, and the percentage of development tasks completed autonomously ^37. If your software uses AI in its business code, even more metrics should become important to you. AI systems behave chaotically, and it is important to monitor the AI system's behavior, performance, and quality. Another AI system must be able to detect anomalies and unexpected behavior in real-time and fix them automatically. If you use a RAG in your business code, then metrics like Truthfulness, Relevance, Precision and Recall should be part of the quality gates and monitoring system. It is a whole new level of complexity, but the software developer (and CTO) of the future must be able to handle and understand it.

The Future of Software Engineering

One-Year Predictions

I think software engineering will be "an absolutely solved problem" within one year at some companies. This bold prediction reflects the accelerating pace of AI advancement and the exponential improvements in tools like Cursor, which has grown from startup to $2.5 billion valuation in under three years ^4.

The transformation parallels Martin Fowler's assessment that AI-first approaches could prove "as significant as the transition from assembly to high-level languages" ^1. We're witnessing the early stages of a fundamental shift in how software is conceived, created, and maintained.

Preparing Your Team for the Transition

Organizations must begin AI-first transformation immediately to avoid competitive disadvantage ^8. The window for gradual adoption is closing as AI-native companies achieve unprecedented efficiency and market responsiveness ^8.

Preparation involves technical infrastructure (AI-ready documentation, quality gates, automation pipelines) and human capital development (AI tool proficiency, LLM understanding, quality validation skills) ^2. The cost of delayed adoption increases exponentially as AI-first competitors establish market advantages.

Conclusion: Embracing the AI-First Future

The transition to AI-first development isn't optional—it's inevitable ^8. Organizations that master vibe coding, autonomous development, and AI-human partnership will achieve unprecedented productivity and innovation velocity ^2. Those that delay risk obsolescence in an increasingly AI-native competitive landscape.

The times we're living in are like something from a science fiction novel. The convergence of mature AI tools, proven methodologies, and exponential productivity curves creates opportunities for organizations ready to embrace fundamental transformation.

Success requires more than tool adoption—it demands reimagining software development from first principles, building AI-ready infrastructure and pipelines, and cultivating AI-amplified human expertise. The companies that master this transition will define the next era of software (and business) innovation.

The journey from traditional to AI-first development represents the most significant transformation in software engineering since the advent of high-level programming languages. Those who act decisively will shape the future; those who hesitate will be shaped by it.

Disclaimer

IMHO; This is my very personal opinion as a Software Engineer and Consultant. This article is for informational purposes only and does not constitute an endorsement of any specific tools or practices.

Connect with me on LinkedIn and drop me a message if you have any questions or want to discuss AI-first development further. I'm always happy to connect with fellow AI-enthusiast and share insights on this exciting transformation.

[Android+Windows+GoogleCardboard+Skyrim]A breeze of what a Oculus Rift could feel like

In July 2016 we will have the Oculus Rift available on the market. Virtual reality glasses which will open a whole new experience for gamers, movie watchers and travelers all over the world. The current shipping price is 599$ in the pre-order shop.

If you want to have a breeze of that experience right now and don't want to wait, this guide is for you!

This will be not a classical Tasker guide, but a friend of mine pushed me to write about my experience so here it is:

What hardware do we need:
  • An Android Smartphone
  • A Windows computer (Propably also works on a MAC or on a LINUX machine)
  • A Google cardboard or something similar, look here: "Google Cardboard" at ebay.com (from 2$ with shipping) 
What software?
  • Android App Trinus VR lite and the Windows counterpart from the Trinus download page.
  • A software to make Skyrim (or any other game) stereoscopic, get the 14 day Trial version of TriDef here. Unfortunately I couldn't get Vireio Perception running, that would be great, as this software is for free.
  • Skyrim (Or propably any other game? Star Citizen, Call of Duty, Battlefield?)
Install all the needed software. The order doesn't matter as they don't interfere.

A few things to account for in Skyrim:
  • Mods are OK
  • Disable ENB

Start TriDef
Start Skyrim
Start Trinus VR lite and connect to your PC.
That's it!

[Tasker] Better battery save widget - "periodic internet": 1%/hr

It's been a while. But I'm back :) So sorry for not replying to all comments.

Many things changed... I updated my Note 3 to Lollipop (feels good, looks bad), bought a smartwatch (LG Watch R, great battery life due to the OLED display, but not really stable connection to the Google Watch software, but that should be Googles fault, still working on a fix for this). Lost my xposed framework functionality due to the new ART framework and my odexed official ROM, but thats off topic ^^

I really wonder, who needs a smartphone 7 mm thick with a battery life of 1 day, if one could have instead one, which is 1 cm thick, a little heavier, but a battery life of 3 days. I would hate it, if the new Samsung Galaxy Note 5 would come without an exchangeable battery..... Anyway, as thinner means "better" for customers (grrrr) we have to deal with it. Here is my newest battery saving widget!

I know, there are programs like "Juice defender" out there. But I don't like overloaded software I have not full control of, running in the background, using RAM and CPU time.

It is much more stable (can run for hours and hours) then my previous approaches and I lose approximately 1% of battery per hour.


What will you get:
A small widget on your home screen, you click on. It will:
  • START
  • Wait 1,5 minute
  • Activate flight mode (or only deactivate data and wifi)
  • Wait 15 minuts
  • Deactivate airplane mode (or turn data and wifi on)
  • GOTO START
Thats it... It works better, then the previous approaches, because we will use the Tasker Timer option for repeating the task. That means, that it doesn't block other Tasker tasks while running.

This is how it will look like, look at the icon in the lower left corner (oh and hover the screenshot):


Off
What do you need:
  • For the icons (optional): Ipack / Crystal Project HD and Ipack / Kyo-Tux Aeon HD
  • For turning airplane mode on and off (optional): Secure Settings if you have ROOT access (HowTo Root), if you don't have ROOT, you can still continue to read - instead of toggling airplane mode, you can toggle DATA and WIFI with Tasker, no need for Secure Settings, maybe you prefer this anyway, the benefit is, you can still be called while in energy saving mode.
  • Tasker
  • 20 minutes of life time (scroll down for direct downloads)
So lets start with the profile and the associated task:

Create a new profile in Tasker, call it "Periodic Internet Widget Off". This profile will be activated, if we click on the notification while the energy saving mode is running. It will deactivate the energy saving mode.

Profile: Periodic Internet Widget Off
 Event: Notification Click [ Owner Application:Tasker Title:Periodic internet Widget ]
 Enter: Periodic internet Widget Off
 Abort Existing Task

 A1: Stop [ With Error:Off Task:Periodic Internet ]
 A2: Secure Settings [ Configuration:Airplane Mode Disabled Package:com.intangibleobject.securesettings.plugin Name:Secure Settings Timeout (Seconds):0 ]
 A3: Mobile Data [ Set:On ] If [ %MOBILDATA ~ 1 ]
 A4: WiFi [ Set:On ] If [ %WLANTMP ~ 1 ]
 A5: Notify Cancel [ Title:Periodic internet Widget Warn Not Exist:Off ]
 A6: Variable Set [ Name:%PERIRADIO To:0 Do Maths:Off Append:Off ]
 A7: Profile Status [ Name:Periodic Internet Widget Off Set:Off ]
 A8: Timer Widget Control [ Name:Periodic Internet Type:Reset ]
 A9: [X] Timer Widget Control [ Name:Periodic Internet Type:End ]
 A10: Set Widget Icon [ Name:Periodic Internet Icon:ipack:kyotuxaeonhd:network_offline_alt ]
 A11: Timer Widget Set [ Name:Periodic Internet Seconds:1 Minutes:0 Hours:0 Days:0 ] 


Now we nee a task to do the actual work. So create this task: 
Task name: Periodic internet Widget On
 Abort Existing Task

 A1: Variable Set [ Name:%PERIRADIO To:1 Do Maths:Off Append:Off ]
 A2: Variable Set [ Name:%MOBILDATA To:1 Do Maths:Off Append:Off ] If [ %AIR ~ off ]
 A3: Variable Set [ Name:%MOBILDATA To:0 Do Maths:Off Append:Off ] If [ %AIR !~ off ]
 A4: Variable Set [ Name:%WLANTMP To:1 Do Maths:Off Append:Off ] If [ %WIFII ~R CONNECTION ]
 A5: Variable Set [ Name:%WLANTMP To:0 Do Maths:Off Append:Off ] If [ %WIFII !~R CONNECTION ]
 A6: Variable Set [ Name:%noradio To:%MOBILDATA+%WLANTMP Do Maths:On Append:Off ]
 A7: If [ %noradio ~ 0 ]
 A8:   Stop [ With Error:Off Task: ]
 A9: End If
 A10: Timer Widget Set [ Name:Periodic Internet Seconds:0 Minutes:15 Hours:0 Days:0 ]
 A11: Timer Widget Control [ Name:Periodic Internet Type:Resume ] 


The last task looks like this:
Task name: Periodic Internet

 A1: Timer Widget Set [ Name:Periodic Internet Seconds:0 Minutes:15 Hours:0 Days:0 ]
 A2: Set Widget Icon [ Name:Periodic Internet Icon:android.resource://net.dinglisch.android.ipack.crystalhd/drawable/quick_restart ]
 A3: Notify [ Title:Periodic internet Widget Text: Icon:android.resource://net.dinglisch.android.ipack.crystalhd/drawable/quick_restart Number:%SCRON Permanent:On Priority:2 ]
 A4: Profile Status [ Name:Periodic Internet Widget Off Set:On ]
 A5: Secure Settings [ Configuration:Airplane Mode Disabled Package:com.intangibleobject.securesettings.plugin Name:Secure Settings Timeout (Seconds):0 ]
 A6: Wait [ MS:0 Seconds:30 Minutes:0 Hours:0 Days:0 ]
 A7: WiFi [ Set:On ]
 A8: Mobile Data [ Set:On ]
 A9: Wait [ MS:0 Seconds:0 Minutes:1 Hours:0 Days:0 ]
 A10: Secure Settings [ Configuration:Airplane Mode Enabled Package:com.intangibleobject.securesettings.plugin Name:Secure Settings Timeout (Seconds):0 ] 

Add the red lines only, if you have ROOT and want to toggle airplane mode.

You can download and import the tasks directly without the hassle here:
Profile: Periodic Internet Widget Off
Task name: Periodic internet Widget On
Task name: Periodic Internet

To see how to import them, skim this article: How to import Tasker projects, profiles, tasks and scenes 

Now we need to create the widget to actually start our "periodic internet" mode.

  1.  Add a "Tasker Timer Task" to your home screen.
  2. As the task to run select: "Periodic Internet".
  3. Set the countdown to 0:0:0:1 (One second) and activate Repeat ON
The periodic internet mode should start immediately. Don't forget, it will take 1,5 minutes, until the wifi/data or airplane mode is activated for the first time.
To deactivate the "periodic internet" mode, you should click on the permanent notification in the notification bar.

Hope it helps You :)
Leave your opinion in the comments!

[Tasker] Extreme battery saving profile

The battery life of an android phone is not impressive and we got used to charge our phones every day. Nevertheless it can happen that one finds himself in a situation with no charger in reach and no battery left. This profile will help you to avoid this situation. This profile will fire when your battery level will drop under 8% automatically. It is a drastic step, think twice before using it.
This task will:
  • Put your phone into flight mode (I warned you, drastical steps ;)
  • Set the display brightness to deep Darth Vader like darkness
Yes, you won't be reachable. But you can switch off the flight mode whenever you wish and still send or receive the important messages you would miss otherwise. In my opinion it's better then finding your phone completely drained without any options left. The phone should last minimum another hour in this mode.
You will need:

This is what my profile looks like:
Profile: Extreme battery save (28)
     State: Battery Level [ From:0 To:8 ]
Enter: Extreme battery save (3)
     A1: Auto Brightness [ Set:Off ]
     A2: Display Brightness [ Level:0 Disable Safeguard:Off Ignore Current Level:Off Immediate Effect:On ]
     A3: Load App [ App:Screen Filter Data: Exclude From Recent Apps:Off ]
     A4: Airplane Mode [ Set:On ]
     A5: Notify LED [ Title:Battery low Text:Battery under %BATT percent!
          Will switch to battery saving mode. Icon:ipack:crystalhd:cache Number:%BATT Colour:Red Rate:1000 Priority:3 ]
     A6: Zoom Visibility [ Element:Extreme battery save.w / StateON Set:On ]

The normal mode profile could look like this and be activated when a power source is connected:
Profile: Power source connected (11)
     State: Power [ Source:Any ]
Enter: Energy save (17)
     B1: Notify Cancel [ Title:Battery low Warn Not Exist:Off ]
     B2: Airplane Mode [ Set:Off ]
     B3: Display Brightness [ Level:128 Disable Safeguard:Off Ignore Current Level:Off Immediate Effect:On ]
     B4: Auto Brightness [ Set:On ]
     B5: Zoom Visibility [ Element:Extreme battery save.w / StateON Set:Off ]
     B6: Run Shell [ Command:am force-stop com.haxor Timeout (Seconds):0 Use Root:On Store Output In: Store Errors In: Store Result In: ]

The line B6 kills the screen filter app if it is running and will do nothing if it's not running. To create it go to Script -> Run shell -> and enter the command am force-stop com.haxor :) The downside of this powerful command is, it needs root. Maybe you can get the same result by setting up the action App -> Kill App -> Screen filter. No guarantee on this.
You should have problems with creating lines A6 and B5 yet, as there is no Zoom widget yet. So... stay with me after the commercial break....

...your ads here...


Off
Again there is a widget to switch this on and off from the home screen dynamically.
My widget looks like this, you will need two icon packs and the app Zoom to get the same result:

More information on Zoom and how to setup cool widgets can be found on google and here.
Import my Zoom profile by saving the following file as "Extreme_battery_save.w.ztl.xml" under sdcard/Zoom/templates. Then open Zoom and press menu key -> Browse Templates -> Import Directory -> Extreme_battery_save.w.ztl.xml. Now create this Zoom 1x1 widget on your home screen.
<class name="Template" index="">
 <backColour>#00000000</backColour>
 <borderColour>#FFFFFFFF</borderColour>
 <borderWidth>0</borderWidth>
 <cellData>180,187,0,0;186,130,0,0</cellData>
 <cellsHigh>1</cellsHigh>
 <cellsWide>1</cellsWide>
 <marginWidth>4</marginWidth>
 <name>Extreme battery save.w</name>
 <class name="Element" index="elements0">
  <elementType>Image</elementType>
  <heightLand>199</heightLand>
  <heightPort>178</heightPort>
  <name>StateOFF1</name>
  <visible>true</visible>
  <widthLand>159</widthLand>
  <widthPort>159</widthPort>
  <xLand>0</xLand>
  <xPort>0</xPort>
  <yLand>0</yLand>
  <yPort>0</yPort>
  <class name="ImageElement" index="state0">
   <alpha>255</alpha>
   <stateName></stateName>
   <uri>ipack://net.dinglisch.android.ipack.transparentglasshd/lightning2_sc48</uri>
  </class>
 </class>
 <class name="Element" index="elements1">
  <elementType>Image</elementType>
  <heightLand>199</heightLand>
  <heightPort>178</heightPort>
  <name>StateOFF</name>
  <visible>true</visible>
  <widthLand>159</widthLand>
  <widthPort>159</widthPort>
  <xLand>0</xLand>
  <xPort>0</xPort>
  <yLand>0</yLand>
  <yPort>0</yPort>
  <class name="ImageElement" index="state0">
   <alpha>255</alpha>
   <stateName></stateName>
   <uri>ipack://net.dinglisch.android.ipack.transparentglasshd/lightning2_sc48</uri>
   <class name="TaskAction" index="onClick0">
    <name>Extreme battery save</name>
   </class>
  </class>
 </class>
 <class name="Element" index="elements2">
  <elementType>Image</elementType>
  <heightLand>199</heightLand>
  <heightPort>178</heightPort>
  <name>StateON</name>
  <visible>false</visible>
  <widthLand>159</widthLand>
  <widthPort>159</widthPort>
  <xLand>0</xLand>
  <xPort>0</xPort>
  <yLand>0</yLand>
  <yPort>0</yPort>
  <class name="ImageElement" index="state0">
   <alpha>200</alpha>
   <stateName></stateName>
   <uri>ipack://net.dinglisch.android.ipack.crystalhd/cache</uri>
   <class name="TaskAction" index="onClick0">
    <name>Energy save</name>
   </class>
  </class>
 </class>
</class>

[Tasker] How to force a loud alarm on SMS / emergency SMS

If an SMS which contains (notice the "*") the text WAKEUP! comes in, your phone will alert you - no matter what. It's pretty hard to turn this alert off too ^^", you will have to stop the task.

The profile description:
Profile: Emergency SMS (72)
 Event: Received Text [ Type:Any Sender:* Content:*WAKEUP!* ]
Enter: Alarm! (71)
 Run Both Together
 A1: Play Ringtone [ Type:Alarm Sound:Ticktac alarm Stream:4 ]

Please notice the type when selecting the ringtone, the stream must be set to Alarm. Here the same as a profile to import directly:
<TaskerData sr="" dvi="1" tv="4.1u3m">
 <Profile sr="prof72" ve="2">
  <cdate>1353613002541</cdate>
  <clp>true</clp>
  <edate>1375490668033</edate>
  <id>72</id>
  <mid0>71</mid0>
  <nme>Emergency SMS</nme>
  <Event sr="con0" ve="2">
   <code>7</code>
   <pri>0</pri>
   <Int sr="arg0" val="0"/>
   <Str sr="arg1" ve="3"/>
   <Str sr="arg2" ve="3">WAKEUP!</Str>
  </Event>
 </Profile>
 <Task sr="task71">
  <cdate>1353612708197</cdate>
  <edate>1374917997002</edate>
  <id>71</id>
  <nme>Alarm!</nme>
  <pri>10</pri>
  <rty>2</rty>
  <Action sr="act0" ve="3">
   <code>192</code>
   <Int sr="arg0" val="0"/>
   <Str sr="arg1" ve="3">Ticktac alarm</Str>
   <Int sr="arg2" val="4"/>
  </Action>
 </Task>
</TaskerData>

[Tasker] Take pictures of intruders and send them per mail silently

This script will detect when someone enters the wrong unlock code or swipes the wrong pattern and sends a picture to an E-Mail address in the background, silently.
For some reason it works better with long patterns and even better with long pin codes. I don't know why. If you know it, let me know :)

Let's start, please get:
  • Tasker
  • Secure Settings (To setup a profile in Tasker which detects wrong unlock codes)
  • Python for Android (To run python code)
  • SL4A (To run the python script from Tasker)
  • The python script "SendEmailA.py" from the Tasker Wiki. (Send an E-Mails silently)
  • GoogleMail address
Open the Python for Android application, make sure it is not Python3. Press install button to install the Python runtime environment.
Open SL4A and run the "hello_world.py" script by tapping on it and selecting the leftmost terminal icon. Congratulations, you successfully installed Python and can run Python scripts from Tasker!

Here is my "SendEmailA.py" script. It has a small modification to the original file which is marked in red.
import os
import glob
import mimetypes 
from email import encoders
from email.mime.audio import MIMEAudio
from email.mime.base import MIMEBase
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

def attach_files(msg, attachements):
  for attachment in attachments:
    attachment = attachment.strip()
    for path in glob.glob(attachment):
      filename = os.path.basename(path)
      if not os.path.isfile(path):
        continue
      # Guess the content type based on the file's extension.  Encoding
      # will be ignored, although we should check for simple things like
      # gzip'd or compressed files.
      ctype, encoding = mimetypes.guess_type(path)
      if ctype is None or encoding is not None:
        # No guess could be made, or the file is encoded (compressed), so
        # use a generic bag-of-bits type.
        ctype = 'application/octet-stream'
      maintype, subtype = ctype.split('/', 1)
      if maintype == 'text':
        fp = open(path)
        # Note: we should handle calculating the charset
        part = MIMEText(fp.read(), _subtype=subtype)
        fp.close()
      elif maintype == 'image':
        fp = open(path, 'rb')
        part = MIMEImage(fp.read(), _subtype=subtype)
        fp.close()
      elif maintype == 'audio':
        fp = open(path, 'rb')
        part = MIMEAudio(fp.read(), _subtype=subtype)
        fp.close()
      else:
        fp = open(path, 'rb')
        part = MIMEBase(maintype, subtype)
        part.set_payload(fp.read())
        fp.close()
        # Encode the payload using Base64
        encoders.encode_base64(part)
      # Set the filename parameter
      part.add_header('Content-Disposition', 'attachment', filename=filename)
      msg.attach(part)

def sendemail(email_name, email_user, email_pswd, mailto, subject, body, attachments):
  import smtplib

  # DON'T CHANGE THIS!
  # ...unless you're rewriting this script for your own SMTP server!
  smtp_server = 'smtp.gmail.com'
  smtp_port = 587

  # Build an SMTP compatible message
  msg = MIMEMultipart()
  msg['Subject'] = subject
  msg['To'] = mailto
  msg['From'] = email_name + " <" + email_user + ">"
  msg.attach(MIMEText(body, 'plain'))
  attach_files(msg, attachments)

  # Attempt to connect and send the email
  try:
    smtpObj = '' # Declare within this block.
    # Check for SMTP over SSL by port number and connect accordingly
    if( smtp_port == 465):
      smtpObj = smtplib.SMTP_SSL(smtp_server,smtp_port)
    else:
      smtpObj = smtplib.SMTP(smtp_server,smtp_port)
    smtpObj.ehlo()
    # StartTLS if using the default TLS port number
    if(smtp_port == 587):
      smtpObj.starttls()
      smtpObj.ehlo
    # Login, send and close the connection.
    smtpObj.login(email_user, email_pswd)
    smtpObj.sendmail(email_user, mailto, msg.as_string())
    smtpObj.close()
    return 1  # Return 1 to denote success!
  except Exception, err:
    # Print error and return 0 on failure.
    print err
    return 0

import sys
import android

droid = android.Android()

try:
  email_name = droid.getIntent().result[u'extras'][u'%EMAIL_NAME']
except:
  email_name = ''
  
try:
  email_user = droid.getIntent().result[u'extras'][u'%EMAIL_USER']
except:
  droid.makeToast('EMAIL_USER missing')
  sys.exit(1)
  
try:
  email_pswd = droid.getIntent().result[u'extras'][u'%mailp']
except:
  droid.makeToast('EMAIL_PSWD missing')
  sys.exit(1)
  
try:
  mailto = droid.getIntent().result[u'extras'][u'%EMAIL_TO']
except:
  droid.makeToast('EMAIL_TO missing')
  sys.exit(1)
  
try:
  subject = droid.getIntent().result[u'extras'][u'%EMAIL_SUBJECT']
except:
  subject = ''
  
try:
  body = droid.getIntent().result[u'extras'][u'%EMAIL_BODY']
except:
  body = ''
  
try:
  attachments = droid.getIntent().result[u'extras'][u'%EMAIL_ATTACH']
  attachments = attachments.split(',')
except:
  attachments = ''

# Send email 
if (sendemail(email_name, email_user, email_pswd, mailto, subject, body, attachments)):
  sys.exit(0)
else:
  # Exit with error if email is not sent successfully
  droid.makeToast('email failed')
  sys.exit(1)


Save this file to your internal SDCard in the SL4A scripts folder (f.e. SDCard\SL4A\Scripts).

The preparation is done, lets go to Tasker. Create a new profile name it "Security Glitch" or something less obvious. Goto State -> Plugin -> Secure Settings. Click on the Edit field near configuration and select the condition "Failed Login Attempts". Type in a low number, like two. Enable "Device Admin". Read and accept the dialog. Click on save in the lower left corner. Hit the back button and create a new Task, name it "Cheeeese" or similar.
Here is my Cheeeese task:
Cheeeeese (45)
 Stay Awake
 A1: Vibrate [ Time:200 ]
 A2: Mobile Data [ Set:On ]
 A3: WiFi [ Set:On ]
 A4: Variable Add [ Name:%PHOTONUMBER Value:1 Wrap Around:0 ]
 A5: Take Photo [ Camera:Front Filename:%PHOTONUMBER Naming Sequence:None Insert In Gallery:Off Discreet:On Resolution:320x240 Scene Mode:Auto White Balance:Auto Flash Mode:Auto ]
 A6: Wait [ MS:0 Seconds:3 Minutes:0 Hours:0 Days:0 ]
 A7: Load Image [ Source:/sdcard/DCIM/Tasker/%PHOTONUMBER.jpg ]
 A8: Rotate Image [ Direction:Right Degrees:90 ]
 A9: Save Image [ File:/sdcard/DCIM/Tasker/%PHOTONUMBER.jpg Image Quality:70 Delete From Memory After:On ]
 A10: Wait [ MS:0 Seconds:2 Minutes:0 Hours:0 Days:0 ]
 A11: Variable Set [ Name:%EMAIL_USER To:mygooglename@gmail.com Do Maths:Off Append:Off ]
 A12: Variable Set [ Name:%EMAIL_P To:MyCleartextPassword Do Maths:Off Append:Off ]
 A13: Variable Convert [ Name:%EMAIL_P Function:Base64 Encode Store Result In:%EMAIL_P ]
 A13: Variable Convert [ Name:%EMAIL_P Function:Base64 Decode Store Result In:%mailp ]
 A14: Variable Set [ Name:%EMAIL_TO To:myemailtosendto@domain.com Do Maths:Off Append:Off ]
 A15: Variable Set [ Name:%EMAIL_ATTACH To:/sdcard/DCIM/Tasker/%PHOTONUMBER.jpg Do Maths:Off Append:Off ]
 A16: Run SL4A Script [ Name:SendEmailA.py Terminal:Off Pass Variables:%EMAIL_USER,%mailp,%EMAIL_TO,%EMAIL_ATTACH Continue Task After Error:On ]
 A17: Vibrate [ Time:616 ]

And here you can see the profile as an xml to directly import into Tasker, save it as SecurityGlitch.prf.xml.
<TaskerData sr="" dvi="1" tv="4.1u3m">
<Profile sr="prof44" ve="2">
<cdate>1353285745747</cdate>
<edate>1376868760042</edate>
<flags>1</flags>
<id>44</id>
<mid0>45</mid0>
<nme>Security Glitch</nme>
<pri>10</pri>
<State sr="con0">
<code>11820</code>
<Bundle sr="arg0">
<Vals sr="val">
<com.intangibleobject.securesettings.plugin.extra.BLURB>Failed Login Attempts - Max: 2</com.intangibleobject.securesettings.plugin.extra.BLURB>
<com.intangibleobject.securesettings.plugin.extra.BLURB-type>java.lang.String</com.intangibleobject.securesettings.plugin.extra.BLURB-type>
<com.intangibleobject.securesettings.plugin.extra.MAX_LOGIN_FAILURES>2</com.intangibleobject.securesettings.plugin.extra.MAX_LOGIN_FAILURES>
<com.intangibleobject.securesettings.plugin.extra.MAX_LOGIN_FAILURES-type>java.lang.Integer</com.intangibleobject.securesettings.plugin.extra.MAX_LOGIN_FAILURES-type>
<com.intangibleobject.securesettings.plugin.extra.SETTING>max_failed_pass_attempts</com.intangibleobject.securesettings.plugin.extra.SETTING>
<com.intangibleobject.securesettings.plugin.extra.SETTING-type>java.lang.String</com.intangibleobject.securesettings.plugin.extra.SETTING-type>
<com.twofortyfouram.locale.intent.extra.BLURB>Failed Login Attempts - Max: 2</com.twofortyfouram.locale.intent.extra.BLURB>
<com.twofortyfouram.locale.intent.extra.BLURB-type>java.lang.String</com.twofortyfouram.locale.intent.extra.BLURB-type>
<net.dinglisch.android.tasker.subbundled>true</net.dinglisch.android.tasker.subbundled>
<net.dinglisch.android.tasker.subbundled-type>java.lang.Boolean</net.dinglisch.android.tasker.subbundled-type>
</Vals>
</Bundle>
<Str sr="arg1" ve="3">com.intangibleobject.securesettings.plugin</Str>
<Str sr="arg2" ve="3">Secure Settings</Str>
</State>
</Profile>
<Task sr="task45">
<cdate>1353285761891</cdate>
<edate>1375520404009</edate>
<id>45</id>
<nme>Cheeeeese</nme>
<pri>10</pri>
<stayawake>true</stayawake>
<Action sr="act0" ve="3">
<code>61</code>
<on>false</on>
<Int sr="arg0" val="200"/>
</Action>
<Action sr="act1" ve="3">
<code>433</code>
<Int sr="arg0" val="1"/>
</Action>
<Action sr="act10" ve="3">
<code>547</code>
<Str sr="arg0" ve="3">%EMAIL_USER</Str>
<Str sr="arg1" ve="3">yourlogin@gmail.com</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
</Action>
<Action sr="act11" ve="3">
<code>596</code>
<Str sr="arg0" ve="3">%EMAIL_P</Str>
<Int sr="arg1" val="25"/>
<Str sr="arg2" ve="3">%email_p</Str>
</Action>
<Action sr="act12" ve="3">
<code>547</code>
<Str sr="arg0" ve="3">%EMAIL_TO</Str>
<Str sr="arg1" ve="3">receivermail@domain.com</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
</Action>
<Action sr="act13" ve="3">
<code>547</code>
<Str sr="arg0" ve="3">%EMAIL_ATTACH</Str>
<Str sr="arg1" ve="3">/sdcard/DCIM/Tasker/%PHOTONUMBER.jpg</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
</Action>
<Action sr="act14" ve="3">
<code>112</code>
<se>false</se>
<Str sr="arg0" ve="3">sendemailA.py</Str>
<Int sr="arg1" val="0"/>
<Str sr="arg2" ve="3">%EMAIL_USER,%email_p,%EMAIL_TO,%EMAIL_ATTACH</Str>
</Action>
<Action sr="act15" ve="3">
<code>61</code>
<on>false</on>
<Int sr="arg0" val="616"/>
</Action>
<Action sr="act2" ve="3">
<code>425</code>
<Int sr="arg0" val="1"/>
</Action>
<Action sr="act3" ve="3">
<code>888</code>
<Str sr="arg0" ve="3">%PHOTONUMBER</Str>
<Int sr="arg1" val="1"/>
<Int sr="arg2" val="0"/>
</Action>
<Action sr="act4" ve="3">
<code>101</code>
<Int sr="arg0" val="1"/>
<Str sr="arg1" ve="3">%PHOTONUMBER</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
<Int sr="arg4" val="1"/>
<Str sr="arg5" ve="3">320x240</Str>
<Int sr="arg6" val="0"/>
<Int sr="arg7" val="0"/>
<Int sr="arg8" val="0"/>
</Action>
<Action sr="act5" ve="3">
<code>30</code>
<Int sr="arg0" val="0"/>
<Int sr="arg1" val="3"/>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
<Int sr="arg4" val="0"/>
</Action>
<Action sr="act6" ve="3">
<code>188</code>
<Img sr="arg0" ve="2">
<var>/sdcard/DCIM/Tasker/%PHOTONUMBER.jpg</var>
</Img>
</Action>
<Action sr="act7" ve="3">
<code>191</code>
<Int sr="arg0" val="1"/>
<Int sr="arg1" val="1"/>
</Action>
<Action sr="act8" ve="3">
<code>187</code>
<Str sr="arg0" ve="3">/sdcard/DCIM/Tasker/%PHOTONUMBER.jpg</Str>
<Int sr="arg1" val="70"/>
<Int sr="arg2" val="1"/>
</Action>
<Action sr="act9" ve="3">
<code>30</code>
<Int sr="arg0" val="0"/>
<Int sr="arg1" val="2"/>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
<Int sr="arg4" val="0"/>
</Action>
<Img sr="icn" ve="2">
<nme>yummy_6</nme>
<pkg>net.dinglisch.android.ipack.iconedenthemeshd</pkg>
</Img>
</Task>
</TaskerData>


Please make sure the folder "/sdcard/DCIM/Tasker/" exists and you have the right information filled in in the purple fields. You can put a file named .nomedia into the DCIM/Tasker/ folder to make sure, it is not displayed in the gallery.
If you don't know how to setup a specific action, please google it. Line A16 is very important. To create this line goto Script -> RunSL4A Script -> in the name field select the "SendEmailA.py" file. Don't check the Terminal field, but fill in the Pass Variable field with %EMAIL_USER,%mailp,%EMAIL_TO,%EMAIL_ATTACH. The order is important. Check continue task after error.

You can delete the bright blue lines after running the Task once successfully. Please note, that your Google Mail password is stored as a global variable in Tasker Base64 encoded - but it is not a safe encryption! If you have suggestions on how to store the password encrypted n Tasker, please tell me!

Run the task a few time to check if your device vibrates twice (short vibrate at the beginning and a long vibrate at the end. Check your myemailtosendto@domain.com mails, don't forget to look into the spam folder. If you received a picture exit Tasker, lock your device, count to ten and check by entering the wrong unlock code/pattern a few time. Maybe you can make the profile run with a higher priority, not necessary. If everything went well and you received the beautiful pictures of yourself delete the bright blue lines.
Uninformatively there is an android limitation which will show the SL4A icon for a second in the notification bar when the email is send... I tried to make python run without SL4A, but was not successful yet. A workaround could be to make the icon transparent...

I wrote this down pretty fast, please forgive me if something is unclear. I will refresh this post soon.

[Tasker] Be informed about software progress

I got my phone repaired and started programming again.

Here my newest script result:

Its shows the progress of an automated measurement system (Done by me with AutoIt, but that's a different story, think of AutoIt as Tasker for Windows - give it a try and the developers and huge thanks :D ).

Why I need this?
I'm currently working with CMOS MAPS (Monolithic Active Pixel Sensors). They need to be programmed and we measure different parameters after setting a huge amount of settings... This takes a lot of time and effort. The runs take much time and if the system breaks down one looses expensive measurement time. So its a huge benefit to run the whole procedure automatically, as it should be running 24/7 and one needs to know as soon as possible, that something went wrong.

The system is called MABS  as it is a Mimosa Automation Bot System ;)

But that's not the point. The point is this tiny notification in your Android pulldown menu!

So basically your Android phone is capable of getting the progress and error/warning statuses of every software you programmed! The setup is very easy. I will post it here soon (this week)! Stay tuned and sorry for not posting in the last time. I promise to improve ;)


Automated measurements system named MABS

[Tasker] Todo list

 Which Tasker tasks I'm going to post soon:

  • React to content of WhatsApp messages in Tasker
  • Sync data between different android devices and display in one synced widget
  • Configure an emergency message which will force the phone to make a loud sound, even in silent mode
  • Boot computer when coming home
  • Less energy expensive accurate GSM based location checks
  • Extreme energy saving mode (only 1% battery usage per hour)
  • Extract information from different websites and display it compact in one scene
  • Force reconnection to automatically deactivated WiFi networks
  • Create a widget which displays the last WhatsApp an SMS messages of a chosen person
  • Create a slick widget which takes spy photos without any notification or other evidence
  • Make a Jarvis like assistant (Iron Man)

[Tasker] Make Tasker read aloud all incoming notifications and messages

Okay, this one is pretty simple, but still impressive. And that's how a good idea should be, right?
The title says it all, Tasker shall read aloud all the incoming notifications, including SMS, missed calls and if you followed my previous WhatsApp guide even complete incoming WhatsApp messages.

All you have to do is to create this profile and task:
Profile: Notification Read
 Event: Notification [ Owner Application:* Title:* ]
 State: Variable Value [ Name:%DRIVE Op:Matches Value:1 ]
Enter: Notification Read
 A1: Say [ Text:%NTITLE Engine:Voice:default:en Stream:3 Pitch:4 Speed:4 Continue Task Immediately:Off ] 


Thats it! After you set the global variable %DRIVE to 1 you have your own drive mode!
Of course you can place a beatiful widget on your homescreen to do so (hover me):


Off


The On/Off widget

We need another Tasker task to set the global variable to 1 and 0. The task can look like this:
Driver Mode
 A1: If [ %DRIVE ~ 1 ]
  A2: Variable Set [ Name:%DRIVE To:0 Do Maths:Off Append:Off ] 
  A3: Zoom Element Visibility [ Element:Driver Mode.w / StateON Set:Off ] // You cannot create this yet! Wait till Zoom widget on homescreen. 
 A4: Else 
  A5: Variable Set [ Name:%DRIVE To:1 Do Maths:Off Append:Off ] 
  A6: Media Volume [ Level:10 Display:Off Sound:Off ] 
  A7: Zoom Element Visibility [ Element:Driver Mode.w / StateON Set:On ] // You cannot create this yet! Wait till Zoom widget on homescreen.
  A8: Say [ Text:Allright, notification-read loaded! Engine:Voice:default:en Stream:3 Pitch:4 Speed:4 Continue Task Immediately:Off ] 
 A9: End If 

Now we need the widget. Let's make this widget with Zoom. Create a widget like described in the previous post "Energy saving mode" in chapter The "periodic internet On/Off" widget. The only differences are the name of the widget, the Task to execute and the images to use. I named the widget and the task to execute Driver mode. Notice, that for ON and OFF we execute here the same task defined above. The adorable Pacman graphic can be found in the I Like Buttons HD icon pack. Use a lower alpha value, as described here, to get the transparent look when the driver mode is set to OFF. Add the Zoom widget to your home screen and don't forget to add lines A3 and A7 to your Driver mode task.

I'm still working on this driver mode and hopefully can present soon a solution to answer WhatsApp messages, SMS and phone calls hands free by using the Tasker Get speech action. Have fun!

[Tasker] How to make accurate location checks without GPS or WiFi

Tasker has a nice option build in to check for locations. I found, that this method was not very reliable when no GPS was activated. Here I want to present an idea of location checks only with GSM cell info, no internet connection, WiFi or GPS needed. In my opinion it is the most energy conserving method possible.

Create a new profile, name it Home GSM for example. As the trigger select State -> Phone -> Cell Near. Press scan and take a walk inside you domesticity. Take your time, your phone scans for near GSM cells and measures there signal strength, this information is used to triangulate your position. When you think you are done, go back and create a new Task, name it Home On. Inside of it set a new variable %HOME to 1. Exit the newly created profile and add en exit task, name it Home Off and set the global variable %HOME to 0. You are done. Your profile should look like this:
Profile: Home GSM
 State: Cell Near [ Cell Tower / Last Signal:
      GSM:1234.56789 / 0
      GSM:1234.57719 / 2
      Ignore Cells:* ]
Enter: Home On
 A1: Variable Set [ Name:%HOME To:1 Do Maths:Off Append:Off ] 

Exit: Home Off
 A1: Variable Set [ Name:%HOME To:0 Do Maths:Off Append:Off ] 


Now we create a second profile, this one will check whether you are home for sure. Create a profile Check Home, it should be activated when the variable %HOME is set to 1. Create a new task, name it Check Home, inside of it place a wait for 1 or 2 minutes. After that place an if clause and check, whether the variable %HOME is still set to 1. If so, you are probably at home! To be even more sure, place another wait for 1 minute and afterwards another if to check if the cells near you match the pattern at your home. Make sure to set the collision handling of the task to Abort new Task and the cool down time to, lets say, 120 seconds in the Task Properties. Your finished task could look like this:
Profile: Check Home
 Priority: 5 CoolDown: 120
 Event: Variable Set [ Variable:%HOME Value:1 ]
Enter: Check Home
 A1: Wait [ MS:0 Seconds:0 Minutes:1 Hours:0 Days:0 ] 
 A2: If [ %HOME ~ 1 ]
  A3: Variable Set [ Name:%OUTSIDE To:0 Do Maths:Off Append:Off ] 
  A4: Notify Sound [ Title:Home sweet home! Text: Icon:ipack:iconedenthemeshd:twitter_8 Number:0 Sound File:/system/media/audio/notifications/S_Knock.ogg Priority:3 ] 
  A5: Perform Task [ Name:WiFi On Stop:Off Priority:5 Parameter 1 (%par1): Parameter 2 (%par2): Return Value Variable: ] 
  A6: Perform Task [ Name:LOG write Stop:Off Priority:5 Parameter 1 (%par1):Home Parameter 2 (%par2): Return Value Variable: ] 
  A7: Mobile Data [ Set:Off ]
  A8: Ringer Volume [ Level:5 Display:Off Sound:Off ] 
  A9: Variable Query [ Title:Start PC? Variable:%pcstart Input Type:Numeric / Integer Default:3665 Background Image:Pictures/Wallpaper/hi_tech_texture-wallpaper-1920x1200.jpg Layout:Question Yes No Timeout (Seconds):60 Show Over Keyguard:On ] If [ %WIFII ~R MyHomeWiFiSSID ]
  A10: If [ %pcstart ~ 3665 ]
   A11: WoL Wake On Lan Wan Settings[ Configuration:Home Package:com.benfinnigan.wol Name:WoL Wake On Lan Wan Settings]
  A12: End If 
 A3: End If 

As you can see I placed various other tasks I want to be run when I come home inside the if clause. For example I get asked to turn my computer on. I used the free app Wol Wake on Lan Wan from Brobble to do this, as it offers a Tasker plugin. In my actual Check home profile I placed all the got-home-goodness in a separate task I call within the Check home task. This way I can place a 15 minutes wait before asking about booting the computer without interfering with the original Check home task.

To learn more about Wake-On-Lan Packages and how you can use them to turn your computer on remotely please read one of the numerous guides on the internet, for example the short and nice guide HowTo Wake-On-Lan from Brobble and the very good article Access Your Computer Anytime and Save Energy with Wake-on-LAN on lifehacker from Adam Pash.

I hope some of you find this location check method useful and improve there android experience with this trick :) What tasks do you run automatically when you come home? Leave your ideas in the comments!

[Tasker] How to sync data between devices with Tasker

Sometimes it's handy to have the same data on both devices, or to inform a device about some status of an other device. I want to show you an easy way to send information from one device to another with Tasker and a small PHP file on a web server.

What is possible with this?
  • Display the position of another device directly on the home screen within a widget (I use it for this)
  • React to certain states of another device (like low battery)
  • Send information from android to computer
 What do we need?
  • Tasker
  • Webserver with PHP support
On the server side we need a PHP file named "receive.php" with the following content:
<?php
$file = 'received_data.log';
$handle = fopen($file, 'w') or die('Cannot open file: '.$file);
$data = "";

foreach ($_POST as $key => $value)
{
  $data = $data.$value."\n";
}
fwrite($handle, $data);

fclose($handle);
print("0");
?>
  

Make sure the file has the permission "rw-rw-r--". This script receives data send through a PHP_POST and writes the passed values into a file called "received_data.log". Values of different POST variables are seperated by a newline.

Now Tasker needs to send the desired variables to this php file. The important actions are:
Senddata
A1: HTTP Post [ 
    Server:Port:http://myserver.com/mysite/receive.php
    Path:
    Data / File:data1=hello data2=test data3=%taskervar1 data4=%taskervar2
                data5=%taskervar3 data6=%taskervar4 data7=%taskervar5
    Cookies:
    Timeout:20
    Content Type:application/x-www-form-urlencoded
    Output File:Tasker/data/senddata.log ]
A2: Read File [ File:Tasker/data/senddata.log To Var:%error ]
A3: Popup [ Title: Text:%error
            Background Image:
            Layout:
            Popup Timeout (Seconds):1
            Show Over Keyguard:On ]
In A1 we send the words "hello", "test" and some values stored in the Tasker variables %taskervar1 to %taskervar5 to the PHP script. The PHP script will write the passed values into a new file, each value seperated by a new line. It will return "0" if no errors occurred. So we can check the success of the operation by comparing the local Tasker variable "%error" to "0".

Of course the sending doesn't succeed always, the phone could have no connection at the moment or the server could be down. I came up with the following solution: Try to send the data five times in a row until one sending succeeds, if none got through - Tasker waits a few minutes and tries again five times to send the data. This procedure is repeated until it succeeds. I created two Tasks for this. One for preparing the data and one to send it.
I will show you an example how to send the last seven lines of a file with this method. The task "Data write" is called with a variable passed to it (stored afterwards in %par1). It appends this value to a file if the value isn't already the last value stored there and sends the last seven lines of the file to the server:
Data write
Run Both Together
A1: If [ %par1 !~ %LASTLOG ]
  A2: Variable Set [ Name:%LASTLOG To:%par1 Do Maths:Off Append:Off ]
  A3: Run Shell [ Command:tail -n7 /mnt/sdcard/Tasker/log/Blackbox.log Timeout (Seconds):0 Use Root:Off Store Result In:%log ]
  A4: Write File [ File:Tasker/log/Blackbox.log Text:%log %TIME %par1 Append:Off Add Newline:On ]
  A5: Write File [ File:Tasker/log/BlackboxFull.log Text:%TIME %par1 Append:On Add Newline:Off ]
  A6: Zoom Element Visibility [ Element:Protokoll11.w / logs Set:On ]
  A7: If [ %AIR !~ on ]
    A8: Variable Set [ Name:%num To:1 Do Maths:Off Append:Off ]
    <Post>
    A9: Perform Task [ Name:Data send Stop:Off Priority:7 Parameter 1 (%par1):%num Parameter 2 (%par2): Return Value Variable:%post_success ]
    A10: Wait [ MS:0 Seconds:0 Minutes:3 Hours:0 Days:0 ]
    A11: If [ %post_success !~ 1 ]
      A12: Wait [ MS:0 Seconds:0 Minutes:8 Hours:0 Days:0 ]
      A13: Variable Add [ Name:%num Value:1 Wrap Around:0 ]
      A14: Goto [ Type:Action Label Number:1 Label:Post ]
    A15: End If
    A16: Notify Cancel [ Title:send log Warn Not Exist:Off ]
  A17: End If
A18: End If
A19: Return [ Value:1 Stop:On ]
As you can see, it calls a second task which actually sends the information:
Data Send
Abort Existing Task
A1: Delete File [ File:Tasker/log/Blackboxout.log Shred Level:0 Use Root:Off Continue Task After Error:On ]
A2: Run Shell [ Command:tail -n7 /mnt/sdcard/Tasker/log/Blackbox.log Timeout (Seconds):10 Use Root:Off Store Result In:%log ]
A3: Variable Split [ Name:%log Splitter:%NEWLINE Delete Base:Off ]
A4: Variable Set [ Name:%log4 To:  Do Maths:Off Append:Off ] If [ %log4 ! Set ]
A5: Variable Set [ Name:%log5 To:  Do Maths:Off Append:Off ] If [ %log5 ! Set ]
A6: Variable Set [ Name:%log6 To:  Do Maths:Off Append:Off ] If [ %log6 ! Set ]
A7: Variable Set [ Name:%log7 To:  Do Maths:Off Append:Off ] If [ %log7 ! Set ]
A8: Variable Set [ Name:%post_ok To:0 Do Maths:Off Append:Off ]
A9: For [ Variable:%num Items:1:5 ]
  A10: Variable Set [ Name:%counter To:%par1*10+%num Do Maths:On Append:Off ]
  A11: Notify [ Title:sendlog Text:%LASTLOG Icon:ipack:crystalhd:easymoblog Number:%counter Permanent:On Priority:3 ]
  A12: HTTP Post [ Server:Port:http://myserver.com/mysite/receive.php
       Path:
       Data / File:log1=%log1 log2=%log2 log3=%log3
                   log4=%log4 log5=%log5 log6=%log6 log7=%log7
       Cookies:
       Timeout:20
       Content Type:application/x-www-form-urlencoded
       Output File:Tasker/log/Blackboxout.log
       Continue Task After Error:On ]
  A13: Wait [ MS:0 Seconds:10 Minutes:0 Hours:0 Days:0 ]
  A14: Read File [ File:Tasker/log/Blackboxout.log To Var:%post_ok ]
  A15: Wait [ MS:0 Seconds:1 Minutes:0 Hours:0 Days:0 ]
  A16: If [ %post_ok ~ 1 ]
    A17: Notify Cancel [ Title:send log Warn Not Exist:Off ]
    A18: Return [ Value:1 Stop:On ]
  A19: End If
  A20: Wait [ MS:0 Seconds:10 Minutes:0 Hours:0 Days:0 ]
A21: End For
A22: Return [ Value:2 Stop:On ]
The global variable %NEWLINE has a newline, a return character stored in it. Please create this one, we need it to separate each new line in the file.

If you are looking for an easier solution to send information directly from one android device to another android device, you should have a look at AutoRemote. Unfortunately this feature isn't free.