Tuesday, June 14, 2011

Open Space ලංකාවට නවමු අත්දැකිමක්

බටහිර රටවල දැනටමත් ක්‍රියාත්මක වන ලංකාවට,අපිට අලුත් වූ සංකල්පයක් OPEN SPACE ආයතනය හඳුන්වා දී ඇත. සමහර විට ඔබට මෙය නවමු ඇත්දැකිමක්ද නොවනු ඇත. ඒ කෙසේ වෙතත් මෙම සංකල්පය කුමක් දැයි මුලින්ම හඳුනා ගනිමු. හිතන්න ඔබ නිර්මණයට දක්ෂයෙක්. නැතිනම් සංකල්ප වශයෙන් අලුත් දේ ඉදිරිපත් කරන්නෙක් තවදුරටත් කියන්නේ නම් විවිධ අංශයන්ගේ හැකියාව හා දැනුමක් ඇති අයෙක්. එසේ නම් Open Space යනු ඔබට ගැලපෙන ස්ථානයයි. විවධ අංශයන් හි විවිධ හැකියාවන් තියන පිරිසක් එක් තැනකට එකතු වි සාකච්චා කරමින් දැනුම බෙදා ගැනිම තමයි මෙම සංකල්පය. එයට පහසුකම් සැලසිමක් තමයි ඕපන් ස්පේස් සිදු කරන්නේ. මෙහදි එක් අයකුගේ වැඩකට තවත් අයෙකු බාදාවකින් තොරව එකතු කරගැනිම තමයි සිදුවෙන්නේ.



1. කොහෙද මේ ආයතනය තියෙන්නේ?
186, තුන් වෙනි මහල, ගාලු පාර, කොළඹ 4
[ගාලු පාරේ මැජෙස්ටික් සිටි සුපිරි වෙලඳ සල පසුකොට දෙහිවල දෙසට යන විට මුහුද පැත්තේම]

2. කවුද මෙතනට එන්නේ?
පාසල් සිසුන්, විශ්ව විද්‍යල සිසුන්, විවධ වෘතිකයන්.

3. පහසු කම්?
පාසලක පුස්ථකාලයක එහෙමත් නැත්නම් කාර්‍යලයක ඉගෙන ගන්නා හෝ වැඩකරන ඔබට එයින් මිදී ගෙදරක වටපිටාවක් මෙහිදි දැක ගත හැක. ඒ වගේම විවධ වූ දක්ෂතා හැකියවන් ඇති පිරිසක් නිතරම ගැවසෙන බැවින් ඕනෑම අවස්ථාවක ඔවුන්ගේ සහාය, ඔබට ලබා ගත හැක. මීට අමතරව අන්තර්ජාල පහසුකම් හා වායූසමනයද යුතු මිත්‍රශීලි වටපිටාවක් ලැබේ.



දැනුම හා හැකියාවන් බෙදා ගැනිම හා එකතු කර ගැනිම තමයි මේ සංකල්පයේ මූලික අරමූණ වෙන්නේ. මෙතනදි ආයතනය පවත්වාගෙන යාමට යම්කිසි පිරිවැයක් දරන බැවින් සාධාරණ මුදලක් අය කරයි. එන පිරිස අතර සුහදත්වය ගොඩ නැගිමට හා හඳුනා ගැනිමට විවිධ වූ ක්‍රියාකාරකම්ද නිරන්තරයෙන් සිදු කරයි. පිටරට දෙයක් දේශීයකරණයට ලක් කර විවිධ වූ සමාජ මට්ටම් නියෝජනය කරමින් ලාංකීකයන් එක් කරගැනිම තමයි ඔවුන්ගේ අපේක්ෂාව. වයසේ ප්‍රශන්යක් හෝ සමාජ පන්ති මෙම ආයතනය හා සම්බන්ද වීමට ගැටලුවක් වෙන්නේ නැහැ. එන ඔනෑම අයෙකු ඉතා සුහද ලෙස පිළිගෙන එහි සිදුවන දේ ගැන කෙටි හැඳින්විමක් ලබාදීම මුලින්ම සිදුකරයි. ඊට අමතරව ව්‍යාපාරිකයන් සඳහා අවශ්‍ය ප්‍රමාණයට කාර්‍යාල පහසුකම්ද සලසා දෙයි. 


