Skip to content

Commit adcab32

Browse files
author
adnan wahab
committed
asda
1 parent c40cff5 commit adcab32

File tree

138 files changed

+641
-353
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

138 files changed

+641
-353
lines changed

readme.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,4 @@ incorpate -- ideas from 8 billion people
4646
https://youtu.be/y4ajXJ3nj1Q?si=CMpEXr9DBH86-9jG
4747

4848
# LLama-tools.com is an agency dedicated to helping <a href="https://worrydream.com">bret victor</a>.
49-
I met bret in 2014, at d3unconf thanks to enjalot, when i saw https://worrydream.com/SeeingSpaces/ - and i was like "holy shit"
49+
I met bret in 2014, at d3unconf thanks to enjalot, when i saw https://worrydream.com/SeeingSpaces/ - so i dedicated my life to turning bret's dreams into reality.

web-ui/js/bun-helper-server.tsx

-15
Original file line numberDiff line numberDiff line change
@@ -89,22 +89,7 @@ async function connect_to_livekit(options) {
8989
}
9090

9191

92-
function serveBlag(req: Request) {
93-
const filePath = path.join(process.cwd(), "js/views/blag.html");
94-
console.log('filePath', filePath)
95-
let indexHtmlContent = fs.readFileSync(filePath, "utf-8");
96-
97-
const blag = indexHtmlContent.replace(
98-
"{{template blag}}",
99-
`${renderToString(<Blag />)}`,
100-
);
10192

102-
return new Response(blag, {
103-
headers: {
104-
"Content-Type": "text/html",
105-
},
106-
});
107-
}
10893