4. ඇයි කවුරුන් හෝ මෙතනට පැමිණිය යුත්තේ?
හිතන්න ඔබ තවමත් ඉගෙන ගන්න කෙනෙක්, පුස්ථකාලයක තියන වාතාවරණය හා මිනිසුන් වැඩිපුර ගැවසෙන ස්ථානයකත් අතරමැදි අවස්ථාවක් ඔබ බලාපොරොත්තු වෙන්නේ. ඒ වගේ ස්ථානයක් තමයි Open Space කියන්නේ‍. එහෙම නැත්නම් ඔබට ව්‍යපාරයක් තියනවා නමුත් කොළඔ හෝ ඒ අවටින් ඉඩක් නැහැ. එහෙමත් නැත්නම් කිහිප දෙනෙක්ට එකතු වෙලා යම් කිසි ව්‍යපෘතියක් කරගන්න තියනවා ඒත් තැනක් නැහැ. ඒ වගේ අවස්ථාවල Open Space ඔබට පහසුකම් සලසයි.

6. සිංහල බ්ලොග්කරුවන්ට දෙන්න තියන පණිවුඩය මොකක්ද?
"ඇවිත් බලන්න වෙනස අත්විඳින්න" -   විශ්මි පෙරේරා

"මේක අලුත් සංකල්පයක්, තවමත් ලංකාව තුල ගොඩනැගෙමින් පවතින්නේ ඒ වගේම මෙතනට කවුරු හරි මුලින්ම එන්නෙ මේ  මොකක්ද කියලා  බලන්න හැබැයි ආපූ මුල් දවසෙන්ම ‍ඔවුන් මේ ගැන වැටහීමක් අරගෙන නැවත වතාවක් එනවා. ඒ එක්කම කියන්න ඕනේ මුල් දවස නොමිලේ. ඒ හන්දා ඕන කෙනෙක්ට ඇවිත් බලන්න පුලුවන්" - විශ්මි පෙරේරා

7. ආරක්ෂාව
කිසිම ගැටලුවක් නැහැ ඕනෑම අයෙකුට බය නැතුව ඇවිත් යන්න පුලුවන්. මොකද දැනටමත් ‍පාසල් සිසුවියන් හා කන්තා පාර්ෂවයය මෙතනට එනවා. 


විශේෂ ස්තුතිය
මේ ගැන මාව දැනුවත් කලThink Media Consultants හි සංජය හා හර්ෂ, 
මාත් එක්ක මේ ගැන තොරතුරු සොයා ගැනිමට පැමිණි අනුරාධ 
කැමරාව සැපයූ ඇන්ජලෝ
Open Space සංකල්පය දැන ගැනිම හා ඒ ගැන තොරතුරු ලබා දෙන්නට අවස්ථාව සලසා දුන් විශ්මි පෙරේරා

නිධාන කතාව
මේ ආයතනය ගැන සංජය මට කිව්වට පස්සේ, පුදුම උනන්දුවක් ඇති උනා මේක ගැන හොයන්න. වෙබ්සයිට් එකට ගියා එකෙනුත් විස්තර ගත්තා. ඊට පස්සේ විශ්මිට මෙයිල් එකක් දාලා ඇහැව්වා //මම මෙහෙම සිංහල බ්ලොග් ලියන කෙනෙක්\\, මම කැමැතියි මේ සංකල්පය දැන ගන්න මට පුලුවන්ද වෙලාවක් වෙන් කරගන්න කියලා. ඇය එයට යහපත් ප්‍රතිචාර දක්වලා මට කැමති ‍දිනයක එන්න කිව්වා. ඒ වෙනකොට මට කැමරාවක් තිබුනේ නැහැ. ඔෆිසියේ හිත හොඳ එකා ඇන්ජලෝගෙන් ඒකත් ඉල්ලගෙන පණුවා[ අනුරාධ] වත් ඇද ගෙන ඔන්න මම ගිය සතියේ දවසක ඔය කියන තැනට ගිහින් තැනත් බලාගෙන පින්තූරත් අරන් විශ්මිගෙන් තොරතුරු අහගෙන අවා. ආ දැන් මට කැමරාවක් තියනවා රට ඉඳන් ලංකාවට ආව සිංහල බොලොක්ක කරුවෙක් මට ගෙනත් දුන්නා නොවැ කැමරාවක් :DDD 


මෙන්න කියවපල්ලා

Sunday, June 5, 2011

සින්ඩියක් හදන්නේ කොහොමද - Python syndi

සින්ඩියක් හදන්නේ කොහොමද කියන ප්‍රශ්ණය ගොඩක් අයට ඇති. සරළව කිව්වොත් මෙතන වෙන්නේ RSS හෙවත් ඔබගේ බ්ලොග් අඩවියේ තියෙන පෝෂක කියවන එක. සින්ඩිකට ඉල්ලුම් කරද්දි අපි RSS ලබා දෙන්නේ ඒ හින්දා. මතකද පහු ගිය ලිපිය ගූගල් වල වෙබ් සයිට් හොස්ට් කිරිම, Java පාදක කරගෙන ලිව්ව ලිපිය. අතුරු කතාවත් කියලාම වැඩේ පටන් ගන්නම්කෝ, ගිය සතියේ සයිබර් යාලුවෝ ටික නුවර ගිය වෙලාවේ පහන් කිව්වා Java වලට වඩා Python ලේසියි හා ඉක්මන් කියලා. ඒ වෙන කොටත් පයිතොන් ගැන මෙලේ හසරක් දැනං උන්නේ නැහැ. පස්සේ ගෙදර ඇවිත් තමයි මේ පයිතොන් වලින් සින්ඩියක් හදන වැඩේට අතගහලා බැලුවේ. ගුගල් දෙයියෝ හින්දා බය නැතුව වැඩේට බැස්සා.


සින්ඩියක් හදන්න කොච්චර ලේසිද කිව්වොත් මුලු සින්ඩියටම තියෙන්නේ ෆයිල් අටයි.


මුලින්ම දෙයියෝ ගාව තියන Getting Started: Python ලිපියට ගිහිල්ලා රවුමක් දාලා එන්න‍. එකේ තියනවා වින්ඩෝවල කොහොමද පයිතොන් ස්තාපිත කරගන්නේ කියලා.

මේකට ඔනේ
1.Python 2.5 - http://www.python.org/download/releases/2.5/‍‍‍
2.App Engine SDK - http://code.google.com/appengine/downloads.html
3.Windows Launcher for Google App Engine - http://code.google.com/p/google-appengine-wx-launcher/ -
හෝ http://code.google.com/p/google-app-engine-launcher/downloads/detail?name=GoogleAppEngine%20GUI.exe&can=2&q=
[ගුගල් වලට අප්ලෝඩ් කරන විදිහ]

වින්ඩෝස් 7 සඳහා තමයි සියලුම දේවල් මම යොදාගත්තේ. ඔය දෙකම භාගත කරගත්තට පස්සේ ඔබේ පරිගණකයේ සමාන්‍ය ආකාරයට ස්තාපනය කරගන්න පුලුවන්.


‍ගුගල් හොස්ටිං වල වෙනම ඩෙටා බේස් කතාවක් නැහැ. කෝඩ් එකෙන්ම තමයි ඩේටා බෙස් ටේබල් ඔක්කොම පාලනය කරන්න පුලුවන්.

සින්ඩියට අවශ්‍ය අපි හදන ෆයිල්
1. RSS ඇතුලු කිරිමට‍ ෆොම් එකක් - bloglist.py
2. සින්ඩි කේට් කිරිමට හෙවත් cron රන් කිරිමට - cronblogpost.py
3. ලිපි පෙන්විමට - synditest.py