10994
function on_save_blag(req: Request) {
11095
ollama.generate({
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,251 @@
1+
Creating a Dynamicland-inspired environment in your home—and potentially replicating it across your neighbors’ houses—is an ambitious and exciting project. Dynamicland, founded by Bret Victor, is a unique space that blends physical objects with digital information, fostering collaborative and tangible computing experiences. To embark on this journey, you’ll need to understand the core principles of Dynamicland and then translate them into a practical setup using available technologies.
2+
3+
Here’s a comprehensive guide to help you create a Dynamicland-like environment in your home and consider scaling it to neighboring houses:
4+
5+
1. Understand Dynamicland’s Core Concepts
6+
7+
Before diving into the setup, it’s essential to grasp what Dynamicland embodies:
8+
9+
• Tangible Computing: Integrating physical objects with digital information, allowing users to interact with data through touch and manipulation.
10+
• Collaborative Environment: Encouraging multiple users to interact simultaneously, fostering a community-driven experience.
11+
• Interactive Surfaces: Utilizing tables, walls, and other surfaces as interactive displays where digital information is projected and manipulated.
12+
• Programmable Matter: Physical objects that can change or reveal digital information based on interactions.
13+
14+
2. Assess the Necessary Components
15+
16+
To replicate Dynamicland’s environment, you’ll need a combination of hardware and software. Here’s a breakdown:
17+
18+
Hardware Components
19+
20+
1. Projectors:
21+
• Purpose: To display digital content onto physical surfaces.
22+
• Recommendation: High-resolution projectors with good brightness (e.g., 1080p or higher, at least 3000 lumens).
23+
2. Interactive Surfaces:
24+
• Options:
25+
• Tables: Flat surfaces where users can place objects.
26+
• Walls: Vertical surfaces for additional interaction space.
27+
• Interactive Boards: Whiteboards or chalkboards enhanced with projection capabilities.
28+
3. Cameras and Sensors:
29+
• Purpose: To track user interactions, object movements, and gestures.
30+
• Options:
31+
• Depth Cameras: Like Microsoft Kinect or Intel RealSense for gesture tracking.
32+
• Webcams: For basic motion detection.
33+
• Touch Sensors: For detecting touch inputs on surfaces.
34+
4. Computing Devices:
35+
• Purpose: To process interactions and manage digital content.
36+
• Options: PCs or dedicated microcomputers (e.g., Raspberry Pi for smaller setups).
37+
5. Physical Objects:
38+
• Purpose: To serve as tangible interfaces that can be recognized and interacted with digitally.
39+
• Examples: Blocks, cards, or custom-designed objects with unique markers (e.g., QR codes, NFC tags).
40+
6. Audio Equipment (Optional):
41+
• Purpose: To provide auditory feedback or collaborative audio features.
42+
• Components: Speakers, microphones.
43+
44+
Software Components
45+
46+
1. Projection Mapping Software:
47+
• Purpose: To accurately project digital content onto physical surfaces.
48+
• Options:
49+
• OpenFrameworks: An open-source C++ toolkit for creative coding.
50+
• TouchDesigner: A visual programming environment for interactive media.
51+
• Processing: A flexible software sketchbook and language for learning how to code within the context of the visual arts.
52+
2. Interactive Frameworks:
53+
• Purpose: To handle user interactions and manage digital content.
54+
• Options:
55+
• Unity with Vuforia: For augmented reality applications.
56+
• Node-RED: A flow-based development tool for visual programming.
57+
• Custom Solutions: Depending on specific requirements.
58+
3. Collaboration Tools:
59+
• Purpose: To enable multiple users to interact simultaneously.
60+
• Options:
61+
• Real-time Databases: Like Firebase for synchronizing data across devices.
62+
• WebSockets: For real-time communication between clients and servers.
63+
4. Object Recognition Libraries:
64+
• Purpose: To identify and track physical objects.
65+
• Options:
66+
• OpenCV: An open-source computer vision library.
67+
• ARToolKit: For marker-based tracking.
68+
69+
3. Step-by-Step Guide to Building Your Dynamicland
70+
71+
Step 1: Define Your Space and Objectives
72+
73+
• Space Assessment: Determine which areas of your house you’ll convert (e.g., living room, study).
74+
• Objectives: Decide on the primary functions (e.g., educational tools, collaborative projects, interactive art).
75+
76+
Step 2: Set Up Interactive Surfaces
77+
78+
• Choose Surfaces: Start with a table as the primary interactive surface.
79+
• Mount Projectors: Position projectors to cover the surfaces adequately without shadows.
80+
• Calibrate Projection Mapping: Use calibration tools to align digital content accurately with physical surfaces.
81+
82+
Step 3: Implement Object Recognition
83+
84+
• Design Physical Objects: Create or purchase objects with unique markers (QR codes, AR tags).
85+
• Set Up Cameras: Position cameras to have a clear view of the interactive surfaces.
86+
• Develop Recognition System: Use OpenCV or similar libraries to detect and track objects in real-time.
87+
88+
Step 4: Develop Interactive Content
89+
90+
• Create Interactive Applications: Develop or use existing applications that respond to object interactions.
91+
• Leverage OpenFrameworks or Unity: These platforms can help create dynamic and responsive digital content.
92+
• Test Interactions: Ensure that movements and manipulations of objects trigger appropriate digital responses.
93+
94+
Step 5: Enable Collaboration
95+
96+
• Real-Time Data Sync: Implement systems that allow multiple users to interact simultaneously.
97+
• User Interface Design: Design intuitive interfaces that support multiple inputs without clutter.
98+
99+
Step 6: Incorporate Audio Feedback (Optional)
100+
101+
• Set Up Speakers: Integrate audio elements that respond to interactions.
102+
• Implement Sound Cues: Enhance the interactive experience with auditory feedback.
103+
104+
Step 7: Iterate and Improve
105+
106+
• Gather Feedback: Use the setup with friends or family to identify strengths and areas for improvement.
107+
• Refine Interactions: Continuously enhance the responsiveness and functionality based on user experiences.
108+
109+
4. Scaling to Neighboring Houses
110+
111+
Replicating this setup across multiple houses requires careful planning to ensure consistency, manage resources, and foster a collaborative community. Here’s how you can approach it:
112+
113+
A. Standardize the Setup
114+
115+
1. Create a Detailed Blueprint:
116+
• Document the hardware setup, including projector placement, camera angles, and surface configurations.
117+
• Include software configurations, dependencies, and installation guides.
118+
2. Develop Modular Components:
119+
• Design the system in modular parts that can be easily replicated and customized for different spaces.
120+
3. Simplify the Process:
121+
• Use plug-and-play components where possible to reduce setup complexity.
122+
123+
B. Build a Community
124+
125+
1. Engage Neighbors:
126+
• Present your project to neighbors, highlighting the benefits and collaborative opportunities.
127+
• Offer demonstrations to showcase the interactive environment.
128+
2. Create Workshops:
129+
• Host sessions to teach others how to set up and use the Dynamicland-inspired systems.
130+
• Encourage knowledge sharing and collaborative development.
131+
3. Establish Communication Channels:
132+
• Use platforms like Slack, Discord, or a dedicated forum to facilitate communication and collaboration among participants.
133+
134+
C. Leverage Shared Resources
135+
136+
1. Bulk Purchasing:
137+
• Coordinate with neighbors to purchase hardware components in bulk, potentially reducing costs.
138+
2. Shared Development:
139+
• Collaborate on developing and maintaining the software, sharing improvements and innovations.
140+
3. Resource Pooling:
141+
• Share resources like tools, space for larger collaborative projects, or expertise in specific areas.
142+
143+
D. Ensure Scalability and Maintenance
144+
145+
1. Automate Deployments:
146+
• Use scripts or configuration management tools (e.g., Ansible, Docker) to automate software installations and updates.
147+
2. Provide Support:
148+
• Establish a support system where participants can seek help with setup or troubleshooting.
149+
3. Monitor and Optimize:
150+
• Continuously monitor system performance and optimize configurations for different environments.
151+
152+
5. Addressing Potential Challenges
153+
154+
Technical Challenges
155+
156+
• Hardware Limitations: Ensuring projectors and sensors cover all necessary areas without blind spots.
157+
• Latency Issues: Minimizing lag between physical interactions and digital responses.
158+
• Object Recognition Accuracy: Achieving reliable detection and tracking of physical objects under various lighting conditions.
159+
160+
Solutions
161+
162+
• Quality Equipment: Invest in high-quality projectors and sensors to ensure better performance.
163+
• Optimized Software: Use efficient algorithms and possibly edge computing to reduce latency.
164+
• Controlled Environment: Manage lighting and environment to enhance object recognition reliability.
165+
166+
Community Challenges
167+
168+
• Coordination Effort: Managing multiple setups across different houses requires effective coordination.
169+
• Resource Allocation: Ensuring equitable distribution of resources and support among participants.
170+
171+
Solutions
172+
173+
• Clear Communication: Establish transparent communication channels and regular meetings.
174+
• Role Assignment: Assign roles based on expertise and interest to distribute tasks effectively.
175+
176+
6. Explore and Utilize Existing Resources
177+
178+
Dynamicland’s Open-Source Projects
179+
180+
• GitHub Repository: Dynamicland has open-sourced some of their tools and projects. Explore their GitHub for potential resources and inspiration.
181+
182+
Community Forums and Groups
183+
184+
• Join Communities: Engage with communities interested in tangible computing, interactive environments, and collaborative technologies.
185+
• Participate in Hackathons: Collaborate with like-minded individuals to innovate and enhance your setup.
186+
187+
Educational Materials
188+
189+
• Tutorials and Guides: Leverage online tutorials for projection mapping, object recognition, and interactive software development.
190+
• Courses and Workshops: Consider enrolling in courses related to interactive design, computer vision, and collaborative technologies.
191+
192+
7. Practical Example: Building a Simple Interactive Table
193+
194+
To give you a tangible starting point, here’s how you can create a basic interactive table inspired by Dynamicland:
195+
196+
Materials Needed
197+
198+
• Table: A sturdy table with a smooth surface.
199+
• Projector: Mounted overhead to project onto the table.
200+
• Webcam or Depth Camera: Positioned to capture interactions on the table.
201+
• Computer: Connected to the projector and camera.
202+
• Markers or AR Tags: Attached to objects you want to interact with digitally.
203+
• Software: OpenFrameworks, Processing, or similar for interactive programming; OpenCV for object tracking.
204+
205+
Setup Steps
206+
207+
1. Mount the Projector: Ensure it covers the entire table surface without obstruction.
208+
2. Position the Camera: Align it to have a clear view of the table for accurate tracking.
209+
3. Calibrate Projection Mapping: Use calibration tools to align digital content with the table’s physical dimensions.
210+
4. Develop Interaction Software:
211+
• Object Detection: Use OpenCV to recognize markers or AR tags on objects.
212+
• Interactive Responses: Program responses (e.g., displaying information, triggering animations) based on object movements or interactions.
213+
5. Test and Iterate: Place objects on the table and interact to ensure the system responds as intended. Make adjustments as necessary.
214+
215+
Enhancements
216+
217+
• Multi-User Support: Allow multiple objects to be tracked simultaneously, enabling collaborative interactions.
218+
• Advanced Interactions: Incorporate gestures, object swapping, or object-specific behaviors to enrich the experience.
219+
• Networking: Connect multiple tables across different rooms or houses for extended collaborative projects.
220+
221+
8. Security and Privacy Considerations
222+
223+
When setting up interconnected interactive environments, it’s crucial to address security and privacy:
224+
225+
• Data Protection: Ensure that any data collected (e.g., camera feeds, interaction logs) is securely stored and accessed.
226+
• Network Security: Protect the network connections between devices to prevent unauthorized access.
227+
• User Privacy: Respect the privacy of all participants by being transparent about data usage and interactions.
228+
229+
9. Future-Proofing and Innovation
230+
231+
As you build and scale your Dynamicland-inspired environments:
232+
233+
• Stay Updated: Keep abreast of the latest developments in interactive technologies, projection mapping, and collaborative tools.
234+
• Encourage Creativity: Allow users to contribute ideas and innovations to continuously evolve the environment.
235+
• Expand Functionality: Explore integrating augmented reality (AR), virtual reality (VR), or Internet of Things (IoT) devices to enhance interactivity.
236+
237+
10. Inspirational Resources
238+
239+
• Dynamicland Website: dynamicland.org – Explore their philosophy, projects, and available resources.
240+
• Bret Victor’s Talks: Insightful presentations on interactive design and computing. Notably, “Inventing on Principle” and “The Future of Programming.”
241+
• Interactive Computing Communities:
242+
• Tangible Media Group: MIT Tangible Media Group
243+
• Open Source Communities: Engage with platforms like GitHub to find projects related to interactive environments.
244+
245+
Conclusion
246+
247+
Creating a Dynamicland-inspired environment is a multifaceted endeavor that blends hardware setup, software development, and community collaboration. By understanding the foundational concepts of Dynamicland and methodically implementing the necessary components, you can build an interactive and collaborative space in your home. Scaling this setup to neighboring houses will require standardized processes, community engagement, and ongoing support.
248+
249+
Embrace the iterative nature of such projects—start small, learn from each setup, and gradually expand your interactive ecosystem. With dedication and creativity, you can foster a network of Dynamicland-inspired environments that enhance collaborative computing experiences within your community.
250+
251+
Disclaimer: Building interactive and projection-based environments involves handling electronic equipment and software configurations. Ensure you follow safety guidelines and respect privacy considerations when implementing such systems.
File renamed without changes.
File renamed without changes.
File renamed without changes.

web-ui/my-app/src/index.ts

+51-12
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { html } from 'hono/html'
22
import { AccessToken } from "livekit-server-sdk";
33
const app = new Hono()
4-
import odyssey from './robotics-odyssey.jsx'
4+
import odyssey from './robotics-odyssey.js'
55
import fs from 'fs'
66
import { logger } from 'hono/logger';
77
import { prettyJSON } from 'hono/pretty-json';
@@ -11,22 +11,53 @@ import { serveStatic } from 'hono/serve-static';
1111
import { jwt } from 'hono/jwt';
1212
import { cors } from 'hono/cors';
1313
import { Context, Hono } from 'hono'
14-
import { webhook_receiver } from './utils.ts'
15-
import * as utils from './utils.ts'
16-
14+
import { webhook_receiver } from './utils.js'
15+
import * as utils from './utils.js'
16+
import send_email from './marketing.js'
17+
const Blag = utils.Blag
18+
19+
// function serveBlag(req: Request) {
20+
// console.log('filePath', filePath)
21+
// let indexHtmlContent = fs.readFileSync(filePath, "utf-8");
22+
23+
// const blag = indexHtmlContent.replace(
24+
// "{{template blag}}",
25+
// //`${renderToString(<Blag />)}`,
26+
// );
27+
28+
// return new Response(blag, {
29+
// headers: {
30+
// "Content-Type": "text/html",
31+
// },
32+
// });
33+
// }
34+
import { renderToString } from 'react-dom/server'
1735
app.use(logger())
1836
app.all('/odyssey', (c) => {
1937
const content = odyssey()
2038
return c.html(utils.Layout(content))
2139
})
2240

41+
const path = require('path')
42+
43+
app.all('/', function (c) {
44+
const filePath = path.resolve("src/blag.html");
45+
const html = fs.readFileSync(filePath, "utf8");
46+
47+
// Ensure that <Blag /> returns valid React elements
48+
const blag = html.replace(
49+
"{{template blag}}",
50+
utils.blog, // Check <Blag /> implementation
51+
);
52+
return c.html(blag)
53+
})
2354
app.all('/llama-tools', (c) => {
2455
return c.html(utils.llama_);
2556
})
2657

2758
app.all('/dynamcicland_cognition_egnine', (c) => {
2859

29-
return c.html('soroy totodo --- see everything you like - everything there is to know - ---- -research papers and the itnerstections between them and things that could use implementation because if you see it in 4-5 different ways -then its easier to make cool stuff. () venn daigrams of ff 2 papeprs ---- -goododoogo ??? i ithoenkfla skdfnao');
60+
return c.html('-research papers and the itnerstections between them and things that could use implementation because if you see it in 4-5 different ways -then its easier to make cool stuff. () venn daigrams of ff 2 papeprs ---- -goododoogo ??? i ithoenkfla skdfnao');
3061
})
3162

3263
app.all('/iframe/*', (c) => {
@@ -51,9 +82,9 @@ app.all('/_/DynamicHow.tsx', async (c) => {
5182
return c.html(html)
5283
})
5384

54-
app.all('/', async (c) => {
55-
return c.html(utils.indexPage)
56-
})
85+
// app.all('/', async (c) => {
86+
// return c.html(utils.indexPage)
87+
// })
5788

5889
app.all('/livekit_screenshare', async (c) => {
5990
console.log('livekit_screenshare')
@@ -71,8 +102,8 @@ app.post('/livekit_connect', utils.livekit_connect);
71102
// app.get('/api/replay_analyzer', (c) => c.json({'Pretty Blog API': 1}));
72103
console.log('app', 'hono', Date.now())
73104

74-
//app.fire()
75-
export default app
105+
//
106+
//export default app
76107
//3d css react tw
77108
//app.get('/blag', (c) => c.json({'Pretty Blog API': 1}));
78109
//app.get('/blag-archive', (c) => c.json({'Pretty Blog API': 1}));
@@ -88,8 +119,16 @@ app.all('/iframe_observablbehq', async (c) => {
88119
const data = await response.text();
89120
return c.html(data);
90121
})
91-
import send_email from './marketing.tsx'
92122

93123
app.all('/marketing', async (c) => {
94124
return c.json(await send_email())
95-
})
125+
})
126+
127+
console.log('app', 'hono', Date.now())
128+
129+
130+
131+
export default {
132+
port: 3000,
133+
fetch: app.fetch
134+
}

0 commit comments

Comments
 (0)