ඔන්න ඔය ෆයිල් තුනෙන් තමයි මූලිකව ඕක වෙන්නේ, ඊට අමතරව තුන් වන පාර්ෂවයෙන් ඕනා වෙනවා feedparser කියන RSS කියවන කෝඩ් එක.

හරි දැන් එකින් එක ෆයිල් බලමු
1.app.yaml මෙයා තමයි සියල්ල පාලන කරන්නේ
application: lankeeyasyndi  මේ තියෙන්නේ ගුගල් එකේ අපේ ඇප්ලිකේෂන් අයිඩ් එක හෙවත් යූනික් නම
version: 1 මේක තියෙන්නේ කෝඩ් එක අප්ඩේට් කරද්දි වර්ෂන් වශයෙන් තියාගන්න
runtime: python
api_version: 1

handlers:
- url: /
  script: synditest.py - [ මේ ෆයිල් එක තමයි මුල් පිටුවට එන්නේ ]

- url: /bloglist
  script: bloglist.py - [ RSS ඇඩ් කරන්නේ මේ ෆොම් එකෙන්]
  
- url: /saveblog
  script: bloglist.py - [ ඇක්ෂන් එකක් වන saveblog ආපුවම මේ ෆයිල් එක ‍ලෝඩ් කරන්න ]
   
- url: /cronblogpost
  script: cronblogpost.py - [  ලිපි සොයා මෙහෙයුම කරන cron ෆයිල් එක ]
 
- url: /.*
  script: not_found.py - [  අනවහශ්‍ය URL ගැහැව්වොත් මේ පිටුවට යන්න ]


2. bloglist.py මෙයා ඉන්නේ RSS ෆෝම් එකට
import cgi

  import datetime

  import urllib

  import wsgiref.handlers
from google.appengine.ext import db

  from google.appengine.api import users

  from google.appengine.ext import webapp

  from google.appengine.ext.webapp.util import run_wsgi_app
ඔය ඉහතින් තියන එව්වා ඔනේ හරිද


"""Name - wapnisyndi """

  """Developer - WAP NISHANTHA SRI LANKA """

  """DATE -  2011-06-05  """
  මං ගැනත් සඳහනක්



class Blogroll(db.Model): මේ තියෙන්නේ බ්ලොග් ලිස්ට් එකට අදලා ටේබල් එක

  """Models an individual Guestbook entry with an author, content, and date."""

  

  burl = db.StringProperty(multiline=True)
  brss = db.StringProperty(multiline=True)
  bowner = db.StringProperty(multiline=True)
  bstatus = db.StringProperty(multiline=True)
  date = db.DateTimeProperty(auto_now_add=True)


def blogslist_key(blogslist_name=None):

  """Constructs a datastore key for a Guestbook entity with guestbook_name."""
  return db.Key.from_path('Blogslist', blogslist_name or 'default_blogslist')


class MainPage(webapp.RequestHandler):

  def get(self):

  self.response.out.write('<html><body>')
  blogslist_name=self.request.get('blogslist_name')


පහලින් තියෙන්නේ RSS ඉල්ලන FROM එක
# Write the submission form and the footer of the page

  self.response.out.write("""

  <form action="/saveblog" method="post">

  <table border="0" cellpadding="0" cellspacing="0">

  <tr>

  <td>Your Email</td>

  <td><input type="text" name="bowners" /></td>

  </tr>

  <tr>

  <td>Blog URL</td>

  <td><input type="text" name="burl" /></td>

  </tr>

  <tr>

  <td>Blog Rss</td>

  <td><input type="text" name="brss" /></td>

  </tr>

  <tr>

  <td></td>

  <td><input type="submit" value="send"></td>

  </tr>

  </table>

  <div></div>

  </form>

  </body>

  </html>""")


class Blogslist(webapp.RequestHandler):

  def post(self):

  blogslist_name = self.request.get('blogslist_name')

  blogroll = Blogroll(parent=blogslist_key(blogslist_name))
blogroll.burl = self.request.get('burl')

  blogroll.brss = self.request.get('brss')

  blogroll.bowners = self.request.get('bowners')
blogroll.put()

  self.redirect('/') - ‍සයිට් එකට රිඩිරෙක්ට් කරලා දාන්න


application = webapp.WSGIApplication([

  ('/bloglist', MainPage), මෙතන ඉතා වැදගත් තැනක් - http://your.appspot.com/bloglist කියන url එකට මේ පිටුව ලෝඩ් කරන්න

  ('/saveblog', Blogslist) saveblog ඇක්ෂන් එකටත් මේ පිටුවම ලෝඩ් කරන්න

  ], debug=True)


def main():

  run_wsgi_app(application)


if __name__ == '__main__':

  main()

ඔය තියන අනික් එව්වාත් තියන්න එහෙම්ම ... මාත් තාම අලුත් නොවැ පයිතොන් වලට


3.cron.yaml මේයා ඉන්නේ අලුත් ලිපි හොයාගෙන යන වැඩේ ගුගුල් කාරයට දැනුම් දෙන්න
cron:
- description: hours summary job
  url: /cronblogpost
  schedule: every 1 hours - මේ කියන්නේ පැයකට සැරයක් කියලා

4.cronblogpost.py මෙන්න වැදගත් කෙනා ලිපි හොයන් එන්න කිව්වාම මෙයා තමයි වැඩේ ගොඩ දාලා දෙන්නේ
import cgi
import datetime
import urllib
import wsgiref.handlers
import feedparser
import sys
import re




from google.appengine.ext import db
from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

"""Name - wapnisyndi """
"""Developer - WAP NISHANTHA SRI LANKA """
"""DATE -  2011-06-05  """


පහලින් තියෙන්නේ RSS ලිස්ට් එක
class Blogroll(db.Model):
  """Models an individual Guestbook entry with an author, content, and date."""
 
  burl = db.StringProperty(multiline=True)
  brss = db.StringProperty(multiline=True)
  bowner = db.StringProperty(multiline=True)
  bstatus = db.IntegerProperty()
  date = db.DateTimeProperty(auto_now_add=True)

def blogslist_key(blogslist_name=None):
  """Constructs a datastore key for a Guestbook entity with guestbook_name."""
  return db.Key.from_path('Blogslist', blogslist_name or 'default_blogslist')

මේ තියෙන්නේ RSS වලට ගිහින් ලිපියකින් අපි ලබා ගන්න තොරතුරු තැන්පත් කරන ටේබල් එක
class Blogpost(db.Model):
  """Models an individual Guestbook entry with an author, content, and date.""" 
  burl = db.StringProperty(multiline=True)
  ptitle = db.TextProperty()
  btitle = db.TextProperty()
  purl = db.StringProperty()
  bcontent = db.TextProperty()
  bpatas = db.StringProperty(multiline=True)
  brss = db.StringProperty(multiline=True)  
  bstatus = db.StringProperty(multiline=True)
  pdate = db.DateTimeProperty()



def guestbook_key(guestbook_name=None):
  """Constructs a datastore key for a Guestbook entity with guestbook_name."""
  return db.Key.from_path('Guestbook', guestbook_name or 'default_guestbook')


class MainPage(webapp.RequestHandler):
   def get(self):       
        blogslist_name=self.request.get('blogslist_name')
        blogrolls = db.GqlQuery("SELECT * "
                                "FROM Blogroll "
                                "WHERE ANCESTOR IS :1 "
                                "ORDER BY date DESC ",
                                blogslist_key(blogslist_name))
ඉහත sql එකෙන් කරන්නේ Blogroll කියන ටේබල් එකේ තියන සියලු RSS ලින්ක් ගන්න එක
        for blogroll in blogrolls:
   if 1 < 2 :
    try:
     fileCount = 0     
     d = feedparser.parse(blogroll.brss)
     #print blogroll.brss     
     n = d.feed.title.encode('utf-8')          
     for entry in d['entries']:     
      #print entry.title.encode('utf-8')      
      guestbook_name = self.request.get('guestbook_name')
      greeting = Blogpost(parent=guestbook_key(guestbook_name))            
      greeting.ptitle = unicode(entry.title.encode('utf-8'), 'utf-8')
      greeting.burl = unicode(d.feed.link.encode('utf-8'), 'utf-8')      
      e = d.entries[fileCount]
      pu = unicode(e.link.encode('utf-8'), 'utf-8')
      #printme( pu )
      print "test"
      #print pu
      greeting.purl = unicode(e.link.encode('utf-8'), 'utf-8')
      #greeting.pdate = unicode(e.updated_parsed.encode('utf-8'), 'utf-8')      
      p = re.compile(r'<.*?>')
      bcon = unicode(entry.description.encode('utf-8'), 'utf-8')
      greeting.bcontent =  p.sub('', bcon)
      #greeting.bcontent = unicode(entry.description.encode('utf-8'), 'utf-8')
      greeting.btitle = unicode(n, 'utf-8')      
      postdatetime = e.updated_parsed
      #print postdatetime;      
      posted_datetime = datetime.datetime(
           entry['updated_parsed'][0],
           entry['updated_parsed'][1],
           entry['updated_parsed'][2],
           entry['updated_parsed'][3],
           entry['updated_parsed'][4],
           entry['updated_parsed'][5],
           entry['updated_parsed'][6],)
      greeting.pdate = posted_datetime     
      
      print "1"
      
      guestbook_name=self.request.get('guestbook_name')
      q = db.GqlQuery("SELECT * FROM Blogpost WHERE purl = :1", pu)
      #q = Blogpost.all()
      #q.filter("purl =", pu)      
      #q.order("-pdate")      
      results = q.fetch(1)
      if results:     
       for p in results:
        print "%s inches tall" % (p.purl)
      else:
       print "empty"
       greeting.put();
       print pu
       
       
                    
      fileCount += 1
      print "

2"
      
    except Exception: 
      pass
           
     
     
     
ඊට පස්සේ තියෙන්නේ ඔය උඩින් බ්ලොග් අඩවියක RSS කියවලා, 
අලුත් ලිපි තියනවා නම් එවා Blogpost කියන ටේබල් එකට දාගන්න විදිහ.
 මේ මමකරපු විදිහ. තව ලේසි ක්‍රම පහසු ක්‍රම තියෙන්න පුලුවන්. 
එහෙම තියනවා නම් මාවත් දැනුවත් කරන්න ඇ     
     

application = webapp.WSGIApplication([
  ('/cronblogpost', MainPage)
  
], debug=True)


def main():
  run_wsgi_app(application)


if __name__ == '__main__':
  main()     
     


5.synditest.py මෙයා තමයි හොයන් ආපු ලිපි වෙන්වන කෙනා
from google.appengine.ext import db
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

"""Name - wapnisyndi """
"""Developer - WAP NISHANTHA SRI LANKA """
"""DATE -  2011-06-05  """



import os
from google.appengine.ext.webapp import template

ලිපි තියන ටේබල් එක
class Blogpost(db.Model):
  """Models an individual Guestbook entry with an author, content, and date.""" 
  burl = db.StringProperty(multiline=True)
  ptitle = db.TextProperty()
  btitle = db.TextProperty()
  purl = db.TextProperty()
  bcontent = db.TextProperty()
  bpatas = db.StringProperty(multiline=True)
  brss = db.StringProperty(multiline=True)  
  bstatus = db.StringProperty(multiline=True)
  pdate = db.DateTimeProperty()



def guestbook_key(guestbook_name=None):
  """Constructs a datastore key for a Guestbook entity with guestbook_name."""
  return db.Key.from_path('Guestbook', guestbook_name or 'default_guestbook')


class MainPage(webapp.RequestHandler):
   def get(self):
     guestbook_name=self.request.get('guestbook_name')
  
  q = db.GqlQuery("SELECT * FROM Blogpost ORDER BY pdate DESC LIMIT 100") 
දිනෙන් පිළිවෙල කරලා ලිපි සීයක් ගැනිම     
  
  template_values = {
            'greetings': q            
        }
  
  path = os.path.join(os.path.dirname(__file__), 'index.html')
  self.response.out.write(template.render(path, template_values))
  මෙතන කරලා තියෙන්නේ වෙනම තියන HTML ෆයිල් එකකට ඩේටා යවන්න එක. 
  
   
     
     

application = webapp.WSGIApplication([
  ('/', MainPage)
  
], debug=True)


def main():
  run_wsgi_app(application)


if __name__ == '__main__':
  main()     
     


6. index.html මේක තියෙන්නේ ඉහත පහේ තියන එකට සපෝට් විදිහට තියන ටෙම්ප්ලෙට් එකක් විදිහට
<html>
  <head>
  <title>wapnisyndi</title>
  <style>
</style>
  </head>
  <body>
  
  {% for greeting in greetings %}
  
  {% if greeting.burl %}
  <a href="{{ greeting.purl }}" class="">{{ greeting.ptitle }}</a> &nbsp;&nbsp;|&nbsp;&nbsp; <a href="{{ greeting.burl }}" class="">{{ greeting.btitle }}</a> | {{ greeting.pdate }}
  {% else %}
  An anonymous person wrote:
  {% endif %}
  <div class="">{{ greeting.bcontent }} &nbsp; ... &nbsp;&nbsp;<a href="{{ greeting.purl }}" class="">වැඩිදුර &gt;&gt;</a></div>
  <hr />
  <div>
  {% endfor %}
  </div>
    </body>
  </html>


7. not_found.py - මේ අනවශ්‍ය url එකක් ගැහැව්වොත් එන ෆයිල් එක
"""Name - wapnisyndi """
"""Developer - WAP NISHANTHA SRI LANKA """
"""DATE -  2011-06-05  """
print "not found"


8.feedparser.py මේක තුන් වන පාර්ෂවිය ලයිබ්ර්රි එකක් මෙතනින් ගන්න ඒක

හරි ඔච්චර තමයි. මේක තව ටිකක් වැඩි දියුණු කරගන්න. සම්පූර්ණ කෝඩ් එක මෙතනින් භාගන්න. ‍මේ කෝඩ් එක භාවිතයෙන් හදපු සින්ඩියක් මෙන්න

ඉහත කෝඩ් වලම සිංහලෙන් ලිව්වේ පැහැදිලි වෙන්න. නමුත් සම්පූර්ණ කෝඩ් එක භාගත්තාම  එහෙම පැහැදිලි කිරිම් නැහැ. ඔබත් ඔබටම කියා සින්ඩියක් හදාගන්න.


ටෙක්නිකල් දේවල් එපා නම් මේ පහත ලිපි බලන්න

1. ත්‍රිපිඨකය තුල සිංහලෙන් , ඉංග්‍රීසියෙන් සහ පාලියෙන් සෙවීම් සිදුකල හැකි පරිගණක මෘදුකාංගයක්
2. තරු මෙච්චර ආතල් ද????
3. නුඹ රහසින් ඇවිත්......
4. සිංහල බ්ලොග් වලට පුංචි තල්ලුවක්...මං කියවන බ්ලොග්...
5. ඔබ දන්නවද ලංකාවේ තියන කෝච්චි මොනවද කියලා
6. ආදරබර Network එක හෙවත් ගල් කොරියේ ලවු එක .


හික්කඩුව Sailors' Bay - Hikkaduwa - කොරෝනා

   කොවිඩ් ඇවිත් අවුරුද්දකටත් වැඩියි. ට්‍රිප් නොගිහින් අවුරුදු දෙකකටත් වැඩියි. ඔක්කොමත් හරි බ්ලොග් ඒකට පෝසට් ඒකක් අන්තිමට දාලා තියෙන්නේ 2019....